我想通过matlab手动编写连续小波变换代码。我想使用复杂的 morlet 函数。以下是一些背景知识:
连续小波变换定义:
S 是尺度向量。例如是时间滑动。\ psi1:60;
psi = ((pi*fb)^(-0.5)).*exp(2*1i*pi*fc.*t).*exp(-t.^2/fb); % for example fb=15;fc=1;
我的离散信号有个点。尺度向量中第一个元素的积分的离散版本是: 这必须计算所有尺度,
最后它必须返回一个具有大小的复杂矩阵。我对编写此代码感到困惑。任何人都可以帮忙吗?
PS我不想使用matlab函数来计算卷积。
提前致谢。这是我的第一次尝试,但它根本不起作用。for s(i)
1:60;
conv2
%% user CWT
clear all
N=300; %sample point numbers
t=linspace(0,30,N);
%% signal
x=5*sin(2*pi*0.5*t); % signal with freq of 0.5 HZ
%% cwt
fc=1;fb=15;
% psi=((pi*fb)^(-0.5)).*exp(2*1i*pi*fc.*...
% t).*exp(-t.^2/fb);
%% convolution Psi([N-n]/S)*x(n) so we calculate convolution(psi(n/s),x(n))
for s=1:60 %scale vector s=[1:1:60]
for i = 1:N % number of discrete times
for k = 1:i
if ((i-k+1)<N+1) && (k <N+1)
PSI = ((pi*fb)^(-0.5)).*exp(2*1i*pi*fc.*...
(t/s)).*exp(-(t/s).^2/fb);
c(i,s) = c(i)+ x(k)*PSI(i-k+1);
end
end
end
end