在 PSK31 中应用 Viterbi 算法补偿 ISI

信息处理 bpsk 维特双算法
2022-02-19 20:14:34

我正在为业余无线电模式PSK31实现接收器。它实际上是一种具有两倍于一个符号宽度的升余弦脉冲形状的 BPSK 调制。这是四个连续的脉冲,每个符号有 4 个样本,因为它们将被传输:

在此处输入图像描述

问题是匹配过滤引入了 ISI。在接收器中的匹配滤波器之后再次出现 4 个脉冲:

在此处输入图像描述

如果我的理解是正确的,这里的问题是一个脉冲在相邻脉冲的理想决策点处是非零的。

但是,我的想法是这是可以预测的,并且干扰永远不会超出相邻符号。因此,如果已知前一个和下一个符号,则可以通过减去干扰相邻脉冲来消除 ISI。

问题是前一个符号不确定。我认为维特比算法是一种可能的解决方案看过一些关于算法的视频,并认为我理解算法是如何工作的,给定一个特定的格子。

我不明白的是如何将维特比算法应用于这个特定问题。我发现的材料要么是让我大吃一惊的数学理论,要么是算法的其他应用。有人可以在这种情况下提供一个直观、实用的解释吗?

1个回答

(经过深思熟虑,我猜想回答我自己的问题。如果我错了,请告诉我。)

第一步是查看每个脉冲在决策点的贡献。滤波器被归一化,因此单个脉冲的结果为 1。在这种特殊情况下,相邻脉冲的尾部计算为 1/6。

在此处输入图像描述

然后,我们可以查看三个脉冲的任何可能组合,将它们的贡献加在一起。如果我们说三个脉冲是xn1, xn, xn+1,然后输出yn在决策点是:

yn=1/6xn1+xn+1/6xn+1

举一些例子:

  • 111:1/6 + 1 + 1/6 = 1.33
  • 010:-1/6 + 1 + -1/6 = 0.67
  • 110:1/6 + 1 + -1/6 = 1

假设状态 01 表示前一位是 0,而前一位是 1。然后我们可以问,“如果我们添加另一个位,输出会变成什么?” 例如,如果下一位为零,则产生 001,根据上述公式,输出为 -1。

然后我们可以建立一个状态表:

╔═══════╦═══════╦════════╗
║ input ║ state ║ output ║
╠═══════╬═══════╬════════╣
║     0 ║    00 ║ -1.33  ║
║     1 ║    00 ║ -1     ║
║     0 ║    01 ║ -1     ║
║     1 ║    01 ║ -0.67  ║
║     0 ║    10 ║ 0.67   ║
║     1 ║    10 ║ 1      ║
║     0 ║    11 ║ 1      ║
║     1 ║    11 ║ 1.33   ║
╚═══════╩═══════╩════════╝

以及相关的格子图:

在此处输入图像描述

符号“0/-1.33”的意思是“从这个状态发送一个0,输出是-1.33”。

观测值与预期值之间的差值的大小或平方均可用作度量。维特比算法将找到通过具有最低度量的格子的路径,无论使用什么度量,只要它是随着观察和预期之间的距离单调增加的东西。

然后可以按照通常的方式遵循维特比算法来确定解释接收信号的最可能序列,了解相邻脉冲将如何影响接收值。

我发现这些视频对理解 Viterbi 算法的评估特别有帮助: