OFDM-UWB通信链路的频偏估计和帧头捕获算法matlab仿真

目录

1.OFDM-UWB系统模型

2.频偏估计算法

3.帧头捕获算法

4.MATLAB程序

5.仿真结果


      正交频分复用(OFDM)技术与超宽带(UWB)技术的结合,即OFDM-UWB,为无线通信领域带来了诸多优势。在无线通信中具有高数据速率、抗多径干扰能力强等优点。在实际通信过程中,由于发射端与接收端之间的频率偏差(频偏),可能会导致子载波间的正交性破坏,影响系统的性能。因此,频偏估计是OFDM-UWB通信链路中的重要环节。

1.OFDM-UWB系统模型

       OFDM-UWB系统通过将高速数据流划分为多个低速数据流,并在多个正交子载波上并行传输,从而实现了高速数据传输。在接收端,通过相应的解调技术恢复出原始数据。然而,在实际通信中,由于多径效应、多普勒频移等因素,接收信号往往会出现频率偏移,导致子载波间的正交性破坏,从而产生干扰。

       正交频分复用超宽带(OFDM-UWB)是一种将高速数据流分配到多个正交子载波上进行并行传输的技术。在OFDM-UWB通信系统中,由于收发两端晶振的不匹配、多普勒效应以及信道的多径效应等因素,会导致接收信号出现频率偏移(频偏)。频偏会破坏子载波的正交性,引入干扰,严重影响系统的性能。因此,频偏估计和补偿是OFDM-UWB通信链路中不可或缺的一环。另外,为了准确地进行数据传输,接收端还需要实现帧头的快速捕获,以同步数据帧的起始位置。本文将详细介绍OFDM-UWB通信链路的频偏估计和帧头捕获算法的原理

2.频偏估计算法

      频偏估计算法的主要目的是准确估计并补偿接收信号中的频率偏移。常用的频偏估计算法包括基于导频的频偏估计和盲频偏估计。基于导频的频偏估计方法通过在发送信号中插入已知的导频符号,接收端通过比较接收到的导频符号与已知导频符号的差异来估计频偏。假设导频符号为Pn​,接收到的导频符号为Rn​,频偏为Δf,则频偏估计值Δf^​可以通过以下公式计算:

其中,T为导频符号的周期,N为导频符号的数量,arg⁡表示取复数的角度。

3.帧头捕获算法

       帧头捕获主要是确定OFDM-UWB信号帧的起始位置,以便后续进行同步和解调操作。通常在OFDM-UWB帧结构设计时,会在帧头加入特殊的序列(如Zadoff-Chu序列、PN序列等),这些序列具有良好的自相关特性。

       帧头捕获算法的主要任务是在接收信号中快速准确地识别出帧头,以便进行后续的数据处理。常用的帧头捕获算法包括基于匹配滤波器的帧头捕获和基于相关性的帧头捕获。基于匹配滤波器的帧头捕获方法通过设计一个与帧头信号相匹配的滤波器,将接收信号通过该滤波器,从而检测出帧头信号。假设帧头信号为h(t),接收信号为r(t),则匹配滤波器的输出y(t)为:

当接收信号中存在与帧头信号相匹配的信号时,匹配滤波器的输出会出现峰值,从而实现对帧头的捕获。

       基于相关性的帧头捕获方法通过计算接收信号与预知帧头信号之间的相关性,来检测帧头信号的存在。假设预知帧头信号为h(t),接收信号为r(t),则相关性函数C(t)为:

        当接收信号中存在与预知帧头信号高度相关的信号时,相关性函数C(t)会出现峰值,从而实现对帧头的捕获。

4.MATLAB程序

......................................................
%% 发射机
%% 产生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
%% 去循环前缀和保护间隔
Rx_Rem_CP_Sig = reshape(Rx_Sig(2*BeaconLen+1:end),TotalLen,OFDMSymbolNum);
Data2FFT = Rx_Rem_CP_Sig(1+CPLen:1+CPLen+FFTLen-1,:);
%% FFT
DataofFFT= fft(Data2FFT,[],1);
DataofFFT = reshape(DataofFFT,1,FFTLen*OFDMSymbolNum);
%% QPSK 解调
tmp1=real(DataofFFT);
tmp2=imag(DataofFFT);
figure
demod_symbols=[tmp1;tmp2];
demod_symbols=demod_symbols(:);
demod_symbols=demod_symbols.';
RxBit = (demod_symbols>0);
%% 统计误码率
[Num,BER] = biterr(double(RxBit),OFDMPN9Tx);
BER
plot(tmp1,tmp2,'.') %   画星座图
grid on
axis square
xlabel('I')
ylabel('Q')
up4027

5.仿真结果

        频偏估计可以采用基于训练序列的方法或盲估计方法来实现,其中基于训练序列的方法具有实现简单、性能稳定的优点。帧头捕获可以采用基于滑动窗口的方法或基于匹配滤波器的方法来实现,其中基于匹配滤波器的方法在SNR较高时具有较好的性能。在实际应用中,需要根据具体的系统要求和信道条件选择合适的算法来实现频偏估计和帧头捕获。