在Matlab中实现低通Daubechies小波滤波器

4
我一直在尝试在MATLAB中实现这两个滤波器:

Daubechies 4 非下采样小波3.75 Hz和小波7.5Hz Daubechies 4 非下采样滤波器组7.5 Hz

我已经广泛研究了小波工具箱,但仍然无法确定算法的正确实现方法,以及截止频率的定义。

是否有人有相关经验?

我尝试了以下方法:

movementOut = movementIn;
% Set Daubechies wavelet name.
wname = strcat('db',num2str(order));
% Compute the corresponding scaling filter.
daubechies=dbwavf(wname);
movementOut = filter(daubechies,1,coordinates_values);
%movementOut = filtfilt(daubechies,1,coordinates_values);

我尝试过使用filterfiltfilt,但输出结果非常相似。我正在处理Kinect Z数据(从4.5m变化到1.0m,然后再变化到4.5m),但是我似乎没有看到使用小波时有任何区别。在最先进的方法中,经常使用db4小波。

疑问:

  1. 这个实现是否正确?

  2. 如何设置截止频率?

  3. 如何实现滤波器组?

提前致谢。


没有背景知识的话,很难理解你到底想做什么。你是想低通滤波信号吗?你为什么要应用小波?信号的采样率是多少?你是否打算实时应用滤波器?你有尝试使用更简单的滤波器设计,比如巴特沃斯滤波器吗? - Diphtong
@Diphtong 是的,我想使用db4低通滤波器来定义截止频率。我想应用小波变换,因为我想复制特定作者的最新工作。我的采样频率为200 Hz。该滤波器将用于后处理。我已经实现了巴特沃斯滤波器,并且它们运行良好。我只是找不到适当的解决方案来实现带有截止频率的db4滤波器。 - 16per9
虽然我无法回答你的问题,但我可以给一些建议:Filtfilt 很可能不是一个好主意。此外,如果您想要实现这个小波滤波器,您需要获取一本关于小波的好书,并从基础开始学习。这不是关于实现而是关于基本理解(我也没有)。这个主题对我来说看起来相当困难。它很可能会花费你超过一个月的时间。最后,您应该记住,在数字滤波器中,截止频率取决于采样频率。您应该将截止频率表达为 Nyquist 频率的比例。 - Diphtong
@Diphtong 是的,这就是使用巴特沃斯滤波器进行过滤/滤波的基础知识。你可以根据这些频率计算比率,实现起来非常简单。但出于某种原因,加入截止频率的Daubechies实现似乎不存在(我找不到任何具有常规和验证实现的示例)。 - 16per9
1个回答

0

我不是很清楚你想做什么,但你需要在小波算法中使用小波滤波器。你有小波工具箱吗?它有很好的文档!

小波变换进行带通滤波,因此您可能需要使用另一种算法来实现您的目的。如果您知道输入的采样率,您可以计算上限和下限,以查看信号中的3.75 Hz或7.50 Hz。

请查看this post,其中提供了一些用于快速小波变换(一系列过滤和上/下采样组合)的Matlab脚本链接,如果您没有小波工具箱,可以使用这些脚本。

请注意,快速小波变换确实使用下采样,因此它不是“不可降采样”的。有许多方法可以做到这一点,在小波工具箱中,在WaveLab和其他地方(请参见this paper进行概述)。建议阅读更多相关资料,该论文中的参考文献应该能解决问题。

最后警告:db4这个名称有时用于具有4个系数(2个消失矩)的滤波器,有时用于具有4个消失矩(8个系数)的滤波器!谷歌搜索“Daubechies 4”,你会发现两者都有。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接