[英]On the use of spectrogram function in matlab
請考慮以下示例:
Fs = 40;% sampling frequency
x = 0:(1/Fs):4;% time domain
y = [sin(2 * pi * 5 * x(x <= 2)), sin(2 * pi * 10 * x(x > 2))];% signal
N = length(x); % Length of signal
NFFT = 2^nextpow2(N); % Next power of 2 from length of y
Y = fft(y,NFFT)/N;
f = Fs/2*linspace(0,1,NFFT/2+1);
% Generate the plot, title and labels.
fh = figure(1);
% set(fh,'color','white','visible','off');
subplot(311);
plot(x,y,'k');
xlabel('Time (s)','FontName','Times New Roman','fontsize',10);
ylabel('Amplitude','FontName','Times New Roman','fontsize',10);
set(gca,'FontName','Times New Roman','fontsize',10);
% # Frequency domain plots
subplot(312);
plot(f,2*abs(Y(1:NFFT/2+1)))
xlabel('Frequency (cycles/second)','FontName','Times New Roman','fontsize',10);
ylabel('Amplitude','FontName','Times New Roman','fontsize',10);
set(gca,'FontName','Times New Roman','fontsize',10);
subplot(313);
window = x(1:10:end);
[S,F,T] = spectrogram(y,window);
pcolor(T,F,abs(S));shading interp;
xlabel('Time (s)');
ylabel('Frequency (cycles/second)');
這里的STFT(短時傅立葉變換)沒有證明我的預期。 我原本期望y軸與子圖(312)中的x軸相同,x軸與子圖(311)中的x軸相同。
x軸的問題是因為在調用spectrogram
時沒有指定采樣頻率。 嘗試
[S,F,T] = spectrogram(y,window,[],[],Fs);
另外,我認為你誤解了window
參數。 它指的是窗口形狀(通過你定義它的方式,也許你認為它定義了窗口位置?)。 所以我會用類似的東西
window = ones(1,10);
(或嘗試除矩形以外的窗口形狀)。
對於y軸,在313中,y軸是(瞬時)頻率,而在312中,它是光譜幅度。 所以他們沒有可比性。 原則上,您可以將313的顏色 (z軸)與312的y軸進行比較,因為兩者都是光譜幅度; 然而,它們的正常化可能不同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.