时频分析matlab

模拟一段信号,分别进行小波变换、短时傅里叶变换、S变换、WV变换,获得其时频图。

% 不同分析方法对比
clear,clc;close all

% 产生chirp信号
fs = 4000;
t = 0:1/fs:1;
s1 = chirp(t,0,1,fs/2,'quadratic');
s2 = chirp(t,0,1,fs/2,'linear');
s3 = sin(2*pi*100*t);
s4 = sin(2*pi*200*t);
s = zeros(size(s1));  % 合成的非线性非平稳信号
s(400:450) = s3(400:450);      % 0.1s-0.1125s
s(650:800) = s3(650:800) + s4(650:800);  % 0.1625s-0.2s
s(800:1000) = s2(800:1000);    % 0.2s-0.25s
s(2000:2800) = s1(2000:2800);  % 0.5s-0.7s

figure(1)
subplot 511
plot(t,s1,'k');title('信号1')
subplot 512
plot(t,s2,'k');title('信号2')
subplot 513
plot(t,s3,'k');title('信号3')
subplot 514
plot(t,s4,'k');title('信号4')
set(0,'defaultfigurecolor','w')
subplot 515
plot(t,s,'k');title('合成信号')
set(0,'defaultfigurecolor','w')

%%信号加噪
SNR = 5;
r2 = randn(length(s),1);                      % 选择白噪声
r2 = r2/sqrt(sum(r2.^2))*sqrt(sum(s.^2)/(exp(SNR/10)));
r1 = r2+s;

% 连续小波变换时频图
wavename = 'cmor3-3';  % cmor是复Morlet小波,其中33表示Fb-Fc,Fb是带宽参数,Fc是小波中心频率。
totalscal = 256;
Fc = centfrq(wavename);  % 小波的中心频率
c = 2*Fc*totalscal;
scals = c./(1:totalscal);
f = scal2frq(scals,wavename,1/fs); % 将尺度转换为频率
coefs = cwt(s,scals,wavename); % 求连续小波系数
figure(2)
subplot 221
imagesc(t,f,abs(coefs)/max(max(abs(coefs))));
set(gca,'YDir','normal')
colorbar;
xlabel('时间 t/s');
ylabel('频率 f/Hz');
title('小波时频图');

% 短时傅里叶变换时频图
% figure
% spectrogram(s,256,250,256,fs);
% 时频分析工具箱里的短时傅里叶变换
f = 0:fs/2;
tfr = tfrstft(s');
tfr = tfr(1:floor(length(s)/2), :);
subplot 222
imagesc(t, f, abs(tfr)/max(max(abs(tfr))));
set(gca,'YDir','normal')
colorbar;
xlabel('时间 t/s');
ylabel('频率 f/Hz');
title('短时傅里叶变换时频图');

% st
[st_fre,st_times,st_frequencies] = st(s,4);
subplot 223
imagesc(t,f,abs(st_fre)/max(max(abs(st_fre))));
set(gca,'YDir','normal')
colorbar;
xlabel('时间 t/s');
ylabel('频率 f/Hz');
title('广义S变换时频图');

% W-V
sig = s;
N=length(sig);
% 归一化
sig=(sig-mean(sig))/std(sig,1);
% 计算伪Wigner-Ville分布
sig = (sig-mean(sig))/std(sig,1);
sig = hilbert(sig);
[tfr0,t0,f0] = tfrpwv(sig');
subplot 224
imagesc(t',fliplr(f),abs(tfr0)/max(max(abs(tfr0))));
colorbar;
axis xy;
xlabel('时间 t/s');
ylabel('频率 f/Hz');
title('W-V分布');

得到时频图:
在这里插入图片描述
请添加图片描述

  • 16
    点赞
  • 104
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

qq-120

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值