📄 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -