zoukankan      html  css  js  c++  java
  • On the use of spectrogram function in matlab

    from http://stackoverflow.com/questions/19161304/on-the-use-of-spectrogram-function-in-matlab

    Consider the following example:

    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 2from 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)');
    

    The STFT (short-time Fourier transform) here does not demonstrate what I expected. I would have expected the y axis to be the same as the xaxis in subplot(312) and the xaxis to be the same as the xaxis in subplot(311).

    edited Oct 3 '13 at 14:30

    Luis Mendo

    asked Oct 3 '13 at 14:01

    KatyB

    1 Answer

    The issue with the x axis is because you are not specifying the sample frequency when calling spectrogram. Try

    [S,F,T]= spectrogram(y,window,[],[],Fs);
    

    Also, I think you are misinterpreting the window argument. It refers to window shape (by the way you define it, maybe you are thinking it defines the window positions?). So I would use something like

    window = ones(1,10);
    

    (or try window shapes other than rectangular).

    As for the y axis, in 313 the y axis is (instantaneous) frequency, whereas in 312 it is spectral amplitude. So they are not comparable. In principle, you could compare the color (z axis) of 313 with the y axis of 312, as both are spectral amplitude; however, their normalization is probably different.

    edited Oct 6 '13 at 18:55

    answered Oct 3 '13 at 14:24

    Luis Mendo



    修改

     subplot(313);

    %     window = x(1:10:end);

        window = ones(1,80);

       [S,f,t,p] = spectrogram(y,window,[],[],Fs);

       surf(t,f,10*log10(abs(p)),'EdgeColor','none');   

         axis xy; axis tight; colormap(jet); view(0,90);

         xlabel('Time');

         ylabel('Frequency (Hz)');

  • 相关阅读:
    删除 Change Pointers
    如何提高读取BSEG的性能(sap已清项和未清项的提取) (转)
    思维导图FreeMind
    调用BAPI创建发票时报错
    BAPI for Credit Memo
    账页程序源码(PL/SQL)
    ALV Grid 行单击事件响应
    abap 读取文件的FM
    Logistics在SAP中为什么"后勤"的意思(转)
    N次笑N次据说可以让人年轻10岁的故事
  • 原文地址:https://www.cnblogs.com/gisalameda/p/12840614.html
Copyright © 2011-2022 走看看