OFDM符号解调定时提前问题(循环前缀CP)

仿真中遇到的小问题,记录一下,个人理解,多谢批评指正!

在OFDM系统中解调时,若定时提前,但仍在CP范围内时,仍可正确解调,代码验证如下:

%% OFDM系统简易版

clear;
clc;

err = 0;
SNR=30;

%% 参数设置
simParameters.NFFT  = 64;%子载波个数
simParameters.cp  = 16;
simParameters.Nsym  = 4;%符号数
simParameters.Pilot_sym = 1;%符号数
simParameters.Modulate = 2; %调制方式为QPSK
simParameters.NInputBits =368;
simParameters.CRCLen = 16;

%% 生成源数据
Infobit=randi([0,1],1,368);

%% 每块 +16bitCRC
crcbit = crc_for_5g(Infobit,'16');
msgbit = ([Infobit,crcbit]).';  

%% 调制
tx_modulate = tx_pskmod(msgbit, simParameters); 
tx_modulate = reshape(tx_modulate,64,3);
tx_map = zeros(64 ,4 );
tx_map(:,1) = ones(64,1) ;%导频
tx_map(:,2:4) = tx_modulate ;

%% fft
tx_fft = fft(tx_map);
tx_cp = [tx_fft(end-15:end,:);tx_fft];

%% 过信道
%SignalsAWGN = awgn(tx_modulate,SNR, 'measured'); 
SignalsAWGN = tx_cp; 

%% 解调
rx = SignalsAWGN(10:73,:);%定时提前
rx_ifft = ifft(rx);
H = rx_ifft(:,1)./ones(64,1);
r_equ = rx_ifft./H;
r_equ = r_equ(:);
rx_signal_demode = rx_pskdemod(r_equ(65:end), simParameters);
rx_signal = sign (rx_signal_demode);
rx_signal = (1-rx_signal)/2;
%% 检查CRC
crcbit_rx= crc_for_5g(rx_signal.','16');

验证可知,即使定时提前,但只要仍处于CP范围内,也可以获得完整的OFDM信息。也可通过OFDM公式推:
在这里插入图片描述

当定时提前时,所有时域信号未丢失,只是顺序混乱,因此对于每一个FFT之后的频点,相当于乘以e(-j2pi/Nkl),其中k是FFT之后数据索引,l是定时偏差。例如上例程序中,定时提前7个数据点,因此相当于FFT之后的数据乘以e(-j2pi/Nk(-7)),从导频处的信道估计值可验证,H=e(-j2pi/Nk(-7))。因此OFDM符号可正确解调。
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值