資源簡介
使用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
評論
共有 條評論