python - 有没有办法将频谱图反转回信号
问题描述
在我的算法中,我创建了一个频谱图并对数据进行了操作:
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,它会为您提供一个表示幅度和每个频率仓的相位。频谱图的每一列最终都是通过取一个 FFT 的绝对平方来形成的(通常你会丢弃负频率,因为 PSD 对于真实输入信号是对称的)。通过取绝对平方,您将丢失任何相位信息。这使得无法准确地重构原始时域信号。
由于您的耳朵不关心相位信息(您的大脑会感觉到类似于频谱图的东西),因此可能可以重建听起来大致相同的信号。这基本上可以通过反向执行所有描述的步骤来完成,同时为 FFT 选择一个随机相位。
请注意,您的代码存在一个问题:您创建了一个名为 的变量signal
,它“遮蔽”了您以相同名称导入的 scipy.signal 模块。
推荐阅读
- typescript - Nuxt/TypeScript:无法访问 - TS2339:类型上不存在属性“XXX”
- python - 在另一个文件中调用类方法时,我们是否必须为 self 提供值?
- go - 如何为 cgo 库(绑定到 C 库的 Go 库)进行内存分析?
- game-physics - 夹具形状尺寸不遵循精灵的
- android-studio - Android模拟器进程被杀死
- javascript - 即使在页面刷新后也保留 URL
- python - 即使指定了steps_per_epoch,自定义生成器也会耗尽数据
- python - AWS 上的 PyautgoGui 收到错误
- python-3.x - 如何在使用 python 的团队中使用电子邮件 ID 获取用户 ID
- python - Python Scraping:如何从具有多个的类中返回单个值?