正如我上一个问题 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,这只是噪音。
最佳答案
在回答您的问题之前,请问您使用哪个库来读取 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/