📄 testdapsk_in_f_long.m
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ofdm系统参数设置%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc
clear all
% %%%%%%%%%%%%%%%BER for DAPSK in time direction% %%%%%%%%%%%%%%%%5%%%%%%%%%%%%%%
Nu=640;%ifft size according to fs
Ng=64; %the length of cp
a=2.0; %deferential amplitude
bw=10000;fs=10000;
carriers=ceil(bw*Nu/fs);
ncon=16;
Ns=Nu+Ng;
nums=10;times=10;tsnr=8;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%% test ofdmdapsk in frequency Ber performnce %%%%%%%%%%%%%%%%%%%%%%
ratio=zeros(1,tsnr);
for snr_db=1:tsnr
for time=1:times
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%% send signal %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% generating nums symbols of ofdm each time
sequence=randint(carriers*log2(ncon),nums);
%dapsk modulation
%datamap=dapskmap_time(sequence,a,ncon);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%long distance FDDD modulation
long=6;
datamap=dapskmap_f_l(sequence,a,ncon,long);
[m,n]=size(datamap);
datamap=reshape(datamap,1,m*n);
datamap=reshape(datamap,carriers,nums);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%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
snr=5*(snr_db-1);
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
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% long distance FDDD demodulation
% datademap=dapskdemod_time(datademap);
datademap=dapskdemod_frequency_long(datademap,long);
%noting that datademap is carriers/long-by-nums*long matrix
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
datademap=reshape(datademap,1,carriers*nums);
%map the demodulation signals to bit streams
[outbit]=dapsktogray_frequency(datademap,a,ncon);
receive_bit=reshape(outbit,carriers*log2(ncon),nums);
%detection ber per snr
[number,ber]=biterr(receive_bit(:,2:nums),sequence(:,2:nums));
ratio(snr_db)=ratio(snr_db)+ber;
end
disp('%%%%%%%%%%%%%%%% display ber /snr %%%%%%%%%%%%%%%%%%%%%%%')
snr
ratio_ber(snr_db)=ratio(snr_db)/times
end
% figure plot ber according to snr
snr=5*(0:tsnr-1);
semilogy(snr,ratio_ber,'r*')
disp('********************* final result********************')
[ratio_ber']
snr'
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -