• 大小: 2KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-03
  • 语言: Matlab
  • 标签: matlab  

资源简介

使用matlab的OFDM导频ls lmmse信道估计,QAM16数据经OFDM调制,使用lmmse做导频点信道估计,然后线性插值,解调

资源截图

代码片段和文件信息

clc;
clear;
Nsym=600;
L=1024;
NFFT = L; % Next power of 2 from length of y
fs=15*1024*10^3;
fs1=15*10^3*1024;
Ts =1/fs;
Fd =0;%Hz
%  tau = 0;
%  pdb = 0; 
%  tau = [0 1.5*Ts 1.8*Ts 2.7*Ts 3.7*Ts 4.7*Ts 7.7*Ts];
%  pdb = [0 -5 -7 -7 -7 -8 -9];
tap1=2*Ts; tap2= 4*Ts;      
 tau = [0 tap1 tap2];
 pdb = [0 -5 -10];
chan = rayleighchan( TsFdtaupdb);
pi=3.14159;
SNR=20;
SigQam16 = [sqrt(10)+sqrt(10)*1i;sqrt(10)+3*sqrt(10)*1i;3*sqrt(10)+sqrt(10)*1i;3*sqrt(10)+3*sqrt(10)*1i
            sqrt(10)-sqrt(10)*1i;sqrt(10)-3*sqrt(10)*1i;3*sqrt(10)-sqrt(10)*1i;3*sqrt(10)-3*sqrt(10)*1i;
            -sqrt(10)+sqrt(10)*1i;-sqrt(10)+3*sqrt(10)*1i;-3*sqrt(10)+sqrt(10)*1i;-3*sqrt(10)+3*sqrt(10)*1i;
            -sqrt(10)-sqrt(10)*1i;-sqrt(10)-3*sqrt(10)*1i;-3*sqrt(10)-sqrt(10)*1i;-3*sqrt(10)-3*sqrt(10)*1i]/10;
%随机产生600个Qam16的码元
GenSig=zeros(1600);
rand_idx=randint(1Nsym16)+1;
for sig_idx=1:Nsym 
GenSig(sig_idx)=SigQam16(rand_idx(sig_idx));
end

%600个码元经过1024点IFFT产生待发送数据
xSig = ifft(GenSigNFFT);
% figure; plot (abs(xSig));

%产生的1024点采样点数据xSig经过瑞利信道传输
 yb=filter(chanxSig);
  Yb = fft(ybNFFT);
  
% 并且叠加awgn 
 awgn_noise = awgn(ybSNR‘measured‘); 

%将加噪信号做FFT获得频域OFDM数据并且取前600点
 Hawgn = fft(awgn_noiseNFFT);
 % figure;plot(2*abs(Hawgn(1:NFFT/2+1))) 
 RecSig=Hawgn(1:600);
 t=1:600;
%  figure;plot(tabs(GenSig)tabs(RecSig)‘-*‘);
 Hw=zeros(1600);
 Hw1=zeros(1100);
 Hwo=zeros(1100);
 for idx_hw=0:99
 Hw1(1+idx_hw)=RecSig(1+6*idx_hw)./GenSig(1+6*idx_hw);
 end
 for idx_hw=0:99
 Hwo(1+idx_hw)=Yb(1+6*idx_hw)./GenSig(1+6*idx_hw);
 end
 Hwcor=autocorr(Hwo99);
 Rh=Hwcor(11:100);
    Rhh =toeplitz(Rh);
% Rhh=cov(Hw1*Hw1);
   X=zeros(100100);
%   N=100;
%   t_max=4;trms=3;
 for k=1:100    %Rhh与时延功率谱是傅立叶变换的关系 对信道建模后Rhh就得到了
    for l=1:100
%         Rhh(kl)=(1-exp((-1)*t_max*((1/trms)+1i*2*pi*(k-l)/N)))./(trms*(1-exp((-1)*t_max/trms))*((1/trms)+1i*2*pi*(k-l)/N));
        if(k==l)
            X(kl)=GenSig(k);
        end
    end
 end
%  Hlmmse=Rhh*inv(Rhh+0.01*inv(X*X‘))*conj(Hw1‘);
Hlmmse=Rhh*inv(Rhh+(1/(10^(SNR/10)))*inv(X*X‘))*conj(Hw1‘);
%  Hlmmse=Rhh/(Rhh+17/9/SNR*eye(100))*conj(Hw1‘);
 Hw2=conj(Hlmmse‘);
 Hw26=zeros(1600);
 Hw16=zeros(1600);
 for idx_hw=0:99
 Hw26(1+6*idx_hw)=Hw2(1+idx_hw);
 Hw16(1+6*idx_hw)=Hw1(1+idx_hw);
 end
for hwrec_idx=0:98
     for insc_idx=1:5
     Hw26(hwrec_idx*6+1+insc_idx)=Hw26(hwrec_idx*6+1)+insc_idx.*(Hw26((hwrec_idx+1)*6+1)-Hw26(hwrec_idx*6+1))./6;
     Hw16(hwrec_idx*6+1+insc_idx)=Hw16(hwrec_idx*6+1)+insc_idx.*(Hw16((hwrec_idx+1)*6+1)-Hw16(hwrec_idx*6+1))./6;
     end
end
  RecSigeq=RecSig.*conj(Hw26)./(Hw26.*conj(Hw26));
 temp_real=real(RecSigeq);
temp_imag=imag(RecSigeq);
 figure;  plot(temp_realtemp_imag‘.‘);
   axis([-1.5 1.5 -1.5 1.5]);
  
   RecSigeq1=RecSig.*conj(Hw16)./(Hw16.*conj(Hw16));
 temp_real1=real(RecSigeq1);
temp_imag1=imag(RecSigeq1);
 figure;  plot(temp_real1temp_imag1‘.‘);
   axis([-1.5 1.5 -1.5 1.5]);

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       3247  2018-08-30 08:27  使用matlab的OFDM导频ls lmmse信道估计\a.m

     文件         55  2018-08-27 11:33  使用matlab的OFDM导频ls lmmse信道估计\【源码使用必读】.url

     目录          0  2018-08-30 08:52  使用matlab的OFDM导频ls lmmse信道估计

----------- ---------  ---------- -----  ----

                 3302                    3


评论

共有 条评论