傅里叶变换是信号分析的基础,法国科学家傅里叶早在1807年提出任何周期函数都可以分解成一系列正余弦函数。同样通过这些正余弦函数的叠加可以组成原始函数,因此可以利用傅里叶变换处理信号,获取有用组分,进行数据滤波等。傅里叶变换分为离散型数据的傅里叶级数对和连续型数函数的傅里叶变换对。
以下引自维基百科:
在数学中,傅里叶级数(英语:Fourier series,/ˈfʊrieɪ, -iər/)是把类似波的函数表示成简单正弦波的方式。更正式地说,对于满足狄利克雷定理的周期函数,其傅里叶级数是由一组简单振荡函数[注 1]的加权和表示的方法。离散时间傅里叶变换是一个周期函数,通常用定义傅里叶级数的项进行定义。另一个应用的例子是Z变换,将傅里叶级数简化为特殊情形 |z|=1。傅里叶级数也是采样定理原始证明的核心。傅里叶级数的研究是傅里叶分析的一个分支。
傅里叶变换源自对傅里叶级数的研究。在对傅里叶级数的研究中,复杂的周期函数可以用一系列简单的正弦、余弦波之和表示。傅里叶变换是对傅里叶级数的扩展,由它表示的函数的周期趋近于无穷。
上图展示了一个方波的分解与还原过程,这就是傅里叶变换最直观的表现
让我们来看一看不同振幅、不同频率的信号在频域的展现。
从以上也可以看出,任何波形都可以由基本函数通过线性叠加产生,那么:
要如何利用一系列正弦波来生成一个方波呢?其实可以采用如下公式:
要如何利用一系列正弦波来生成一个三角方波呢?其实可以采用如下公式:
Python程序
import numpy as np
import matplotlib.pyplot as plt
def y(n,x):
return (1/n)*np.sin(n*x)
x=np.arange(-2*np.pi,2*np.pi,0.01)
n=np.array(range(1,50,2))
# n=[5,25,49]
yy=0
for i in n:
yy+=y(i,x)
# yy=y(i,x)
plt.plot(x,yy)
plt.show()
方波波形
import numpy as np
import matplotlib.pyplot as plt
def y(n,x):
return (1/n)*np.sin(n*x)
x=np.arange(-2*np.pi,2*np.pi,0.01)
n=np.array(range(1,50))
# n=[5,25,49]
yy=0
for i in n:
yy+=y(i,x)
# yy=y(i,x)
plt.plot(x,yy)
plt.show()
信号组分
三角波波形
根据傅里叶变化,我们可以把如下的波形进行分解。得到其各个组分。即其振幅和相位在频域的表现。
原信号=三组分叠加信号
振幅谱
plt.magnitude_spectrum(yy,color='r',lw=0.6)
相位谱
plt.phase_spectrum(yy,color='r',lw=0.6)
叠加原波形信号组分
利用傅里叶变换得到的幅度和相位谱构建原波形
recover=np.zeros(N)
plt.figure(2,figsize=(8,6))
for a,p,f in zip(mo,phase,fre):
singelCos
recover+=singelCos#把这些三角函数都加起来
# plt.plot(x,singelCos,lw=2)
plt.plot(x,recover,lw=2)