在 Matlabs 最新版本中,该specgram
函数被替换为spectrogram
,并且文档状态:
笔记。要为移除的谱图函数获得相同的结果,请指定长度为 256 的“Hann”窗口。
不幸的是,这似乎对我不起作用,如果我使用spectrogram(signal,hann(256))
,结果与 不同specgram(signal)
,尽管两者非常相似。有没有办法获得完全相同的输出?
在 Matlabs 最新版本中,该specgram
函数被替换为spectrogram
,并且文档状态:
笔记。要为移除的谱图函数获得相同的结果,请指定长度为 256 的“Hann”窗口。
不幸的是,这似乎对我不起作用,如果我使用spectrogram(signal,hann(256))
,结果与 不同specgram(signal)
,尽管两者非常相似。有没有办法获得完全相同的输出?
好吧,我偶然发现了解决方案:
specgram(singal) = spectrogram(signal, hanning(256))
因为hann
和hanning
在 Matlab 中不是一回事。
感谢大家的支持。
我相信它们在每个函数中的计算方式略有不同。这是我能得到的最好的:
sig = rand(1280,1);
Fs = 2;
nfft = 256;
numoverlap = 128;
window = hanning(nfft);
%# specgram
subplot(121), specgram(sig,nfft,Fs,window,numoverlap)
%# spectrogram: make it look like specgram
[S,F,T,P] = spectrogram(sig,window,numoverlap,nfft,Fs);
subplot(122), imagesc(T, F, 20*log10(P))
axis xy, colormap(jet), ylabel('Frequency')
我目前没有尝试使用 Matlab,但hann(256,'periodic')
可能是您正在寻找的。