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

4
我有一个从0.20毫秒到0.40毫秒的音调脉冲信号。在0到0.20毫秒和0.40毫秒到3.27毫秒之间,它为零。我进行了傅里叶变换,显示出大约25 kHz的频率内容。fft点数为32768,这也是时域信号的长度。
我正在尝试使用以下代码片段在Matlab中绘制谱图。
nfft = 32768;
dT = 1e-6;
fs = 1/dT;
window = hamming(nfft)
spectrogram(signal,window,[],nfft,fs)

使用这个工具可以得到准确的频率描述,但时间轴存在问题。
时间域信号放大后:

https://istack.dev59.com/gM2xw.webp

25kHz的频谱图:

enter image description here


什么是 signal - Paolo
1个回答

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])

enter image description here

enter image description here

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接