www.pudn.com > mallat_multihole.rar > mallat_multihole.m


function [a, d] = mallat_multihole(s, wname, level, para) 
% 其中s是待分解信号,wname是小波名称,可以取matlab中存在的任何小波,如'bior2.2'等 
%level是分解层数,para是参数,若para='s',那么结果只保留最后一层的a和所有d,都保 
%存在等号左边的a中;若para='a',那么结果保留所有层的a和d,分别保存在等号左边的a和d中 
 
if nargin == 3 
    para = 's'; 
end 
 
N = length(s); 
[h0, h1] = wfilters(wname,'d'); 
 
if para == 's'                      % 保留最后一层的a及各层的d 
    ta = s'; 
    for i = 1:level;                % 逐层分解 
        td = conv(ta,h1); 
        ta = conv(ta,h0); 
        a(i,:) = wkeep(td,N);       % 使分解系数与原信号长度一致 
        h0 = dyadup(h0,0);          % 滤波器二插值 
        h1 = dyadup(h1,0); 
    end 
    a(level+1,:) = wkeep(ta,N); 
elseif para == 'a'                  % 保留各层的a和d 
    ta = s'; 
    for i = 1:level;                % 逐层分解 
        td = conv(ta,h1); 
        ta = conv(ta,h0); 
        d(i,:) = wkeep(td,N);       % 使分解系数与原信号长度一致 
        a(i,:) = wkeep(ta,N); 
        h0 = dyadup(h0,0);          % 滤波器二插值 
        h1 = dyadup(h1,0); 
    end 
else 
    error('Wrong para'); 
end