小波滤波小波基、阈值、阈值函数的选择

1. 小波基的选择:
小波基经典小波函数主要有haar小波、dbN小波、coifN小波、symlet小波、meyer小波等等

选择小波基是常用的指标如下:
(1)正交性
小波基函数的正交性保证了小波变换能够将信号分解到相互正交的各个子空间中,并提高了离散小波变换的计算能力。
(2)紧支性
小波的紧支性使得小波变换能够对具有位置特性的信号进行有效地表示,且小波的支撑越小,其定位的精度越高,局部化能力越强,计算的复杂度越低。在实际应用中,如果小波不是紧支的,那么一般要求该小波是迅速衰减的。一般一个函数不可能满足在时域和频域都是紧支的,通常要求小波基函数在时域上是紧支的,而在频域上是迅速衰减的。
(3)对称性
小波的对称性对应滤波器的线性相位,其反对称性对应滤波器的广义线性相位,而线性相位至少广义线性相位能够避免或减少相位失真,因此理想小波应具有对称性。
(4)正则性
正则性通常用来描述一个小波函数的光滑程度,正则性越强,小波函数越光滑,其频域上的能量越集中,一般而言重构信号也就越光滑。
(5)高阶消失矩
信号越光滑时,消失矩越大,被抑制的小波系数越多,信号的能量越集中,因此,消失矩在利用小波对信号进行压缩、去噪、奇异性检测时是一个非常关键的指标

内容来自
http://kns.cnki.net/KCMS/detail/detail.aspx?dbcode=CMFD&dbname=null&filename=1017142375.NH

2.阈值的选择
对于阈值有好几种,我就用过通用阈值。在此给出通用阈值的python代码,其他的阈值读者自行查阅。

for i in range(1, len(coeffs)):#coeffs为小波分解后的列表
    tmp = coeffs[i].copy()
    Sum = 0.0
    for j in coeffs[i]:
        Sum = Sum + abs(j)
    N = len(coeffs[i])
    Sum = (1.0 / float(N)) * Sum
    sigma = (1/0.6745)*Sum   
lamda = sigma * math.sqrt(2.0 * math.log(float(N), math.e))#lamda为求出的阈值

3. 阈值函数的确定

pywt.threshold(data,value,mode =‘soft’,substitute = 0 )
可参考以下博文
https://blog.csdn.net/zhang0558/article/details/76019832

具体可参考小波官方文件
https://blog.csdn.net/nanbei2463776506/article/details/64124841

  • 11
    点赞
  • 160
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Matlab是一种常用的科学计算软件,它提供了丰富的工具和函数库,用于数据分析、图像处理、信号处理等领域。小波阈值滤波是一种常用的信号处理方法,用于去除信号中的噪声。 在Matlab中,可以使用Wavelet Toolbox来进行小波阈值滤波。以下是一个简单的小波阈值滤波的步骤: 1. 导入信号数据:首先,你需要将待处理的信号数据导入到Matlab中。可以使用`load`函数或者其他相关函数来加载信号数据。 2. 选择小波函数:根据你的需求,选择合适的小波函数。Matlab提供了多种小波函数,如Daubechies、Haar、Symlets等。你可以使用`wfilters`函数来查看可用的小波函数。 3. 进行小波变换:使用`wavedec`函数对信号进行小波变换,将信号分解为多个尺度的小波系数。 4. 选择阈值:根据信号的特性和噪声水平,选择合适的阈值来进行滤波。常用的阈值选择方法有固定阈值于软硬阈值等。 5. 应用阈值:使用`wthresh`函数小波系数进行阈值处理,将小于阈值的系数置零或者进行其他处理。 6. 逆小波变换:使用`waverec`函数对处理后的小波系数进行逆变换,得到滤波后的信号。 下面是一段Matlab代码示例,演示了如何进行小波阈值滤波: ```matlab % 导入信号数据 load('signal.mat'); % 选择小波函数 wavelet = 'db4'; % 进行小波变换 [c, l] = wavedec(signal, 5, wavelet); % 选择阈值 threshold = wthrmngr('dw2ddenoLVL','penalhi',c,l); % 应用阈值 s = wthresh(c, 'h', threshold); % 逆小波变换 filtered_signal = waverec(s, l, wavelet); % 绘制原始信号和滤波后的信号 figure; subplot(2,1,1); plot(signal); title('原始信号'); subplot(2,1,2); plot(filtered_signal); title('滤波后的信号'); ``` 这段代码假设你已经将待处理的信号数据保存在名为`signal.mat`的文件中。你可以根据实际情况修改代码中的参数和文件名。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值