MATLAB短时傅里叶变换并绘制时频图

本文介绍了如何使用MATLAB进行脑电图(EEG)数据的短时傅里叶变换分析,通过spectrogram函数计算信号的频率峰值和能量谱密度,并展示时频图。该过程涉及加载数据、设定参数、执行变换及可视化结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

data=load('dataset/rawdata/eegdata4.mat');
Au=data.eegdata(:,1);
Fs = 1200;	
[B, F, T, P] = spectrogram(Au,100,99,100,Fs);   % B是F大小行T大小列的频率峰值,P是对应的能量谱密度
%spectrogram函数返回输入信号的短时傅里叶变换,Au为信号,第一个100为窗函数大小,99为重叠的采样点数,第二个100为计算离散傅里叶变换的点数,Fs为采样频率
figure
imagesc(T,F,P);
%imagesc(T,F,B)
set(gca,'YDir','normal')%设置y轴数值为正常显示
ylim([0,35]);%y轴范围
colorbar;%色标
xlabel('时间 t/s');
ylabel('频率 f/Hz');
title('短时傅里叶时频图');
### 绘制短时傅里叶变换的三维时频图 为了在 MATLAB绘制短时傅里叶变换(STFT)的三维时频图,可以采用两种主要方法:一种是利用内置函数 `spectrogram` 或者较新版本中的 `stft` 函数来获取 STFT 的数据;另一种则是基于这些数据构建三维图形。 #### 使用 `spectrogram` 获取 STFT 数据绘图 通过设置合适的参数选项,可以从 `spectrogram` 函数获得用于创建三维表面图的数据矩阵。具体来说: ```matlab % 设置信号和采样率 Fs = 1000; % 采样频率 (Hz) t = 0:1/Fs:2-1/Fs; x = chirp(t,0,1,150); % 线性扫频信号作为例子 % 计算短时傅立叶变换 windowSize = 128; noverlap = windowSize / 2; nfft = 512; [s,f,t,p] = spectrogram(x,hamming(windowSize),noverlap,nfft,Fs); % 将功率谱密度转换成dB单位 P = 10*log10(p); ``` 接着使用 `surf()` 来制作三维图表,调整视角以便更好地观察结果: ```matlab figure; surf(t,f,P,'EdgeColor','none'); axis tight; view(-45,60); % 修改视点角度以优化显示效果 xlabel('Time (seconds)'); ylabel('Frequency (Hz)'); zlabel('Power/frequency (dB/Hz)'); title('Spectrogram of Chirp Signal Using surf() Function'); colorbar; ``` 此段代码会生成一个具有时间轴、频率轴以及强度表示的颜色条形图,其中颜色深浅代表不同位置上的能量大小[^1]。 #### 利用 `stft` 函数简化流程 对于拥有更新版 MATLAB 的用户而言,可以直接运用更为简便高效的 `stft` 函数来进行相同的操作。这不仅减少了编写额外辅助脚本的需求,而且提高了计算效率。 ```matlab % 对同一组测试数据再次执行操作 [S,F,T] = stft(x,'Window',hamming(windowSize),'OverlapLength',noverlap,... 'FFTLength',nfft,'SampleRate',Fs); % 显示三维图像 figure; waterfall(T,F,abs(S)); shading interp; colormap jet; xlabel('Time (sec)') ylabel('Frequency (kHz)') zlabel('|STFT|') title({'Waterfall Plot Showing Magnitude Spectra Over Time'; ... '(Using |stft| function)'}) c=colorbar; c.Label.String='Magnitude'; set(gca,'YScale','log') % 可选:使y轴变为对数刻度提高可读性 ``` 上述两部分展示了如何分别借助传统方式 (`spectrogram`) 和现代工具 (`stft`) 实现目标——即构造出能够直观反映音频或其他类型波形特征变化过程的三维可视化作品[^3]。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

油泼西红柿

Wish U Thrive

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值