UWB系统同步OFDM基于训练序列的同步算法的MATLAB仿真

Posted fpga&matlab

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UWB系统同步OFDM基于训练序列的同步算法的MATLAB仿真相关的知识,希望对你有一定的参考价值。

1.软件版本

MATLAB2021a

2.核心代码

clc; clear;
close all;

%% 仿真参数

    FFTLen = 128;   % FFT块点数
    GILen = 32;     % 保护间隔点数
    CPLen = 5;      % 循环前缀点数
    TotalLen = FFTLen + GILen + CPLen;

    OFDMSymbolNum = 3;          % 每帧OFDM符号数
    DataCarryPerSymbol = 100;   % 每符号有效数据数据数
    BitPerDataCarry = 2;        % QPSK

    BitLenPerOFDMFrame = BitPerDataCarry*DataCarryPerSymbol*OFDMSymbolNum;
    TotalLenPerOFDMFrame = BitPerDataCarry*FFTLen*OFDMSymbolNum;
    BeaconLen = 32;

    Fs = 8;             % 采样点数
    Rolloff = 0.5;      % 滚降系数
    FreqOffSet = 0.2;   % 频偏
    DLenSymbol = 1;     % 延迟
    freqest = 1;        % 频偏补偿开关
    SNR = 9;    

%% 发射机

    %% 产生PN9序列
    OFDMPN9 = [1 0 0 0 1 0 0 1 1];
    OFDMPN9Reg=zeros(1,511);
    for ii = 1:511
        OFDMPN9Reg(ii) = OFDMPN9(9);
        OFDMPN9 = [ xor(OFDMPN9(9),OFDMPN9(5)),OFDMPN9(1:8)];
    end

    %% 生成发射序列
    PN9RepNum = ceil(TotalLenPerOFDMFrame/511);
    OFDMPN9Tx = repmat(OFDMPN9Reg,1,PN9RepNum);
    OFDMPN9Tx = OFDMPN9Tx(1:TotalLenPerOFDMFrame);  % 使用PN9序列
%     OFDMPN9Tx = randint(1:TotalLenPerOFDMFrame);    % 使用随机序列

    %% QPSK 调制
    table=exp(i*[-3/4*pi 3/4*pi 1/4*pi -1/4*pi])   % 生成QPSK符号
    table=table([0 1 3 2]+1)                       % Gray映射
    inp=reshape(OFDMPN9Tx,2,TotalLenPerOFDMFrame/2);
    Data2iFFT=table([2 1]*inp+1);            

    %% IFFT
    Data2iFFT = reshape(Data2iFFT,FFTLen,OFDMSymbolNum);
    DataofiFFT= ifft(Data2iFFT,[],1);
    DataofiFFTML = DataofiFFT;

    %% 加Preamble、循环前缀、保护间隔
    OFDMSymbol = [DataofiFFT(FFTLen-CPLen+1:FFTLen,:);DataofiFFT(:,:);zeros(GILen,OFDMSymbolNum)];
    Beacon = BeaconGen(BeaconLen);
    SigPow = mean(abs(OFDMSymbol(:)).^2);
    Beacon = sqrt(2*SigPow)*Beacon;
    Preamble = [Beacon.'; Beacon.'];
    ReOrder = [Preamble; OFDMSymbol(:)];
    Data2OFDMTxFIRFilter = [ReOrder(:)];

    %% 上采样及成形滤波
    TxSignal = rcosflt(Data2OFDMTxFIRFilter,1,Fs,'sqrt',Rolloff,DLenSymbol);
    Txjw = j*(2*FreqOffSet*pi/(FFTLen*Fs))*(0:length(TxSignal)-1);  % 生成发送载波
    TxSignal = TxSignal.'.*exp(Txjw);                               % 加频偏

%% 信道

    RxSignal = awgn(TxSignal,SNR,'measured');

%% 接收机

    %% 匹配滤波及下采样
    RXSigMatched = rcosflt(RxSignal,1,Fs,'sqrt/Fs',Rolloff,DLenSymbol);
    Rx_Sig_down = RXSigMatched(1:Fs:end);
    Rx_Sig = Rx_Sig_down((2*DLenSymbol+1):(end-2*DLenSymbol));
    
    %% 帧头捕获、同步模块
    autoresult = AutoR(Rx_Sig.',BeaconLen);  % 滑动自相关窗
    length(Rx_Sig)
    automodule = abs(autoresult).^2;         % 自相关模值
    [a,time_est] = max(automodule);          % 帧头位置
    time_est_err = time_est - (BeaconLen+1);  % 帧头位置误差
    freq_est = atan(imag(autoresult(time_est))/real(autoresult(time_est)))*(FFTLen/BeaconLen)/(2*pi); % 频偏估计
    freq_est_err = abs(freq_est+FreqOffSet)
    figure
    plot(automodule) %  画自相关结果
    xlabel('n')
    ylabel('自相关模值')
    grid on
    Rxjw = j*(2*freq_est*pi/(FFTLen))*(0:length(Rx_Sig)-1);  % 频偏补偿
    if freqest
        Rx_Sig = Rx_Sig.*exp(Rxjw).';
    end
    
................................................

3.操作步骤与仿真结论

 

 5.参考文献

[1]戈立军, 巨阿强, 李春雨,等. MB-OFDM-UWB系统同步及信道估计算法的改进与仿真[J]. 南开大学学报:自然科学版, 2013(5):7.

D214

6.完整源码获得方式

方式1:微信或者QQ联系博主

方式2:订阅MATLAB/FPGA教程,免费获得教程案例以及任意2份完整源码

以上是关于UWB系统同步OFDM基于训练序列的同步算法的MATLAB仿真的主要内容,如果未能解决你的问题,请参考以下文章

OFDM同步算法之Park算法

OFDM频域同步基于OFDM数字电视地面广播系统中频域同步技术matlab仿真

OFDM仿真基于matlab秩亏情况下遗传算法MIMO-OFDM系统多用户检测含Matlab源码 2293期

OFDM仿真基于matlab秩亏情况下遗传算法MIMO-OFDM系统多用户检测含Matlab源码 2293期

基于MATLAB的MIMO-OFDM调制解调系统

UWB定位系统的主要误差来源