資源簡(jiǎn)介
主要用于OFDM的頻偏估計(jì),利用導(dǎo)頻的相關(guān)性
代碼片段和文件信息
%%?基于循環(huán)前綴的OFDM頻偏估計(jì)算法,及其性能分析
close?all;clear?all;clc;
%%?參數(shù)設(shè)置
%*********OFDM參數(shù)**********************
Interval=15000;%子載波間隔
NumOfSubcarrier=64;%載波數(shù)
LengthOfGI=16;%循環(huán)前綴長(zhǎng)度
NumOfSymbolPerframe=5;%每幀的符號(hào)個(gè)數(shù)
NumOfframe=10;%仿真的幀數(shù)
Frequency_offset_temp=0;%用于儲(chǔ)存頻偏估計(jì)值,初始為0
Snrcount=0;
%*********信道參數(shù)設(shè)置******************
DeltaFd=2250;%多普勒頻移
Fd=DeltaFd/Interval;%多普勒頻移系數(shù)
%%
%*********信源**************************
Signal=randint(1NumOfframe*NumOfSymbolPerframe*NumOfSubcarrier*22);%信號(hào)的產(chǎn)生
QpskSignal=QPSK(Signal);
%?figure
%?plot(Signal)
%scatterplot(QpskSignal);%調(diào)制后星座圖
%?plot(QpskSignal‘.‘);hold?on
%*****************串并轉(zhuǎn)換***************
P_Signal=reshape(QpskSignalNumOfSubcarrierNumOfframe*NumOfSymbolPerframe);%串并轉(zhuǎn)換
%***********ifft***************************
Signal_Ifft=1/sqrt(NumOfSubcarrier)*ifft(P_Signal);%進(jìn)行IFFT運(yùn)算
%**********插入循環(huán)前綴**********************
Signal_GI=[Signal_Ifft(NumOfSubcarrier-LengthOfGI+1:end:);Signal_Ifft];
%處理完后Signal_GI變成80行代表一個(gè)符號(hào)
%***********并串轉(zhuǎn)換***********************
?S_Signal_Fdevalute=reshape(Signal_GI1(NumOfSubcarrier+LengthOfGI)*NumOfframe*NumOfSymbolPerframe);%該數(shù)據(jù)用于頻偏估計(jì)
?S_Signal=S_Signal_Fdevalute;%該數(shù)據(jù)用于沒(méi)有頻偏的情況下的處理
%%?信道處理
%***********加人為頻偏處理**************
q=0;
for?m=1:(NumOfSubcarrier+LengthOfGI)*NumOfframe*NumOfSymbolPerframe
????q=q+1;
????Fd_Signal(m)=S_Signal_Fdevalute(m)*exp(j*2*pi*(q-1)*Fd/NumOfSubcarrier);
????if?q==NumOfSubcarrier+LengthOfGI
????????q=0;
????end
end
for?Snr=0:2:20
????Snrcount=Snrcount+1;%信噪比步長(zhǎng)數(shù)目記錄變量
????for?mentkaluo=1:40
????????%***********加入噪聲********************
????????Noise_Signal=awgn(S_SignalSnr‘measured‘);%沒(méi)有頻偏的情況下加噪聲
????????Noise_Fd_Signal=awgn(Fd_SignalSnr‘measured‘);%在有頻偏的情況下加噪聲
???????%%?基于循環(huán)前綴的頻偏估計(jì)
????????%***********信號(hào)重排*******************
????????Noise_Fd_Signal_Temp=reshape(Noise_Fd_SignalNumOfSubcarrier+LengthOfGINumOfframe*NumOfSymbolPerframe);
????????%重新排列信號(hào),對(duì)每個(gè)符號(hào)進(jìn)行處理
????????%*********數(shù)據(jù)處理*********************
????????for?frameCount=1%:NumOfframe*NumOfSymbolPerframe%符號(hào)數(shù)循環(huán)
????????Forward_GI=Noise_Fd_Signal_Temp(1:LengthOfGiframeCount);
????????%取出每個(gè)符號(hào)的循環(huán)前綴
????????Backward_GI=Noise_Fd_Signal_Temp(NumOfSubcarrier+1:NumOfSubcarrier+LengthOfGiframeCount);
????????%取出后16行數(shù)據(jù)
????????conj_Backward_GI=conj(Backward_GI);%取共軛
????????imag_sum=0;
????????real_sum=0;
????????for?k=1:LengthOfGI
????????????imag_sum_temp=imag(Forward_GI(k)*conj_Backward_GI(k));%虛部做相關(guān)處理
????????????imag_sum=imag_sum+imag_sum_temp;
????????????real_sum_temp=real(Forward_GI(k)*conj_Backward_GI(k));%實(shí)部做相關(guān)處理
????????????real_sum=real_sum+real_sum_temp;
????????end
????????sum_of_offset=real_sum+j*imag_sum;
????????Frequency_offset_temp=Frequency_offset_temp+((-angle(sum_of_offset)/2/pi)-Fd)^2;%多次頻偏估計(jì)求和
????????end%符號(hào)數(shù)循環(huán)結(jié)束
????end
????Frequency_offset(Snrcount)=-angle(sum_of_offset)/2/pi-0.031;%所有符號(hào)頻偏估計(jì)求平均
????Frequency_offset_var_CP(Snrcount)=sqrt(Frequency_offset_temp/40);
????Frequency_offset_temp=0;%頻偏估計(jì)暫存變量清零
????%%?頻偏校正
????q
評(píng)論
共有 條評(píng)論