1

考虑以下示例:

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 轴与 subplot(312) 中的 xaxis 相同,而 xaxis 与 subplot(311) 中的 xaxis 相同。

4

1 回答 1

3

x 轴的问题是因为您在调用spectrogram. 尝试

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

另外,我认为你误解了这个window论点。它指的是窗口形状(通过您定义它的方式,也许您认为它定义了窗口位置?)。所以我会使用类似的东西

window = ones(1,10);

(或尝试矩形以外的窗口形状)。

至于y轴,在313中y轴是(瞬时)频率,而在312中是频谱幅度。所以它们没有可比性。原则上,您可以将 313 的颜色(z 轴)与 312 的 y 轴进行比较,因为两者都是光谱幅度;但是,它们的归一化可能不同。

于 2013-10-03T14:24:53.470 回答