clear all;
close all;
clc
tic
%-----------------仿真参数----------------------------
fs_filter=128;%滤波器的采样率
N=128;%子载波个数
Ns=4;%symbol个数
dsource_buf=zeros(1,N*Ns-6);
dsource=zeros(1,N*Ns-6);
N_frame=10;%仿真次数
SNR=0:1:5;
BER=zeros(1,length(SNR));
out_interleaving=zeros(1,2*N*Ns);
out_interleaving1=zeros(2,N*Ns);
data=zeros(N,Ns);
d_source=zeros(N,2*Ns);
%---------------产生训练序列-------------------------
pilot=zeros(N,3);
for m=1:N/4
pilot(4*m-3,:)=[0,1,0];
pilot(4*m-2,:)=[0,j,0];
pilot(4*m-1,:)=[0,-1,0];
pilot(4*m,:)=[0,-j,0];
end
%-------------- 多径衰落信道:IEEE802.22-----------------------------------
SampR = 1/4; % 信号速率 4Khz
h = zeros(1,round(14/SampR)+1); % 信道冲激响应初始化
h(1) = 10^((-6)/10);
h(round(3/SampR)+1) = 1; % 信道长度:6 chips
h(round(5/SampR)+1) = 10^((-7.0)/10);
h(round(7/SampR)+1) = 10^((-22.0)/10);
h(round(10/SampR)+1) = 10^((-16.0)/10);
h(round(14/SampR)+1) = 10^((-20.0)/10);
%----------------------------------------------------------------------
for isnr=1:length(SNR)
isnr
count=0;
for n_frame=1:N_frame
%------------------产生数据符号-----------------------------
dsource_buf=randn(1,N*Ns-6);
dsource_buf=dsource_buf>0;
dsource=[dsource_buf,0,0,0,0,0,0];%生成一帧内的随机二进制比特流,此帧为发送端发送的数据
%----------FEC coder----------
d_trellis=poly2trellis(7,[133 171]);
out_fec=convenc(dsource,d_trellis);%编码,输入1bit输出2bit
%----------interleaving----------
k=0:2*N*Ns-1; %first step interleaving
s=2*N*Ns/16*mod(k,16)+floor(k/16);
out_interleaving(k+1)=out_fec(s+1);
for m=1:N*Ns
out_interleaving1(1,m)=out_interleaving(2*m-1);
out_interleaving1(2,m)=out_interleaving(2*m);
end
modObj = modem.pskmod('M',4, 'PhaseOffset',pi/4,'SymbolOrder', 'binary', 'InputType', 'bit');
modulatedsig = modulate(modObj, out_interleaving1);
for m=1:Ns
data(1:N,m)=modulatedsig(N*(m-1)+1:N*m);
end
%-------------------------------滤波器设计---------------------------------
rolloff=1;%滚降系数
L=4*fs_filter;%滤波器阶数
h_sqrt_nyquist = rcosine(1,fs_filter,'fir/sqrt',rolloff,L/(2*fs_filter));%产生滤波器
signal_new=zeros(N,2*Ns);
signal_real=real(data);
signal_imag=imag(data);
for m=1:N/2
signal_new(2*m-1,1:2:2*Ns-1)=signal_real(2*m-1,:); %实虚分离
signal_new(2*m-1,2:2:2*Ns)=signal_imag(2*m-1,:);
signal_new(2*m,1:2:2*Ns-1)=signal_imag(2*m,:);
signal_new(2*m,2:2:2*Ns)=signal_real(2*m,:);
end
signal_new_pilot=[pilot,signal_new];
signal_modulation=zeros(N,2*Ns+3);
for m=1:N
for n=1:2*Ns+3
signal_modulation(m,n)=signal_new_pilot(m,n)*exp(1i*(m+n-2)*pi/2);
end
end
signal_ifft1=zeros(2*Ns+3,N); %IFFT的点数为N
signal_ifft=zeros(2*Ns+3,N);
signal_filtered=zeros(2*Ns+3,length(h_sqrt_nyquist));
signal_carrier=zeros(2*Ns+3,length(h_sqrt_nyquist)+(2*Ns+3-1)*fs_filter/2);
for n=1:2*Ns+3
signal_ifft1(n,:)=ifft(signal_modulation(:,n),N)*N;
signal_ifft(n,:)=circshift(signal_ifft1(n,:).',-N/2*(n-1)).';
signal_filtered(n,1:N)=signal_ifft(n,:).*h_sqrt_nyquist(1:N);
signal_filtered(n,N+1:2*N)=signal_ifft(n,:).*h_sqrt_nyquist(N+1:2*N);
signal_filtered(n,2*N+1:3*N)=signal_ifft(n,:).*h_sqrt_nyquist(2*N+1:3*N);
signal_filtered(n,3*N+1:4*N)=signal_ifft(n,:).*h_sqrt_nyquist(3*N+1:4*N);
signal_filtered(n,4*N+1:(length(h_sqrt_nyquist)))=signal_ifft(n,(length(h_sqrt_nyquist)-4*N)).*h_sqrt_nyquist(4*N+1:(length(h_sqrt_nyquist)));
signal_filtered_shift=[zeros(1,(n-1)*fs_filter/2),signal_filtered(n,:)];
signal_carrier(n,:)=[signal_filtered_shift,zeros(1,length(signal_carrier)-length(signal_filtered_shift))];
end
signal_transmit=sum(signal_carrier);
%-------------------------------通过信道-------------------------------
out_channel=conv(h,signal_transmit);
power=var(signal_transmit);
sigma=sqrt(power/(10^(SNR(1,isnr)/10)));
power_db=10*log10(power);
awgn_signal_transmit=awgn(out_channel,SNR(isnr),power_db);
%----------------接收端------------------------------------
signal_received= awgn_signal_transmit(1,1:length(signal_transmit));%1153
h_sqrt_nyquist_shift=zeros(2*Ns+3,length(signal_received));%11*1153
signal_received_filtered=zeros(2*Ns+3,length(signal_received));
signal_received_filtered1=zeros(2*Ns+3,N*(L/fs_filter+(Ns+1.5)));
for n=1:2*Ns+3
h_sqrt_nyquist_temp=[zeros(1,(n-1)*fs_filter/2),h_sqrt_nyquist];
h_sqrt_nyquist_shift(n,:)=[h_sqrt_nyquist_temp,zeros(1,length(signal_received)-length(h_sqrt_nyquist_temp))];
signal_received_filtered(n,:)=h_sqrt_nyquist_shift(n,:).*signal_received;
signal_received_filtered1(n,:)=[signal_received_filtered(n,:),zeros(1,length(signal_received_filtered1)-length(signal_received_filtered))];%长度加长了*fs_filter/2
end
signal_received_filtered_new=zeros(2*Ns+3,N);
signal_received_fft=zeros(2*Ns+3,N);
signal_received_demodulation=zeros(2*Ns+3,N);
signal_received_demodulation1=zeros(2*Ns+3,N);
for n=1:2*Ns+3
for m=1:N
signal_received_filtered_new(n,m)=sum(signal_received_filtered1(n,1+(m-1):N:(N*(L/fs_filter+(Ns+1.5)-1)+(m-1))));%%%%%????????问题所在
end
signal_received_fft(n,:)=fft(signal_received_filtered_new(n,:),N);
end
for m=1:N
for n=1:2*Ns+3
signal_received_demodulation(n,m)=signal_received_fft(n,m)*exp(-1i*(m+n-2)*pi/2);
end
end
signal_final=signal_received_demodulation.';
H_channel=zeros(1,N);
H_channel_final=zeros(1,N);
%--------------------信道均衡--------------------------------------------
H_perfect=fft(h,N).'; %理想信道估计
H_LS=signal_final(:,1)./pilot(:,1);
%改进的信道估计方式(消除导频临近载波和符号间干扰)
%所使用的脉冲表示为g sum(g.*g)=0.9997 sum(g(l).*g(l-N/2))=0.5004
H_channel(1,1)=signal_final(1,2)/(pilot(1,2)+1i*(pilot(1,1)*(-0.5004)+pilot(1,3)*(+0.5004)+pilot(2,1)*0.2501+pilot(2,2)*(-0.3183)+pilot(2,3)*0.2501));
H_channel(1,2)=signal_final(2,2)/(pilot(2,2)+1i*(pilot(1,1)*0.2501+pilot(1,2)*0.3183+pilot(1,3)*0.2501+pilot(2,1)*(-0.5004)+pilot(2,3)*(+0.5004)+pilot(3,1)*0.2501+pilot(3,2)*(-0.3183)+pilot(3,3)*0.2501));
H_channel(1,3)=signal_final(3,2)/(pilot(3,2)+1i*(pilot(2,1)*0.2501+pilot(2,2)*0.3183+pilot(2,3)*0.2501+pilot(3,1)*(-0.5004)+pilot(3,3)*(+0.5004)+pilot(4,1)*0.2501+pilot(4,2)*(-0.3183)+pilot(4,3)*0.2501));
for m=1:41
H_channel(1,3*m+1)=signal_final(3*m+1,2)/(pilot(3*m+1,2)+1i*(pilot(3*m,1)*0.2501+pilot(3*m,2)*0.3183+pilot(3*m,3)*0.2501+pilot(3*m+1,1)*(-0.5004)+pilot(3*m+1,3)*(+0.5004)+pilot(3*m+2,1)*0.2501+pilot(3*m+2,2)*(-0.3183)+pilot(3*m+2,3)*0.2501));
H_channel(1,3*m+2)=signal_final(3*m+2,2)/(pilot(3*m+2,2)+1i*(pilot(3*m+1,1)*0.2501+pilot(3*m+1,2)*0.3183+pilot(3*m+1,3)*0.2501+pilot(3*m+2,1)*(-0.5004)+pilot(3*m+2,3)*(+0.5004)+pilot(3*m+3,1)*0.2501+pilot(3*m+3,2)*(-0.3183)+pilot(3*m+3,3)*0.2501));
H_channel(1,3*m+3)=signal_final(3*m+3,2)/(pilot(3*m+3,2)+1i*(pilot(3*m+2,1)*0.2501+pilot(3*m+2,2)*0.3183+pilot(3*m+2,3)*0.2501+pilot(3*m+3,1)*(-0.5004)+pilot(3*m+3,3)*(+0.5004)+pilot(3*m+4,1)*0.2501+pilot(3*m+4,2)*(-0.3183)+pilot(3*m+4,3)*0.2501));
end
H_channel(1,127)=signal_final(127,2)/(pilot(127,2)+1i*(pilot(126,1)*0.2501+pilot(126,2)*0.3183+pilot(126,3)*0.2501+pilot(127,1)*(-0.5004)+pilot(127,3)*0.5004+pilot(128,1)*0.2501+pilot(128,2)*(-0.3183)+pilot(128,3)*0.2501));%
H_channel(1,128)=signal_final(128,2)/(pilot(128,2)+1i*(pilot(127,1)*0.2501+pilot(127,2)*0.3183+pilot(127,3)*0.2501+pilot(128,1)*(-0.5004)+pilot(128,3)*0.5004));
H_equalizer=H_channel.';
signal_equalizer=zeros(N,2*Ns);
for m=4:2*Ns+3
signal_equali
没有合适的资源?快使用搜索试试~ 我知道了~
基于IAM系统的仿真_matlab源码.zip
共1个文件
m:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 171 浏览量
2021-12-12
13:41:11
上传
评论
收藏 3KB ZIP 举报
温馨提示
基于IAM系统的仿真_matlab源码.zip
资源推荐
资源详情
资源评论
收起资源包目录
基于IAM系统的仿真_matlab源码.zip (1个子文件)
fbmc_fbmc.m 10KB
共 1 条
- 1
资源评论
m0_64347290
- 粉丝: 0
- 资源: 5万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功