MATLAB 短时傅里叶变换及三维图像可视化
以下代码展示如何在 MATLAB 中对信号进行短时傅里叶变换 (STFT) 并绘制三维图像,以可视化信号的时频特性。
% 生成一个示例信号
Fs = 1000; % 采样率
t = 0:1/Fs:1; % 时间向量
f1 = 10; % 第一个频率成分
f2 = 100; % 第二个频率成分
x = sin(2*pi*f1*t) + sin(2*pi*f2*t); % 信号
% 设置短时傅里叶变换的参数
windowSize = 0.1; % 窗口大小(秒)
window = hamming(round(windowSize*Fs)); % 窗函数
overlap = round(0.9*length(window)); % 重叠样本数
% 计算短时傅里叶变换
[S, F, T] = spectrogram(x, window, noverlap, [], Fs);
% 绘制三维图像
figure;
surf(T, F, 10*log10(abs(S)), 'EdgeColor', 'none');
axis tight;
view(0,90);
xlabel('时间 (秒)');
ylabel('频率 (Hz)');
title('短时傅里叶变换');
colorbar;
这段代码首先生成一个包含两个频率成分的示例信号。然后,使用 spectrogram 函数对信号进行短时傅里叶变换,得到频谱 S,频率向量 F 和时间向量 T。最后,使用 surf 函数绘制三维图像,其中 T 表示横轴时间,F 表示纵轴频率,10*log10(abs(S)) 表示 Z 轴强度(以对数刻度显示)。
原文地址: https://www.cveoy.top/t/topic/v01 著作权归作者所有。请勿转载和采集!