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

Mah*_*ela 4 matlab signal-processing spectrogram

我有一个从 0.20 ms 到 0.40 ms 的音调突发信号。从 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)
Run Code Online (Sandbox Code Playgroud)

使用这个我得到了准确的频率描述,但时间轴是一个问题。

放大时域信号:

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

25 kHz 时的频谱图:

在此处输入图片说明

Lui*_*ndo 5

无法获得在时域和频域中准确的表示。这就是 傅里叶变换的测不准原理

可以通过更改窗口长度权衡时间和频率分辨率。比较下面的两个频谱图,它们是用不同的窗口长度获得的。信号(图 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])
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明