小波变换
相比于STFT(短时傅里叶变化),小波变换可以改变窗口的大小,进而可以进一步分析出信号的高频突发特性,在现实生活中信号处理领域有着更广泛的应用。下面主要介绍了连续小波变换(cwt)和离散小波变换(dwt)。
连续小波变换(CWT)
小波函数
什么是小波?小波的含义,即为时间上衰减快,和傅里叶的正弦波相比要短。
一个典型的morlet小波如下图:
matlab有很多自带的小波函数,利用wavemngr(‘read’,1)可以进行小波的查看,利用waveinfo可以查看小波的相关信息。
在时间域上,可以通过小波在时间上的移动,逐一比较不同位置的窗口信号,得到小波系数,小波系数越大,则证明小波与该段信号的拟合程度越好。小波的波动性可以用复三角函数表达,小则用衰减函数表达,数学上把这种小称为有限支撑。即morlet小波的有限支撑是通过一个指数衰减函数实现的。复三角函数使其能分析频率(和原始信号乘积积分求极大值),衰减函数使其可以定位时间,它们加起来,才使得morlet小波可以用来做时频分析。
计算中用小波函数与该窗口信号的卷积,作为该窗口下的小波系数。窗口的长度和小波的长度是相同的。
在频率域上,通过拉伸或压缩小波的长度,来改变小波的长短和频率,实现不同频率下的小波系数。相应的,窗口长度也会随着小波长度变化。由于高频处小波被压缩,时间窗变窄,使得时间分辨率更高。
将不同频率下的小波系数组合起来,便得到了时频变换的小波系数图。
从图上可以看到,低频处频率分辨率要好于高频处的,但时域分辨率低频处比高频处差,小波时频图的特点为整体呈现高频处高而瘦,低频处矮而宽,也满足测不准原理
小波中,一般用尺度
s
c
a
l
e
scale
scale来衡量小波的频率
f
f
f,两者之间的转换关系为:
s
c
a
l
e
∗
f
=
F
s
∗
ω
c
f
scale∗f=F_s∗\omega c_f
scale∗f=Fs∗ωcf
公式中,
F
s
F_s
Fs代表信号的采样频率,
ω
c
f
\omega c_f
ωcf为小波的中心频率(wave central freq),在matlab里可以用 centfrq(wavename) 来查询。
新版本小波函数的用法
[wt,f] = cwt(x,wname,fs)
使用例子为:
% 定义信号信息
fs=2^6; %采样频率
dt=1/fs; %时间精度
timestart=-8;
timeend=8;
t=(0:(timeend-timestart)/dt-1)*dt+timestart;
L=length(t);
z=4*sin(2*pi*linspace(6,12,L).*t);
%matlab自带的小波变换
%新版本
figure(1)
[wt,f,coi] = cwt(z,'amor',fs);
pcolor(t,f,abs(wt));shading interp
结果如下:
cwt的边缘效应与影响锥
cwt(z)
由于小波计算中,小波系数是利用窗口函数和小波卷积而来的,当窗口在信号的边缘时,窗口内会存在一部分没有信号。这时,matlab就把窗口内这部分不完整的信号补零处理,凑够长度。此时由于信号在边缘被强制补零,导致信号会失真,具体在时频图中表示为频率变宽,信号强度降低。严重的时候,甚至整个低频部分都会出现失真。这就是cwt的边缘效应。
为了确定边缘效应的影响,绘制出了一条影响曲线,曲线内部的信号影响小或者不受影响,曲线外部影响较大。曲线像一个锥形,高频处靠近两侧,低频处靠近中间,所以也被叫做影响锥。
cwt的重构——icwt
如果用的是matlab新版的默认小波,那么可以直接把cwt之后小波系数icwt即可得到时域信号值即可。
load mtlb;
wt = cwt(mtlb);
xrec = icwt(wt);