• 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)');

  • 相关阅读:
    2019重新起航:搭建个人博客
    Alibaba Nacos:搭建Nacos平台
    ELK:使用docker搭建elk平台
    SpringBoot:关于默认连接池Hikari的源码剖析
    git常用命名:自用,持续更新
    linux常用命名汇总:自用,持续更新
    升级项目版本:SpringBoot1.5.x到SpringBoot2.0.x
    Python学习第十五课——类的基本思想(实例化对象,类对象)
    Python学习第十三课——re(正则表达式)模块
    Python学习第十四课——面向对象基本思想part1
  • 原文地址:https://www.cnblogs.com/gisalameda/p/12840614.html
Copyright © 2020-2023  润新知