• 大小: 7KB
    文件类型: .m
    金币: 2
    下载: 1 次
    发布日期: 2021-10-14
  • 语言: Matlab
  • 标签: OFDM  频偏  

资源简介

主要用于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

评论

共有 条评论