开发手册 欢迎您!
软件开发者资料库

SciPy - FFTpack

SciPy FFTpack - 从简单和简单的步骤学习SciPy,从基本到高级概念,包括简介,环境设置,基本功能,集群,常量,Fftpack,集成,插值,输入和输出,Linalg,Ndimage,Optimize,Stats,CSGraph ,空间,ODR,特殊包装。

在时域信号上计算

傅里叶变换以检查其在频域中的行为.傅立叶变换在信号和噪声处理,图像处理,音频信号处理等学科中得到应用.SciPy提供了fftpack模块,可以让用户计算快速傅里叶变换.

关注是一个正弦函数的例子,它将用于使用fftpack模块计算傅里叶变换.

快速傅立叶变换

让我们理解一下快速傅里叶变换是详细的.

一维离散傅里叶变换

长度为N的序列的长度为N的FFT y [k] x [n]由fft()计算,逆变换使用ifft()计算.让我们考虑以下示例

#Importing the fft and inverse fft functions from fftpackagefrom scipy.fftpack import fft#create an array with random n numbersx = np.array([1.0, 2.0, 1.0, -1.0, 1.5])#Applying the fft functiony = fft(x)print y

上述程序将生成以下输出.

[ 4.50000000+0.j           2.08155948-1.65109876j   -1.83155948+1.60822041j -1.83155948-1.60822041j   2.08155948+1.65109876j ]

让我们看看另一个例子

#FFT is already in the workspace, using the same workspace to for inverse transformyinv = ifft(y)print yinv

上述程序将生成以下内容输出.

  [1.0 + 0.j 2.0 + 0.j 1.0 + 0.j -1.0 + 0 .j 1.5 + 0.j]

scipy.fftpack 模块允许计算快速傅里叶变换.作为说明,(嘈杂的)输入信号可能看起来如下 :

import numpy as nptime_step = 0.02period = 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的大小.输出如下:<

  1000

我们做不知道信号频率;我们只知道信号sig的采样时间步长.该信号应该来自实函数,因此傅立叶变换将是对称的. scipy.fftpack.fftfreq()函数将生成采样频率, scipy.fftpack.fft()将计算快速傅立叶变换.

让我们在一个例子的帮助下理解这一点.

from scipy import fftpacksample_freq = fftpack.fftfreq(sig.size, d = time_step)sig_fft = fftpack.fft(sig)print sig_fft

上述程序将生成以下输出.

array([    25.45122234 +0.00000000e+00j,   6.29800973 +2.20269471e+00j,   11.52137858 -2.00515732e+01j,   1.08111300 +1.35488579e+01j,   …….])

离散余弦变换

A 离散余弦变换(DCT)根据在不同频率振荡的余弦函数之和表示有限的数据点序列. SciPy为DCT提供功能 dct 以及具有 idct 功能的相应IDCT.让我们考虑以下示例.

from scipy.fftpack import dctprint dct(np.array([4., 3., 5., 10., 5., 3.]))

上述程序将生成以下输出.

array([ 60.,  -3.48476592,  -13.85640646,  11.3137085,  6.,  -6.31319305])

逆离散余弦变换从其离散余弦变换(DCT)系数重建序列. idct函数是dct函数的反函数.让我们通过以下示例来理解这一点.

from scipy.fftpack import dctprint idct(np.array([4., 3., 5., 10., 5., 3.]))

上述程序将生成以下输出.

array([ 39.15085889, -20.14213562, -6.45392043, 7.13341236,8.14213562, -3.83035081])