加窗会影响 Parseval 定理吗?

信息处理 频谱 Python 窗函数 信号能量
2022-01-05 18:02:17

我已经从 ecg 数据计算了傅立叶变换。它确实遵守 Parseval 定理,关系

$$\sum_{n=0}^{N-1} \大| x[n] \Big|^2 = \frac{1}{N} \sum_{k=0}^{N-1} \Big| X[k] \大|^2$$

已实现。但是在我使用窗口函数(布莱克曼,汉恩,汉宁)之后,能量不再守恒了。这正常吗?如果没有,我怎样才能标准化我的窗口fft?

我这样计算fft:

    N = signal.shape[0]
    frq = np.fft.fftfreq(N,freq)
    frq = frq[range(N/2)]
    window = window_func(N)
    fft_y = np.fft.fft(signal*window)/np.sqrt(N)
    fft_y = Y[range(N/2)]
    plt.plot(frq, abs(fft_y))

这就是我绘制时的样子。我有点担心几乎所有窗户都会大幅降低幅度,这又正常吗? 在此处输入图像描述

预先感谢您的所有帮助。

4个回答

Parseval 定理将成立,但考虑到您在时域中的信号将不再是 $x[n]$。也就是说,如果你有那个

$$\sum_{n=0}^{N-1} \大| x[n] \Big|^2 = \frac{1}{N} \sum_{k=0}^{N-1} \Big| X[k] \大|^2$$

那么,如果你用窗口 $w[n]$ 对信号 $x[n]$ 加窗口,你的信号现在将是 $\hat{x}[n]=x[n]w[n]$,并且theorem 现在将返回以下等式:

$$\sum_{n=0}^{N-1} \大| \hat{x}[n] \Big|^2 = \frac{1}{N} \sum_{k=0}^{N-1} \Big| \hat{X}[k] \大|^2$$

其中 $\hat{X}[k]$ 是 $\hat{x}[n]$ 的 DFT(显然与 $X[k]$ 不同)。

虽然傅里叶变换,离散的或连续的,可以被视为酉变换,即在一个范数复向量空间中的正交基之间的自然范数保持变化,窗口化的 FT 通常不具备这种性质。并且非酉算子不能通过重新缩放变成酉算子。原因如下:

酉算子可以在复数上对角化,并且所有特征值的大小为 1。这意味着如果将某个范数的向量放入,无论向量是什么,都会得到一个相同范数的向量。傅里叶变换算子 $F$ 是酉的。

应用窗函数也可以看作是对信号应用线性算子$W$。该算子在窗口的逐点乘法发生的域中是对角线的,因此通常是时域。那么特征值就是窗函数的各个值。除非您有一个恒定的幅度窗口,否则这些通常并不完全相同。所以一般来说,窗口算子的特征值不能重新调整为 1 的大小。

首先应用窗口函数然后应用傅里叶变换的复合线性算子不容易对角化,因此不能立即确定特征值。然而,我们可以说一些关于输出向量和输入向量的范数,允许我们对复合算子的特征值做出陈述。

如果我们取一个以特征值$\lambda_1$为输入的窗口特征向量$v_1$,我们知道输出的范数是$\left|FW\,v_1\right|=|\lambda_1| \cdot |v_1|$。将其应用于窗口算子的最大和最小(按幅度)特征值 $\lambda_{\mathrm{min}}$ 和 $\lambda_{\mathrm{max}}$,我们得到 $\lambda_{\mathrm{max}}$ FW$ 必须包含子集 $\{|\lambda_{\mathrm{min}}|,|\lambda_{\mathrm{max}}|\}$。$FW$ 的光谱范围受其自身特征值大小的限制,因此我们知道最小和最大特征值(同样,按大小)$\eta_{\mathrm{min}}$ 和 $\eta_{\ mathrm{max}}$ 分别有界: $|\eta_{\mathrm{min}}|\leq |\lambda_{\mathrm{min}}|$ 和 $|\eta_{\mathrm{max}}| \geq |\lambda_{\mathrm{max}}|$.

因此,除非您的窗口是恒定幅度窗口,否则复合算子 $FW$ 的特征值的幅度不是恒定的,并且不能重新调整为 1。因此,在这种情况下,您总是可以找到两个不同的输入信号,其幅度发生了变化不同,排除单个归一化因子的可能性。

或者就像我上面评论的那样:窗口傅立叶变换不是(通常)单一的。

但是,您可能要考虑这个问题是否是一个明智的开始。出于所有实际目的,您希望保留窗口信号的能量。傅里叶变换的单一性仍然保证了这一点。

[编辑:20180307,扩展了一些细节] Globaly no,加窗不影响Parseval 定理(因为定理只在不满足假设时才会受到影响,更准确地说是不适用),因为能量相等与信号相关(加窗 $x_w$ 或不加窗,分别为 $x$ 和它的傅里叶变换(来自加窗信号,分别为 $X_w$ 或非 $X$)。用数学术语来说,你有 $\|x\|^2 = \|X\|^2$ 和 $\|x_w\|^2 = \|X_w\|^2$,但一般来说,$\|x \|^2 \neq \|X_w\|^2$。问题是:我们可以简单地纠正它吗?Globaly再次没有,但大致如此,是的。

首先,让我们退后一步。Parseval 定理,有时称为 Rayleigh 恒等定理或能量定理,是更通用的定理Plancherel 定理的一部分,它本身与Bessel 不等式有关:在希尔伯特空间中,如果 $e_{1},e_{2},\ldots$是正交序列,$\left\langle\cdot,\cdot\right\rangle$ 是标量积,则:

$$\sum _{k=1}^{\infty }\left\vert \left\langle x,e_{k}\right\rangle \right\vert ^{2}\leq \left\Vert x\right \垂直 ^{2}\,.$$

这里的主要信息是,即使对于正交变换,也不允许能量保存。

傅里叶变换有多种形式:连续、离散时间、离散、傅里叶级数等等。对于第一个,它们的性质意味着,对于(许多)傅里叶变换,贝塞尔等式确实是一个等式(对函数有温和的假设)。

这在应用程序及其相关算法中非常重要。用更简单的话来说:每当从傅立叶域(过滤、反卷积、恢复等)中删除一些东西时,s(h)e 就会在原始域(时间、空间)中删除相同的东西。能量守恒,即使是近似的,在算法稳定性、逆等方面也起着重要作用。

回到窗口,它们在信号处理中的用途非常广泛:切趾数据、限制伪影、为非平稳信号提供近似平稳性、减少泄漏、产生运行/短时变换、允许并行处理等。

那么,目前的问题是,因为是窗口,它的影响是什么?跨度很大。一个统一的窗口可能影响不大。一个非常集中的窗口会产生巨大的影响,因为它只会集中在一些信号样本上,重要的是不是。

简单来说:取一个统一的窗口,不影响样本,保留Parseval-Plancherel。取一个空窗口,除了一个样本,能量可能会有很大差异,具体取决于窗口所在的位置。在极端情况下,如果您应用零窗口,则信号将为零,能量为零,因此您确实保留了原始信号的能量。不知何故,窗口效应与窗口形状和信号的属性有关。

现在,当一个是滑动窗口时,就像在时频/多速率滤波器组处理中一样,最后的每个样本都会看到窗口通过,并获得相等的幅度份额。对于正确选择的窗口(具有单位能量),更容易应用校正因子。

对于单个信号帧,结果将很大程度上取决于信号/窗口。让我们专注于离散信号 $x$ 和给定窗口 $w$。

对于 FFT 端,窗口是统一的,信号能量与 FFT 版本之间的关系是线性的,如下图所示:

clear;close all;
nSample = 16^2;
nRealization =16^2 ;
nRandWindow = 2^6;

matrixResultSignalEnergy = zeros(nRealization,1);
matrixResultFourierEnergy = zeros(nRealization,1);
matrixResultFourierEnergyRandWindow = zeros(nRealization,1);

for iRealization = 1:nRealization
    data = randn(nSample,1);
    dataFFT = fft(data);
    matrixResultSignalEnergy(iRealization) = norm(data).^2;
    matrixResultFourierEnergy(iRealization) = norm(abs(dataFFT)).^2/nSample;
    for  iRandWindow = 1:nRandWindow
        randWindow = rand(nSample,1);
        randWindow = randWindow/norm(randWindow);
        matrixResultFourierEnergyRandWindow(iRealization,iRandWindow) = norm(abs(fft(data.*randWindow))).^2/nSample;
    end
end

figure(1);clf;hold on
plot(matrixResultSignalEnergy,matrixResultFourierEnergy,'x');
xlabel('Signal energy');
ylabel('Fourier energy');
grid on;axis tight



figure(2);clf;hold on
% errorbar(matrixResultSignalEnergy,(matrixResultFourierEnergy),std(matrixResultFourierEnergy));
errorbar(matrixResultSignalEnergy,mean(matrixResultFourierEnergyRandWindow,2)*nSample,std(matrixResultFourierEnergyRandWindow')/sqrt(nSample),'.');
grid on;axis tight
    grid on;axis tight

详情如下。对于统一窗口,相关性是严格线性的:

在此处输入图像描述

所以,没什么大不了的。但是对于非统一窗口,会发生什么?对于高斯随机数据,以及从正随机、单位能量均匀分布中绘制的窗口,您会得到:

在此处输入图像描述

因此,稍微分散的云告诉您,一般情况下,没有一个因素可以应用来通过窗口保存能量,尽管这种关系接近线性。

在实践中,您可以使用更平坦的窗口,这可以减少因窗口而失真的样本部分(在边缘处)。突袭余弦窗口在此选项中可能很有用。

另一方面,DSP 人员开发了补偿幅度或能量变化的技术,如下所述:

使用窗口 $w[n]$ 对数据 $x[n]$ 进行窗口化等效于对数据的平方(或平方大小)$\Big|x[n]\Big|^2$ 进行窗口化,与窗口的平方$w^2[n]$。因此,可以将窗口 $w^2[n]$ 的这个正方形视为另一个窗口。

现在随机您的典型平方样本 $x^2[n]$ 将有一些预期的均方。我们使用的符号是左侧或右侧:

$$ \overline{\Big|x[n]\Big|^2} = \mathscr{E}\Big\{ \Big|x[n]\Big|^2 \Big\} $$

如果 $x[n]$ 是真正具有均值和方差的随机数据,我们可以说均方为 $ \overline{\Big|x[n]\Big|^2} $。

现在,只有当 $x[n]$ 与窗口 $w[n]$ 相比且独立于窗口 $w[n]$ 足够随机时,这才是正确的:

$$\begin{align} \overline{\Big|w[n] \cdot x[n]\Big|^2} &= \overline{ w^2[n] \cdot \Big|x[n]\大|^2 } \\ &= \overline{w^2[n]} \cdot \overline{ \Big|x[n]\Big|^2 } \\ \end{align}$$

然后:

$$ \begin{align} \sum_{n=0}^{N-1} \overline{\Big|w[n] \cdot x[n]\Big|^2} &= \overline{w^2 [n]} \cdot \sum_{n=0}^{N-1}\overline{ \Big|x[n]\Big|^2 } \\ &= \overline{w^2[n]} \ cdot \frac{1}{N} \sum_{k=0}^{N-1} \Big| X[k] \Big|^2 \\ \end{align} $$

在哪里

$$ \overline{w^2[n]} = \frac{1}{N} \sum_{n=0}^{N-1} w^2[n] $$

此缩放功能基于 $x[n]$ 是随机的且独立于窗口 $w[n]$ 的假设。与任何明显的 $x[n]$ 周期相比,随着窗口宽度(即 $N$)变大,它实际上是您的特定应用程序的近似值。