大家好,又见面了,我是你们的朋友全栈君。
小波变换和小波阈值法去噪
1. 小波变换
小波变换是一种信号的时间——尺度(时间——频率)分析方法,它具有多分辨分析的特点,而且在时频两域都具有表征信号局部特征的能力,是一种窗口大小固定不变但其形状可改变,时间窗和频率窗都可以改变的时频局部化分析方法。即在低频部分具有较低的时间分辨率和较高的频率分辨率,在高频部分具有较高的时间分辨率和较低的频率分辨率,很适合于分析非平稳的信号和提取信号的局部特征,所以小波变换被誉为分析处理信号的显微镜。
傅里叶是将信号分解成一系列不同频率的正余弦函数的叠加,同样小波变换是将信号分解为一系列的小波函数的叠加(或者说不同尺度、时间的小波函数拟合),而这些小波函数都是一个母小波经过平移和尺度伸缩得来的,如下图。
小波变换常见的形式有连续小波变换(CWT)、离散小波变换(DWT)等。连续小波变换是在尺度基础上连续变换的,做信号的小波分析得到的是幅值,a时间的三维图,对应的a值所截得的曲线即为该尺度的小波图形。而离散小波变换常用的是二进小波变换,对尺度和时间进行离散化处理。
CWT连续小波变换
CWT步骤:
首先选择一个小波基函数,固定一个尺度因子,将它与信号的初始段进行比较;
通过CWT的计算公式计算小波系数(反映了当前尺度下的小波与所对应的信号段的相似程度);
改变平移因子,使小波沿时间轴位移,重复上述两个步骤完成一次分析;
增加尺度因子,重复上述三个步骤进行第二次分析;
循环执行上述四个步骤,直到满足分析要求为止。
连续小波变换是在尺度基础上连续变换的,做信号的小波分析得到的是幅值,a时间的三维图,对应的a值所截得的曲线即为该尺度的小波图形。而集散小波变换常用的是二进小波变换。
但是,cwt的结果都相当于DWT中的细节信息(即所谓DWT中的高频信息。虽然越向后频率越低,有时已不能用“高频”来形容了,但这时的高频是相对概念,是相对于同阶逼近信息还是高的),只是其尺度是连续的尺度越大频率越低,一直低下去。
morlet等小波只能做CWT,有些是因为没法儿构造尺度函数,有些是根本就没有逆变换(只有满足某些条件,CWT才存在逆变换,这与小波基有关),有些是如何离散化也不能构成正交或双正交基,甚至按照二进制的离散化不能构成紧支的框架,所以它们通常不能做DWT,也就没有逆变换、重构一说了。
DWT离散小波变换
多分辨分析也称为多尺度分析,是建立在函数空间概念上的理论。在不同的尺度和时间下,分别构造了尺度函数向量组合小波函数向量组,也即是尺度函数向量空间V与小波函数向量空间W,在一定层次下,信号在尺度空间做卷积所得到的是信号的近似、低频信息,信号在小波空间W做卷积所得到的是信号的细节、高频信息。(注意:尺度与分解层数不是一个概念,尺度与频率成反比的,分解层数是对频率的范围进行一定的划分)。
小波阈值去噪
通常情况下, 我们在从设备上采集到的信号都是具有一定的噪声的,大多数情况下,可认为这种噪声为高斯白噪声。被噪声污染的信号=干净的信号+噪声。
为什么要使用阈值:由于信号在空间上(或者时间域)是有一定连续性的,因此在小波域,有效信号所产生的小波系数其模值往往较大;而高斯白噪声在空间上(或者时间域)是没有连续性的,因此噪声经过小波变换,在小波阈仍然表现为很强的随机性,通常仍认为是高斯白噪的。 那么就得到这样一个结论:在小波域,有效信号对应的系数很大,而噪声对应的系数很小。 刚刚已经说了,噪声在小波域对应的系数仍满足高斯白噪分布。如果在小波域,噪声的小波系数对应的方差为sigma,那么根据高斯分布的特性,绝大部分(99.99%)噪声系数都位于[-3*sigma,3*sigma]区间内(切比雪夫不等式, 3sigma准则)。因此,只要将区间[-3*sigma,3*sigma]内的系数置零(这就是常用的硬阈值函数的作用),就能最大程度抑制噪声的,同时只是稍微损伤有效信号。将经过阈值处理后的小波系数重构,就可以得到去噪后的信号。 常用的软阈值函数,是为了解决硬阈值函数“一刀切”导致的影响(模小于3*sigma的小波系数全部切除,大于3*sigma全部保留,势必会在小波域产生突变,导致去噪后结果产生局部的抖动,类似于傅立叶变换中频域的阶跃会在时域产生拖尾)。软阈值函数将模小于3*sigma的小波系数全部置零,而将模大于3*sigma的做一个比较特殊的处理,大于3*sigma的小波系数统一减去3*sigma,小于-3*sigma的小波系数统一加3*sigma。经过软阈值函数的作用,小波系数在小波域就比较光滑了,因此用软阈值去噪得到的图象看起来很平滑,类似于冬天通过窗户看外面一样,像有层雾罩在图像上似的。
比较硬阈值函数去噪和软阈值函数去噪:硬阈值函数去噪所得到的峰值信噪比(PSNR)较高,但是有局部抖动的现象;软阈值函数去噪所得到的PSNR不如硬阈值函数去噪,但是结果看起来很平滑,原因就是软阈值函数对小波系数进行了较大的 “社会主义改造”,小波系数改变很大。因此各种各样的阈值函数就出现了,其目的我认为就是要使大的系数保留,小的系数被剔出,而且在小波域系数过渡要平滑。
如何估计小波域噪声方差sigma的估计,这个很简单:把信号做小波变换,在每一个子带利用robust estimator估计就可以(可能高频带和低频带的方差不同)。 robust estimator就是将子带内的小波系数模按大小排列,然后取最中间那个,然后把最中间这个除以0.6745就得到噪声在某个子带内的方差sigma。利用这个sigma,然后选种阈值函数,就可以去去噪了,在matlab有实现api可使用。
小波阈值去噪过程
在以上过程中,小波基和分解层数的选择,阈值的选取规则,和阈值函数的设计,都是影响最终去噪效果的关键因素。
通常小波分解的频段范围与采样频率有关。若N层分解,则各个频段大小为Fs/2/2^N 。例如:一个原始信号,经历的时间长度为2秒,采样了2000个点,那么做除法,可得出采样频率为1000hz,由采样定理(做除法)得该信号的最大频率为500hz,那么对该信号做3层的DWT,一阶细节的频段为250-500hz,一阶逼近的频段为小于250hz,二阶细节的频段为125-250hz,逼近的频段为小于125hz,三阶细节的频段约为62.5-125hz,逼近的频段为小于62.5hz。对于更多阶的分解也是以此类推的。
直接影响到重构的信号与真实信号的逼近程度。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/139669.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...