载波恢复算法——Viterbi-Viterbi算法 VV算法

同样,如有您看的资料和我说的有出入

建议,以我为准╮(╯▽╰)╭

由于发送端调制信号时使用的载波,与接收端解调信号时使用的本地载波在频率和相位上都有一定的误差。所以对解调的信号有一些不好的影响。需要对接收信号用DSP算法做相应的补偿。载波恢复做的就是频偏的估计和相偏的估计。估计出来以后补偿它,又叫做恢复出原始的载波。

Viterbi-Viterbi算法是最经典的载波恢复算法。

曾经模拟信号的年代,锁相环(PLL) 基本上是无所不能的存在。在射频通信系统中,基于锁相环的反馈机制,被用来做载波恢复。

反馈、前馈的区别

二者的目的是一样的,为了使一个会被干扰的变量保持不变。
反馈是检测变量,当变量变化后,根据变量的变化趋势,使用调节装置去调节。
前馈是检测干扰,当干扰发生后,然后使用调节装置,使得变量不会发生变化。

所以前馈比反馈的响应更及时。

射频信号载波的相位变化缓慢,所以基于锁相环的反馈方式能够跟的上相位的变化。但是光载波的相位变化速度太快了,反馈就不好使了,要使用前馈方式补偿光载波的相位变化。

频率偏移的变化都是缓慢的(专有名词:慢变),数字锁相环时可以用于光载波的频偏估计的。

Viterbi-Viterbi算法是一种前馈载波恢复算法。用于PSK调制格式的系统中(其它的他就用不了,只用于恒模系统,即星座点的半径相同就是恒模)

算法原理 公式推导这就来了~

理想PSK信号的表达式 S n = e j a n S_n=e^{ja_n} Sn=ejan其中 a n a_n an代表PSK信号所取得n个相位。

但是由于载波频率和相位偏差得问题,接收到得PSK信号变成了 S n = e j ( a n + 2 π Δ v ⋅ n T s + θ n ) S_n=e^{j(a_n+2\pi \Delta v\cdot nT_s+\theta_n)} Sn=ej(an+2πΔvnTs+θn)其中 Δ v \Delta v Δv就是收发端载波的频率偏差, T s T_s Ts是码元间隔, θ n \theta _n θn为激光器的相位噪声。很好理解频偏的那部分,经过n个码元的时间之后,累计相位的变化就是 2 π Δ v ⋅ n T s 2\pi \Delta v\cdot nT_s 2πΔvnTs

因为是恒模信号么,幅度也没有信息,就直接归一化掉算了,所以上面的表达式里没有幅度信息(我懒得很)~

那么现在有两个东西需要我估计,频率!相位!谁先谁后,还是双P?

频偏估计

由于频偏会导致第2个码元的相位比第1个码元多 2 π Δ v ⋅ T s 2\pi \Delta v\cdot T_s 2πΔvTs的偏移,以此类推。所以如果我先把频率偏移估计出来了,再处理相位,是不是就没有这个干扰了呀~nice!那么只需要估计出连续信号采样之间的相位差 Δ φ \Delta\varphi Δφ就算出 Δ v \Delta v Δv了,因为 Δ φ = 2 π Δ v ⋅ T s \Delta\varphi=2\pi \Delta v\cdot T_s Δφ=2πΔvTs在这里插入图片描述

系统框图如上。

  1. 将接收到的信号与其前一个信号的复共轭相乘。就得到了两个码元的相位差 d n = S n × S n − 1 ∗ = e j [ ( a n − a n − 1 ) + Δ φ + ( θ n − θ n − 1 ) ] d_n=S_n\times S_{n-1}^*=e^{j[(a_n-a_{n-1})+\Delta \varphi+(\theta_n-\theta_{n-1})]} dn=Sn×Sn1=ej[(anan1)+Δφ+(θnθn1)](看就看出来了??动笔算算啊你们这些B.站用户)激光器的线宽通常100KHz-10MHz不等,而相位噪声的变化相对于频偏导致的相位变化来说就是毛毛雨啦,因此 ( θ n − θ n − 1 ) ≈ 0 (\theta_n-\theta_{n-1})\approx0 (θnθn1)0
  2. 去掉相位中的编码信息。对于MPSK信号,做个M次方的运算就OK了。因为MPSK是把 2 π 2\pi 2π的相位分成了M份,做M次方之后, e j 2 π M ⋅ M e^{j\frac{2\pi}{M}\cdot M} ejM2πM就没有了。
  3. 相位信息现在只剩下 M ⋅ Δ φ M\cdot\Delta \varphi MΔφ
  4. 对相邻的很多码元多做几次相同的事情,然后求个平均值,可以消除一些突发的误差。小学生都知道~用来进行均值运算的N个采样数据要对称的分布在第n个码元左右,这样的得到结果可看作无偏估计。不知道什么是无偏估计就算了。反正就是牛逼的意思。
  5. 把之前做M次方运算时的M除掉。就是相位差的估计值了。频偏就算出来了!把每个码元因频偏引起的累计相位偏移移除,就得到了无频偏影响的数据 S n ′ = e j ( a n + θ n ) S_n'=e^{j(a_n+\theta_n)} Sn=ej(an+θn)

相偏估计

日后回来补上吧,代码写的有点问题。我是那种如果没能把理论变成实践,就不敢讲理论的人。我现在的使用方式是VV的频偏估计算法+其它的相偏估计算法。没使用VV的相偏,虽然它的理论几个公式就完事了,但是代码实现起来,有点问题。我没搞懂网上的代码为什么要那样写……

然后补偿相位偏移咯~算法框图如下
在这里插入图片描述

  1. 首先还是先做M次方,移除相位调制信息。只剩下 e j M θ n e^{jM\theta_n} ejMθn

猜你喜欢

转载自blog.csdn.net/Explore_OuO/article/details/108967637