离散卷积,小demo(小波信号分析)
在信号处理中,卷积是一种数学运算,用于将两个信号(或一个信号与一个滤波器)组合,产生第三个信号。在您的例子中,低通滤波器为 [1,1][1,1],信号假设为 [1,2,3,4,5,6,7,8]。卷积计算的过程涉及将滤波器在信号上滑动,并计算每个位置的点积(即对应元素相乘后求和)。以下是详细的步骤说明:
卷积计算步骤:详细的数学表达
定义滤波器和信号:
滤波器 h=[1,1]h=[1,1](这是一个简单的低通滤波器,用于平滑信号)。
信号 x=[1,2,3,4,5,6,7,8]x=[1,2,3,4,5,6,7,8].
卷积操作:
卷积计算时,滤波器从左到右滑动过信号。对于每个位置 nn,计算滤波器与信号重叠部分的点积。
由于滤波器长度为 2,卷积结果的长度会比信号长度少 1(除非进行填充,但这里没有填充)。
具体计算如下:
当滤波器与信号的前两个元素 [1,2][1,2] 对齐时: 1×1+1×2=31×1+1×2=3
滑动到下一个位置,与 [2,3][2,3] 对齐: 1×2+1×3=51×2+1×3=5
与 [3,4][3,4] 对齐: 1×3+1×4=71×3+1×4=7
与 [4,5][4,5] 对齐: 1×4+1×5=91×4+1×5=9
与 [5,6][5,6] 对齐: 1×5+1×6=111×5+1×6=11
与 [6,7][6,7] 对齐: 1×6+1×7=131×6+1×7=13
与 [7,8][7,8] 对齐: 1×7+1×8=151×7+1×8=15
因此,卷积结果为 [3,5,7,9,11,13,15][3,5,7,9,11,13,15]。
小波变换中,如何使用这一结果:
我们将对一个非常简单的信号进行离散小波变换(DWT)分解,并解释每一步的原理。
假设我们有一个离散信号:s = [1, 2, 3, 4, 5, 6, 7, 8]
Haar小波的尺度函数(父小波)和小波函数(母小波)定义如下:
尺度函数:φ(t) = 1, 当0<=t<1;否则0。
小波函数:ψ(t) = 1, 当0<=t<0.5;ψ(t) = -1, 当0.5<=t<1;否则0。
在离散小波变换中,我们使用两个滤波器:低通滤波器(与尺度函数相关)和高通滤波器(与小波函数相关)。
对于Haar小波,低通滤波器系数为[1/√2, 1/√2],高通滤波器系数为[1/√2, -1/√2]。但在一些实现中,为了简单可能会省略归一化因子(即使用[1,1]和[1,-1]),最后再归一化。
详细的过程:
步骤:
用低通滤波器进行卷积,得到近似系数(approximation coefficients)。
用高通滤波器进行卷积,得到细节系数(detail coefficients)。
对卷积结果进行下采样(通常取偶数位置或奇数位置,这里我们取偶数位置,即步长为2)。
我们以信号s = [1,2,3,4,5,6,7,8]
A1和D1系数获取法:
第一层分解:
低通滤波器(假设为[1,1])与信号卷积:
卷积结果: [1+2, 2+3, 3+4, 4+5, 5+6, 6+7, 7+8] = [3, 5, 7, 9, 11, 13, 15] (注意:这是没有翻转滤波器的卷积,因为Haar滤波器是对称的)
然后我们下采样(取每隔一个点,从第一个开始): [3, 7, 11, 15] -> 这是近似系数(cA1)
高通滤波器(假设为[1,-1])与信号卷积:
卷积结果: [1-2, 2-3, 3-4, 4-5, 5-6, 6-7, 7-8] = [-1, -1, -1, -1, -1, -1, -1]
下采样: [-1, -1, -1, -1] -> 这是细节系数(cD1)
所以,第一层分解后,我们得到:
近似系数cA1: [3, 7, 11, 15] (代表了信号的低频成分,即平滑后的信号)
细节系数cD1: [-1, -1, -1, -1] (代表了信号的高频成分,即细节,这里每个值都是-1,因为信号是线性增加的,所以高频部分(相邻样本的差异)是常数)
注意:在实际中,我们通常会对滤波器系数进行归一化(比如除以√2),以保持能量。这里为了简单没有归一化。
第二层分解:
我们对近似系数cA1 = [3, 7, 11, 15] 进行同样的操作。
低通卷积: [3+7, 7+11, 11+15] = [10, 18, 26] -> 下采样: [10, 26] -> cA2
高通卷积: [3-7, 7-11, 11-15] = [-4, -4, -4] -> 下采样: [-4, -4] -> cD2
所以,第二层分解后,我们得到:
cA2: [10, 26] (更低频的近似)
cD2: [-4, -4] (第二层的细节)
我们对haar小波重构:
重构原理:
重构是分解的逆过程,我们使用重构滤波器对近似系数和细节系数进行上采样和卷积,然后相加。
重构时,我们对近似系数和细节系数分别进行上采样(插入0)然后通过重构滤波器,再将结果相加。
然后,用重构低通滤波器(假设为[1,1])对上采样后的cA1进行卷积(全卷积,不做下采样),得到近似分量的重构信号A1。
同样,用重构高通滤波器(假设为[-1,1])对cD1进行卷积,得到细节分量的重构信号D1。
然后,A1 + D1 就是重构的信号。
但是,注意:卷积的方式和边界处理会影响结果。通常,我们采用卷积后截断到原始长度。
以第一层重构为例:
cA1上采样: [3, 0, 7, 0, 11, 0, 15, 0]
cD1上采样: [-1, 0, -1, 0, -1, 0, -1, 0]
我们计算一下:
对于cA1上采样后信号: [3, 0, 7, 0, 11, 0, 15, 0]
与重构低通滤波器[1,1]卷积(从第一个点开始,步长为1):
第一个点:3*1 + 0*1 = 3
第二个点:0*1 + 7*1 = 7
第三个点:7*1 + 0*1 = 7
第四个点:0*1 + 11*1 = 11
第五个点:11*1 + 0*1 = 11
第六个点:0*1 + 15*1 = 15
第七个点:15*1 + 0*1 = 15
第八个点:0*1 + 0*1 = 0 (注意:最后一个点之后我们假设为0)
所以A1 = [3, 7, 7, 11, 11, 15, 15, 0]
同样,对cD1上采样后信号: [-1, 0, -1, 0, -1, 0, -1, 0]
与重构高通滤波器[-1,1]卷积:
第一个点:(-1)*(-1) + 0*1 = 1
第二个点:0*(-1) + (-1)*1 = -1
第三个点:(-1)*(-1) + 0*1 = 1
第四个点:0*(-1) + (-1)*1 = -1
第五个点:(-1)*(-1) + 0*1 = 1
第六个点:0*(-1) + (-1)*1 = -1
第七个点:(-1)*(-1) + 0*1 = 1
第八个点:0*(-1) + 0*1 = 0
所以D1 = [1, -1, 1, -1, 1, -1, 1, 0]
然后,A1 + D1 = [3+1, 7-1, 7+1, 11-1, 11+1, 15-1, 15+1, 0+0] = [4, 6, 8, 10, 12, 14, 16, 0]
但我们原始的信号是[1,2,3,4,5,6,7,8]。我们发现重构的信号是原始信号的两倍(每个点都是原始信号对应点的两倍)。这是因为我们在分解和重构过程中没有进行归一化。
如果我们使用归一化的滤波器,即分解低通为[1/√2, 1/√2],高通为[1/√2, -1/√2],重构低通为[1/√2, 1/√2],重构高通为[-1/√2, 1/√2](或者另一种常见的做法是分解时用[1,1]和[1,-1],重构时用[1,1]和[-1,1]然后乘以1/2,这样能量才能守恒)。
实际上,完全重构条件要求分解和重构滤波器组满足一定的条件。对于Haar小波,如果我们使用:
分解低通: [1/√2, 1/√2]
分解高通: [1/√2, -1/√2]
重构低通: [1/√2, 1/√2]
重构高通: [-1/√2, 1/√2]
那么重构的信号将与原始信号一致。
正式分析一个简单信号(阶跃信号):
x(t) = [1, 1, 1, 1, 5, 5, 5, 5]
选择小波:Haar小波
Haar小波是最简单的小波,非常适合这个演示:
1、尺度函数 (低通滤波器):φ = [1/√2, 1/√2]
2、小波函数 (高通滤波器):ψ = [1/√2, -1/√2]
小波变换处理步骤
第一步:一级分解
将信号与尺度函数和小波函数进行卷积:
1. 近似系数 (低频部分) - 与尺度函数卷积
原始信号: [1, 1, 1, 1, 5, 5, 5, 5] 与[1/√2, 1/√2]卷积,步长为2: (1+1)/√2 = 2/√2 = √2 ≈ 1.41 (1+1)/√2 = 2/√2 = √2 ≈ 1.41 (5+5)/√2 = 10/√2 = 5√2 ≈ 7.07 (5+5)/√2 = 10/√2 = 5√2 ≈ 7.07近似系数: [1.41, 1.41, 7.07, 7.07]
2. 细节系数 (高频部分) - 与小波函数卷积
原始信号: [1, 1, 1, 1, 5, 5, 5, 5] 与[1/√2, -1/√2]卷积,步长为2: (1-1)/√2 = 0/√2 = 0 (1-1)/√2 = 0/√2 = 0 (5-5)/√2 = 0/√2 = 0 (5-5)/√2 = 0/√2 = 0细节系数: [0, 0, 0, 0]
原理说明:
1、近似系数 捕捉了信号的平滑趋势:前一半 ≈1.41,后一半 ≈7.07
2、细节系数 为0,因为信号在每对采样点内部是常数,没有高频变化
第二步:二级分解
对近似系数 [1.41, 1.41, 7.07, 7.07] 再次分解:
1. 二级近似系数
(1.41+1.41)/√2 = 2.82/√2 = 2.0 (7.07+7.07)/√2 = 14.14/√2 = 10.0二级近似系数: [2.0, 10.0]
2. 二级细节系数
(1.41-1.41)/√2 = 0/√2 = 0 (7.07-7.07)/√2 = 0/√2 = 0二级细节系数: [0, 0]
第三步:三级分解
对二级近似系数 [2.0, 10.0] 再次分解:
1. 三级近似系数 (最终近似)
(2.0+10.0)/√2 = 12.0/√2 ≈ 8.49
2. 三级细节系数 (最终细节)
(2.0-10.0)/√2 = -8.0/√2 ≈ -5.66
最终的小波系数
小波系数 = {近似系数 (A3): [8.49] # 信号的整体平均值细节系数 (D3): [-5.66] # 在尺度3上的主要变化细节系数 (D2): [0, 0] # 在尺度2上的变化细节系数 (D1): [0, 0, 0, 0] # 在尺度1上的变化 }
原理深度解析
1. 多分辨率分析原理
a、尺度3 (最粗糙):看到了信号的整体跳跃 [2.0 → 10.0]
b、尺度2 (中等):看到了两个平稳段 [1.41, 1.41] 和 [7.07, 7.07]
c、尺度1 (最精细):看到了原始信号的8个采样点
2. 突变检测原理
a、在细节系数 D3 = -5.66 中,我们看到了一个很大的非零值
b、这个大的细节系数准确地告诉我们:在粗尺度上有一个显著的变化
c、负号表示变化是从小到大(2.0 → 10.0)
3. 能量压缩原理
原始信号能量: 1²+1²+1²+1²+5²+5²+5²+5² = 1+1+1+1+25+25+25+25 = 104 小波系数能量: 8.49² + (-5.66)² + 0² + ... = 72 + 32 = 104
能量守恒,但大部分能量集中在了少数几个系数中!
这个简单例子完美展示了小波变换的核心思想:用多尺度的"镜头"观察信号,既能捕捉整体趋势,又能检测局部突变,同时实现数据的稀疏表示。
DWT离散小波变换应用:
DWT主要用于信号分解和重构,它的结果是一组分层级的系数集合。
它将信号分解为两大类系数:
近似系数: 代表了信号的低频成分,是信号的“轮廓”或“主干”。它是由低通滤波器产生的。
细节系数: 代表了信号的高频成分,是信号的“细节”或“波动”。它是由高通滤波器产生的。
DWT通常是多层的(多分辨率分析):
第一层:将原始信号分解为 A1(一层近似) 和 D1(一层细节)。
第二层:将 A1 进一步分解为 A2(二层近似) 和 D2(二层细节)。
以此类推...
结果结构:
[A(N), D(N), D(N-1), ..., D2, D1]
其中 N 是分解的层数。
1、A(N) 是最高层(最粗糙)的近似,频率最低。
2、D1 是最底层的细节,频率最高。
可视化:DWT的结果通常用一个子带图来表示,显示了不同频率子带(A3, D3, D2, D1)的能量分布。
这些高频细节点的应用:
特征提取:在某个尺度和时间点出现一个大的系数,可能对应着一个突变点、边缘(在图像中)或特定频率的振动。
信号去噪:噪声通常表现在高频的细节系数中(如D1, D2)。通过将这些较小的系数置零,然后重构信号,就能达到去噪的目的。
数据压缩:大部分细节系数的值可能很小,可以将其忽略或用量化,只保留那些幅值大的系数,从而实现高效压缩(如JPEG 2000图像压缩标准)。
模式识别:特定模式的信号(如心电图中的QRS波)会在小波变换的结果中产生一个独特的系数模式,可以用来进行检测和分类。
总而言之,小波变换的结果将一维的时间信号,映射到了一个能同时揭示其时间局部性和频率局部性的二维或层级表示上,为我们分析非平稳信号提供了强大的工具。