📄 testdapsk_f_long_code.m
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ofdm系统参数设置%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%101/5/chan.6 is very good
clc;
clear all;
Nu=112; % ifft size according to fs
Ng=88; % the length of cp
bw=10000; % channel bandwidth
fs=10000; % sampling frequency
a=2; % deferential amplitude
long=Nu;
% the block size of differential mudulation
%-----------------------------------------
%-----------long=1:frequency difference-----------
%-----------long=Nu:time difference---------------
%-----------long=56:block frequency difference----
z=phase_corect1('chan.6',fs,Nu);
%z=0
carriers=ceil(bw*Nu/fs); % useful carrier number
ncon=16; % constellation
Ns=Nu+Ng;
nums=10; % ofdm symbol number in a transimission frame
times=10; % the times of repeat transimission in some SNR!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%% 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.6');
%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 =34; % 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 + -