通信算法之169:通信物理层QPSK中的FFT估计载波频偏算法

news/2025/3/14 0:50:43/

一. 求频偏几种常见的算法

1. 训练序列相关

2. FFT算法

3. 锁相环

二. FFT算法

       快速傅里叶变换(FFT)的频偏估计算法,它能直接检测得到载波频偏绝对值大小,且精度与输入端信噪比无关,可应用于中继卫星通信中高速数传且频带有效的同步解调。

三.库函数代码

%% Compensate for Frequency Offset in a QPSK Signal
% Compensate for a 4 kHz frequency offset imposed on a noisy QPSK signal.
% 
% Set the example parameters.nSym = 2048;       % Number of input symbols
sps = 4;           % Samples per symbol
nSamp = nSym*sps;  % Number of samples
fs = 80000;        % Sampling frequency (Hz)
%% 
% Create a square root raised cosine transmit filter.
%%
txfilter = comm.RaisedCosineTransmitFilter(...'RolloffFactor',0.2, ...'FilterSpanInSymbols',8,   ...'OutputSamplesPerSymbol',sps);
%% 
% Create a phase frequency offset object to introduce the 4 kHz frequency 
% offset.
%%
freqOffset = comm.PhaseFrequencyOffset(...'FrequencyOffset',-4000, ...'SampleRate',fs);
%% 
% Create a coarse frequency compensator object to compensate for the offset.
%%
freqComp = comm.CoarseFrequencyCompensator(...'Modulation','QPSK', ...'SampleRate',fs, ...'FrequencyResolution',1);
%% 
% Generate QPSK symbols, filter the modulated data, pass the signal through 
% an AWGN channel, and apply the frequency offset.
%%
data = randi([0 3],nSym,1);
modData = pskmod(data,4,pi/4);
txSig = txfilter(modData);
rxSig = awgn(txSig,20,'measured');
offsetData = freqOffset(rxSig);
%% 
% Compensate for the frequency offset using |freqComp|. When the frequency 
% offset is high, it is beneficial to do coarse frequency compensation prior to 
% receive filtering because filtering suppresses energy in the useful spectrum.
%%
[compensatedData,estFreqOffset] = freqComp(offsetData);
%% 
% Display the estimate of the frequency offset.
%%
estFreqOffset
%% 
% Return information about the |freqComp| object. To obtain the FFT length, 
% you must call |freqComp| prior to calling the |info| method.
%%
freqCompInfo = info(freqComp)
%% 
% Create a spectrum analyzer object and plot the offset and compensated 
% spectra. Verify that the compensated signal has a center frequency at 0 Hz and 
% that the offset signal has a center frequency at -4 kHz.
%%
specAnal = dsp.SpectrumAnalyzer('SampleRate',fs,'ShowLegend',true, ...'ChannelNames',{'Offset Signal' 'Compensated Signal'});
specAnal([offsetData compensatedData])

四.工程实现代码

% QPSK FFT方法
% QQ : 1279682290clc
clear
close all%-参数---------------------------
sps = 4;%-升余弦滚降滤波器
Fs = 1000*sps; %采样频率% Fs = 1000; %采样频率
T = 1/Fs;  %采样周期
L = 1500;
t = (0:L-1)*T;
offset = 100;data = randi([0 3],L,1);
qpsk_symbol0 = pskmod(data,4,pi/4).';
% qpsk_symbol0 = exp(1j*(randi([0 3],1,L)*pi/2 + pi/4));scatterplot(qpsk_symbol0)%-升余弦滚降滤波器-------------------------------
txfilter = RaisedCosineTnsmitFilter(...'RolloffFactor',0.25, ...'FilterSpanInSymbols',8,   ...'OutputSamplesPerSymbol',sps);
qpsk_symbol = txfilter(qpsk_symbol0.').';%-----------------------------------------
% spectrumAnalyzer = dsp.SpectrumAnalyzer('SampleRate',Fs);
% spectrumAnalyzer(qpsk_symbol)%--ADD 频偏---------------------------------------
freqOffset = PhaseFreqncyOffset(...'FrequencyOffset',offset, ...'SampleRate',Fs);
S = freqOffset(qpsk_symbol.').';%--ADD 频偏---------------------------------------S_addnoise = awgn(S,20,'measured');L = length(qpsk_symbol);ylabel('幅度');figure;
Y2 = fft( );
x_fre = (0:L-1)./L*Fs;
plot(x_fre,abs(Y2/L));
xlabel('频率');
ylabel('幅度');
title('无噪声时的信号频率图')% 方法一:
figure;
Y3 = fft( );
x_fre = (0:L-1)./L*Fs;
plot(x_fre,abs(Y3/L));
xlabel('频率');
ylabel('幅度');
title('有噪声时的信号频率图')[maxvaule,index] = max(Y3);
foffset_esti = x_fre(1,index)/4;%方法二:FFT方法
freqComp = arseFreqcyCompensator(...'Modulation','QPSK', ...'SampleRate',Fs, ...'FrequencyResolution',1);
[compensatedData,estFreqOffset] = freqComp(S_addnoise.');

FFT估计频偏的方法使得频偏偏差已经比较小时,随着时间的积累依然会造成星座图相位旋转,这样会对解调造成误判,尝试用以下方法解决:

(1)频偏比较小后,进入锁相环;这个我之前已经仿真过BPSK和QPSK采用锁相环来纠正固定频偏和相偏的误码率曲线,和理论曲线相差不大。当然,调锁相环的参数方面经验尚且不足。

(2)如果信号本身已经采用差分编码,对频偏也能有一定程度的容忍。比如采用DBPSK或者DQPSK,因为相邻符号的相差用来做判决。

(3)当帧长持续时间Tframe较短,在Tframe时间内,频偏偏差不会造成QPSK星座图旋转超过pi/4,也不会对判决有影响,等等。

五.升余弦滤波器

作用

升余弦滤波器常常作为发送端的成型滤波器,用来抑制信号带外辐射。

MATLAB实现

在maltab中,主要用rcosdesign函数来实现FIR脉冲成型滤波器,其他相关的函数还有comm.RaisedCosineTransmitFilter,comm.RaisedCosineTransmitFilter。

语法:

b = rcosdesign(beta,span,sps)

b = rcosdesign(beta,span,sps,shape)

描述:

b = rcosdesign(beta,span,sps)返回系数b,对应于一个滚降系数为beta的均方根升余弦FIR滤波器。滤波器截断为span个symbols,每个symbol包含sps个采样点。滤波器的阶数sps*span必须是偶数。滤波器能量为1。

b = rcosdesign(beta,span,sps,shape)返回一个均方根升余弦滤波器(shape为’sqrt’)或者一个升余弦滤波器(shape为’normal’)。

升余弦滤波器的例子

升余弦可以抑制码间干扰,发送和接收滤波器分开。

升余弦滤波器的主要参数是其滚降系数,滚降系数直接决定了滤波器的带宽。理想的升余弦滤波器由无限多个抽头。因此,实际上的升余弦滤波器是加窗的。窗的长度由FilterSpanInSymbols特性来控制。在本例中,我们将窗长度设定为6个symbol长度。这样的滤波器也有3个symbol的群延时。升余弦滤波器用在信号上采样后的脉冲成型。因此,我们也需要指定上采样倍数。升余弦滤波器的参数如下:

Nsym=6;

beta=0.5;

samsPerSym=8;

【参考:MATLAB分析升余弦滤波器_sps samples symbol_Brandon懂你的博客-CSDN博客】

【参考:知网论文《快速傅里叶变换载波频偏估计算法》】

用升余弦发射滤波器系统结构体构建滤波器并用fvtool来可视化滤波器特性。

这个结构体设计了一个直接型多项式单位能量FIR滤波器。滤波器阶数Nsym*sampsPerSym,抽头数Nsym*sampsPerSym+1。可以利用gain特性归一化滤波器系数以使滤波后的和未滤波数据匹配。


http://www.ppmy.cn/news/670950.html

相关文章

STM32外设系列—L298N

文章目录 一、L298N简介二、L298N电路图三、L298N使用方法四、L298N驱动电机实例4.1 麦克纳姆轮简介4.2 定时器PWM配置4.3 智能车行驶控制 五、拓展应用 一、L298N简介 L298N是SGS公司生产的一款通用的电机驱动模块。其内部包含4路逻辑驱动电路,有两个H桥的高电压大…

坦克世界怎么显示服务器准心,坦克世界8.0环境设置详细教程

坦克世界更新8.0已经有一段时间了,可是还有部分新手玩家不懂得如何设置游戏环境,那么本人将自己的设置方法和心得分享给大家,以帮助于新手和电脑盲。 先帮大家扫盲2个名词,进游戏后的左上角FPS和PING,FPS指画面帧数,数值越高画面越流畅,ping代表网络延迟,数值越低越利于…

坦克世界登录服务器未响应,为你操作win7系统坦克世界登录连接不上服务器的方案_...

win7系统有很多人都喜欢使用,我们操作的过程中常常会碰到win7系统坦克世界登录连接不上服务器的问题。如果遇到win7系统坦克世界登录连接不上服务器该怎么办呢?很多电脑水平薄弱的网友不知道win7系统坦克世界登录连接不上服务器究竟该怎么解决?其实不难根…

坦克世界没有服务器信号,坦克世界闪击战无法连接服务器怎么办 网络问题

坦克世界闪击战无法连接服务器怎么办?大家在玩的时候,肯定都会遇到一些网络问题,连接不上服务器的话,那么就没办法玩这一款游戏,所以小编这里要给大家说一下服务器的问题。 坦克世界闪击战无法连接服务器怎么办&#x…

w10系统怎么登录服务器,笔者帮您win10系统坦克世界登录连接不上服务器的方案...

今天小编分享一下win10系统坦克世界登录连接不上服务器问题的处理方法,在操作win10电脑的过程中常常不知道怎么去解决win10系统坦克世界登录连接不上服务器的问题,有什么好的方法去处理win10系统坦克世界登录连接不上服务器呢?今天本站小编教…

关于WIN7玩坦克世界未响应问题解决方案

此方法涉及修改注册表,属敏感操作,玩家自行慎重选择使用,感谢作者“SS帝国勇士”为大家提供解决方法。 经常发现一些坦克战友说,自己电脑的系统是WIN7系统,在玩坦克的时候会出现未响应,跳频特别高。给客服…

坦克世界服务器系统不更新失败怎么办,win7系统下坦克世界自动更新失败如何解决...

坦克世界是一款深受玩家们欢迎的游戏之一,而有时候版本更新了,运行坦克世界的时候就会自动更新,但是却遇到自动更新失败的情况,屏幕上显示“严重错误,用http方式下载失败,应用程序不能继续。详情请查看系统…

坦克世界登录服务器未响应,笔者详解win7系统坦克世界登录连接不上服务器的解决方案...

许多win7系统用户在工作中经常会遇到win7系统坦克世界登录连接不上服务器的情况,比如近日有用户到本站反映说win7系统坦克世界登录连接不上服务器的问题,但是却不知道要怎么解决win7系统坦克世界登录连接不上服务器,我们依照1、配合市面上的网…