📄 tongbu_jiazhentou.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 + -