用matlab如何做morlet连续复小波分析?

用matlab如何做morlet连续复小波分析?,第1张

标准格式为COEFS=cwt(S,32,'cmor','plot')即对信号S进行最大尺度为32的连续小波变败弊换并作察颂族图,由于使用复morlet小波(cmor)所樱棚以就是连续复小波变换。

这是一个带参数的函数 根据下面的参数校验可以看出你应该是直接点运行了吧 所以报错了

你至少应该产生一个输入信号,比如一个正弦信号来做输入进行变换

。。。谁给你的程序啊 这bug也太多了 很多低级bug 我只是改的能运行了

function [WT,FreqBins,Scales]=CWT_Morlet(Sig,WinLen,nLevel)

%continuous Wavelet Transform using Morlet function

%Sig:信号

%WinLen:小波函数在尺度参数a=1时的长度(默认为10)

%nLevel:频率轴划分区间段(默认为1024)

%

%WT:返回的小波变换计算结果

%FreqBins:返回频率轴划分结果(归一化频率,最高频率为0.5)

%Scales:返回与频率轴划分值相对应的尺度划分(频率0.5对应的尺度为1)世大慧

if (nargin==0),

error('At least 1 parameter required!')

end

if (nargin<3),

nLevel=1024

end

if (nargin<2),

WinLen=10

end

Sig=hilbert(real(Sig))%计算信号的解析信号

SigLen=length(Sig)%获取信号的长度

fmax=0.5%设置最高分析频率

fmin=0.005%设置最低分析频率

FreqBins=logspace(log10(fmin),log10(0.5),nLevel)%将频率轴在分析范围内等

%对数坐标划分

Scales=fmax*ones(size(FreqBins))./FreqBins%计搜答算响应的尺度参数

omg0=WinLen/6

WT=zeros(nLevel,SigLen)%分配计算结果的存储单元

wait=waitbar(0,'Under calculation,please wait')

for m=1:nLevel,

waitbar(m/nLevel,wait)

a=Scales(m)%提取尺度参数

t=-round(a*WinLen):1:round(a*WinLen)

Mor1=pi^(-1/4)*exp(1i*2*pi*0.5*t/a).*exp(-t.^2/2/(2*omg0*a)^2)

%计算当前尺度下的小波函数

temp=conv(Sig,Mor1)/sqrt(a) %计算信号与仿迹小波函数的卷积

WT(m,:)=temp(round(a*WinLen)+1:length(temp)-round(a*WinLen))

end

close(wait)

WT=WT/WinLen

%%%%%%运行示例%%%%%%%%%

Fs=100

t=0:1/Fs:2*pi

sig=sin(t)

[WT,FreqBins,Scales]=CWT_Morlet(sig)

小波分析后,你也没处理,组合起来依然是原信号升伏啊。方差不会变的。你用连续小波变换,得到了1:43尺度下的小波基系数组z(i)。如果你指的是在一定分辨率下,该信号在某个尺度上投射的分量的方差。就用z(i)乘以这个小波φ(τ,σ)基。在睁则用STD求方差呗。吵早携


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12560068.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存