matlab 中的频谱图 - 时间轴格式
Spectrogram in matlab - time axis format
我有一个从 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)
使用这个我得到了准确的频率描述,但时间轴是个问题。
放大时域信号:
25 kHz 时的频谱图:
您无法 获得时域和频域两者 都准确的表示。这就是傅里叶变换的uncertainty principle。
您可以做的是通过改变window长度权衡时间和频率分辨率。比较下面的两个频谱图,用不同的 window 长度获得。信号(图 1)与您问题中的信号相似。
- 第一个频谱图(图 2)使用长window,它提供良好的频率分辨率但时间分辨率较差。请注意如何解析 10 Hz 的信号频率,但时间信息非常粗糙。
- 相反,第二个频谱图(图 3)使用较短的 window,它提供了良好的时间分辨率但频率分辨率较差。可以看出,信号频率无法解析,但其时间位置和形状更准确。
% 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])
我有一个从 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)
使用这个我得到了准确的频率描述,但时间轴是个问题。
放大时域信号:
25 kHz 时的频谱图:
您无法 获得时域和频域两者 都准确的表示。这就是傅里叶变换的uncertainty principle。
您可以做的是通过改变window长度权衡时间和频率分辨率。比较下面的两个频谱图,用不同的 window 长度获得。信号(图 1)与您问题中的信号相似。
- 第一个频谱图(图 2)使用长window,它提供良好的频率分辨率但时间分辨率较差。请注意如何解析 10 Hz 的信号频率,但时间信息非常粗糙。
- 相反,第二个频谱图(图 3)使用较短的 window,它提供了良好的时间分辨率但频率分辨率较差。可以看出,信号频率无法解析,但其时间位置和形状更准确。
% 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])