【问题标题】:Is there a way to invert a spectrogram back to signal有没有办法将频谱图反转回信号
【发布时间】:2020-02-13 00:19:03
【问题描述】:

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

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 恢复为信号?

【问题讨论】:

  • 原则上是的......这是傅里叶变换的主要好处......它总是有一个逆傅里叶变换......时域-->频域-->时域- >频域...我有一个项目,我用它来将图像转换为音频,然后从音频转换回与源输入图像匹配的图像...保持下巴并继续战斗...祝你好运

标签: python audio scipy fft spectrogram


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-01
    • 2019-08-07
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多