clear;clc
%load('C:\Users\zj\Documents\MATLAB\12xls');
m=xlsread('C:\Users\zj\Documents\MATLAB\Mxls');
X=m(2,:);%输出第2行
%E=E';
%n=size(X);
%s=E(1:n(2));
T=-02:0002:0308;
%T = 0:0001:2;
%X = chirp(T,0,1,150);
[S,F,T,P] = spectrogram(X,256,250,256,1E3);
%surf(T,F,10log10(P),'edgecolor','none'); axis tight;
mesh(T,F,10log10(P)); axis tight;
colorbar;
view(0,90);
xlabel('Time (Seconds)'); ylabel('Hz');CWT可以,CWT是冗余滴可满足采样定理,尺度是连续滴某尺度变换结果是一个向量数组可对应一个频率值,所以可作出时频图。DWT和WP非冗余不能保证一定满足采样定理要求,所以有时要考虑频率混迭,吉布斯效应和平移敏感性等诸多问题,即使不考虑这些,只考虑细节信息与CWT对应,也是带通性质,某层细节实际对应一个频段,而细节结果是一个向量数组对应一段频率,那么如何做时频谱?
看看下面的是不是你要的结果:
clc
clear all
close all
T = 1e5; % 设置信号持续时间
n = 999; % 设置0~T持续时间内采样点数
% 由于你给的程序中用n+1,因此这里实际采样点数为1000
% 上面这两个参数设置的不够大的话,会感觉对最后输出波形影响较大
% 但实际上只是采样位置不同导致的
t = linspace(0,T,n+1); % 信号横坐标
OUT1 = sin(2pi2000t);
OUT2 = sin(2pi4000t);
OUT3 = sin(2pi6000t);
OUT = OUT1 + OUT2 + OUT3;
figure
plot(t, OUT);
grid on
xlabel('t');
ylabel('OUT');
figure
spectrogram(OUT,512,120,256,1e4)
输出波形:
这是python的matplotlib里的一个画wav文件的时频分析(specgram)的函数。和matlab里的那个差不多。使用超级方便,自动就做好了短时傅立叶变换(shorttime fourier
transform)~函数用法具体可参照>下面的回答是DWT的,它也是个没有完全理解小波的二把刀。你要的那是CWT,只有CWT才会谈及“scale”一词,可以用scal2frq函数转换尺度和实际频率,在网上搜索“小波时频图”会有完整的代码。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)