ofdm导频信道估计matlab,ofdm系统中基于导频的信道估计算法的性能分析(样例3)...

《ofdm系统中基于导频的信道估计算法的性能分析.doc》由会员分享,可免费在线阅读全文,更多与《ofdm系统中基于导频的信道估计算法的性能分析》相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索。

1、dd_noise(sgma,trans_s)[n,nl]=size(trans_s);fork=:nlform=:n%输入随机噪声noise=normrnd(,sgma)+normrnd(,sgma)*sqrt();tran_(m,k)=trans_s(m,k)+noise;endendx=tran_;%除去循环前缀子程序functionx=cut_insert_c(num,matrix)%num是循环前缀的长度[m,n]=size(matrix);fori=:(mnum)forj=:ncut_c_(i,j)=matrix(num+i,j);endendx=cut_c_;%分离导频信号与数据信号子程序function[x,y]=searate_ilot(interval,count,matrix)[m,n]=size(matrix);i=;f。

2、dinutqam_=qam_out;%插入导频信号子程序function[x,y]=insert_ilot(N,NL,interval,ilot,matrix_)ilot_=ilot;%导频信号的二进制值ilot_=qam(ilot_);%导频信号的qam值matrix_=matrix_';%非共轭转置q=;%q表示转置后的行数即NLw=;count=;%插入导频信号的次数whileqNLreturnendendendy=count;%插入循环前缀子程序functionx=insert_c(num,matrix)[m,n]=size(matrix);fori=:num%循环前缀CP的长度forj=:ninsert_c_(i,j)=matrix((mnum+i),j);endendfori=:mforj=:ninsert_c_((i+num),。

3、_lt_shift(f)));endoutut_sig_serial=zeros(,chann_l);forf=:numoutut_sig_serial=outut_sig_serial+ray_chan(f,:)*delay_sig(f,:);endfork=:loutut_sig(:,k)=outut_sig_serial(((k)*nl+):k*nl)';end%生成信道自相关函数子程序functionhh=Rhhh(N,L);RH=zeros(N);hh=zeros(N);fork=:Nforf=:Nifk==fRH(k,f)=L;elseRH(k,f)=(ex(j**i*(kf)N))(*i*j*L*(kf)N);endendendaa=DFT(N);hh=inv(aa)*RH*inv(aa');%输入噪声子程序functionx=。

4、(db)')ylabel('误码率')text(,,'圆圈标记曲线为MMSE')text(,,'星号标记曲线为SVD')text(,,'菱形标记曲线为LS')gridon%产生二进制数据流子程序functionx=inut_b(N,NL)fori=:NLinut_=rand(,*N);%输入的二进制数据序列forj=:*Nifinut_(j)gtinut(i,j)=;elseinut(i,j)=;endendendx=inut;%将二进制数据流进行QAM调制子程序functioninutqam_=invert(N,NL,inut_)forj=:NLforn=:Nforic=:qam_inut(ic)=inut_(j,(n)*+ic);%qam的输入endqam_out(n,j)=qam(qam_inut);%每一列表示一个OFDM符号ende。

5、jy=[];elseifx==+*jy=[];elseifx==*jy=[];elseifx==*jy=[];end));fork=:numatts=^(*(var_ow(k)));ray_chan(k,:)=atts*rayleigh(,chann_l,t_interval,fmax)sqrt(total_ow);endfork=:linut_sig_serial(((k)*nl+):k*nl)=inut_sig(:,k)';enddelay_sig=zeros(num,chann_l);forf=:numift_shift(f)~=delay_sig(f,:t_shift(f))=zeros(,t_shift(f));enddelay_sig(f,(t_shift(f)+):chann_l)=inut_sig_serial(:(chann。

6、j)=matrix(i,j);endendx=insert_c_;%MonteCarlo方法生成正弦波叠加法需要的各参数值子程序function[f_i,c_i,theta_i]=arameter_classical(N_i,var,fmax)sigma=sqrt(var);un=rand(,N_i);f_i=fmax*sin(i*un);c_i=sigma*sqrt(N_i)*ones(size(un));theta_i=rand(,N_i)**i;%正弦叠加法生成瑞利过程functionray_chan=rayleigh(var_ower,sam_num,t_interval,fmax)%var_ower为该径平均功率单位db;%sam_num为离散信道采样数%t_interval为抽样时间间隔;%fmax为最大多普勒频移val_ow=^。

7、nl*l;ray_chan=zeros(num,chann_l);total_ow=sum(^(var_o=*j;end%QAM解调子程序functiony=de_qam(x)y=real(x);y=imag(x);if(ygt=)am(y)y=;elseif(y=)am(y)y=;elseif(ylt)y=;elsey=;endx=comlex(y,y);ifx==+jy=[];elseifx==jy=[];elseifx==+jy=[];elseifx==jy=[];elseifx==+jy=[];elseifx==+*jy=[];elseifx==jy=[];elseifx==*jy=[];elseifx==+*jy=[];elseifx==+jy=[];elseifx==jy=[];elseifx==*jy=[];elseifx==+。

8、dinutqam_=qam_out;%插入导频信号子程序function[x,y]=insert_ilot(N,NL,interval,ilot,matrix_)ilot_=ilot;%导频信号的二进制值ilot_=qam(ilot_);%导频信号的qam值matrix_=matrix_';%非共轭转置q=;%q表示转置后的行数即NLw=;count=;%插入导频信号的次数whileqNLreturnendendendy=count;%插入循环前缀子程序functionx=insert_c(num,matrix)[m,n]=size(matrix);fori=:num%循环前缀CP的长度forj=:ninsert_c_(i,j)=matrix((mnum+i),j);endendfori=:mforj=:ninsert_c_((i+num),。

9、var_ower);var_u=var_ower;gauss_u=zeros(,sam_num);gauss_u=zeros(,sam_num);N_i=;t=(:sam_num)*t_interval;[f_,c_,theta_]=arameter_classical(N_i,var_u,fmax);[f_,c_,theta_]=arameter_classical(N_i,var_u,fmax);fork=:N_igauss_u=gauss_u+c_(k)*cos(*i*f_(k)*t+theta_(k));gauss_u=gauss_u+c_(k)*cos(*i*f_(k)*t+theta_(k));endray_chan=sqrt(gauss_u^+gauss_u^);%多径信道子程序functionoutut_sig=multiat。

10、_channg(inut_sig,num,var_ow,delay,v,fc,t_interval,N,counter)%inut_sig,加了c后的输入信号矩阵,NL(N+c长度l);%num多径数;var_ow各径平均功率;delay各径延时,单位s;%v运动速率ms;fc为载频hz;%t_interval为离散信道抽样时间间隔,OFDM符号长度(子信道数N+c长度l);%outut_sig为经过多径信道的输出信号矢量fmax=v*fce+;%最大doler频移t_shift=floor(delayt_interval);t_delay=delayt_interval;theta_shift=*i*fc*delay;[nl,l]=size(inut_sig);outut_sig=zeros(size(inut_sig));chann_l=。

11、]=searate_ilot(interval,count,receive_signal_y);%信道自相关函数L=;%最大时延对符号间隔的归一化Rhh=Rhhh(N,L);%Rhh信道自相关函数%三种估计算法%MMSE估计修正ticmodify_signal=mmse(N,NL,interval,count,ilot,Rhh,sgma,ilot_signal,signal);modify_signal_b=de_modulation(modify_signal);modify_signal=invert(N,NL,modify_signal_b);num_of_err_mmse=error_stat(qam_out,modify_signal);%误码数统计err_mmse(l)=num_of_err_mmseKL%误码率time_mmse 。

12、(l)=toc;time=time+time_mmse(l);%运算所用时间%LS估计修正ticmodify_signal=ls(N,NL,interval,count,ilot,ilot_signal,signal);modify_signal=invert(N,NL,modify_signal_b);num_of_err_ls=error_stat(qam_out,modify_signal);%误码数统计err_ls(l)=num_of_err_lsKL%误码率time_ls(l)=toc;time=time+time_ls(l);%运算所用时间%SVD估计修正ticmodify_signal=svd(N,NL,interval,count,ilot,Rhh,,sgma,ilot_signal,signal);modify_signal

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OFDM(正交频分复用)是一种用于传输数字信号的调制技术,将信号分成多个子信道进行并行传输,可提高传输的容量和可靠性。OFDM信道估计是为了获得接收端对信道的准确估计,以便进行信号解调和恢复。 在OFDM系统导频序列用来进行信道估计导频序列是事先在发送端插入的已知信号,接收端通过对这些已知信号的接收结果进行分析,得到对信道的估计。 以下给出了一段用MATLAB编写的OFDM信道估计导频设置代码: % OFDM系统参数设置 N = 64; % 子载波数 cp_length = 16; % 循环前缀长度 % 随机生成导频序列 pilot_sequence = sqrt(N)*sign(randn(N,1) + 1j*randn(N,1)); % 生成OFDM信号 data_sequence = randi([0 1], N, 1); % 需要传输的数据序列 ofdm_signal = ifft(data_sequence); % 反离散傅里叶变换 ofdm_signal = [ofdm_signal(end-cp_length+1:end); ofdm_signal]; % 添加循环前缀 % 添加导频序列 ofdm_signal_with_pilot = [pilot_sequence; ofdm_signal]; % 模拟信道传输 % ... % 接收端 % ... rx_signal = ofdm_signal_with_pilot; % 模拟信道传输后的接收信号 % 接收端信道估计 pilot_index = 1:N; % 导频序列的位置索引 pilot_received = rx_signal(pilot_index); % 接收到的导频序列 channel_estimation = pilot_received ./ pilot_sequence; % 利用导频序列进行信道估计 通过以上代码,可以实现OFDM系统导频设置和信道估计。首先,使用随机生成的导频序列作为OFDM系统导频。然后,将导频序列插入到OFDM信号进行传输。在接收端,从接收到的信号提取出导频序列,并与原始导频序列相除,得到信道估计结果。以此,可以准确估计OFDM系统传输过程的信道状况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值