📄 testdapsk_f_long_code.asv
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ofdm系统参数设置%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%101/5/chan.6 is very good
clc;
clear all;
Nu=312; % ifft size according to fs
Ng=64; % the length of cp
bw=10000;
fs=10000;
long=1;
z=phase_corect1('chan.4',fs,Nu)
%z=0
a=3; %deferential amplitude
carriers=ceil(bw*Nu/fs);
ncon=16;
Ns=Nu+Ng;
nums=5;
times=10;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%% test ofdmdapsk in frequency Ber performnce %%%%%%%%%%%%%%%%%%%%%%
snr1=0;
for snr=10:5:30
ratio=0;
for time=1:times
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%% error control encode%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
trel = poly2trellis(7,[134 171]); % Define trellis.
msg = randint(carriers*log2(ncon)*nums/2,1,2,123); % Random data
msg1=msg(long*log2(ncon)+1:end);
code = convenc(msg,trel); % Encode.rate=1/2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%% send signal %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% generating nums symbols of ofdm each time
%dapsk modulation
datamap=dapskmap_frequency(code,a,ncon);
%datamap=dapskmap_frequency_long(code,a,ncon,long);
datamap=reshape(datamap,carriers,nums);
%add zero to carriers according to Nu
numzero=ceil((Nu-carriers)/2);
datamap=[zeros(numzero,nums);datamap;zeros(numzero,nums)];
%ofdm modulation
datamap=ifft(datamap);
%add cp
temp=datamap((Nu-Ng+1):Nu,:);
datamap=[temp;datamap];
clear temp;
% get ofdm baseband signal
[m,n]=size(datamap);
outstream=reshape(datamap,m*n,1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%% pass channel %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%pass multichannel
outstream=multirayfade(outstream,fs,'chan.4');
%pass awgn channeel
outstream=awgn(outstream,snr,'measured') ;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%% receive signal %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%delete cp
datademap=reshape(outstream,m,n);
temp=datademap;
temp(1:Ng,:)=[];
datademap=temp;
clear temp;
%ofdm symbols demodulation
datademap=fft(datademap);
temp=datademap;
% delete zero according to carriers
temp(1:numzero,:)=[];
temp=temp;
len=length(temp);
temp(len-numzero+1:len,:)=[];
datademap=temp;
clear temp;
%dapsk signal demodulation
datademap=reshape(datademap,1,carriers*nums);
datademap=dapskdemod_frequency(datademap);
%datademap=dapskdemod_frequency_long(datademap,long);
%datademap=exp(i*z).*datademap;
%map the demodulation signals to bit streams
[outbit]=dapskgray_frequency_correct(datademap,a,ncon,z);
%[outbit]=dapsktogray_frequency(datademap,a,ncon);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%% error ctrol decode%%%%%%%%%%%%%%%%%%%%%%%%%%
ncode=outbit';
tblen =16; % Traceback length
% Use hard decisions.
%decoded1 = vitdec(ncode,trel,tblen,'cont','hard');
% To prepare for soft-decision decoding, map to decision values.
[x,qcode] = quantiz(1-2*ncode,[-.75 -.5 -.25 0 .25 .5 .75],...
[7 6 5 4 3 2 1 0]); % Values in qcode are between 0 and 2^3-1.
decoded3 = vitdec(qcode',trel,tblen,'cont','soft',3);
%decoded3=decoded3(long*log2(ncon)+1:end);
[n1,ber] = biterr(decoded3(tblen+1:end),msg(1:end-tblen));
ratio=ratio+ber;
end
disp('%%%%%%%%%%%%%%%% display ber /snr %%%%%%%%%%%%%%%%%%%%%%%')
snr
snr1=snr1+1;
ratio_ber(snr1)=ratio/times
end
% figure plot ber according to snr
snr=10:5:30
semilogy(snr,ratio_ber,'r*')
disp('********************* final result********************')
[ ratio_ber']
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -