⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tongbu_jiazhentou.m

📁 64路OFDM系统MATLAB仿真
💻 M
字号:





clear;
clc;
%%%%%%%%%%%%%%%%%%设置瑞利信道相关参数%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
delay=[0 1e-7 1.5e-8];
sampletime=8e-6;
fshit=5;

raylei= rayleighchan(sampletime, fshit, delay);%%chan = rayleighchan(ts,fd,tau,pdb) 
                                                   %%ts is the sample time of the input signal, in seconds. 
                                                   %%fd isthe maximum Doppler shift, in hertz. 
                                                   %%tau is a vector of
                                                   %%path delays, each specified in seconds.
                                                   %%pdb is a vector of average path gains, each specified in dB.
                                                   %% can model the effect of the channel on a signal x by using the syntax y = filter(chan,x).
                                                  
raylei.AvgPathGaindB=[0 -3  -4];
gujifangshi=5;%%%%%%%%%%%%%%%%%1为FFT方法,其他为线性插值方法
zhenshu=10;%%%%%%%%%%%%%%%%%%%%%%%%%设置帧数
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
max=30;
snr=[2:2:max];
tongbu_cuowu_jishu=0;%记录同步错误帧数
for  Snr=10:2:max
    max/2-(Snr-2)/2
 
    
%%
[all]=zhentou(Snr,raylei);         %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%给数据加入帧头,总共320位
errorall=0;%%%%%%%%%%%%%%%%为了配合while ,调至此
   cuowu_tingzhi=0;%%%记录错误帧数,以控制停止
   
   dazhenshu_jishu=1;%%%%%%%记录多少大帧
while cuowu_tingzhi<10 & dazhenshu_jishu<500

%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%正常信息%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
for k=1:zhenshu    
yuanshixinxi(:,k)=randint(64,1,[0,1]);%%%%%%%%%%%%生成原始信息
%%%%%%%%%%%%%%%%%%%%%%%%%汉明编码%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
code = encode(yuanshixinxi(:,k),7,4,'hamming/binary');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  交织 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
jiaozhi_temp=vec2mat(code,14)';
jiaozhi=reshape(jiaozhi_temp,112,1); 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 进制转换 %%%%%%%%%%%%%%%%%%%%%%%%%
temp1 = vec2mat(jiaozhi,2);
 jiaozhide= bi2de(temp1);
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4QAM 调制  %%%%%%%%%%%%%%%%%%%%%%%%%
tiaozhi=modulate(modem.qammod(4),jiaozhide);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 扩展至64位,为加训练序列做准备 %%%%%%%%%%%
tiaozhi64=padarray(tiaozhi,[8,0],0,'post');%%%%%在其尾部加8行0列0

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 加训练序列 %%%%%%%%%%%
tiaozhi64(57:64)=3*[1 -1 1 -1 1 -1 1 -1 ]';%%%%%%插入训练序列于后8位

weizhi1=[57 1 2 3 4 5 6 7 8 58 9  10 11 12 13 14 15 16 59 ...
    17 18 19 20 21 22 23 24 60 25 26 27 28 29 30 31 32 61 33 34 35 36 37 38 ...
    39 40 62 41 42 43 44 45 46 47 48 63 49 50 51 52 53 54 55 56 64];
addtrainhou=tiaozhi64(weizhi1);%%%%%%%%%%%%%调整插入序列位置

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% IFFT  %%%%%%%%%%%%%%%%%%%%%%%%%
iffthou=ifft(addtrainhou,64);
% iffthou=round(iffthou*1000)/1000;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 抑制峰均比处理  %%%%%%%%%%%%%%%%%%%%%%%%%%
[paprchuli]=zhijiexuebo(iffthou);
%  paprchuli=iffthou; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% [16 0],16列0行,添加CP %%%%%%%%%%%%%%%%%%%%
addcp= padarray(paprchuli,[16 0],'circular','pre');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 经过高斯信道 %%%%%%%%%%%%%%%%%%%%%%%%%
passawgnchannel= awgn(addcp ,Snr,'measured');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 经过瑞利多径信道 %%%%%%%%%%%%%%%%%%%%%%%%%                                                   
passchannel = filter(raylei, passawgnchannel); 
% passchannel=addcp;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
all(k*80+240+1:(k+1)*80+240)=passchannel';
end

%%
[zhentou_zhongjian]=cutongbu(all)  ;          %%%%%%%%%%%%%%%%  粗同步     
temp=all(zhentou_zhongjian+117:zhentou_zhongjian+137+63);
[weizhi]=xitongbu(temp,zhentou_zhongjian) ;   %%%%%%%%%%%%%%%%  细同步
all_weizhi(Snr-1)=zhentou_zhongjian;
all_weizhi(Snr)=weizhi;
if weizhi==193
    '同步成功'
else
    '同步失败'
    weizhi;
    tongbu_cuowu_jishu=tongbu_cuowu_jishu+1;
end
%%

%%
dingwei=weizhi+128   ;  %%%%%%%%%%%%%%%%此位置为信息开始位置,应为193
for  i_zhenshu=1:zhenshu
    passchannel=all(dingwei:dingwei+79);
    dingwei=dingwei+80;  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 去除CP %%%%%%%%%%%%%%%%%%%%%%%%%
decp=passchannel(17:80);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% FFT  %%%%%%%%%%%%%%%%%%%%%%%%%
ffthou=fft(decp',64); %%%%%%%%%%%%%%%%%%%%%   shit   shit   shit   shit   shit shit            %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 信道估计 %%%%%%%%%%%%%%%%%%%%%%%%%

[xiuzheng]=estimate(ffthou ,gujifangshi);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 修正信息 %%%%%%%%%%%%%%%%%%%%%%%%%
weizhi3=[ 2 3 4 5 6 7 8 9  11 12 13 14 15 16 17 18  20 21 22 ...
    23 24 25 26 27 29 30 31 32 33 34 35 36  38 39 40 41 42 43 44 45 ...
     47 48 49 50 51 52 53 54  56 57 58 59 60 61 62 63 ];
detrain=ffthou( weizhi3 );%%%%%%%%%%取出有用信息

for i=1:56
    detrain(i)=detrain(i)/xiuzheng(i);
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4QAM解调 %%%%%%%%%%%%%%%%%%%%%%%%%

h = modem.qamdemod(4);
jietiaohou=demodulate(h,detrain);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 进制转换 %%%%%%%%%%%%%%%%%%%%%%%%%
 jietiaohou2= de2bi(jietiaohou)';
 
jietiaohou3= reshape(jietiaohou2,112,1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  解交织 %%%%%%%%%%%%%%%%%%%%%%%%%%
jiejiaozhi_temp=vec2mat(jietiaohou3,8)';

jiejiaozhi=reshape(jiejiaozhi_temp,112,1);
%%%%%%%%%%%%%%%%%%%%%%%%%汉明译码%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
shouxinxi= decode(jiejiaozhi,7,4,'hamming/binary');

%%%%%%%%%%%%%%%%%%%%%%%%%错误统计%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
jishu=0;
for i=1:64
    
    if yuanshixinxi(i,i_zhenshu)~=shouxinxi(i)
        jishu=jishu+1;
    end
end
error(i_zhenshu)=jishu;

    
end    



% errorall=0;
% for l=1:zhenshu
%     errorall=  errorall+error(l);  
%     
% 
% end
errorall=errorall+sum(error);

if sum(error)~=0
    cuowu_tingzhi=cuowu_tingzhi+1;
end
   error;
   if rem(dazhenshu_jishu,5)==0;
   errorall
   dazhenshu_jishu
   Snr
   end
  
  errorallrate((Snr)/2)= errorall/(64*zhenshu*dazhenshu_jishu)    ;%%%%%%%%%%%计算在不同信噪比下的总的帧数的误码率
%     errorallrate((Snr)/2)= errorall/(64*zhenshu)    ;%%%%%%%%%%%计算在不同信噪比下的总的帧数的误码率
  dazhenshu_jishu=dazhenshu_jishu+1;
end   %while

end %   for snr  
tongbu_cuowu_jishu
%     
%  
% '五'
% [notraylei_errorallrate]=notraylei(yuanshixinxi,gujifangshi,zhenshu);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%引用无锐利噪声信道以比较
%  '四'
% [ awgn_not_raylei_not_ofdm_errorallrate]=awgn_not_raylei_not_ofdm(yuanshixinxi,zhenshu);%%%%%%%%%%%%%%引用没用OFDM系统也没经瑞利噪声信道以比较
%  '三'
% [awgn_raylei_not_ofdm_errorallrate]=awgn_raylei_not_ofdm(yuanshixinxi,raylei,zhenshu);  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%引用没有OFDM系统但经过瑞利噪声信道以比较
%   '二'  
% 
%  [not_estimate_not_raylei_errorallrate]=not_estimate_not_raylei(yuanshixinxi,gujifangshi,zhenshu);%%%%%%%%%%%%%%%%%%%不用信道估计、不带瑞利噪声,只加高斯噪声
% '一'
%  [ofdm_awgn_raylei_not_estimate_errorallrate]=ofdm_awgn_raylei_not_estimate(yuanshixinxi,raylei,gujifangshi,zhenshu);%%%%%%%%%%%%%%%%%%%不用信道估计、瑞利噪声,高斯噪声,ofdm系统
%   
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%出图,在不同信噪比下总误码率曲线%%%%%%%%%%%%%%%%%%%%
% 
% 
% 
%  
figure;
  semilogy(snr,errorallrate,'r') ;%%%%%%%%%%%%%%%%%%%%%%%%                               OFDM 系统  经过高斯   瑞利信道
%    hold on ;
%   
%  semilogy(snr,notraylei_errorallrate,'b-') ;%%%%%%%%%%%%%%%%%%%%%%%%                 OFDM 系统  经过高斯   但没有瑞利     信道
% 
%  semilogy(snr,awgn_not_raylei_not_ofdm_errorallrate,'k-') ; %%%%%%%%%%%%%%%%%%%%%%%%  普通系统  经过高斯    但没有瑞利信道
%  
%  semilogy(snr,awgn_raylei_not_ofdm_errorallrate,'k-') ;  %%%%%%%%%%%%%%%%%%%%%%%%     普通系统  经过高斯     瑞利信道   
%   
% %%%% semilogy(snr,ofdm_gaijin_errorallrate,'m') ;  %%%%%%%%%%%%%%%%%%%%%%%%     改进OFDM系统  经过高斯     瑞利信道      
% 
% semilogy(snr,not_estimate_not_raylei_errorallrate,'b-*') ;  %%%%%%%%%%%%%%%%%%%%%%%%     OFDM  经过高斯     没有瑞利,且没有信道估计   
% 
% semilogy(snr,ofdm_awgn_raylei_not_estimate_errorallrate,'r-*') ;  %%%%%%%%%%%%%%%%%%%%%%%%     OFDM  经过高斯     瑞利,没有信道估计   
 grid;
%  legend('OFDM,awgn,raylei','OFDM,awgn','not_ofdm,awgn','not_ofdm,awgn,railei','OFDM,awgn,not_estimate','OFDM,awgn,railei,not_estimate')
%  
%%























    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -