小波实时滤波的问题
我刚学习小波,时间不长,因为有些数据想尝试用小波处理,但是又觉得不可行,请各位学友不吝赐教。具体是这样的:通常我们用小波降噪都是基于一串数据,整体处理,如阈值法,每次都进行抽取,所以数据点数越来越少,我现在想对一组数据进行实时消噪处理,即:每接收一个数据,立刻得用小波变换对其进行降噪处理。
比如:信号s(n)的处理过程如下:
for i = 1:n
对s(i)进行降噪处理
保存处理结果
end
据说多孔算法可以实时处理,我也看了这个算法,觉得好像不可以这么做。不知是否理解有误。 用非抽样小波变换,就可以避免抽取。
可见杨福生的《小波变换的工程分析与应用》
更详细的可以去看外国外献,就是trous algorithm那篇! 可是我在用MATLAB的SWT时会出现错误:
2^Level has to divide the length of the signal.
*************************************************
??? Error using ==> swt
Too many output arguments.
信号长度显然不对。
clc;
clear all;
load noisbloc;
s = noisbloc;
N = length(s);
for i = 1:N;
= swt(s(i),3,'db1');
end
SWT是一维平稳小波分解,也就是trous算法. 书上说的:( :@(
没有人回吗? 你这个是matlab程序编写的问题
只是对一个点进行SWT,当然不行啊。
使用SWT时,信号的长度好像必须是滤波器长度的2倍以上。
估计不能一点一点的降,应该针对一段数据。 数据长度是2^level次方,level是分解级数
如果我自己写分解重构的代码呢?应该结果是一样的,都是通过滤波器,卷积什么的。。。
谢谢破凰!~~ 个人认为对单个点进行小波变换显然是不现实的,
就算是非抽样的小波变换,也是要交叉计算的。
swt这个连续小波变换也不能做单个点的小波变换。
我觉得应该把以前的点保留下来一起算。
没有其他点的参考,根本不可能知道噪声和原始信号的分界。
另外你看看冗余小波的资料吧,
冗余小波变换在进行分解计算时,信号经过扩展后的高通滤波器和低通滤波器滤波后,不进行隔二抽取运算,直接将滤波后的信号作为逼近信号和细节信号。由于不进行隔二抽取运算,冗余小波变换得到的逼近信号和细节信号与原始信号的长度相同,保留的信号信息更丰富。 a trous也不进行隔二抽取:(
再就是,滤除以后的数值会用来参与其它的计算,实时处理的,所以把以前的点保留下来一起计算的话,应该行不通。
其实我就是想把常规滤波器通带内的噪声去掉。:@( ,本来小波是个很不错的选择,可惜需要实时处理,就变麻烦了。
大侠们有没有好的idea? 声明先:我不懂递归小波变换,看到有论文里说它可以适时计算.
所以我想也许递归小波变换可以考虑!
页:
[1]