⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mallat_multihole.m

📁 实现多层小波分解系数的全部保留
💻 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 + -