我在MATLAB中有一个要移植到Python的程序。问题是,在其中我使用了内置的spectrogram函数,尽管matplotlib specgram函数看起来相同,但同时运行这两个函数时却得到了不同的结果。

这些是我一直在运行的代码。

MATLAB:

data = 1:999; %Dummy data. Just for testing.

Fs = 8000; % All the songs we'll be working on will be sampled at an 8KHz rate

tWindow = 64e-3; % The window must be long enough to get 64ms of the signal
NWindow = Fs*tWindow; % Number of elements the window must have
window = hamming(NWindow); % Window used in the spectrogram

NFFT = 512;
NOverlap = NWindow/2; % We want a 50% overlap

[S, F, T] = spectrogram(data, window, NOverlap, NFFT, Fs);

Python:
import numpy as np
from matplotlib import mlab

data = range(1,1000) #Dummy data. Just for testing

Fs = 8000
tWindow = 64e-3
NWindow = Fs*tWindow
window = np.hamming(NWindow)

NFFT = 512
NOverlap = NWindow/2

[s, f, t] = mlab.specgram(data, NFFT = NFFT, Fs = Fs, window = window, noverlap = NOverlap)

这是我在两次执行中都得到的结果:

http://i.imgur.com/QSPvYsC.png

(两个程序中的F和T变量完全相同)

显然,它们是不同的。实际上,Python执行甚至不返回复数。可能是什么问题呢?有什么办法可以解决它,还是我应该使用另一个频谱图函数?

预先非常感谢您的帮助。

最佳答案

matplotlib中,默认情况下specgram返回功率谱密度(mode='PSD')。在MATLAB中,默认情况下spectrogram返回短时傅立叶变换,除非是nargout==4,在这种情况下,它还会计算PSD。若要使matplotlib行为与MATLAB行为匹配,请设置mode='complex'

关于python - MATLAB和Python之间的频谱图不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31101987/

10-12 17:04
查看更多