基于FFT 技术实现粗载波捕获
随着软件无线电技术愈发完善,数字接收机的发展非常迅速,而载波同步是数字接收机中很重要的环节。为了节省频带资源,目前常用 Costas 环对接收信号进行载波提取。当接收信号的初始频偏、相偏较大的情况下,环路性能会受到很大的影响,此时捕获时间会变长,所需的捕获带宽也会增大。解决此问题的方法有两种,一是建立一个锁频环,将初始频率牵引到锁相环环路带宽的范围内 ;二是进行频偏估计,并将估计值转换后导入锁相环中,使接收信号和本地产生的震荡信号的频率差值处在一个较小的范围内,以便完成捕获。
matlab仿真代码如下:
function [output,est_freq_offset] = freq_est_fft(fs,Mtype,dataIn)
% fs 信号采样频率
% 输入数据长度
N = length(dataIn);
% 频率向量
% FFT 的每个输出点对应的实际频率值
% 负数到正数的范围代表了从负最大频率到正最大频率,对应于 -fs/2 到 fs/2 - 1 的范围
f = - fs / 2 : fs / 2 - 1;
switch Mtype
case 1 %BPSK
NN = 2;
case 2 %QPSK
NN = 4;
case 3 %8PSK
NN = 8;
case 4 %16APSK
NN = 12;
otherwise
NN = 16; %32APSK
end
data_amp = abs(dataIn);
data_angle = angle(dataIn);
raised_Signal = data_amp.*exp(1j*NN.*data_angle);
% 8倍 FFT
data_8fft = fft(raised_Signal, length(f));
% 调整 FFT 的输出,使其频率轴中心化
% 频谱中的零频率(直流分量)位于中心。这样频谱的负频率部分就移到了左边,正频率部分移到了右边
data_8fft_shift = fftshift(data_8fft);
% 幅度
data_8fft_amplitude = abs(data_8fft_shift);
% 最大幅度及对应的索引
[~, max_freq_index] = max(data_8fft_amplitude);
% 最大幅度对应的频率值
max_freq = f(max_freq_index);
% 估计出来的频偏
est_freq_offset = max_freq / NN;
% 时间向量
t = (0 : 1 : N - 1) / fs;
% 频偏补偿
output = dataIn .* exp(-1j * 2 * pi * est_freq_offset .* t');
end
不同调制方式载波估计的范围不一样,调制阶数越高,估计范围越小。如需全链路matlab仿真代码或者FPGA硬件实现,可私信。
参考文献:
【1】Wang, Y., K. Shi, and E. Serpedi. “Non-Data-Aided Feedforward Carrier Frequency Offset Estimators for QAM Constellations: A Nonlinear Least-Squares Approach.” EURASIP Journal on Applied Signal Processing. 2004:13, pp. 1993–2001
【2】A. Viterbi. Nonlinear estimation of psk-modulated carrier phase with application to burst
digital transmission. IEEE Transactions on Information Theory, 29(4):543–551, July 1983.
[3] Bryan Redd, Jamison Ebert, and Autumn Twitchell. Dft-based frequency offset estimators for
16-apsk, 2019.
[4] Michael Rice, Bryan Redd, and Ximena Briceno. On carrier frequency and phase
synchronization for coded 16-apsk in aeronautical mobile telemetry, 2019.