python 小波变换

Python小波变换

软件包安装

PyWavelets是Python 编程语言的免费开源小波变换软件。

pip install pywavelets

安装完成后结果如下:
pywavelets安装完成

实例

python小波变换的实例

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np
import pywt
from matplotlib.font_manager import FontProperties


sampling_rate = 1024
t = np.arange(0, 1.0, 1.0 / sampling_rate)
f1 = 100
f2 = 200
f3 = 300
data = np.piecewise(t, [t < 1, t < 0.8, t < 0.3],
                    [lambda t: np.sin(2 * np.pi * f1 * t), lambda t: np.sin(2 * np.pi * f2 * t),
                     lambda t: np.sin(2 * np.pi * f3 * t)])
wavename = 'cgau8'
totalscal = 256
fc = pywt.central_frequency(wavename)
cparam = 2 * fc * totalscal
scales = cparam / np.arange(totalscal, 1, -1)
[cwtmatr, frequencies] = pywt.cwt(data, scales, wavename, 1.0 / sampling_rate)
plt.figure(figsize=(8, 4))
plt.subplot(211)
plt.plot(t, data)
plt.xlabel(u"time(s)")
plt.title(u"300Hz 200Hz 100Hz Time spectrum")
plt.subplot(212)
plt.contourf(t, frequencies, abs(cwtmatr))
plt.ylabel(u"freq(Hz)")
plt.xlabel(u"time(s)")
plt.subplots_adjust(hspace=0.4)
plt.show()
print("exit")

python小波变换实例二

import sys

import matplotlib.pyplot as plt
import numpy as np
import pywt

try:
    wavelet = pywt.Wavelet('sym5')
    try:
        level =5# int(sys.argv[2])
    except IndexError as e:
        level = 10
except ValueError as e:
    print("Unknown wavelet")
    raise SystemExit
except IndexError as e:
    raise SystemExit


data = wavelet.wavefun(level)
if len(data) == 2:
    x = data[1]
    psi = data[0]
    fig = plt.figure()
    if wavelet.complex_cwt:
        plt.subplot(211)
        plt.title(wavelet.name+' real part')
        mi, ma = np.real(psi).min(), np.real(psi).max()
        margin = (ma - mi) * 0.05
        plt.plot(x,np.real(psi))
        plt.ylim(mi - margin, ma + margin)
        plt.xlim(x[0], x[-1])
        plt.subplot(212)
        plt.title(wavelet.name+' imag part')
        mi, ma = np.imag(psi).min(), np.imag(psi).max()
        margin = (ma - mi) * 0.05
        plt.plot(x,np.imag(psi))
        plt.ylim(mi - margin, ma + margin)
        plt.xlim(x[0], x[-1])
    else:
        mi, ma = psi.min(), psi.max()
        margin = (ma - mi) * 0.05
        plt.plot(x,psi)
        plt.title(wavelet.name)
        plt.ylim(mi - margin, ma + margin)
        plt.xlim(x[0], x[-1])
else:
    funcs, x = data[:-1], data[-1]
    labels = ["scaling function (phi)", "wavelet function (psi)",
              "r. scaling function (phi)", "r. wavelet function (psi)"]
    colors = ("r", "g", "r", "g")
    fig = plt.figure()
    for i, (d, label, color) in enumerate(zip(funcs, labels, colors)):
        mi, ma = d.min(), d.max()
        margin = (ma - mi) * 0.05
        ax = fig.add_subplot((len(data) - 1) // 2, 2, 1 + i)

        ax.plot(x, d, color)
        ax.set_title(label)
        ax.set_ylim(mi - margin, ma + margin)
        ax.set_xlim(x[0], x[-1])

plt.show()

频谱分析
[1]: https://blog.csdn.net/qq_39516859/article/details/80579071
[2]: https://blog.csdn.net/jacke121/article/details/80196976

  • 3
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值