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频域同步基于OFDM数字电视地面广播系统中频域同步技术matlab仿真
OFDM仿真基于matlab秩亏情况下遗传算法MIMO-OFDM系统多用户检测含Matlab源码 2293期