Matlab中的频谱图-时间轴格式

时间:2019-09-11 06:43:23

标签: matlab signal-processing spectrogram

我有一个从0.20毫秒到0.40毫秒的音调猝发信号。从0到0.20ms,从0.40ms到3.27ms,它为零。我做了fft,它显示了大约25 kHz的频率内容。 fft点的数量是32768,这也是时域信号的长度。

我正在尝试使用以下代码段在Matlab中绘制频谱图

nfft = 32768;
dT = 1e-6;
fs = 1/dT;
window = hamming(nfft)
spectrogram(signal,window,[],nfft,fs)

使用此方法我可以获得准确的频率描述,但是时间轴是个问题。

时域信号放大:

https://i.stack.imgur.com/gM2xw.png

25 kHz时的频谱图:

enter image description here

1 个答案:

答案 0 :(得分:3)

无法获得时域和频域中准确的表示两者。这是傅立叶变换的uncertainty principle

可以执行的操作是通过更改窗口长度来权衡时间和频率分辨率。比较下面两个以不同窗口长度获得的频谱图。信号(图1)与您所提问题类似。

  • 第一个频谱图(图2)使用了一个较长的窗口,该窗口具有良好的频率分辨率,但时间分辨率较差。请注意如何解析10 Hz的信号频率,但是时间信息非常粗糙。
  • 相反,第二个频谱图(图3)使用一个短窗口,该窗口提供了良好的时间分辨率,但频率分辨率却很差。可以看出,信号频率无法解析,但其时间位置和形状更准确。

% Define signal
fs = 500; % sampling frequency
t = 0:1/fs:6; % time axis
fm = 10; % signal (carrier) frequency
s = cos(2*pi*fm*t).* exp(-5*(t-2).^2);
figure
plot(t,s)

% Spectrogram with long window
figure
nfft = 500;
window = hamming(nfft);
spectrogram(s,window,[],nfft,fs), view([90 -90])

% Spectrogram with short window
figure
nfft = 50;
window = hamming(nfft);
spectrogram(s,window,[],nfft,fs), view([90 -90])

enter image description here

enter image description here

enter image description here