Python 有没有办法将光谱图转换回信号

Python 有没有办法将光谱图转换回信号,python,audio,scipy,fft,spectrogram,Python,Audio,Scipy,Fft,Spectrogram,在我的算法中,我创建了一个光谱图,并对数据进行了处理: 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=signa

在我的算法中,我创建了一个光谱图,并对数据进行了处理:

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

否,这是不可能的。要计算频谱图,您需要将输入时域信号分成(半重叠)数据块,每个数据块都乘以适当的值,然后进行计算,得到一个复数向量,指示每个频率单元的振幅和相位。频谱图的每一列最终都是通过取一个FFT的绝对平方来形成的(通常你会丢弃负频率,因为PSD对于实际输入信号是对称的)。如果取绝对平方,则会丢失任何相位信息。这使得不可能精确地重建原始时域信号

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


请注意,您的代码有一个问题:您创建了一个名为
signal
的变量,该变量“隐藏”了以相同名称导入的scipy.signal模块。

原则上是。。。这是傅里叶变换的一个主要优点。。。它总是有一个傅里叶逆变换。。。时域-->频域-->时域-->频域…我有一个项目,我使用它将图像转换为音频,然后从音频转换回与源输入图像匹配的图像。。。振作起来,继续战斗。。。祝你好运,看到了吗