1、设置归一化频偏
- 时域(使用l两段完全一样的chu序列,这里设置每一段长度为1024),基带传输
x
(
k
)
=
x
(
k
+
N
)
,
k
=
1
,
2
,
.
.
.
,
1024
x(k )=x(k+N),k=1,2,...,1024
x(k)=x(k+N),k=1,2,...,1024
- FFT窗口设置为1024,基带传输速率设置为 R s R_s Rs,则子载波间隔 f s c = R s 1024 f_{sc} = \frac{R_s}{1024} fsc=1024Rs
- Matlab添加频偏(起始偏移设置为0)
step_freq = f_shift*2*pi/1024; %f_shift为归一化频偏设置,1024为FFT窗口长度
add_freq = mod(step_freq*[0:(length(rxdata)-1)] ,2*pi); %相位循环递增(或递减)
rxdata_addfreqshift = rxdata.*exp(1j*add_freq );
2、频偏估计方法
- 频偏估计宽度为 l e n g t h e s t i = l e n g t h F F T l e n g t h t r a i n s e q length_{esti}=\frac{length_{FFT}}{length_{trainseq}} lengthesti=lengthtrainseqlengthFFT , l e n g t h F F T length_{FFT} lengthFFT 为FFT窗口长度, l e n g t h t r a i n s e q length_{trainseq} lengthtrainseq 为单个训练符号长度,估计范围为 [ − l e n g t h e s t i 2 , l e n g t h e s t i 2 ] \left[ -\frac{length_{esti}}{2},\frac{length_{esti}}{2}\right] [−2lengthesti,2lengthesti],当前为 [ − 0.5 , 0.5 ] [-0.5,0.5] [−0.5,0.5]。
- 相位偏移计算 p h a s e s h i f t = a n g l e ( r x d a t a i ∗ c o n j ( r x d a t a i + 1024 ) ) , i = 1 , 2 , . . . , 1024 phase_{shift} = angle\left(rxdata_i*conj\left(rxdata_{i+1024}\right)\right),i = 1,2,...,1024 phaseshift=angle(rxdatai∗conj(rxdatai+1024)),i=1,2,...,1024
- 频偏计算 f s h i f t = − Σ i = 1 1024 p h a s e s h i f t 2 ∗ π ⋅ l e n g t h F F T l e n g t h t r a i n s e q f_{shift} = -\frac{\Sigma_{i=1}^{1024}phase_{shift}}{2*\pi}\cdot\frac{length_{FFT}}{length_{trainseq}} fshift=−2∗πΣi=11024phaseshift⋅lengthtrainseqlengthFFT
- Matlab计算归一化频偏(当前FFT窗口设置1024)
f_shift = -angle(sum(trainseq(1:1024).*conj(trainseq((1:1024)+1024))))*1024/(2*pi*1024);
- Matlab补偿方法
rxdata_freqoffset = rxdata.*(-1j*2*pi*f_shift*([0:(length(rxdata)-1)]./1024))
训练序列相关距离越长,估计精度越高,估计范围越小