两步搞定经验模态分解与离散小波变换

参考文章:

原文链接:https://zhuanlan.zhihu.com/p/19763358

1 前言——傅里叶变换和短时傅里叶变换

  • 经验模态分析和离散小波变换都是针对于傅里叶变换和短时傅里叶变换的缺点提出来的!

1.1 频域

上图是时域,下图是频域。
在这里插入图片描述

  • 贯穿时域与频域的方法之一,就是傅里叶分析。
  • 傅里叶分许可以分为:傅里叶级数和傅里叶变换。

1.2 傅里叶级数的频谱

在这里插入图片描述
在这里插入图片描述

  • 不仅仅是矩形,其实任意波形都是可以用这种方式,用正弦波叠加起来的。

在这里插入图片描述

1.3 举个例子

所以很多在时域看似不可能做到的数学操作,在频域相反很容易。这就是需要傅里叶变换的地方。尤其是从某条曲线中去除一些特定的频率成分,这在工程上称为滤波,是信号处理最重要的概念之一,只有在频域才能轻松的做到。
在这里插入图片描述

2 正文

  • 傅里叶变换对时间不是很敏感
  • 短时傅里叶变换,使用了窗口,假定窗口内的是稳定信号;缺点:窗口的宽度是无法改变的
  • 小波变换:很好的应对时变的、非稳态的数字信号

在这里插入图片描述

  • 我大概就学到这里了,我就直接去看代码了

3 代码

import numpy as np
import pandas as pd
import pywt
from skimage.restoration import denoise_wavelet  # 小波去噪的一个包
import matplotlib.pyplot as plt


# x 是序列数据,是numpy类型的

x = x.astype(float)/np.max(x) # 除以最大值是为了均值化
x = x[1000:1200]

sigma = 0.05
x_noisy = x + sigma * np.random.randn(x.size)

x_denoise = denoise_wavelet(x_noisy, method='BayesShrink', mode='soft', wavelet_levels=3, wavelet='sym8', rescale_sigma='True')

plt.figure(figsize=(20, 10), dpi=100)
plt.plot(x_noisy)
plt.plot(x_denoise)
plt.show()

猜你喜欢

转载自blog.csdn.net/weixin_42521185/article/details/125294357