如何从功率谱中检索原始信号

时间:2018-04-03 08:51:41

标签: matlab signal-processing speech-recognition spectral-density

我已计算出power spectrum的信号。步骤是:

  • 时间信号的FFT
  • FFT的绝对值的平方/信号的长度,即功率谱

现在我想将其转换为时域。我应该遵循哪些步骤。

2 个答案:

答案 0 :(得分:3)

来自频域的原始信号的重建需要幅度和相位信息。因此,当您计算功率谱并仅保持幅度时,您将不再拥有唯一重建原始信号所需的所有信息。

换句话说,我们可以找到不同信号具有完全相同功率谱的示例。在这种情况下,检索哪些不同的信号是 原始信号是不可能的。

作为一个简单的例子,假设原始信号x是:

x = [0.862209 0.43418 0.216947544 0.14497645];

为了论证,让我们考虑一些其他信号y,我为此示例的目的特别制作了:{/ p>

y = [-0.252234 -0.0835824 -0.826926341 -0.495571572];

如下图所示,这两个信号可能看起来完全不相关:

Plots of signals <code>x</code> and <code>y</code>

然而,它们具有相同的功率范围:

f = [0:N-1]/N;
Xf = fft(x,N);
Yf = fft(y,N);
hold off; plot(f, Xf.*conj(Xf)/N, 'b');
hold on;  plot(f, Yf.*conj(Yf)/N, 'r:');
xlabel('Normalized frequency');
legend('Px', 'Py')
title('Power spectrum');

Power spectrum

因此,只看到功率范围并且不知道您是从x开始的人,很可能会猜测您是从y开始的。

也就是说,这些信号具有相同功率谱的事实可以告诉您这些信号并不像您想象的那样无关。事实上,这些信号在时域中也共享autocorrelation function

Rx = xcorr(x);
Ry = xcorr(y);
t = [0:length(Rx)-1] - length(x) + 1;
hold off; stem(t, Rx, 'bo');
hold on;  stem(t, Ry, 'rx');
legend('Rxx', 'Ryy');
xlabel('lag');
title('Autocorrelation');

autocorrelation

这是可以预期的,因为可以通过计算功率谱的逆变换(具有ifft)来获得自相关。但是,这与您在时域中可以恢复的程度差不多。具有这种自相关函数的任何信号都与原始信号的任何信号一样好。如果你非常积极,你可以尝试解决从自相关定义中获得的非线性方程组,并获得可能信号列表。这仍然不足以说明哪一个是原作,并且正如您在比较我的示例xy时所注意到的那样,不会有很多东西要做。

答案 1 :(得分:0)

查看描述时域信号的功率(或幅度)谱的非唯一性的最简单方法是,时域中的白噪声和delta函数具有相同的功率(或幅度)谱——a常数 - 在频域中。