shengsheng 发表于 2010-5-17 11:38

毕设求助,硬阈值去噪

小波自学了很长时间,感觉还是略懂皮毛。毕设做不出来,愁得我寝食难安:'( 。把问题提出来,请各位帮帮忙,万分感谢!
    我用的是一维信号,有用信号是1.25khz,采样频率200khz.假设信号时淹没在高斯白噪声当中。我要做的工作是利用小波把1.25khz的信号提取出来。我每一帧取256个点,采用mallat算法利用db4小波进行5层分解,这样第5层的低频信号就是0-3.125khz.其余所有的小波系数置为零(硬阈值去噪)。然后单支重构,得到滤波后的信号。然后进行FFT变换,取第3个点(200K/256再乘以2得到1.5625Khz,与1.25khz最接近),就是我想得到的近似的1.25Khz的信号。这是我的基于DSP的算法流程。有几个问题不清楚,选择DB4小波基是否合适?信号重构时的硬阈值去噪方法可行么?是说可能有振铃现象伪吉布斯现象,有影响吗?

songjianjiang 发表于 2010-5-17 14:47

为什么只选择256点呢?我计算的时候发现点越多,吉布斯现象越不明显啊!而且你这个应该不算小波去噪吧,单支重构后采用FFT变换的第3个点近似,同直接计算FFT变换取第三个点近似,结果没什么区别。

shengsheng 发表于 2010-5-17 20:17

本帖最后由 wdhd 于 2016-9-21 11:01 编辑

原帖由 songjianjiang 于 2010-5-17 14:47 发表
为什么只选择256点呢?而且你这个应该不算小波去噪吧,单支重构后采用FFT变换的第3个点近似,同直接计算FFT变换取第三个点近似,结果没什么区别。
每一帧取的点太多的话,影响DSP系统整体速度。课题要求必须要用小波,我只想到用来去噪了........

songjianjiang 发表于 2010-5-18 11:45

我用matlab验证过了,代码如下:
t = 1:256;
y = sin(2*pi*t*1.25/200) + randn(1,256);
= wavedec(y,5,'db4');
a5 = wrcoef('a',c,l,'db4',5);
yr = sin(2*pi*t*1.25/200);
plot(t,y,'-k',t,a5,'-r',t,yr,'-b')
验证的结果表明,采用db4小波滤波的效果还是蛮不错的,附图中,黑色的表示原始曲线;红色的滤波后的曲线,蓝色的表示理论曲线。
但是我想说明的是:你的边界延拓一般要采用matlab的方法;同时单支重构后采用FFT变换的第3个点近似,同直接计算FFT变换取第三个点近似结果是严格一致的(用模拟数据计算过),所以你不能用FFT计算的第三个点表示你计算得到的近似的1.25Khz的信号。

[ 本帖最后由 songjianjiang 于 2010-5-18 11:54 编辑 ]

shengsheng 发表于 2010-5-18 13:01

本帖最后由 wdhd 于 2016-9-21 11:01 编辑

原帖由 songjianjiang 于 2010-5-18 11:45 发表
你的边界延拓一般要采用matlab的方法;同时单支重构后采用FFT变换的第3个点近似,同直接计算FFT变换取第三个点近似结果是严格一致的(用模拟数据计算过),所以你不能用FFT计算的第三个点表示你计算得到的近似的1.25Khz的信号。

多谢这位前辈的热心帮助。我经matlab仿真后db4滤波效果是不错,但是相位不好,不过这个关系不大。sym小波效果看起来也不错,在这两者中如何选择有点犯难。Mallat算法我用到了周期延拓。
重构后的信号还是时域上的,如何取出1.25Khz频率上的信号呢?

songjianjiang 发表于 2010-5-19 14:04

db4小波不是对称的,sym小波是对称的,理论上讲sym小波要好一点。如果采用频谱第三个点幅值做1.25khz的信号大小的话,小波去噪失去了本身的价值。要计算1.25khz信号幅值大小,你可以采取重构信号的中间160个点的总值替代幅值——这只是个人意见,权当抛砖引玉了。

shengsheng 发表于 2010-5-19 22:44

本帖最后由 wdhd 于 2016-9-21 11:01 编辑

原帖由 songjianjiang 于 2010-5-19 14:04 发表
你可以采取重构信号的中间160个点的总值 ...
这句话不明白,160个点?为什么呢

songjianjiang 发表于 2010-5-20 09:23

取一个完整周期啊,200Khz采样频率采集1.25kHz的信号,一个完整的周期是160个点。
页: [1]
查看完整版本: 毕设求助,硬阈值去噪