Scipy教程

Scipy FFTpack

Scipy FFTpack详细操作教程
对时域信号计算傅里叶变换以检查其在频域中的行为。 傅里叶变换可用于信号和噪声处理,图像处理,音频信号处理等领域。SciPy提供fftpack模块,可让用户计算快速傅立叶变换。
以下是一个正弦函数的例子,它将用于使用fftpack模块计算傅里叶变换。

快速傅立叶变换

下面来了解一下快速傅立叶变换的细节。
一维离散傅立叶变换
长度为N的序列x [n]的FFT y [k]由fft()计算,逆变换使用ifft()计算。 看看下面的例子
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-27
#Importing the fft and inverse fft functions from fftpackage
from scipy.fftpack import fft
#create an array with random n numbers
x = np.array([1.0, 2.0, 1.0, -1.0, 1.5])
#Applying the fft function
y = fft(x)
print (y)
执行上面示例代码,得到以下结果 -
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-27
[ 4.50000000+0.j 2.08155948-1.65109876j -1.83155948+1.60822041j
 -1.83155948-1.60822041j 2.08155948+1.65109876j]
再看另一个示例 -
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-27
#Importing the fft and inverse fft functions from fftpackage
from scipy.fftpack import fft
from scipy.fftpack import ifft
#create an array with random n numbers
x = np.array([1.0, 2.0, 1.0, -1.0, 1.5])
#Applying the fft function
y = fft(x)
#FFT is already in the workspace, using the same workspace to for inverse transform
yinv = ifft(y)
print (yinv)
执行上面示例代码,得到以下结果 -
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-27
[ 1.0+0.j 2.0+0.j 1.0+0.j -1.0+0.j 1.5+0.j]
scipy.fftpack模块允许计算快速傅立叶变换。 作为一个例子,一个(嘈杂的)输入信号可能看起来如下 -
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-27
import numpy as np
time_step = 0.02
period = 5.
time_vec = np.arange(0, 20, time_step)
sig = np.sin(2 * np.pi / period * time_vec) + 0.5 *np.random.randn(time_vec.size)
print (sig.size)
我们正以0.02秒的时间步长创建一个信号。 最后一条语句显示信号sig的大小。 输出结果如下 -
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-27
1000
我们不知道信号频率; 只知道信号sig的采样时间步长。 信号应该来自实际函数,所以傅里叶变换将是对称的。 scipy.fftpack.fftfreq()函数将生成采样频率,scipy.fftpack.fft()将计算快速傅里叶变换。
下面通过一个例子来理解这一点。
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-27
from scipy import fftpack
sample_freq = fftpack.fftfreq(sig.size, d = time_step)
sig_fft = fftpack.fft(sig)
print (sig_fft)
执行上面示例代码,得到以下结果 -
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-27
array([
   25.45122234 +0.00000000e+00j, 6.29800973 +2.20269471e+00j,
   11.52137858 -2.00515732e+01j, 1.08111300 +1.35488579e+01j,
   …….])

离散余弦变换

离散余弦变换(DCT)根据以不同频率振荡的余弦函数的和表示有限数据点序列。 SciPy提供了一个带有函数idct的DCT和一个带有函数idct的相应IDCT。看看下面的一个例子。
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-27
from scipy.fftpack import dct
mydict = dct(np.array([4., 3., 5., 10., 5., 3.]))
print(mydict)
执行上面示例代码,得到以下结果 -
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-27
[ 60. -3.48476592 -13.85640646 11.3137085 6. -6.31319305]
逆离散余弦变换从其离散余弦变换(DCT)系数重建序列。 idct函数是dct函数的反函数。 可通过下面的例子来理解这一点。
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-27
from scipy.fftpack import dct
from scipy.fftpack import idct
d = idct(np.array([4., 3., 5., 10., 5., 3.]))
print(d)
执行上面示例代码,得到以下结果 -
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-27
[ 39.15085889 -20.14213562 -6.45392043 7.13341236 8.14213562
  -3.83035081]
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4