用泰勒级数
成都创新互联公司成都网站建设定制网站开发,是成都网站设计公司,为咖啡厅设计提供网站建设服务,有成熟的网站定制合作流程,提供网站定制设计服务:原型图制作、网站创意设计、前端HTML5制作、后台程序开发等。成都网站设计热线:028-86922220
令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!+……
1、正弦波叠加为方波的GLSL实现;
1、傅里叶函数分解方波公式:
f(y) = 4/PI * (sinx+ sin3x/3 + sin5x/5 + ...);
2、实际程序里面公式为:
f(y) = sinx+ sin3x/3 + sin5x/5 + ...
3、键盘控制
加入了正弦波合成方波的处理,使用箭头键移动正弦波,使用上下箭头进行振幅调整,使用+,-号来调整正弦波叠加的次数。
1、他山随悟博客
傅里叶基础
法国数学家吉恩·巴普提斯特·约瑟夫·傅里叶被世人铭记的最大的贡献是:他指出任何周期函数都可以表示为不同频率的正弦和/或余弦之和的形式,每个正弦项和/或余弦项乘以不同的系数(现在称该和为傅里叶级数)。无论函数多么复杂,只要它是周期的,并且满足某些适度的数学条件,都可以用这样的和来表示。即一个复杂的函数可以表示为简单的正弦和余弦之和。甚至非周期函数(单该曲线下的面积是有限的)也可以用正弦和/或许·余弦乘以加权函数的积分来表示。在这种情况下的公式就是傅里叶公式。
比如说我们以制作一个饮料的过程,使用时域的角度来看就是这样:
这里是什么意思呢,就是说一个饮料的制作需要在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(逆傅里叶变换结果) 而第二个图就表示低频部分,边缘就表示为高频部分。
首先我们要进行傅里叶变换吧,才可以进行逆操作。结果是:
完全一致!!!
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中的能量守恒时,我们要回归到信号最初的形式: