【UWB系统同步】OFDM基于训练序列的同步算法的MATLAB仿真
2023-09-11 14:15:33 时间
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联系博主
相关文章
- Matlab中嵌套函数中的参数检查
- Matlab中times函数的使用
- Matlab中有关字符串数组的常见问题解答
- 【BOC同步跟踪】BOC信号跟踪算法的MATLAB仿真
- 【MATLAB教程案例98】基于混沌序列的图像加解密matlab仿真,并进行各类攻击测试
- 【MATLAB教程案例47】基于双目相机拍摄图像的三维重建matlab仿真
- 【MATLAB教程案例46】三维数据的插值和滤波处理matlab仿真
- 【MATLAB教程案例43】初识matlab中三维数据处理相关函数——plot3,surf,mesh,isosurface,slice等
- 【MATLAB教程案例40】语音信号的共振峰频率倒谱法估计matlab仿真学习
- 【MATLAB教程案例39】语音信号的PCM编解码matlab仿真学习
- 【MATLAB教程案例25】常用图像变换域的matlab仿真分析——DFT频域,DCT域,小波域等
- 【MATLAB教程案例15】基于WOA鲸鱼优化算法的函数极值计算matlab仿真及其他应用
- BOC调制同步系统的鉴相器性能MATLAB仿真
- 【GPS载波同步】基于MATLAB的GPS载波同步仿真
- TDOA的matlab仿真
- OpenCV的图像直角坐标系转极坐标系的函数warpPolar()详解,并附自己写的实现直角坐标系转极坐标系的MATLAB代码
- 用MATLAB的函数fft2()作二维傅里叶变换所需要注意的地方(二维傅里叶变换的物理意义、im2double、fftshift、abs、imshow)
- Matlab ------ 打开MATLAB,设置默认打开的文件夹
- 教你用matlab制作一款黄金矿工小游戏
- 数学物理方程的Matlab实现