小波变换简介

傅里叶变换无法提供频率随时间变化的信息,而小波变换解决了这一问题,提供了一种查看信号时频关系的方法。通过缩放因子和平移参数,小波变换能揭示信号中不同频率成分在何时出现,且在Python中可以使用相关库实现连续和离散小波变换。
摘要由CSDN通过智能技术生成

本文链接个人站 | 简书 | CSDN
版权声明:除特别声明外,本博客文章均采用 BY-NC-SA 许可协议。转载请注明出处。

1. 傅里叶变换的局限性

傅里叶变换只能得到一个信号包含哪些频率成分,但无法从频域上得知信号在不同时间的频率信息,因此对频率会随着时间而改变的信号是无能为力的。举例来说:

import numpy as np
import matplotlib.pyplot as plt
from scipy.fftpack import fft

t = np.linspace(0, 1, 400, endpoint=False)
cond = [t<0.25, (t>=0.25)&(t<0.5), t>=0.5]
f1 = lambda t: np.cos(2*np.pi*10*t)
f2 = lambda t: np.cos(2*np.pi*50*t)
f3 = lambda t: np.cos(2*np.pi*100*t)

y1 = np.piecewise(t, cond, [f1, f2, f3])
y2 = np.piecewise(t, cond, [f2, f1, f3])

Y1 = abs(fft(y1))
Y2 = abs(fft(y2))

plt.figure(figsize=(12, 9))
plt.subplot(221)
plt.plot(t, y1)
plt.title('signal_1 in time domain')
plt.xlabel('Time/second')

plt.subplot(222)
plt.plot(range(400), Y1)
plt.title('signal_1 in frequency domain')
plt.xlabel('Frequency/Hz')

plt.subplot(223)
plt.plot(t, y2)
plt.title('signal_2 in time domain')
plt.xlabel('Time/second')

plt.subplot(224)
plt.plot(range(400), Y2)
plt.title('signal_2 in frequency domain')
plt.xlabel('Frequency/Hz')

plt.tight_layout()
plt.show()

图1. 傅里叶变换无法应对频率随时间变化的信号
从时域上看相差很大的两个信号,在频域上却非常相近。无法从傅里叶变换得到的频域里得知某个频率是在哪个时间出现的。

一个很自然的思路是加窗,将长时间信号分成数个较短的等长信号,然后再分别对每个窗进行傅里叶变换,从而得到频率随时间的变化,这就是所谓的短时距傅里叶变换。这个做法的缺陷在于,窗函数越宽,频率的分辨率越好,但时间分辨率越差;反之,当窗函数越窄,时间的分辨率越好,但频率分辨率越差。

2. 连续小波变换

小波变换则可以解决这个问题。图2是对图1中的两个信号分别进行小波变换得到的时频关系。从图中不仅可以看到信号中有哪些频率,还可以看到不同的频率成分在什么时间出现。

图2. 小波变换能给出时频关系

小波函数定义为
ψ a , b ( t ) = 1 a ψ ( t − b a ) \psi_{a,b}(t) = \frac{1}{\sqrt a}\psi\left(\frac{t-b}{a}\right) ψa,b(t)=a 1ψ(atb)

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值