(翻译版) 小波变换在机器学习简单应用

一 简介

A guide for using the Wavelet Transform in Machine Learning

傅里叶变换是将一个信号从时域变换到频域当中。频谱中的峰值对应最佳频率。该峰值越大越锋锐,则说明该对应频率在信号中的常见。频域中,峰值发生的位置(频率值)和高度(幅值),可以当做分类器(随机森林、梯度推进)的输入。

这种简单的分析法,在很多分类问题中应用出奇的好。

傅里叶变换的一般适用原则是,频率谱相当的稳定。即,该频率的发生和时间轴没有关系,如果一个信号包含一个频率\(x \rm Hz\),则该频率在该信号中的各个时段都有发生。
这个信号动态变化,或者不稳定时,该傅里叶变换法将会失效。一个更好的方法是使用小波变换替代傅里叶变换。

二 理论部分

2.1 从傅里叶变换到小波变换

傅里叶变换是将将信号与一系列不同频率的正弦信号点乘。如果乘积值大,则说明,该频率的信号包含在待测信号中。傅里叶变换在频域有很高的分辨率但是在时域为零。这就意味着,傅里叶变换可以识别信号所含频率,但是无法确定该频率的在时域的位置。

点击查看代码
clear all

t_n = 1
N = 1000
T = t_n / N
f_s = 1/T

xa = linspace(0,t_n,N);
xb = linspace(0,t_n/4,N/4);

frequencies = [4 30 60 90]

ya = sin(2*pi*frequencies(1)*xa) + sin(2*pi*frequencies(2)*xa) ...
    + sin(2*pi*frequencies(3)*xa) + sin(2*pi*frequencies(4)*xa);

yb1 = sin(2*pi*frequencies(1)*xb);
yb2 = sin(2*pi*frequencies(2)*xb);
yb3 = sin(2*pi*frequencies(3)*xb);
yb4 = sin(2*pi*frequencies(4)*xb);

yb = [yb1,yb2,yb3,yb4];



fya = fft(ya);
fyb = fft(yb);
f_list = (0:length(fya)-1)*f_s/length(fya);


figure
subplot(2,2,1)
plot(xa,ya);
subplot(2,2,3)
plot(xa,yb)
subplot(2,2,2)
plot(f_list,abs(fya))
subplot(2,2,4)
plot(f_list,abs(fyb))

image

从上图可以看出,傅里叶变换对动态频域变换效果很差。为解决这个问题,科学家提出短时傅里叶变换。在短时傅里叶变换中,原始信号通过使用窗函数,被切割成等长度信号。通过不同时段的切割,得知不同信号频率发生的时段。

根据不确定法则,窗函数越小,时域分辨率越高,频域信号分辨率下降;反之亦然。

对于动态频率变换信号,小波变换是一种更好的选择。小波变换可以同时在时域和频域获得很好的分辨率。
image

小波变换:

  1. 低频时,在频域有高分辨率,时域低分辨率。
  2. 高频时,在频域有低分辨率,时域高分辨率。
    换句话说,小波变换平衡时域频域关系。

2.2 小波变换原理

傅里叶变换使用一系列不同频率正弦波来分析一个信号。即,一个信号可以通过正弦信号的线性叠加来复现。小波变换使用一系列不同比例(scale)的小波。正弦波和小波的不同在于:正弦波在时间轴上无落点,小波是可以定位在时间轴上。这个特性让小波变换可以同时获得时域和频域信息。

小波和原始信号从头至尾的点乘过程,也称之为卷积。通过对母波scale范围改变,获得不同的卷积结果。
小波变换将一维信号变成二维信号。这个二维信号是一个 time-scale 代表性量图。scale是为了和傅里叶变换的的frequency做区分。如果觉得frequency比scale更加直观,可以用下面的等效公式:
\(f_{a}=\frac{f_{c}}{a}\)
这里\(f_{a}\)是等效频率,\(f_{c}\)是母波核心频率,\(a\)是scale因子。\(a\)增大导致频率降低,我们可以更加清楚的分辨小频率的信息,即,频域分辨率增加。

2.3 不同类型小波族

小波族之间的区分在于,它们要在紧致和平滑性之间做一个平衡。这意味着,我们可以选一个特定的小波簇,更好的适应我们的信号。
只要满足两个条件,就可以是小波:首先是标准化,其次是正交化。
一个小波必须1.有限能量。2.平均值为0.有限能量意味着小波和信号之间的积分是存在。均值为零,意味着时域和频域都为零,这样,小波变换和反变换都可以被计算。
另外:
小波可以正交,也可以不正交.orthogonal
小波可以双正交,也可以不。bi-orthogonal
小波可以对称,也可以不。symmetric
小波可以试试复数也可以是实数。如果小波是复数,则,实数部分表示幅值部分,虚数部分表示相位。
小波必须标准化,可以是的能量单元化。

dbN小波中,N表示消失矩的个数。因此db3有三个消失矩。消失矩的个数和逼近次数以及小波平滑性相关。如果一个小波有p个消失矩,这个小波可以线性逼近p-1次。

2.4 连续变换和离散变换

连续小波变换可以写成:
\(X_{w}(a,b)=\frac{1}{|a|^{\frac{1}{2}}}\int_{-\infty}^{\infty}x(t)\psi (\frac{t-b}{a})dt\)
这里\(\psi(t)\)是连续变换的母波,母波可以通过\(a\)实现连续scale变换,通过\(b\)实现时移。这里两个参数值都是连续变换\(a=1.3,1.31\)等。当变为离散变换\(a=1,2,4...\)\(b=1,2,3...\)只能为整数变化。

2.5离散变换:滤波池

实践上,DWT通常作为一个滤波池。这意味着,DWT是一些低通和高通滤波器。这是因为,滤波池可以将一个信号高效的分为一些子频率带。

应用DWT时,从最小的scale出发,对应最高频率。第二阶段,scale下降两倍\(2^{1}\).第三阶段,下降四倍\(2^{2}\),一直分析到最大分解率为止。

什么是最大分解率。理解这个,我们必须知道,所有紧邻的阶段,都是采样率都是下降至原来的二分之一。当为低分辨率时,你只需要一个小采样来满足奈奎斯特定律。因此,这里没有必要一直保持原来的采样率。

比如,我们要分别一个信号,最高频率达到1000Hz,第一阶段是,信号分为两个部分:高频部分,和低频部分。0-500Hz,500-1000Hz。
第二阶段,将上一阶段低分辨率带继续分解:0-250,250-500
第三阶段,0-125,125-250hz
... 一直进行到最低分辨要求或者没有sample为止。

三 可视化

3.1 连续小波变换的可视化

3.2 使用连续小波变换和一个卷积神经网络对信号分类

随着小波变换将1D 信号转换为2D 尺度函数图,该图包含时域和频域信息。该信息可以用于区分不同信号。

对于一个信号中含有不同维度n,卷积后会有n个尺度图。接下来问题是,如何将尺度图输入到CNN中。

  1. 将n个尺度图,单独输入,最后将结果结合做一个分析。这个方式,将各个尺度之间的联系忽略。
  2. 将n个维度原信号首位相连,形成一个新的尺度函数图。这样会导致在连接处,信号不连续,在尺度函数图中,引入噪声。该噪声在连接处发生。
  3. 分别将n个维度原信号进行CWT,形成的n个尺度函数图首位相连,形成一个整尺度函数图,输入到CNN中。这种问题依然会在连接处不连续,使得CNN输入信号有噪声。当然,如果CNN层数足够,依然可以忽略因为引入噪声导致的问题。
  4. 将形成的尺度函数图首位相连,形成一个整尺度函数图,通过n个CNN的channel来训练。这意味着,与RGB图类似,将会有n通道的kernel function与同一个尺度函数图(CNN输入)进行卷积。

3.5 使用离散小波变换来分类信号

3.5.1 离散小波分类原理

DWT将信号切割成不同频率带,根据需求尽可能的多分。如果不同类型的信号呈现不同的频率特性,这些不同特点将会在一个频率子频带中得以呈现。如果我们从这些子频带中提取特征,并且使用这些特征作为分类器(Random Forest, Gradient Boosting, Logistic Regression, etc) 的输入,并应用这些特征对分类器进行训练。
image

3.5.2 从子频带中提取特征

从子频带中提取的信号特征,总结如下

  • Auto-regressive model coefficient values
  • (Shannon) Entropy values; entropy values can be taken as a measure of complexity of the signal.
  • Statistical features like:
    • variance
    • standard deviation
    • mean
    • median
    • 25th percentile value
    • 75th percentile value
    • Root Mean Square value; square of the average of the squared amplitude values
    • The mean of the derivative
    • Zero crossing rate, i.e. the number of times a signal crosses y = 0
    • Mean crossing rate, i.e. the number of times a signal crosses y = mean(y)

上面列举出一些特征。如果一个信号被分解成\(m\)个不同的子频带,我们从每一个子频带中提取\(n\)个特征,这样,每一个信号就会有\(m* n\)个特征。

3.5.3 使用上面特征和分类器,对信号进行分类。

使用CWT和分类器结合,整体步骤如下。

  1. 首先使用CWT将training set 分解为相应的子频带。
  2. 从子频带中提取相应的特征。
  3. 使用这些特征来训练一个分类器。
  4. 使用训练好的分类器,对testing set 做预测。

使用DWT对信号进行处理,返回一系列系数(coefficients)。对于每一个这样的coefficients,即,每一个子频带,我们使用相应的方程,提取相应的特征。从这些不同子频带提取出来的特征,首位相连,因为它们属于同一个信号。

如果信号有不同的维度,对每一个维度重复步骤1和2,然后,将所有这些维度得到的特征值首位相连,因为它们输入同一个信号。

实践部分

posted @ 2021-10-29 17:45  温酒待君归  阅读(844)  评论(0编辑  收藏  举报
levels of contents