簡體   English   中英

關於在matlab中使用譜圖函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM