小波变换之离散小波变换

离散小波变换(DWT)

(DiscreteWaveletTransform, DWT)离散小波变换是一种近似的小波变换方法,将信号分解成不同尺度的近似系数和细节系数。DWT使用离散的小波函数和离散的时间尺度,通过滤波和下采样操作来实现信号的分解。通常,DWT将信号分解为一组高频低频子信号。

关于dwt,matlab官方文档中,给出了wavedec小波分解函数使用图解,对于信号X,通过小波变换后(带通滤波器)分解为一个高通滤波器和一个低通滤波器串联,进而分解出相对高通系数cD1和近似系数cA1,再将近似系数分解为相对高通系数cD2和近似系数cA2,进一步分解为cD3和cA3,如下图所示,为3层小波分解
在这里插入图片描述
离散小波变换的一级分解公式如下:
A 1 ( n ) = ∑ k f ( k ) ∗ h ( k − n ) D 1 ( n ) = ∑ k f ( k ) ∗ g ( k − n ) A_1(n)=\sum_k f(k) * h(k-n) \\ D_1(n)=\sum_k f(k) * g(k-n) A1(n)=kf(k)h(kn)D1(n)=kf(k)g(kn)
其中: A 1 ( n ) A_1(n) A1(n)是低频( 近 )系数。 D 1 ( n ) D_1(n) D1(n)是高频( 细节 )系数。 h ( k ) h(k) h(k) g ( k ) g(k) g(k)分别是小波分析滤波器的低通和高通滤波器系数。离散小波变换允许信号在不同尺度上的分解和重构,以便分析不同频率成分。
调用格式如下;

[c,l] = wavedec(signal,n,wavename)

其中c为输出的近似系数细节系数,l表示了各部分信号的长度,signal为待处理信号,n表示分解层数,wavename为使用的小波函数名称,其中c和l的排列顺序在图中已给出了说明。
该函数采用了离散正交化小波变换分解,所谓正交化即保证每一次分解后的数据长度不变。
示例代码

% 生成信号
Fs = 1000; % 采样频率
t = 0:1/Fs:1-1/Fs; % 时间向量
x = cos(2*pi*50*t) + cos(2*pi*120*t); % 原始信号

% 进行小波变换
wname = 'db4'; % 小波名称
level = 3; % 分解级数
[C,L] = wavedec(x,level,wname); % 小波分解

% 提取近似系数和细节系数
A = cell(1,level);
D = cell(1,level);
for i = 1:level
    A{i} = wrcoef('a',C,L,wname,i); % 近似系数
    D{i} = wrcoef('d',C,L,wname,i); % 细节系数
end

% 绘制结果
figure;
subplot(level+1,1,1);
plot(t,x);
title('原始信号');

for i = 1:level
    subplot(level+1,1,i+1);
    plot(t,A{i},t,D{i});
    title(['近似系数和细节系数(级别 ' num2str(i) ')']);
    legend('近似系数','细节系数')
end

结果图:在这里插入图片描述
另一种使用方法:

% 生成信号
Fs = 1000; % 采样频率
t = 0:1/Fs:1-1/Fs; % 时间向量
x = cos(2*pi*50*t) + cos(2*pi*120*t); % 原始信号

% 进行小波变换
wname = 'db4'; % 小波名称
level = 3; % 分解级数
[C,L] = wavedec(x,level,wname); % 小波分解
plotDetCoefHelpper(x,C,L);%借助绘图帮助函数

function plotDetCoefHelpper(signal,C,L)
m = length(L);      %记录近似系数和细节系数的个数,level+1
subplot(m,1,1)
plot(signal);       %绘制原始信号
title("original signal")
sum = 0;
for i = 1:m-1
    subplot(m,1,i+1)
    if i == 1
        plot(C(1:L(i)));%绘制近似系数
        title('Approximation Coefficients')
    else
        sum=sum+L(i-1);
        plot(C(sum+1:L(i)+sum));%绘制细节系数
        title(['Level ' num2str(i-1) ' Detail Coefficients']);        
    end
end
end

输出结果如下:
在这里插入图片描述

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值