马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
我使用小波进行谐波分析,刚开始采用了Mallat多分辨率算法,可是由于2抽取会使数据量大大减小,不利于以后的基频提取,所以现在采用了多孔算法。可是新的问题是分解以后的信号波形不是从横轴坐标零点开始,而是有一个很大的偏移,且这些偏移的数值不是零,这对于我判断信号的起点会造成很大的误差,请问这是小波里的什么问题,如何解决?下面是主要的程序和基波信号的波形:
function[cA,cD]=mytrous(x,dim);
%函数[cA,cD]=MYTROUS(X,DIM)对输入序列x进行一维离散小波分解,输出分解序列[cA,cD]
%输入参数: x---输入序列;
% dim---小波分解级数;
%输出参数:cA---平均部分的小波分解系数;
% cD---细节部分的小波分解系数。
figure(10000)
plot(x);
title('输入信号')
cA=x; %初始化cA,cD
cD=[];
N=length(cA);
l1=wfilters('db5','l')*sqrt(2)/2; %参考低通滤波器
h1=wfilters('db5','h')*sqrt(2)/2; %参考高通滤波器
for i=1:dim
l1_zeros=[l1,zeros(1,N-length(l1))]; %低通滤波器1
h1_zeros=[h1,zeros(1,N-length(h1))]; %高通滤波器1
low=conv(cA,l1_zeros);
high=conv(cA,h1_zeros);
figure(i)
subplot(2,1,1)
plot(real(low));
title('分解信号1')
subplot(2,1,2)
plot(real(high));
title('分解信号2')
cA=low; %下抽样后的平均系数进入下一层分解
cD=[cD,high]; %将本层分解所得到的细节部分系数存入序列cD
l1=dyadup(l1); %原滤波器插值
h1=dyadup(h1); %原滤波器插值
end
file:///D:/1.jpg
[ 本帖最后由 eight 于 2008-5-7 11:13 编辑 ] |