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

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('短时傅里叶时频图');
  • 10
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
以下是利用MATLAB编写提取短时傅里叶变换后的时频脊线的代码: ```matlab % 读取音频文件 [x,fs] = audioread('audio.wav'); % 设定相关参数,包括窗长、窗类型、重叠部分等 win_len = 1024; % 窗长 overlap = 0.5; % 重叠部分 win_type = hamming(win_len); % 窗类型 hop_len = round(win_len * (1-overlap)); % 帧移 nfft = 1024; % FFT点数 f = linspace(0,fs/2,nfft/2+1); % 频率轴 % 进行短时傅里叶变换 [S,F,T] = stft(x,fs,'Window',win_type,'OverlapLength',overlap*win_len,... 'FFTLength',nfft); % 计算时频脊线 thresh = 0.5; % 阈值,用于提取峰值 P = abs(S); % 取幅值 P(P<thresh*max(P(:))) = 0; % 阈值处理 P = P./max(P(:)); % 归一化 dp = diff(P,2); % 计算二阶差分 dpp = diff(dp,2); % 计算四阶差分 [~,I] = findpeaks(dpp); % 寻找极大值 Fp = F(I+1); % 脊线频率 Tp = T(2:end-1); % 脊线时间 % 绘制时频时频脊线 figure; imagesc(T,F,20*log10(abs(S))); axis xy; hold on; plot(Tp,Fp,'r','LineWidth',2); xlabel('Time (s)'); ylabel('Frequency (Hz)'); title('Spectrogram with ridge lines'); colorbar; ``` 其中,`stft`函数是MATLAB自带的短时傅里叶变换函数,可以用于方便地进行短时傅里叶变换。在计算时频脊线时,我们首先对幅度谱应用了阈值处理,然后对二阶差分和四阶差分进行了计算,最后通过寻找极大值来提取时频脊线。绘制时频时频脊线时,我们使用了`imagesc`函数来绘制时频,`plot`函数来绘制时频脊线。
评论 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、付费专栏及课程。

余额充值