首页 > 解决方案 > 有没有办法将频谱图反转回信号

问题描述

在我的算法中,我创建了一个频谱图并对数据进行了操作:

import scipy.signal as signal

data = spio.loadmat(mat_file, squeeze_me=True)['records'][:, i]
data = data- np.mean(data)
data = data/ np.max(np.abs(data))
freq, time, Sxx = signal.spectrogram(data, fs=250000, window=signal.get_window("hamming", 480), nperseg=None, noverlap=360, nfft=480)
// ...
// manipulation on Sxx
// ...

有没有办法将频率、时间和 Sxx 恢复为信号?

标签: pythonaudioscipyfftspectrogram

解决方案


不,这是不可能的。要计算频谱图,请将输入时域信号划分为(半重叠)数据块,每个数据块乘以适当的窗口函数,然后执行FFT,它会为您提供一个表示幅度和每个频率仓的相位。频谱图的每一列最终都是通过取一个 FFT 的绝对平方来形成的(通常你会丢弃负频率,因为 PSD 对于真实输入信号是对称的)。通过取绝对平方,您将丢失任何相位信息。这使得无法准确地重构原始时域信号。

由于您的耳朵不关心相位信息(您的大脑会感觉到类似于频谱图的东西),因此可能可以重建听起来大致相同的信号。这基本上可以通过反向执行所有描述的步骤来完成,同时为 FFT 选择一个随机相位。

请注意,您的代码存在一个问题:您创建了一个名为 的变量signal,它“遮蔽”了您以相同名称导入的 scipy.signal 模块。


推荐阅读