【问题标题】:Scipy Spectrogram vs Matlab SpectrogramScipy 频谱图与 Matlab 频谱图
【发布时间】:2017-09-08 13:40:09
【问题描述】:

在我上一个问题AttributeError: 'module' object has no attribute 'spectrogram' 中,我正在编写一个小python 脚本,它读取一个Wav 音频文件,计算频谱图并将相应的数据再次写回一个Wav 文件。下面是一段代码:

Scipy 代码:

windowSize = 512
nOverlap_py = 160
nFFT = 1024

Fpy,Tpy,Spy=signal.spectrogram(s_orig_py,fs=fs_rate,window='hamming',nperseg=
windowSize,noverlap=nOverlap_py,nfft=nFFT,detrend=False,mode='complex')

Scipy 的前 10 个元素:

Scipy 的最后 10 个元素:

Matlab 代码:

[S,F,T] = spectrogram(s_orig,window,nOverlap,fftParams.nFFT,fs);

Matlab 的前 10 个元素:

Matlab 的最后 10 个元素:

在这两种情况下,参数都是相同的。只是有一个小问题: Spy 的值甚至不接近 S 的值,我不明白为什么。我知道它们不可能相同,因为这两个函数使用不同的算法来计算 FFT,但正如我之前提到的,它们甚至不接近。

此外,使用 Matlab,生成的 Wav 文件听起来与原始文件“完全相同”。使用 python 只是噪音。

【问题讨论】:

  • scipy 默认 return_onesidedTrue。尝试设置为False 看看你会得到什么。
  • 如果我理解正确,将return_onesided 设置为False 基本上会返回FFT,这就是MATLAB 所做的。否则,您会在关闭奈奎斯特频率之前砍掉所有内容。
  • 如果我的建议有效,我会写一个答案让你接受。
  • @MadPhysicist:不幸的是我得到了和以前一样的结果。
  • 如果你尝试回放结果怎么办?

标签: python matlab python-2.7 scipy signal-processing


【解决方案1】:

在回答您的问题之前,请问您使用哪个库来读取 wav 输入 scipy.io.wavfile?

实际上,我最近遇到了这种值不匹配的问题,并将问题追溯到 scipy.io.wavfile

在 Matlab 中,通常使用 audioread(fname)。等效的读取库是本文中给出的 pySoundfile。 (我也使用它并从 Matlab 和 Python 获得了相同的矩阵) How to read a audio file in Python similar to Matlab audioread?

【讨论】:

    猜你喜欢
    • 2011-03-18
    • 1970-01-01
    • 2021-03-25
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    • 2019-11-09
    • 2018-10-31
    相关资源
    最近更新 更多