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