最大长度序列与噪声的互相关

信息处理 线性系统 冲动反应
2022-02-06 01:27:18

背景

我正在使用最大长度序列来查找线性系统的脉冲响应。我想计算预期的 SNR。我知道我的信号幅度在互相关后按序列长度缩放,但我不确定噪声会发生什么。

主意

由于噪声的符号是随机的,因此最大长度序列中元素的符号无关紧要:[1,1,-1] 也可能是 [1,1,1]。与最大长度序列的互相关就像使用移动平均滤波器,除了系数都是 1 而不是 1/n,其中 n 是滤波器的长度。移动平均滤波器通过滤波器长度降低噪声功率,并且通过滤波器长度缩放增加滤波器长度平方的噪声功率。因此,噪声功率随着滤波器长度的增加而增加。

问题

最大长度序列和热噪声的互相关是多少?

最大长度序列与离散正弦的互相关是多少(例如来自时钟信号的 EMI)?

2个回答

我假设这是一个离散时间问题,其中最大长度序列是噪声是独立同分布 (iid) 零均值随机的变量也是个iid 随机变量的和,其方差为,即噪声功率在与过滤器的长度成正比,正如您猜想的那样。因此,最大长度序列和噪声的互相关是方差为的零均值随机变量,其中x[k]±1n[k]σ2k=0N1x[k]n[k]NNσ2Nσ2N是相关序列的长度。如果噪声被建模为高斯,那么互相关值也是一个高斯随机变量。

要回答您的第二个问题:要确定与离散音调的互相关,您可以通过将序列视为 FIR 滤波器的时间反转系数来获得相关的频率响应(因为 FIR 滤波器执行信号与系数的卷积,并且相关是与时间反转的序列之一的卷积)。

因此,您可以使用 Matlab/Octave 或 Python Sciiy.signal 使用 freqz 命令来查看这一点。下面是我如何使用 Python 通过按序列长度缩放来给出有意义的幅度答案(以 dB 为单位)。通过这样做,结果是峰值幅度为 1 ( ) 的正弦音调在任何给定归一化频率时的预期电平(相对于匹配的传入序列的峰值相关性)到幅度为 +1/-1 的代码(假设这样的序列在相关器中会增长到):cosωt0ω<12i1

import numpy as np
import scipy.signal as sig
import matplotlib.pyplot as plt
mls_r, seed = sig.max_len_seq(5)    # sequence length 2**5-1
mls = list(mls_r*2-1)               # map to +/-1

f,m = sig.freqz(np.flip(mls),2**i-1)  # frequency response (DTFT)
plt.plot(f/(2*np.pi),20*np.log10(np.abs(m)))
plt.grid()
plt.xlabel("Normalized Frequency (cycles/sample)")
plt.ylabel("Magnitude (dB)")
plt.title("Frequency Response of one particular 31 chip MLS")

一般来说,我们看到由给出的预期衰减,在这种情况下,将为 dB。10Log10(N)N=3114.9

频率响应

重复 1023 长度的序列会得到下图,其中我们看到预期的 30 dB 衰减,但也看到任何单音的结果可能会有很大差异,包括泄漏可能高达 5 dB 强的区域:

频率响应序列 2