使用 Mueller 和 Muller 进行时钟恢复会增加影响 EVM 或 SNR 的噪声(两种情况 - GNU Radio 和 Python 代码)

信息处理 采样 调制 信噪比 格努拉迪奥 星座图
2022-02-15 03:54:17

我看到的 Mueller 和 Muller 时钟恢复的实施为星座符号上的误差矢量幅度 (EVM) 添加了大量“噪声”或退化。这是在 GNU Radio 和 Python 中的手动脚本中独立完成的 - 给出了类似的结果。这是正常的吗?

我知道我需要调整此算法中的参数,但我无法接近足够的优化,它太嘈杂了。

在 GNU radio 和 python 两种实现中,对原始数据信号的唯一损害是 RRC 脉冲整形滤波器的性能。您可以看到这是一个几乎完美的接收星座,EVM < -60 dB,使用 300 的滤波器抽头和 0.35 的滚降因子。见下图。

在此处输入图像描述

然而,一旦我添加了 M&M 算法,我就没有运气接近这个,它会产生很多噪音。见下图。

在此处输入图像描述

这有点难以评估我以后可能会在模型中添加的损伤的真实程度,比如 AWGN。因为如果我在其中添加 AWGN,那么当使用 M&M 时,EVM 或 SNR 会变得更糟。

这是 GNU 无线电流程。

编辑请注意,在我的 python 代码中,Rx RRC 过滤器是在 M&M 之前执行的,但在 GNU 收音机中,我在 RRC 之前执行它,因为在 MM 块之前有一个 RRC 不起作用会在下面的流程中产生任何结果。

在此处输入图像描述

下面是 M&M python 算法,它来自 pySDR.com

samples = input_signal
interp = 16
samples_interpolated = signal.resample_poly(samples,interp,1)
mu = 2 #2 # initial estimate of phase of sample
out = np.zeros(len(samples) + 10, dtype=np.complex)
out_rail = np.zeros(len(samples) + 10, dtype=np.complex) # stores values, each iteration we need the previous 2 values plus current value
i_in = 0 # input samples index
i_out = 2 # output index (let first two outputs be 0)
while i_out < len(samples) and i_in < len(samples):
    out[i_out] = samples_interpolated[i_in*interp + int(mu*interp)] # grab what we think is the "best" sample
    out_rail[i_out] = int(np.real(out[i_out]) > 0) + 1j*int(np.imag(out[i_out]) > 0)
    z = (out_rail[i_out] - out_rail[i_out-2]) * np.conj(out[i_out-1])
    zz = (out[i_out] - out[i_out-2]) * np.conj(out_rail[i_out-1])
    mm_val = np.real(zz - z)
    mu += sps + 0.3*mm_val
    i_in += int(np.floor(mu)) # round down to nearest int since we are using it as an index
    mu = mu - np.floor(mu) # remove the integer part of mu
    i_out += 1 # increment output index
out = out[2:i_out-1] # remove the first two, and anything after i_out (that was never filled out)
1个回答

与 Gardner Loop 不同,M&M 同步器应在接收器中的 RRC 滤波器之后执行,以获得最佳性能。在高 RRC alpha 的情况下,如果没有完整的升余弦滤波(发射器中的 RRC,接收器中的 RRC),M&M 将无法按预期工作,因为误差项的斜率将反转,具有高自噪声,因为我在下面的图中演示:

M&M鉴别器

蓝线是显示平均误差与偏移量的鉴别器输出,红线是显示自噪声的该误差的标准偏差。在第一种情况下,误差输出与偏移的斜率实际上在锁定点附近反转(因此,如果反馈反转但具有非常高的自噪声和低斜率,那么它几乎不会起作用,因此时序 SNR 非常低,否则它会有趣地锁定在 1/4 样本偏移量)。

针对 OP 的情况,下图是具有较低(和典型)RRC alpha 的相同图表,其中鉴别器曲线非常相似,但如果在第二个 RRC 滤波器之前使用 M&M,则在锁定条件下的自噪声要高得多.

M&M 低阿尔法

Gardner Loop 和 M&M 都会有自噪声,但是一旦确定了每个新样本的累积时间样本位置,自噪声通常在恢复环路中被平均化为远低于接收器本底噪声。

为什么加德纳和M&M有区别? 有趣的是,Gardner 在使用第二个 RRC 滤波器之前的样本时表现更好,而 M&M 同步器在之后更好。这是因为 M&M 同步器使用决策位置处的样本位置对每个符号一个样本进行操作,因此取决于这些位置附近的波形斜率来确定定时误差。Gardner 使用每个符号 2 个样本进行操作,并通过近似零交叉处的斜率进行操作,正如我们在下面的眼图中看到的那样,在第二个 RRC 滤波器之前具有较少的时序抖动(请注意,在第二个 RRC 滤波器后的波形):

RRC前后波形

通常,对于时序检测,我们的最佳估计应该从斜率最高的零交叉处获得,因此对时序误差的敏感性最高。平均而言,这是正确的,这也是 Gardner Loop 在低 SNR 条件下具有更好 SNR 性能的原因之一(而 M&M 在高 SNR 条件下具有更好的性能,因为它在计算中使用决策,如果决策正确,则可以消除噪声)。然而,在数据决策位置没有符号间干扰的竞争要求导致在用于定时检测的感兴趣的波形位置处的过零抖动增加。如果自噪声是一个问题,则一种解决方案(通常不是