python中傅里叶函数,python 离散傅里叶变换
什么是傅里叶函数
法国数学家傅里叶发现,任何周期函数都可以用正弦函数和余弦函数构成的无穷级数来表示(选择正弦函数与余弦函数作为基函数是因为它们是正交的),后世称为傅里叶级数(法文:série de Fourier,或译为傅里叶级数)一种特殊的三角级数。
成都创新互联公司主要从事成都网站制作、网站建设、外贸网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务寿宁,10余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792
目录
傅里叶级数
傅里叶级数的公式
傅里叶级数的收敛性
三角函数族的正交性
奇函数和偶函数
广义傅里叶级数
编辑本段傅里叶级数
Fourier series 一种特殊的三角级数。法国数学家J.-B.-J.傅里叶在研究偏微分方程的边值问题时提出。从而极大地推动了偏微分方程理论的发展。在中国,程民德最早系统研究多元三角级数与多元傅里叶级数。他首先证明 傅里叶级数
多元三角级数球形和的唯一性定理,并揭示了多元傅里叶级数的里斯 - 博赫纳球形平均的许多特性。傅里叶级数曾极大地推动了偏微分方程理论的发展。在数学物理以及工程中都具有重要的应用。 ============================================================================================================
编辑本段傅里叶级数的公式
给定一个周期为T的函数x(t),那么它可以表示为无穷级数: mathx(t)=\sum _{k=-\infty}^{+\infty}a_k\cdot e^{jk(\frac{2\pi}{T})t}/math(j为虚数单位)(1) 其中,matha_k/math可以按下式计算: 傅里叶级数
matha_k=\frac{1}{T}\int_{T}x(t)\cdot e^{-jk(\frac{2\pi}{T})t}/math(2) 注意到mathf_k(t)=e^{jk(\frac{2\pi}{T})t}/math是周期为T的函数,故k 取不同值时的周期信号具有谐波关系(即它们都具有一个共同周期T)。k=0时,(1)式中对应的这一项称为直流分量,mathk=\pm 1/math时具有基波频率math\omega_0=\frac{2\pi}{T}/math,称为一次谐波或基波,类似的有二次谐波,三次谐波等等。
编辑本段傅里叶级数的收敛性
傅里叶级数的收敛性:满足狄利赫里条件的周期函数表示成的傅里叶级数都收敛。狄利赫里条件如下: 在任何周期内,x(t)须绝对可积; 傅里叶级数
在任一有限区间中,x(t)只能取有限个最大值或最小值; 在任何有限区间上,x(t)只能有有限个第一类间断点。 吉布斯现象:在x(t)的不可导点上,如果我们只取(1)式右边的无穷级数中的有限项作和X(t),那么X(t)在这些点上会有起伏。一个简单的例子是方波信号。
编辑本段三角函数族的正交性
所谓的两个不同向量正交是指它们的内积为0,这也就意味着这两个向量之间没有任何相关性,例如,在三维欧氏空间中,互相垂直的向量之间是正交的。事实上,正交是垂直在数学上的的一种抽象化和一般化。一组n个互相正交的向量必然是线形无关的,所以必然可以张成一个n维空间,也就是说,空间中的任何一个向量可以用它们来线形表出。三角函数族的正交性用公式表示出来就是: math\int _{0}^{2\pi}\sin (nx)\cos (mx) \,dx=0;/math 傅里叶级数
math\int _{0}^{2\pi}\sin (mx)\sin (mx) \,dx=0;(m\ne n)/math math\int _{0}^{2\pi}\cos (mx)\cos (mx) \,dx=0;(m\ne n)/math math\int _{0}^{2\pi}\sin (nx)\sin (nx) \,dx=\pi;/math math\int _{0}^{2\pi}\cos (nx)\cos (nx) \,dx=\pi;/math
编辑本段奇函数和偶函数
奇函数mathf_o(x)/math可以表示为正弦级数,而偶函数mathf_e(x)/math则可以表示成余弦级数: mathf_o(x) = \sum _{-\infty}^{+\infty}b_k \sin(kx);/math 傅里叶级数
mathf_e(x) = \frac{a_0}{2}+\sum _{-\infty}^{+\infty}a_k\cos(kx);/math 只要注意到欧拉公式: mathe^{j\theta}= \sin \theta+j\cos \theta/math,这些公式便可以很容易从上面傅里叶级数的公式中导出。
编辑本段广义傅里叶级数
任何正交函数系math\{ \phi(x)\}/math,如果定义在[a,b]上的函数f(x)只具有有限个第一类间断点,那么如果f(x)满足封闭性方程: math\int _{a}^{b}f^2(x)\,dx=\sum _{k=1}^{\infty}c^{2}_{k}/math (4), 那么级数math\sum _{k=1}^{\infty} c_k\phi _k(x)/math (5) 必然收敛于f(x),其中: mathc_n=\int _{a}^{b}f(x)\phi_n(x)\,dx/math (6)。 傅里叶级数
事实上,无论(5)时是否收敛,我们总有: math\int _{a}^{b}f^2(x)\,dx \ge \sum _{k=1}^{\infty}c^{2}_{k}/math成立,这称作贝塞尔(Bessel)不等式。此外,式(6)是很容易由正交性推出的,因为对于任意的单位正交基math\{e_i\}^{N}_{i=1}/math,向量x在mathe_i/math上的投影总为mathx,e_i/math 。
傅里叶变换简介
傅里叶级数得名于法国数学家约瑟夫·傅里叶,他提出任何函数都可以展开为三角级数。
考虑一个在区间 上可积的函数 ,其傅里叶级数为
其中
由欧拉公式 得
代入(1)可得
令
则可以得到傅里叶级数的复数形式
其中
傅里叶变换可以看作傅里叶级数的连续形式。
首先考虑定义在 上的函数的傅里叶级数展开:
其中
令
记
则
当 时, , , (14) 中的求和变为积分
相应地,(12) 变为
(16) 称为傅里叶变换,记作 ;(15) 称为傅里叶变换的逆变换,记作 。在信号分析中, 称为信号的时域表示, 称为信号的频域表示。
需要明确的是,不管是用时域还是用频域来表示一个信号,它们代表的都是同一个信号。可以从线性空间的角度理解这一点。同一个信号在不同的表象(或者说基向量)下具有不同的坐标。同一个向量在不同表象下的坐标可以通过一个线性变换联系起来。如果是有限维的空间,这个线性变换可以表示为一个矩阵。而傅里叶变换则是无限维空间不同表象之间的一种变换。举例来说,在量子力学中,一个波函数的坐标表象到动量表象间的变换就是一个傅里叶变换。
也可以将角频率 替换为自然频率 ,有 ,则
一般情况下,我们处理的信号都是离散的。取 在时间上的离散采样
是采样的时间间隔。傅里叶变换只能作用在连续函数上,为此我们引入
其中
为 Dirac 函数。 称为 Dirac 梳子,亦称 Shah 分布,是一个采样函数,常用在数字信号处理和离散时间信号分析中。
对 作傅里叶变换
这里利用了 Dirac 函数的性质 。(22) 即为离散时间傅里叶变换。
下面简单介绍一下采样定理。若原信号 不包含高于 的频率,即 ,则只要采样频率 ,时域采样就能完全重建原信号。
将 在 上展开为傅里叶级数
其中
注意到 时 ,而 ,故 时 ,因此 (24) 可改写为
代入 (23),得
这里 。(26) 说明原信号的傅里叶变换可以由采样信号确定,进而可以利用傅里叶逆变换重建原信号。
此外,不难发现
是一个周期为 的周期函数。离散傅里叶变换 可以看作原信号连续傅里叶变换 的周期延拓,时域的离散化造成了频域的周期化。
离散时间傅里叶变换在频域上仍然是连续的。如果把频域也离散化,就得到了离散傅里叶变换。
也可以写成矩阵形式
其中 。
离散傅里叶变换的逆变换为
直接根据定义计算离散傅里叶变换的复杂度是 。快速傅里叶变换是快速计算离散傅里叶变换及其逆变换的一类数值算法。FFT 通过把 DFT 矩阵分解为稀疏矩阵之积,能够将复杂度降低到 。
在 Python 中可以利用 scipy.fftpack 进行快速傅里叶变换。
Python之OpenGL笔记(19):正弦波叠加为方波的GLSL实现
1、正弦波叠加为方波的GLSL实现;
1、傅里叶函数分解方波公式:
f(y) = 4/PI * (sinx+ sin3x/3 + sin5x/5 + ...);
2、实际程序里面公式为:
f(y) = sinx+ sin3x/3 + sin5x/5 + ...
3、键盘控制
加入了正弦波合成方波的处理,使用箭头键移动正弦波,使用上下箭头进行振幅调整,使用+,-号来调整正弦波叠加的次数。
1、他山随悟博客
Python正弦函数幂级数展开(在x=0展开)如下式所示。利用循环结构,实现正弦技术的傅里叶展开?
用泰勒级数
令x0=0
则f(x)=sinx=f(0)+f'(0)/1!*(x-0)+f''(0)/2!*(x-0)^2+……+f(n)(0)/n!*(x-0)^n+……
f'(x)=cosx,f''(x)=-sinx,f'''(x)=-cosx,f''''(x)=sinx=f(x),形成循环
所以sinx=0+1/1!*x+0/2!*x+(-1)/3!*x^3……+f(n)(0)/n!*(x-0)^n+……
即sinx=x/1!-x^3/3!+x^5/5!-x^7/7!+……
同理
f(x)=cosx,
f'(x)=-sinx,f''(x)=-cosx,f'''(x)=sinx,f''''(x)=cosx,也形成循环
所以cosx=1-x^2/2!+x^4/4!-x^6/6!+……
计算机视觉 图像的傅里叶变换
傅里叶基础
法国数学家吉恩·巴普提斯特·约瑟夫·傅里叶被世人铭记的最大的贡献是:他指出任何周期函数都可以表示为不同频率的正弦和/或余弦之和的形式,每个正弦项和/或余弦项乘以不同的系数(现在称该和为傅里叶级数)。无论函数多么复杂,只要它是周期的,并且满足某些适度的数学条件,都可以用这样的和来表示。即一个复杂的函数可以表示为简单的正弦和余弦之和。甚至非周期函数(单该曲线下的面积是有限的)也可以用正弦和/或许·余弦乘以加权函数的积分来表示。在这种情况下的公式就是傅里叶公式。
比如说我们以制作一个饮料的过程,使用时域的角度来看就是这样:
这里是什么意思呢,就是说一个饮料的制作需要在18点整放1个单位冰糖、3个单位红豆、2个单位的绿豆、4个单位的西红柿,还有1个单位的纯净水。然后再18:01分只需要假如一个单位的纯净水。后面也是一致。而频域是怎么描述这件事的呢?
具体来说就是说他发现了一个规律,就是说这个制作过程,每分钟都要加入冰糖,每两分钟都要加入红豆,每三分钟都要加入一次绿豆…。对于时域角度我们这样描述。
对于频域角度我们这样描述这件事,用直方图表示就是:
如果要考虑更精准的时间精度,我们就要引入相位这个概念。他是一个和时间差有关的一个表述。
这里我们说明一下就是时域和频域的表述是互逆的,对于时域我们是时间为横坐标,振幅为纵坐标。对于频域我们以频率为横坐标,振幅为纵坐标。但是可以看得出来频域的表述更加简单,但是比较抽象,不容易理解。傅里叶说: 任何连续周期信号,可以由一组适当的正弦曲线组合而成。 注意这里是一组而不是一个。比如对于这样的一个图像: f(x)=3 np.sin(0.8 x)+7 np.sin(1/3 x)+2 np.sin(0.2 x)
看上去是毫无规律可言吧,但是它也可以由一组正弦函数组成。
他们是可逆的,想不到吧,乱七八糟的东西也有规律了。但是他们就是这样组合而成的吗?不可能吧,所以这里就是不是同时开始的一组余弦函数,在叠加时要体现开始的时间。也就说组合的函数他们的开始时间是不一样的。在这里分别对应0,2,3.看公式就看出来啦。这里多说一嘴就是说傅里叶变换从时域角度来看,这个世界是动态的!从频域角度来看这个世界是静止的。从数学角度来讲:傅里叶变换将一个任意的周期函数分解成为无穷个正弦函数的和的形式。从物理角度来讲:傅里叶变换实现了将信号从空间域到频率域的转换。
傅里叶基础numpy实现
python是可以实现傅里叶变换的,这里就要说到三剑客的numpy了。对应的函数是: numpy.fft.fft2 返回一个复数数组(complex ndarray)。 numpy.fft.fftshift 这个函数时表示把将零频率分量移到频谱中心。
还要设置频谱的范围 20*np.log(np.abs(fshift)) ,对于图像来说就是255了。
结果是:
原图和频谱图像。
逆傅里叶numpy实现
对于傅里叶的逆操作这里没有什么可说的,就是把频域图像转回原图像。
函数是: numpy.fft.ifft2 ,那么还有一个操作就是把中间移动回去对啊。 numpy.fft.ifftshift 。 iimg = np.abs(逆傅里叶变换结果) 而第二个图就表示低频部分,边缘就表示为高频部分。
首先我们要进行傅里叶变换吧,才可以进行逆操作。结果是:
完全一致!!!
Python科学计算——复杂信号FFT
FFT (Fast Fourier Transform, 快速傅里叶变换) 是离散傅里叶变换的快速算法,也是数字信号处理技术中经常会提到的一个概念。用快速傅里叶变换能将时域的数字信号转换为频域信号,转换为频域信号后我们可以很方便地分析出信号的频率成分。
当我们把双频信号FFT示例中的 fft_size 的值改为 2**12 时,这时,基频为 16Hz,不能被 1kHz整除,所以 1kHz 处发生了频谱泄露,而它能被 4kHz 整除,所以 4kHz 可以很好地被采样。
由于波形的前后不是连续的,出现波形跳变,而跳变处有着非常广泛的频谱,因此FFT的结果中出现了频谱泄漏。
为了减小FFT所截取的数据段前后的跳变,可以对数据先乘以一个窗函数,使得其前后数据能平滑过渡。常用的hanning窗函数的定义如下:
50Hz 正弦波与hann窗函数乘积之后的重复波形如下:
我们对频谱泄漏示例中的1kHz 和 4kHz 信号进行了 hann 窗函数处理,可以看出能量更加集中在 1kHz 和 4kHz,在一定程度上抑制了频谱泄漏。
以 1kHz 三角波为例,我们知道三角波信号中含有丰富的频率信息,它的傅里叶级数展开为:
当数字信号的频率随时间变化时,我们称之为扫频信号。以频率随时间线性变化的扫频信号为例,其数学形式如下:
其频率随时间线性变化,当我们在 [0,1] 的时间窗口对其进行采样时,其频率范围为 0~5kHz。当时间是连续时,扫频信号的频率也是连续的。但是在实际的处理中,是离散的点采样,因此时间是不连续的,这就使扫频信号的快速傅里叶变换问题退化为多点频信号快速傅里叶变换问题。其快速傅里叶变换得到的频谱图如下所示:
以 50Hz 正弦信号相位调制到 1kHz 的信号为例,其信号形式如下:
它的时域波形,频率响应和相位响应如下图所示:
以扫频信号为例,当我们要探究FFT中的能量守恒时,我们要回归到信号最初的形式:
名称栏目:python中傅里叶函数,python 离散傅里叶变换
网页地址:http://pwwzsj.com/article/hdejdg.html