【同步与补偿】频率偏移

引言

做了一段时间的SDR了,但是对一些同步和补偿的名称及其起因还是不能捻熟于心。
下面将对一些同步与补偿的现象加以总结。

频率偏移的起因

发射机和接收机之间的振荡器不匹配或者存在多普勒频移,会引起发射机和接收机之间的采样时钟频率偏差(Sampling clock Frequency Offset,SFO)。

图中示意了(能够引起时钟相位偏差的) SFO随时间的变化,从图中可以看出SFO引起了ICI(inter-carrier interference 载波间干扰,区别于ISI,inter-symbol interference 符号间干扰)。
SFO现象简单介绍一下多普勒效应。当声音,光和无线电波等振动源与观测者以相对速度V相对运动时,观测者所收到的振动频率与振动源所发出的频率有所不同。因为这一现象是奥地利科学家多普勒最早发现的,所以称之为多普勒效应。以下是观测者之于信号源的频率偏移与信号源的频率、相对速度之间的关系式:
f d = f c v c o s θ f_d=\frac{f}{c}vcos\theta fd=cfvcosθ

其中, f d f_d fd为多普勒频移, θ \theta θ为移动台方向与入射波方向的夹角; υ \upsilon υ是移动台的速度; c c c是电磁波传播速度 c=3x10km/s; f f f为载波频率。信号源靠近观察者,连续波之间的到达时间降低,频率增加;信号源远离观察者,连续波之间的到达时间增加,频率降低;由多普勒效应所造成的频率变化叫做多普勒频移,它与相对速度 υ \upsilon υ成正比,与振动的频率成正比。

频偏估计

载波频偏估计方法可分为数据辅助非数据辅助两种。

数据辅助的频偏估计方法需要插入导频序列,从而导致数据传输效率的降低。因此,导频序列应该尽量短,但随着导频序列长度的减小,估计精确度也会下降。

非数据辅助的频偏估计方法解决了数据辅助的上述缺点。

模型建立

首先,先建立一个接收机接收到的信号的理想模型。

一般默认发送信号已经经过调制映射,例如MPSK、16QAM、16APSK等。在加性高斯白噪声信道(AWGN)中的传输,并且假设理想符号定时同步(思考:如果没有先时间同步好会有什么影响),匹配滤波器输出的抽样信号为:
y k = a k e j ( 2 π k v T + θ 0 ) + n k y_k=a_ke^{j(2\pi kvT+\theta_0)}+n_k yk=akej(2πkvT+θ0)+nk
其中 a k a_k ak为发送的调制符号, θ 0 \theta_0 θ0 为载波相位,均匀分布在 [ 0 , 2 π ) [0,2\pi ) [0,2π) υ \upsilon υ 是载波频偏, T T T为码元符号周期, n k n_k nk 是第 k k k 个抽样点上的加性高斯白噪声,均值为零,方差为 N 0 N_0 N0 。以QPSK为例,则 a k a_k ak即是将原二进制信号映射到个星座点上的复数信号。如下图
QPSK所以 a k a_k ak可以表示为 a k = A e j k m π a_k=Ae^{jk_m\pi} ak=Aejkmπ,其中 k m k_m km 以QPSK为例,可以表示为 1 / 4 、 − 1 / 4 、 3 / 4 、 − 3 / 4 1/4、-1/4、3/4、-3/4 1/41/43/43/4

数据辅助的频偏估计

数据辅助的频偏估计算法是利用已知导频估计频偏。

首先对信号预处理
z k = y k a k ∗ z_k=y_ka_k^* zk=ykak
即将调制信号的相位消去。

以下是常用的数据辅助的 KayFitzL&RM&M 载波频偏估计算法[1]:
四种方法在这里插入图片描述

非数据辅助的频偏估计

数据辅助的频偏估计算法可以取得很好的性能,但需要发送导频序列,从而影响了传输效率。非数据辅助的频偏估计算法的提出,解决了数据辅助的频偏估计的这个缺点,同时对于频偏的估计可以取得很好的性能。

非数据辅助的频偏估计算法,对信号进行非线性变换
z k = ∣ y k ∣ e j [ M a r g ( y k ) ] z_k=|y_k|e^{j[Marg(y_k)]} zk=ykej[Marg(yk)]
其中 μ \mu μ M M M为非线性变换的参数。

对 QPSK 调制信号,M 为调制阶数,即 M = 4;而对 16APSK调制信号,M 是 16APSK星座图中内环星座点数和外环星座点数的最小公倍数,即 M = 12。不过,对于16QAM则不能简单的进行幂次来消去相位信息。

具体频偏估计,沿用上面的式子。

频率偏移的较快解决办法

之前我总是想着自己敲敲代码试试看,根据论文能敲出来,不仅能体验算法精髓,而且能提高自己的代码能力。

直到我敲了好几遍,找了好几篇关于L&R算法的论文,都依然无法恢复MQAM和MPSK时,我才意识到有集成的函数,还是蛮香的。

尤其对于刚刚入门的同学来说,还是多用用别人的代码,先实现出来,再研究是不是自己能自己来实现,这样更加不花时间,也更加现实些。

以下是从MATLAB的Communications Toolbox中的一些封装好的函数(真香)
在这里插入图片描述

参考文献

[1] 李彬,李智信,武楠,王华.16APSK调制载波频偏估计算法性能研究[J].

  • 34
    点赞
  • 134
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在MATLAB中,可以使用相位锁定环(Phase-Locked Loop,PLL)来补偿相对偏移频率波动。PLL是一种常用的控制系统,在通信和信号处理领域广泛应用于频率同步和相位同步等任务。 以下是一个基本的PLL的示例代码: ```matlab % 生成测试信号 fs = 1000; % 采样率 t = 0:1/fs:1-1/fs; % 时间序列 f0 = 50; % 载波频率 x = cos(2*pi*f0*t); % 输入信号 % 添加相对偏移频率波动 f1 = 55; % 偏移后的载波频率 delta_f = f1 - f0; % 相对频率偏移 x = cos(2*pi*(f0 + delta_f*t).*t); % 添加相对偏移频率波动的信号 % PLL参数设置 Kp = 0.1; % 比例增益 Ki = 0.01; % 积分增益 % 初始化PLL phaseLockedLoop = comm.PhaseLockedLoop('LoopBandwidth', 0.01, 'ProportionalGain', Kp, 'IntegralGain', Ki); % 补偿相对偏移频率波动 [y, ~] = phaseLockedLoop(x); % 绘制结果 figure; subplot(2,1,1); plot(t, x); xlabel('时间'); ylabel('输入信号'); title('带有相对偏移频率波动的输入信号'); subplot(2,1,2); plot(t, y); xlabel('时间'); ylabel('输出信号'); title('补偿相对偏移频率波动后的输出信号'); ``` 这段代码中,首先生成了一个测试信号,并在其基础上添加了相对偏移频率波动。然后,使用`comm.PhaseLockedLoop`函数初始化了一个PLL,并通过`phaseLockedLoop`对输入信号进行补偿处理。最后,绘制了输入信号和补偿后的输出信号。 请注意,具体的PLL参数(如比例增益和积分增益)需要根据实际情况进行调整。此外,这只是一个基本示例,实际应用中可能需要根据具体需求进行修改和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值