分治法:快速傅里叶变换算法

分治法:快速傅里叶变换算法
分治法:快速傅里叶变换算法

分治法:快速傅里叶变换算法

学院:网研院 姓名:xxx 学号:xxx

一、 分治法原理

分治法是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。

分治法的精髓:

◆ 分--将问题分解为规模更小的子问题; ◆ 治--将这些规模更小的子问题逐个击破;

◆ 合--将已解决的子问题合并,最终得出“母”问题的解; 二、 快速傅里叶变换(FFT )简介

快速傅里叶变换(Fast Fourier Transform, FFT ),是离散傅里叶变换的快速算法,也可用于计算离散傅里叶变换的逆变换。它是根据离散傅里叶变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。快速傅里叶变换有广泛的应用,如数字信号处理、计算大整数乘法、求解偏微分方程等等。

序列

的离散傅里叶变换公式为:

令 则上式可写为:

从算法分析角度:

于是:分别考虑对其奇数项和偶数项作傅氏变换: 则

从而,可以将对N 个量的傅氏变换变成为对两个规模更小的序列的变换。这

样,将变换的量大大减小。

快速傅里叶变换是分治法的一种具体实现。

[][]()

∑-=-=10

2N n N jnk e n x k X π

1,,0]},[{-=N i i x N

j N e W π

2-=∑-==10

][][N n kn

N

W n x k X k

n N

N

n N n nk N N n kn N W n x W n x W n x k X )12(120

12

210

]12[]2[][][+-=-=-=∑∑∑?++?==nk

N N n N n nk N E W n x W n x k X 2

/12

12

2]2[]2[][∑∑-=-=?=?=kn

N N n N n nk N O W n x W n x k X 2

/120

120

2]12[]12[][∑∑-=-=?+=?+=]

[][][][1

k X W k X W n x k X O k N E N n kn N ?+==∑-=

三、 快速傅里叶变换算法FFT

1. 算法

● 输入采样值;

● 对采用值进行补0操作,使采样值的个数是2的幂次;

● 对补0后的序列进行重排,重排的原则是按照序列的下标奇偶性排

序,先偶后奇,分成两个子序列,然后对子序列继续重排。如

1,2,3,4,5,6,7->1,3,5,7;2,4,6,8->1,5;3,7;2,6;4,8->1,5,3,7,2,6,4,8; ● 对补0重排后的序列用三层嵌套的循环来完成M=log 2N (阶数)次迭

代,三层循环的功能是:最里的一层循环完成相同W N P 的蝶形运算,

中间的一层循环完成因子W N P

的变化,而最外的一层循环则是完成M 次迭代过程。 2. 算法复杂度

,则得 从而快速傅氏变换的复杂性度为

3. 可能的改进

本次实验使用的是最基本的基2FFT 算法,根据维基百科,有如下比较出名的FFT 算法,在性能上应该都优于本实现。

Cooley-Tukey 算法是最常见的FFT 算法。这一方法以分治法为策略递归地将长度为的DFT 分解为长度为

个较短序列的DFT ,

以及与

个旋转因子的复数乘法。

在Cooley-Tukey 算法之外还有其他DFT 的快速算法。对于长度

互质的序列,可以采用基于中国剩余定理的互质因

子算法将N 长序列的DFT 分解为两个子序列的DFT 。与 Cooley-Tukey 算法不同的是,互质因子算法不需要旋转因子。

Rader-Brenner 算法是类似于 Cooley-Tukey 算法,但是采用的旋转因子都是纯虚数,以增加加法运算和降低了数值稳定性为代价减少了乘法运算。这方法之后被split-radix variant of Cooley-Tukey 所取代,与

?????

=+

=0

)2(2

)2(2)(T N N T N T m N 2=12)1()2(--=m m m T )log (N N O

Rader-Brenner算法相比,有一样多的乘法量,却有较少的加法量,且不牺牲数值的准确性。

Bruun以及QFT算法是不断的把DFT分成许多较小的DFT运算。

(Rader-Brenner以及QFT算法是为了2的指数所设计的算法,但依然可以适用在可分解的整数上。Bruun算法则可以运用在可被分成偶数个运算的数字)。

尤其是Bruun算法,把FFT看成是,并把它分解成与

的形式。

另一个从多项式观点的快速傅立叶变换法是Winograd 算法。此算法把

分解成cyclotomic多项式,而这些多项式的系数通常为1,0,-1。

这样只需要很少的乘法量(如果有需要的话),所以winograd是可以得到最少乘法量的快速傅立叶算法,对于较小的数字,可以找出有效率的算方式。

更精确地说,winograd算法让DFT可以用点的DFT来简化,但减少乘法

量的同时,也增加了非常多的加法量。Winograd也可以利用剩余值定理来简化DFT。

Rader算法提出了利用点数为N(N为质数)的DFT进行长度为N-1的回旋折积来表示原本的DFT,如此就可利用折积用一对基本的FFT来计算 DFT。

另一个prime-size的FFT算法为chirp-Z算法。此法也是将DFT用折积来表示,此法与Rader算法相比,能运用在更一般的转换上,其转换的基础为Z转换。

四、算法实现框架

本次实验使用的语言是java,只有一个类FFT.java,类有一个属性xConv

用来存储补0和重排后的序列;FFT()构造方法对序列进行补0操作,然后调用

i2Sort()方法对补0后序列进行重排,最后调用myFFT()方法进行快速傅里叶变换;i2Sort()法对补0后序列进行重排;myFFT()方法对补0重排后序列进行快速傅里叶变换操作;main()方法是程序的入口,用于输入数据并调用构造方法FFT()。如下图所示。

i2Sort()方法对补0后序列进行重排,如1,2,3,4,5,6,7->1,5,3,7,2,6,4,8。

myFFT()方法对补0重排后序列进行快速傅里叶变换操作,方法的原理是用三层嵌套的循环来完成M=log

2

N(阶数)次迭代,三层循环的功能是:最里的一

层循环完成相同W

N P的蝶形运算,中间的一层循环完成因子W

N

P的变化,而最外

的一层循环则是完成M次迭代过程。

FFT()构造方法对序列进行补0操作,然后调用i2Sort()方法对补0后序列进行重排,最后调用myFFT()方法进行快速傅里叶变换;

main()方法是程序的入口,用于输入数据并调用构造方法FFT()。

五、总结

本科的时候曾经系统学习过傅里叶变换的知识,考研的时候也复习了该方面知识,在理解题目上没有遇到太大的困难。但由于从未尝试编程实现FFT,因此在本次实验的过程中还是遇到了许多问题。经过查看课件及网上查找资料,我对如何编码实现FFT有了一个较好的理解,知道了算法主要应该包括补0、排序和蝶形迭代3步操作。通过查找资料参考别人的代码,并结合自己的理解,我使用了java语言完成了该实验。由于时间较为紧张,加上期末考临近等原因,该实验完成的比较仓促,仍有许多不足的地方,但总的来说,通过本次试验,我再次复习了FFT的原理及了解了分治法的原理,同时锻炼了自己动手编写代码的能力,收获多多。

附录

程序运行示例:

源程序:

import java.util.Scanner;

public class FFT {

private double[] xConv;// 对x[n]进行二进制倒序排列的结果

public FFT(double[] x) throws Exception {

int n = x.length;

if (n < 1)

throw new Exception("采样序列的个数不能小于1!");

int m = (int) Math.ceil(Math.log(n) / Math.log(2));

int j = (int) Math.pow(2, m);

xConv = new double[j]; // 初始化xConv

for (int i = 0; i < n; i++)

xConv[i] = x[i];

for (int i = n; i < j; i++)

xConv[i] = 0;

System.out.println("x[n]共有" + x.length + "个采样值" + '(' + m + "阶)"

+ ",补零个数为" + (j - n));

System.out.println("原x[n]数组:");

for (int i = 0; i < x.length; i++) {

System.out.print(String.format("%6.2f", x[i]) + " ");

}

System.out.println("");

System.out.println("补零之后的x[n]数组:");

for (int i = 0; i < xConv.length; i++) {

System.out.print(String.format("%6.2f", xConv[i]) + " ");

}

System.out.println("");

i2Sort(xConv, m);

myFFT(xConv, m);

}

private void i2Sort(double[] xConv2, int m) {

int[] index = new int[xConv2.length]; // index数组用于,倒序索引

int[] bits = new int[m];

double[] temp = new double[xConv2.length];

for (int i = 0; i < xConv2.length; i++)

// xConv2的原序映像

temp[i] = xConv2[i];

for (int i = 0; i < index.length; i++) {

index[i] = i; // 第i个位置,倒序前的值为i

for (int j = 0; j < m; j++) {

bits[j] = index[i] - index[i] / 2 * 2; // 提取index[i]的第j位二进制的值

index[i] /= 2;

}

index[i] = 0; // 清零第i个位置的值

for (int j = m, power = 1; j > 0; j--) {

index[i] += bits[j - 1] * power; // 第i个位置,倒序后的位置

power *= 2;

}

}

System.out.println("二进制排序之后的x[n]数组:");

for (int i = 0; i < xConv2.length; i++) {

// 倒序实现

xConv2[i] = temp[index[i]];

System.out.print(String.format("%6.2f", xConv2[i]) + " ");

}

System.out.println("");

}

private void myFFT(double[] xConv2, int m) {

int divBy; // divBy等分

double[] Xr, Xi, Wr, Wi; // 分别表示:FFT结果的实部和虚部、旋转因子的实部和虚部

double[] tempXr, tempXi; // 蝶形结果暂存器

int n = xConv2.length;

double pi = Math.PI;

divBy = 1;

Xr = new double[n];

Xi = new double[n];

tempXr = new double[n];

tempXi = new double[n];

Wr = new double[n / 2];

Wi = new double[n / 2];

for (int i = 0; i < n; i++) { // 初始化Xr、Xi,之所以这样初始化,是为了方便下面的蝶形结果暂存

Xr[i] = xConv2[i];

Xi[i] = 0;

}

for (int i = 0; i < m; i++) { // 共需要进行m次蝶形计算

divBy *= 2;

for (int k = 0; k < divBy / 2; k++) { // 旋转因子赋值

Wr[k] = Math.cos(k * 2 * pi / divBy);

Wi[k] = -Math.sin(k * 2 * pi / divBy);

}

for (int j = 0; j < n; j++) { // 蝶形结果暂存

tempXr[j] = Xr[j];

tempXi[j] = Xi[j];

}

for (int k = 0; k < n / divBy; k++) { // 蝶形运算:每一轮蝶形运算,都有n/2对的蝴蝶参与;n/2分为n/divBy组,每组divBy/2个。

int wIndex = 0; // 旋转因子下标索引

for (int j = k * divBy; j < k * divBy + divBy / 2; j++) {

double X1 = tempXr[j + divBy / 2] * Wr[wIndex]

- tempXi[j + divBy / 2] * Wi[wIndex];

double X2 = tempXi[j + divBy / 2] * Wr[wIndex]

+ tempXr[j + divBy / 2] * Wi[wIndex];

Xr[j] = tempXr[j] + X1;

Xi[j] = tempXi[j] + X2;

Xr[j + divBy / 2] = tempXr[j] - X1; // 蝶形对两成员距离相差divBy/2

Xi[j + divBy / 2] = tempXi[j] - X2;

wIndex++;

}

}

}

System.out.println("FFT结果:");

for (int i = 0; i < n; i++)

// FFT结果显示

System.out.println(String.format("%6.2f", Xr[i])

+ (Xi[i] < 0 ? " - " : " + ")

+ String.format("%6.2f", Math.abs(Xi[i])) + " * j");

}

public static void main(String[] args) throws Exception {

Scanner in = new Scanner(System.in);

while (true) {

System.out.println("******基2时域抽取FFT算法开始******");

System.out.println("---请输入采样点个数(正整数),回车结束---");

int n = in.nextInt();

System.out.println("---请输入" + n + "个采样值(支持浮点型,空格隔开),回车结束---");

double[] x = new double[n];

for (int i = 0; i < n; i++) {

x[i] = in.nextDouble();

}

System.out.println("---基2时域抽取FFT算法处理结果---");

new FFT(x);

System.out.println("");

}

}

}

常用函数傅里叶变换

信号与系统的基本思想:把复杂的信号用简单的信号表示,再进行研究。 怎么样来分解信号?任何信号可以用Delta 函数的移位加权和表示。只有系统是线性时不变系统,才可以用单位冲激函数处理,主要讨论各个单位冲激函数移位加权的响应的叠加能得到总的响应。 线性系统(齐次性,叠加定理) 时不变系统 对一个系统输入单位冲激函数,得到的响应为h(t).表征线性时不变系统的非常重要的东西,只要知道了系统对单位冲击函数的响应,就知道了它对任何信号的响应,因为任何信号都可以表示为单位冲激函数的移位加权和。 例如:d(t)__h(t) 那么a*d(t-t0)__a*h(t-t0) -()= ()(t-)d f t f τδττ∝∝? 的响应为-y()=()(-)t f h t d τττ∝ ∝ ? 记为y(t)=f(t)*h(t),称为f(t)和h(t)的卷积 总结为两点:对于现行时不变系统,任何信号可以用单位冲激信号的移位加权和表示,任何信号的响应可以用输入函数和单位冲激函数响应的卷积来表示 连续时间信号和系统的频域分析 时域分析的重点是把信号分解为单位冲激函数的移位加权和,只讨论系统对单位冲激函数的响应。而频域的分析是把信号分解为各种不同频率的正弦函数的加权和,只讨论系统对sinwt 的响应。都是把信号分解为大量单一信号的组合。

周期函数可以展开为傅里叶级数,将矩形脉冲展开成傅里叶级数,得到傅里叶级数的系数 n A sin F = T x x τ 其中0=2 nw x τ。 取样函数sin ()=x S a x 。产生一种震荡,0点的值最大,然后渐渐衰减直至0 第一:对于傅里叶级数的系数,n 是离散的,所以频谱也是离散状的每条谱线都出现在基波频率的整数倍上,其包络是取样函数。 第二:谱线的间距是0w .。零点是0=2nw x τ,02w =T π是谱的基波频率。如果τ不变,T 增大,那么0w 减小,当T 非常大的时候,0w 非常小,谱线近似连续,越来越密,幅度越来越小。 傅里叶变换:非周期函数 正变换:--F jw)= ()iwt f t e dt ∝ ∝?( 反变换:-1()=()2jnwt f t F jw e dw π ∝∝ ? 常用函数的傅里叶变换(典型非周期信号的频谱)

离散傅里叶变换及其快速算法

第五章 离散傅里叶变换及其快速算法 1 离散傅里叶变换(DFT)的推导 (1) 时域抽样: 目的:解决信号的离散化问题。 效果:连续信号离散化使得信号的频谱被周期延拓。 (2) 时域截断: 原因:工程上无法处理时间无限信号。 方法:通过窗函数(一般用矩形窗)对信号进行逐段截取。 结果:时域乘以矩形脉冲信号,频域相当于和抽样函数卷积。 (3) 时域周期延拓: 目的:要使频率离散,就要使时域变成周期信号。 ! 方法:周期延拓中的搬移通过与)(s nT t -δ的卷积来实现。 表示:延拓后的波形在数学上可表示为原始波形与冲激串序列的卷积。 结果:周期延拓后的周期函数具有离散谱。 (4) 1。 图1 DFT 推导过程示意图 (5) 处理后信号的连续时间傅里叶变换:∑∑ ∞ -∞=-=π--δ???? ? ????= k N n N kn j s kf f e nT h f H )()()(~ 010/2

(i) )(~ f H 是离散函数,仅在离散频率点S NT k T k kf f == =00处存在冲激,强度为k a ,其余各点为0。 (ii) )(~ f H 是周期函数,周期为s s T NT N T N Nf 100===,每个周期内有N 个不同的幅值。 (iii) 时域的离散时间间隔(或周期)与频域的周期(或离散间隔)互为倒数。 2 DFT 及IDFT 的定义 (1) , (2) DFT 定义:设()s nT h 是连续函数)(t h 的N 个抽样值1,,1,0-=N n ,这N 个点的宽度为N 的DFT 为:[])1,...,1,0(,)()(1 /2-=???? ??==? -=π-∑N k NT k H e nT h nT h DFT s N n N nk j s s N (3) IDFT 定义:设??? ? ??s NT k H 是连续频率函数)(f H 的N 个抽样值1,,1,0-=N k , 这N 个点 的宽度为N 的IDFT 为: ())1,...,1,0(,11 0/21 -==??? ? ? ?=??? ???? ?? ??? ???-=π--∑ N k nT h e NT k H N NT k H DFT s N k N nk j s s N (4) N nk j e /2π-称为N 点DFT 的变换核函数,N nk j e /2π称为N 点IDFT 的变换核函数。它们互 为共轭。 (5) 同样的信号,宽度不同的DFT 会有不同的结果。DFT 正逆变换的对应关系是唯一的, 或者说它们是互逆的。 (6) 引入N j N e W /2π-= (i) 用途: (a) 正逆变换的核函数分别可以表示为nk N W 和nk N W -。 (b) 核函数的正交性可以表示为:() )(* 1 0r n N W W kr N N k kn N -δ=∑-= (c) DFT 可以表示为:)1,,1,0(,)(10 -==? ??? ??∑ -=N k W nT h NT k H N n nk N s s (d) IDFT 可以表示为:)1,,1,0(,1 )(10 -=??? ? ??=∑-=-N n W NT k H N nT h N k nk N s s (ii) ) (iii) 性质:周期性和对称性: (a) 12==π-j N N e W (b) 12 /-==π-j N N e W (c) r N r N N N r N N W W W W ==+ (d) r N r N N N r N N W W W W -=-=+2/2/ (e) )(1Z m W m N ∈?= (f) ),(/2/2Z n m W e e W n N N n j mN mn j mn mN ∈?===π-π- 3 离散谱的性质 (1) 离散谱定义:称)(Z k NT k H H S k ∈??? ? ??=? 为离散序列)0)((N n nTs h <≤的DFT 离散谱,简称离散谱。 (2) 性质:

实验八 利用快速傅里叶变换(FFT)实现快速卷积(精选、)

实验八 利用FFT 实现快速卷积 一、 实验目的 (1) 通过这一实验,加深理解FFT 在实现数字滤波(或快速卷积)中的重要作用,更好的利用FFT 进行数字信号处理。 (2) 进一步掌握循环卷积和线性卷积两者之间的关系。 二、 实验原理与方法 数字滤波器根据系统的单位脉冲响应h(n)是有限长还是无限长可分为有限长单位脉冲响应(Finite Impulse Response )系统(简记为FIR 系统)和无限长单位脉冲响应(Infinite Impulse Response )系统(简记为IIR 系统)。 对于FIR 滤波器来说,除了可以通过数字网络来实现外,也可以通过FFT 的变换来实现。 一个信号序列x(n)通过FIR 滤波器时,其输出应该是x(n)与h(n)的卷积: ∑+∞ -∞ =-= =m m n h m x n h n x n y )()()(*)()( 或 ∑+∞ -∞ =-= =m m n x m h n x n h n y ) ()()(*)()( 当h(n)是一个有限长序列,即h(n)是FIR 滤波器,且10-≤≤N n 时 ∑-=-=1 0) ()()(N m m n x m h n y 在数字网络(见图6.1)类的FIR 滤波器中,普遍使用的横截型结构(见下图6.2 图6.1 滤波器的数字网络实现方法 图6.2 FIR 滤波器横截型结构 y(n) y(n) -1-1-1-1

应用FFT 实现数字滤波器实际上就是用FFT 来快速计算有限长度列间的线性卷积。 粗略地说,这种方法就是先将输入信号x(n)通过FFT 变换为它的频谱采样 值X(k),然后再和FIR 滤波器的频响采样值H(k)相乘,H(k)可事先存放在存储器中,最后再将乘积H(k)X(k)通过快速傅里叶变换(简称IFFT )还原为时域序列,即得到输出y(n)如图6.3所示。 图6.3 数字滤波器的快速傅里叶变换实现方法 现以FFT 求有限长序列间的卷积及求有限长度列与较长序列间的卷积为例来讨论FFT 的快速卷积方法。 (1) 序列)(n x 和)(n h 的列长差不多。设)(n x 的列长为1N ,)(n h 的列长为2N ,要求 )()(n x n y =N ∑-=-==1 ) ()()(*)()(N r r n h r x n h n x n h 用FFT 完成这一卷积的具体步骤如下: i. 为使两有限长序列的线性卷积可用其循环卷积代替而不发生混叠,必须选择循环卷积长度121-+≥N N N ,若采用基2-FFT 完成卷积运 算,要求m N 2=(m 为整数)。 ii. 用补零方法使)(n x ,)(n h 变成列长为N 的序列。 ?? ?-≤≤-≤≤=10 10)()(11N n N N n n x n x ?? ?-≤≤-≤≤=10 1 0)()(22N n N N n n h n h iii. 用FFT 计算)(),(n h n x 的N 点离散傅里叶变换 )()(k X n x FFT ??→? )()(k H n h FFT ??→? iv. 做)(k X 和)(k H 乘积,)()()(k H k X k Y ?= v. 用FFT 计算)(k Y 的离散傅里叶反变换得 y(n)

(完整版)从头到尾彻底理解傅里叶变换算法

从头到尾彻底理解傅里叶变换算法、上 从头到尾彻底理解傅里叶变换算法、上 前言 第一部分、DFT 第一章、傅立叶变换的由来 第二章、实数形式离散傅立叶变换(Real DFT) 从头到尾彻底理解傅里叶变换算法、下 第三章、复数 第四章、复数形式离散傅立叶变换 前言: “关于傅立叶变换,无论是书本还是在网上可以很容易找到关于傅立叶变换的描述,但是大都是些故弄玄虚的文章,太过抽象,尽是一些让人看了就望而生畏的公式的罗列,让人很难能够从感性上得到理解”---dznlong, 那么,到底什么是傅里叶变换算法列?傅里叶变换所涉及到的公式具体有多复杂列? 傅里叶变换(Fourier transform)是一种线性的积分变换。因其基本思想首先由法国学者傅里叶系统地提出,所以以其名字来命名以示纪念。 哦,傅里叶变换原来就是一种变换而已,只是这种变换是从时间转换为频率的变化。这下,你就知道了,傅里叶就是一种变换,一种什么变换列?就是一种从时间到频率的变化或其相互转化。 ok,咱们再来总体了解下傅里叶变换,让各位对其有个总体大概的印象,也顺便看看傅里叶变换所涉及到的公式,究竟有多复杂: 以下就是傅里叶变换的4种变体(摘自,维基百科) 连续傅里叶变换 一般情况下,若“傅里叶变换”一词不加任何限定语,则指的是“连续傅里叶变换”。连续傅里叶变换将平方可积的函数f(t)表示成复指数函数的积分或级数形式。

这是将频率域的函数F(ω)表示为时间域的函数f(t)的积分形式。 连续傅里叶变换的逆变换(inverse Fourier transform)为: 即将时间域的函数f(t)表示为频率域的函数F(ω)的积分。 一般可称函数f(t)为原函数,而称函数F(ω)为傅里叶变换的像函数,原函数和像函数构成一个傅里叶变换对(transform pair)。 除此之外,还有其它型式的变换对,以下两种型式亦常被使用。在通信或是信号处理方面,常以来代换,而形成新的变换对: 或者是因系数重分配而得到新的变换对: 一种对连续傅里叶变换的推广称为分数傅里叶变换(Fractional Fourier Transform)。分数傅里叶变换(fractional Fourier transform,FRFT)指的就是傅里叶变换(Fourier transform,FT)的广义化。 分数傅里叶变换的物理意义即做傅里叶变换a 次,其中a 不一定要为整数;而做了分数傅里叶变换之后,信号或输入函数便会出现在介于时域(time domain)与频域(frequency domain)之间的分数域(fractional domain)。

实验一快速傅里叶变换

实验一 快速傅里叶变换之报告 一 、实验目的 1、在理论学习的基础上,通过本实验加深对快速傅立叶变换的理解; 2、熟悉并掌握按时间抽取FFT 算法的程序; 3、了解应用FFT 进行信号频谱分析过程中可能出现的问题,例如混淆、泄漏、 栅栏效应等,以便在实际中正确应用FFT 。 二 实验内容 a ) 信号频率F =50Hz ,采样点数N=32,采样间隔T= matlab 程序代码为: F=50; T=; N=32; n=0:N-1; t=n*T; A=sin(2*pi*F*t); figure; Y = fft(A,N); h = (abs(Y)); h=h/max(h(1:N)); for n=1:N; string1=strcat('X(',num2str(n-1), ')=',num2str(h(n))); disp(string1); f=(n/T)/N; end stem([0:N-1]/N/T,h); xlabel('?μ?ê/HZ'); ylabel('??·ùX£¨ejw£?'); title('·ù?μì?D?'); 上述代码命令中,将FFT 变换后的数字变量K ,在画图时转换成频域中的频率f 。这主 要是根据数字频率与模拟域频率之间的关系: T Ω=ω 其中ω、Ω分别为数字和模拟域中的频率,且N k πω2= f π2=Ω 于是有: NT k f = 运算结果: X(1)=1 X(2)= X(3)= X(4)=

X(5)= X(6)= X(7)= X(8)= X(9)= X(10)= X(11)= X(12)= X(13)= X(14)= X(15)= X(16)= X(17)= X(18)= X(19)= X(20)= X(21)= X(22)= X(23)= X(24)= X(25)= X(26)= X(27)= X(28)= X(29)= X(30)= X(31)=1 b)信号频率F=50Hz,采样点数N=32,采样间隔T= 同理可将a)中F、N、T,参数改成要求值(以下均是如此),即可得,X(0)= X(1)= X(2)= X(3)= X(4)= X(5)= X(6)= X(7)= X(8)=1 X(9)= X(10)= X(11)= X(12)= X(13)= X(14)= X(15)= X(16)= X(17)= X(18)= X(19)= X(20)= X(21)= X(22)= X(23)= X(24)=1 X(25)= X(26)= X(27)= X(28)= X(29)= X(30)= X(31)=

MATLAB实验傅里叶分析

MATLAB实验傅里叶分析

实验七 傅里叶变换 一、实验目的 傅里叶变换是通信系统、图像处理、数字信号处理以及物理学等领域内的一种重要的数学分析工具。通过傅里叶变换技术可以将时域上的波形分 布变换为频域上的分布,从而获得信号的频谱特性。MATLAB 提供了专门的函数fft 、ifft 、fft2(即2维快速傅里叶变换)、ifft2以及fftshift 用于实现对信号的傅里叶变换。本次实验的目的就是练习使用fft 、ifft 以及fftshift 函数,对一些简单的信号处理问题能够获取其频谱特性(包括幅频和相频特性)。 二、实验预备知识 1. 离散傅里叶变换(DFT)以及快速傅里叶变换(FFT)简介 设x (t )是给定的时域上的一个波形,则其傅里叶变换为 2()() (1)j ft X f x t e dt π∞--∞=? 显然X ( f )代表频域上的一种分布(波形),一般来说X ( f )是复数。而傅里叶逆变换定义为: 2()() (2)j ft x t X f e df π∞-∞ =?

因此傅里叶变换将时域上的波形变换为频域上的波形,反之,傅里叶逆变换则将频域上的波形变换为时域上的波形。 由于傅里叶变换的广泛应用,人们自然希望能够使用计算机实现傅里叶变换,这就需要对傅里叶变换(即(1)式)做离散化处理,使 之符合电脑计算的特征。另外,当 把傅里叶变换应用于实验数据的分 析和处理时,由于处理的对象具有 离散性,因此也需要对傅里叶变换 进行离散化处理。而要想将傅里叶 变换离散化,首先要对时域上的波 形x (t )进行离散化处理。采用一个 时域上的采样脉冲序列: δ (t -nT ), n = 0, 1, 2, …, N -1; 可以实现上述目的,如图所示。其中N 为采样点数,T 为采样周期;f s = 1/T 是采样频率。注意采样时,采样频率f s 必须大于两倍的信号频率(实际是截止频率),才能避免混迭效应。 接下来对离散后的时域波形()()()(x t x t t n T x n T δ= -=的傅里叶变换()X f 进行离散处理。与上述做法类 似,采用频域上的δ脉冲序列: x (t δ x (t )δ t t t

(完整版)傅里叶变换分析

第一章 信号与系统的基本概念 1.信号、信息与消息的差别? 信号:随时间变化的物理量; 消息:待传送的一种以收发双方事先约定的方式组成的符号,如语言、文字、图像、数据等 信息:所接收到的未知内容的消息,即传输的信号是带有信息的。 2.什么是奇异信号? 函数本身有不连续点或其导数或积分有不连续点的这类函数统称为奇异信号或奇异函数。例如: 单边指数信号 (在t =0点时,不连续), 单边正弦信号 (在t =0时的一阶导函数不连续)。 较为重要的两种奇异信号是单位冲激信号δ(t )和单位阶跃信号u(t )。 3.单位冲激信号的物理意义及其取样性质? 冲激信号:它是一种奇异函数,可以由一些常规函数的广义极限而得到。 它表达的是一类幅度很强,但作用时间很短的物理现象。其重要特性是筛选性,即: ()()()(0)(0)t x t dt t x dt x δδ∞ ∞ -∞ -∞ ==? ? 4.什么是单位阶跃信号? 单位阶跃信号也是一类奇异信号,定义为: 10()00t u t t >?=?

12()()()x t ax t bx t =+,其中a 和b 是任意常数时, 输出信号()y t 是1()y t 和2()y t 的线性叠加,即:12()()()y t ay t by t =+; 且当输入信号()x t 出现延时,即输入信号是0()x t t -时, 输出信号也产生同样的延时,即输出信号是0()y t t -。 其中,如果当12()()()x t x t x t =+时,12()()()y t y t y t =+,则称系统具有叠加性; 如果当1()()x t ax t =时,1()()y t ay t =则称系统具有均匀性。 线性时不变系统是最基本的一类系统,是研究复杂系统,如非线性、时变系统的基础。 6.线性时不变系统的意义与应用? 线性时不变系统是我们本课程分析和研究的主要对象,对线性时不变性进行推广,可以得到线性时不变系统具有微分与积分性质,假设系统的输入与输出信号分别为()x t 和()y t ,则 当输入信号为 ()dx t dt 时,输出信号则为() dy t dt ; 或者当输入信号为()t x d ττ-∞ ?时,输出信号则为()t y d ττ-∞ ?。 另外,线性时不变系统对信号的处理作用可以用冲激响应(或单位脉冲响应)、系统函数或频率响应进行描述。而且多个系统可以以不同的方式进行连接,基本的连接方式为:级联和并联。 假设两个线性时不变系统的冲激响应分别为:1()h t 和2()h t , 当两个系统级联后,整个系统的冲激响应为:12()()*()h t h t h t =; 当两个系统并联后,整个系统的冲激响应为:12()()()h t h t h t =+; 当0t <时,若()0h t =, 则此系统为因果系统; 若|()|h t dt ∞ -∞<∞?, 则此系统为稳定系统。 第二章 连续时间系统的时域分析 1.如何获得系统的数学模型? 数学模型是实际系统分析的一种重要手段,广泛应用于各种类型系统的分析和控制之中。 不同的系统,其数学模型可能具有不同的形式和特点。对于线性时不变系统,其数学模型

按频率抽取基2-快速傅里叶逆变换算法_MATLAB代码

function x=MyIFFT_FB(y) %MyIFFT_TB:My Inverse Fast Fourier Transform Time Based %按频率抽取基2-傅里叶逆变换算法 %input: % y -- 傅里叶正变换结果,1*N的向量 %output: % x -- 逆变换结果,1*N的向量 %参考文献: % https://www.360docs.net/doc/d78009536.html,/view/fea1e985b9d528ea81c779ee.html N=length(y); x=conj(y); %求共轭 x=MyFFT_FB(x);%求FFT x=conj(x);%求共轭 x=x./N;%除以N end %% 内嵌函数====================================================== function y=MyFFT_FB(x,n) %MYFFT_TB:My Fast Fourier Transform Frequency Based %按频率抽取基2-fft算法 %input: % x -- 输入的一维样本 % n -- 变换长度,缺省时n=length(x) 当n小于x数据长度时,x数据被截断到第n个数据% 当n大于时,x数据在尾部补0直到x 含n个数据 %output: % y -- 1*n的向量,快速傅里叶变换结果 %variable define: % N -- 一维数据x的长度 % xtem -- 临时储存x数据用 % m,M -- 对N进行分解N=2^m*M,M为不能被2整除的整数 % two_m -- 2^m % adr -- 变址,1*N的向量 % l -- 当前蝶形运算的级数 % W -- 长为N/2的向量,记录W(0,N),W(1,N),...W(N/2-1,N) % d -- 蝶形运算两点间距离 % t -- 第l级蝶形运算含有的奇偶数组的个数 % mul -- 标量,乘数 % ind1,ind2 -- 标量,下标 % tem -- 标量,用于临时储存 %参考文献: % https://www.360docs.net/doc/d78009536.html,/view/fea1e985b9d528ea81c779ee.html %% 输入参数个数检查

快速傅里叶变换实验报告..

快速傅里叶变换实验报告 班级: 姓名: 学号:

快速傅里叶变换 一.实验目的 1.在理论学习的基础上,通过本实验加深对快速傅立叶变换的理解; 2.熟悉并掌握按时间抽取FFT 算法的程序; 3.了解应用FFT 进行信号频谱分析过程中可能出现的问题,例如混淆、泄漏、栅栏效应等,以便在实际中正确应用FFT 。 二.实验内容 1.仔细分析教材第六章‘时间抽取法FFT ’的算法结构,编制出相应的用FFT 进行信号分析的C 语言(或MATLAB 语言)程序; 2.用FFT 程序分析正弦信号 ()sin(2)[()(*)],(0)1y t f t u t u t N T t u π=---∞<<+∞=设 分别在以下情况进行分析并讨论所得的结果: a ) 信号频率f =50Hz ,采样点数N=32,采样间隔T=0.000625s b ) 信号频率f =50Hz ,采样点数N=32,采样间隔T=0.005s c ) 信号频率f =50Hz ,采样点数N=32,采样间隔T=0.0046875s d ) 信号频率f =50Hz ,采样点数N=32,采样间隔T=0.004s e ) 信号频率 f =50Hz ,采样点数N=64,采样间隔T=0.000625s f ) 信号频率f =250Hz ,采样点数N=32,采样间隔T=0.005s g ) 将c ) 信号后补32个0,做64点FFT 三.实验要求 1.记录下实验内容中各种情况下的X (k)值,做出频谱图并深入讨论结果,说明参数的变化对信号频谱产生哪些影响。频谱只做模特性,模的最大值=1,全部归一化;

2.打印出用C 语言(或MATLAB 语言)编写的FFT 源程序,并且在每一小段处加上详细的注释说明; 3.用C 语言(或MATLAB 语言)编写FFT 程序时,要求采用人机界面形式: N , T , f 变量均由键盘输入,补零或不补零要求设置一开关来选择。 四.实验分析 对于本实验进行快速傅里叶变换,依次需要对信号进行采样,补零(要求补零时),码位倒置,蝶形运算,归一化处理并作图。 此外,本实验要求采用人机界面形式,N,T,F 变量由键盘输入,补零或不补零设置一开关来选择。 1.采样 本实验进行FFT 运算,给出的是正弦信号,需要先对信号进行采样,得到有限 长序列()n x , N n ...... 2,1,0= Matlab 实现: t=0:T:T*(N-1); x=sin(2*pi*f*t); 2.补零 根据实验要求确定补零与否,可以用if 语句做判断,若为1,再输入补零个数, 并将补的零放到采样得到的序列的后面组成新的序列,此时新的序列的元素个数等于原采样点个数加上补零个数,并将新的序列个数赋值给N 。 Matlab 实现: a=input('是否增加零点? 是请输入1 否请输入0\n'); if (a) ZeroNum=input('请输入增加零点的个数:\n'); else ZeroNum=0; end if (a) x=[x zeros(1, ZeroNum)];%%指令zeros(a,b)生成a 行b 列全0矩阵,在单行矩阵x 后补充0 end N=N+ZeroNum; 3.码位倒置 本实验做FFT 变换的级数为M ,N M 2log =

常用傅立叶变换表

时域信号 弧频率表示的 傅里叶变换 注释 1 线性 2 时域平移 3 频域平移, 变换2的频域对应4 如果值较大,则会收缩 到原点附近,而会扩 散并变得扁平. 当 | a | 趋向 无穷时,成为 Delta函数。 5 傅里叶变换的二元性性质。通过 交换时域变量和频域变量 得到. 6 傅里叶变换的微分性质 7 变换6的频域对应 8 表示和的卷积—这

9 矩形脉冲和归一化的sinc 函数 10 变换10的频域对应。矩形函数是理想的低通滤波器,sinc 函数是这类滤波器对反因果冲击的响应。 11 tri 是三角形函数 12 变换12的频域对应 13 高斯函数 exp( ? αt 2) 的傅里叶变换是他本身. 只有当 Re(α) > 0时,这是可积的。 14 15 16 a>0 17 变换本身就是一个公式

18 δ(ω) 代表狄拉克δ函数分布. 这 个变换展示了狄拉克δ函数的重要 性:该函数是常函数的傅立叶变换 19 变换23的频域对应 20 由变换3和24得到. 21 由变换1和25得到,应用了欧拉公 式: cos(at) = (e iat + e?iat) / 2. 22 由变换1和25得到 23 这里, n是一个自然数. δ(n)(ω) 是狄拉克δ函数分布的n阶微分。这 个变换是根据变换7和24得到的。 将此变换与1结合使用,我们可以变 换所有多项式。 24 此处sgn(ω)为符号函数;注意此变 换与变换7和24是一致的. 25 变换29的推广. 26 变换29的频域对应. 27 此处u(t)是单位阶跃函数; 此变换 根据变换1和31得到.

快速傅里叶变换实验报告

快速傅里叶变换实验报告

————————————————————————————————作者:————————————————————————————————日期: ?

快速傅里叶变换实验报告 机械34班 刘攀 2013010558 一、 基本信号(函数)的FF T变换 1. 000()sin()sin 2cos36x t t t t π ωωω=+++ 1) 采样频率08s f f =,截断长度N =16; 取02ωπ=rad/s,则0f =1Hz ,s f =8Hz ,频率分辨率 f ?=s f f N ?= =0.5Hz 。 最高频率c f =30f =3Hz ,s f >2c f ,故满足采样定理,不会发生混叠现象。 截断长度02T T =,整周期截取,不会发生栅栏效应。理论上有一定的泄漏,但在整周期 截取的情况下,旁瓣上的采样都约为 0,泄漏现象没有体现出来。 频谱图如下:

幅值误差0A ?=,相位误差0??=。 2) 采样频率08s f f =,截断长度N=32; 取02ωπ=rad/s ,则0f =1Hz,s f =8Hz ,频率分辨率f ?=s f f N ?==0.25Hz 。 最高频率c f =30f =3H z,s f >2c f ,故满足采样定理,不会发生混叠现象。 截断长度04T T =,整周期截取,不会发生栅栏效应。理论上有一定的泄漏,但在整周期 截取的情况下,旁瓣上的采样都约为 0,泄漏现象没有体现出来。 频谱图如下:

幅值误差0A ?=,相位误差0??=。 2. 00()sin()sin116x t t t π ωω=++ 1) 采样频率08s f f =,截断长度N=16; 取02ωπ=ra d/s,则0f =1Hz ,s f =8Hz,频率分辨率f ?=s f f N ?==0.5H z。 最高频率c f =110f =11H z,s f <2c f ,故不满足采样定理,会发生混叠现象。 截断长度02T T =,整周期截取,不会发生栅栏效应。理论上有一定的泄漏,但在整周期 截取的情况下,旁瓣上的采样都约为 0,泄漏现象没有体现出来。 频谱图:

快速傅里叶变换实验报告

快速傅里叶变换实验报告 快速傅里叶变换实验报告 机械34班刘攀 2019010558 一、基本信号(函数)的FFT变换 1. x(t)=sin(ω0t+)+sin2ω0t+cos3ω0t 6 1) 采样频率fs=8f0,截断长度N=16; 取ω0=2πrad/s,则f0=1Hz,fs=8Hz,频率分辨率?f=?f=fs=0.5Hz。 Nπ最高频率fc=3f0=3Hz,fs>2fc,故满足采样定理,不会发生混叠现象。截断长度T=2T0,整周期截取,不会发生栅栏效应。理论上有一定的泄漏,但在整周期截取的情况下,旁瓣上的采样都约为 0,泄漏现象没有体现出来。 频谱图如下: 幅值误差?A=0,相位误差??=0。 2) 采样频率fs=8f0,截断长度N=32; 取ω0=2πrad/s,则f0=1Hz,fs=8Hz,频率分辨率?f=?f=fs=0.25Hz。 N最高频率fc=3f0=3Hz,fs>2fc,故满足采样定理,不会发生混叠现象。截断长度T=4T0,整周期截取,不会发生栅栏效应。理论上有一定的泄漏,但在整周期截取的情况下,旁瓣上的采样都约为 0,泄漏现象没有体现出来。 频谱图如下: 幅值误差?A=0,相位误差??=0。 2. x(t)=sin(ω0t+π 6)+sin11ω0t 1) 采样频率fs=8f0,截断长度N=16; 取ω0=2πrad/s,则f0=1Hz,fs=8Hz,频率分辨率?f=?f=fs=0.5Hz。 N最高频率 fc=11f0=11Hz,fs 漏,但在整周期截取的情况下,旁瓣上的采样都约为 0,泄漏现象没有体现出来。 频谱图:

由上图可以看出,并未体现出11f0的成分,说明波形出现混叠失真。为了消除混叠 现象,应加大采样频率,使之大于等于 22Hz。 f0处的幅值误差?A=0,11f0处由于出现 了混叠现象,幅值误差没有意义;相位误差??=0。 2) 采样频率fs=32f0,截断长度N=32; 取ω0=2πrad/s,则f0=1Hz,fs=32Hz,频率分辨率?f=?f=fs=1Hz。 N最高频率 fc=11f0=11Hz,fs>2fc,故满足采样定理,不会发生混叠现象。 漏,但在整周期截取的情况下,旁瓣上的采样都约为 0,泄漏现象没有体现出来。 频谱图: 该频谱图体现出了f0和11f0的成分,说明未失真,且幅值均为1,。幅值误差?A=0,相位误差??=0。 3. x(t)=0t 1) 采样频率fs=8f0,截断长度N=16; 取ω0=2πrad/s,则f0=1Hz,fs=8Hz,频率分辨率?f=?f=fs=0.5Hz。 N最高频率f cf 0Hz,fs>2fc,故满足采样定理,不会发生混叠现象。 频谱图: 在忽略旁瓣信号的情况下,可近似认为: x(t)≈0.9098cos(3ω0t+56.9520?) 故幅值误差?A=0.9096-1=-0.0904,相位误差??=56.9520?。 2) 采样频率fs=32f0,截断长度N=32; 取ω0=2πrad/s,则f0=1Hz,fs=32Hz,频率分辨率?f=?f=fs=1Hz。N最高频率f cf 0Hz,fs>2fc,故满足采样定理,不会发生混叠现象。 频谱图: 在忽略旁瓣信号的情况下,可近似认为:

第七章 傅里叶变换.

第七章 傅里叶变换 1.求下列函数的傅氏变换: (1)1,10, ()1, 01,0,; t f t t --<? 解: (1)[()]()j t F f t f t e dt ω+∞--∞ =? 1 101 10 1 1 22sin cos | 2(1cos ).j t j t j t j t e dt e dt e dt e dt j i tdt t j ωωωωωωω ωω -----=-+=-+=-= =- -????? (2) ()()j t F f t e dt ωω+∞--∞ =? 0(1)(1)0 11|.11t j t j t j t e e dt e dt e j j ωωωωω ---∞ -∞ --∞====--?? 6.求下列函数的傅氏变换 (1) 1,0,sgn 1,0;t t t -? (2) ()sin(5).3f t t π =+ 解: (1)已知 1 [()](),[1]2(),F u t F j πδωπδωω = +=由sgn 2()1t u t =-有 12[sgn ]2( ())2().F t j j πδωπδωωω =+-= (2) 由于 1()sin(5)sin 5cos5,322f t t t t π=+=+ 故 [()][(5)(5)](5)(5)].2j F f t πδωδωδωδω= +--++- 7.已知00()[()()]F ωπδωωδωω=++-为函数()f t 的傅氏变换,求().f t

快速傅里叶变换实验报告

快速傅里叶变换实验报告 机械34班 攀 2013010558 一、 基本信号(函数)的FFT 变换 1. 000()sin()sin 2cos36 x t t t t πωωω=+++ 1) 采样频率08s f f =,截断长度N=16; 取02ωπ=rad/s ,则0f =1Hz ,s f =8Hz ,频率分辨率f ?=s f f N ?==0.5Hz 。 最高频率c f =30f =3Hz ,s f >2c f ,故满足采样定理,不会发生混叠现象。 截断长度02T T =,整周期截取,不会发生栅栏效应。理论上有一定的泄漏,但在整周期 截取的情况下,旁瓣上的采样都约为 0,泄漏现象没有体现出来。 频谱图如下:

幅值误差0A ?=,相位误差0??=。 2) 采样频率08s f f =,截断长度N=32; 取02ωπ=rad/s ,则0f =1Hz ,s f =8Hz ,频率分辨率f ?=s f f N ?==0.25Hz 。 最高频率c f =30f =3Hz ,s f >2c f ,故满足采样定理,不会发生混叠现象。 截断长度04T T =,整周期截取,不会发生栅栏效应。理论上有一定的泄漏,但在整周期 截取的情况下,旁瓣上的采样都约为 0,泄漏现象没有体现出来。 频谱图如下:

幅值误差0A ?=,相位误差0??=。 2. 00()sin()sin116 x t t t πωω=++ 1) 采样频率08s f f =,截断长度N=16; 取02ωπ=rad/s ,则0f =1Hz ,s f =8Hz ,频率分辨率f ?=s f f N ?==0.5Hz 。 最高频率c f =110f =11Hz ,s f <2c f ,故不满足采样定理,会发生混叠现象。 截断长度02T T =,整周期截取,不会发生栅栏效应。理论上有一定的泄漏,但在整周期 截取的情况下,旁瓣上的采样都约为 0,泄漏现象没有体现出来。 频谱图:

快速傅里叶变换FFT.

————第四章———— 快速傅里叶变换FFT 所谓的快速算法,就是根据原始变换定义算法的运算规律及其中的某些算子的特殊性质,找出减少乘法和加法运算次数的有效途径,实现原始变换的各种高效算法。一种好的快速算法可使变换速度提高几个数量级。 由于快速算法很多,而且还在不断研究和发展。较成熟的算法都有现成的程序。所以,通过教材中介绍的四种快速算法,主要学习研究快速算法的基本思想和减少运算量的途径,熟悉各种快速算法的特点、运算效率和适用情况。为今后研究新的快速算法和合理选用快速算法打好基础。 4.1 学 习 要 点 4.1.1 直接计算N 点DFT 的运算量 对于 ()(),1 0∑-==N n kn N W n x k X 1,,1,0-=N k 复数乘法次数: 2 N M c = 复数加法次数: ()1-=N N A c 当1>>N 时,复数乘法和加法次数都接近为2 N 次,随着N 增大非线性增大。 4.1.2 减少运算量的基本途径 DFT 定义式中只有两种运算:()n x 与kn N W 的乘法相加。所以,kn N W 的特性对乘法运算 量必有影响。 (1)根据的对称性、周期性和特殊值减少乘法运算次数。 ①对称性:k N N k N W W -=+ 2 ,()k k N N W 12-=,()k N k N N W W =* - ②周期性:k N lN k N W W =+。 ③kn N W 的特殊值(无关紧要旋转因子): 1;;124 -===±N N N N N W j W W 。对这些因子不能进行乘法运算。 (2)将较大数N 点DFT 分解为若干个小数点DFT 的组合,减少运算量。这正是FFT 能大量节省运算量的关键。 4.1.3 四种快速算法的基本思想及特点 根据上述减少运算量的途径,巧妙地在时域或频域进行不同的抽取分解与组合,得到不

快速傅里叶变换实验

快速傅里叶变换实验

————————————————————————————————作者:————————————————————————————————日期: ?

实验七快速傅里叶变换实验 2011010541?机14 林志杭 一、实验目的 1.加深对几个特殊概念的理解:“采样”……“混叠”;“窗函数”(截断)……“泄漏”;“非整周期截取”……“栅栏”。 2.加深理解如何才能避免“混叠”,减少“泄漏”,防止“栅栏”的方法和措施以及估计这些因素对频谱的影响。 3.对利用通用微型计算机及相应的FFT软件,实现频谱分析有一个初步的了解。 二、实验原理 为了实现信号的数字化处理,利用计算机进行频谱分析――计算信号的频谱。由于计算机只能进行有限的离散计算(即DFT),因此就要对连续的模拟信号进行采样和截断。而这两个处理过程可能引起信号频谱的畸变,从而使DFT的计算结果与信号的实际频谱有误差。有时由于采样和截断的处理不当,使计算出来的频谱完全失真。因此在时域处理信号时要格外小心。 时域采样频率过低,将引起频域的“混叠”。为了避免产生“混叠”,要求时域采样时必须满足采样定理,即:采样频率fs必须大于信号中最高频率fc的2倍(fs>2fc)。因此在信号数字处理中,为避免混叠,依不同的信号选择合适的采样频率将是十分重要的。 频域的“泄漏”是由时域的截断引起的。时域的截断使频域中本来集中的能量向它的邻域扩散(如由一个δ(f)变成一个sinc(f),而泄漏的旁瓣将影响其它谱线的数值。时域截断还会引起“栅栏效应”,对周期信号而言,它是由于截断长度不等于周期信号的周期的整数倍而引起的。因此避免“栅栏”效应的办法就是整周期截断。 综上所述,在信号数字化处理中应十分注意以下几点: 1.为了避免“混叠”,要求在采样时必须满足采样定理。 为了减少“泄漏”,应适当增加截断长度和选择合适的窗 对信号进行整周期截取,则能消除“栅栏数应”。 增加截断长度,则可提高频率分辨率。 三、预习内容 熟悉Matlab语言、函数和使用方法;利用Matlab所提供的FFT函数编写程序。 四、实验内容及步骤 调通所编写的程序,对下列信号〔函数〕进行离散FFT变换,根据题目的要求……FFT变换点数〔截断长度〕及采样频率,计算各点的傅里叶变换值,画出频谱图,对典型的谱线标出其幅值及相角。 (-)内容: 1. t t t t x 3 cos 2 sin ) 6 sin( )(ω ω π ω+ + + = 代码: N=input('N='); n=input('n=');t=1:1:N;

傅里叶算法的采样电流计算

傅里叶算法的采样电流计算 ******* 广西大学******* 摘要:微机继电保护是用数学运算的方法实现故障的测量、分析和判断的。通过全波傅立叶算法可用于求出各次谐波分量的幅值和相角,并具有一定的滤波作用。本文探讨了傅氏算法在电力系统中的应用。介绍了全波傅立叶算法的基本原理。通过仿真验证了该算法的实用性。 关键词:微机继电保护;电力系统;算法 引言 在微机保护装置中,首先要对反映被保护设备的电气量模拟量进行采集,然后对这些采集的数据进行数字滤波,再对这些经过数字滤波的数字信号进行数学运算、逻辑运算,并进行分析判断,最终输出跳闸命令、信号命令或计算结果,以实现各种继电保护功能。这种对数据进行处理、分析、判断以实现保护功能的方法称为算法。目前广泛采用全波傅氏算法和最小二乘法作为电力系统微机保护提取基波分量的算法。 傅立叶算法可用于求出各谐波分量的幅值和相角,所以它在微机保护中作为计算信号幅值的算法被广泛采用。实际上,傅立叶算法也是一种滤波方法。分析可知,全周傅氏算法可有效滤除恒定直流分量和各正次谐波分量。 傅里叶算法原理 一个周期函数满足狄里赫利条件,就可以将这个周期函数分解为一个级数,最为常用的级数是傅里叶级数,傅氏算法的基本思路来自傅里叶级数,

即一个周期性函数可以分解为直流分量、基波分量及各次谐波的无穷级数,如 ∑∞ =+=011)()]sin()cos([n n n t t nw a t nw b i (1.1) 式中1w 表示基波角频率;n a 和n b 分别是各次谐波的正弦和余弦的幅值, 其中比较特殊的有:0b 表示直流分量,11,b a 表示基波分量正、余弦项的幅 值。根据傅氏级数的原理,可以求出n a 、n b 分别为 ?=T t n dt t nw i T a 0 1)()sin(2 (1.2) ?=T t n dt t nw i T b 0 1)()cos(2 (1.3) 于是n 次谐波电流分量可表示为 )sin()cos()(11t nw a t nw b t i n n n += (1.4) 据此可求出n 次谐波电流分量的有效值和相角为 ???????=+=n n n n n n a b a b a I arctan 222 (1.5) 其中n a 、n b 可用梯形积分法近似求出为

相关文档
最新文档