python - Scipy 频谱图与 Matlab 频谱图

标签 python matlab python-2.7 scipy signal-processing

正如我上一个问题 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 First 10

Scipy 的最后 10 个元素:

Scipy Last 10

Matlab 代码:

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

Matlab 的前 10 个元素:

Matlab First 10

Matlab 的最后 10 个元素:

Matlab Last 10

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

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

最佳答案

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

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

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

关于python - Scipy 频谱图与 Matlab 频谱图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43375216/

相关文章:

python - 对于自动 python 部署,我需要知道/学习什么?

python - matplotlib:带有圆形补丁的轴默认限制

matlab - 在matlab中,计算一列的一部分的平均值,其中另一列满足条件

matlab - 如何计算总矩阵中1的数量

python - 即使一切都是 unicode ( python 2.7 ),ascii 解码错误

python - 查表并在python中拆分句子

python - 如何根据 Pandas 中的依赖值更新数据框?

c++ - 编码坐标以匹配罗盘方位

Python 以安全的方式关闭文件数组

python - 在没有 `zero` 值的情况下计算 Pandas 中的最小值?