实验四 快速傅里叶变换(FFT)

实验四 快速傅里叶变换(FFT)
实验四 快速傅里叶变换(FFT)

实验四 快速傅里叶变换(FFT )

4.1实验目的

1)加深对快速傅里叶变换(FFT )基本理论的理解;

2)了解使用快速傅里叶变换(FFT )计算有限长序列和无限长序列信号频谱的方法;

3)掌握用MATLAB 语言进行快速傅里叶变换时常用的子函数。

4.2实验原理

1)用MATLAB 提供的子函数进行快速傅里叶变换

从理论学习可知,DFT 是唯一在时域和频域均为离散序列的变换方法,它适用于有限长序列。尽管这种变换方法是可以用于数值计算的,但如果只是简单的按照定义进行数据处理,当序列长度很大时,则将占用很大的内存空间,运算时间将很长。

快速傅里叶变换是用于DFT 运算的高效运算方法的统称,FFT 只是其中的一种。FFT 主要有时域抽取算法和频域抽取算法,基本思想是将一个长度为N 的序列分解成多个短序列,如基2算法、基4算法等,大大缩短了运算的时间。

MATLAB 中提供了进行快速傅里叶变换(FFT )的子函数,用fft 计算DFT ,用ifft 计算IDFT 。

2)用FFT 计算有限长序列的频谱

基本概念:

一个序号从1n 到2n 的时域有限长序列()x n ,它的频谱()j X e ω定义为它的离散时间傅里叶变换,且在奈奎斯特(Nyquist )频率范围内有界并连续。序列的长度为N ,则211N n n =?+。计算()x n 的离散傅里叶变换(DFT )得到的是()j X e ω的N 个样本点()k j X e ω。其中数字频率为

k 2πω()d ωk k N

== 式中:d ω为数字频率的分辨率;k 取对应-(N -1)/2到(N -1)/2区间的整数。

在实际使用中,往往要求计算出信号以模拟频率为横坐标的频谱,此时对应的模拟频率为

s s 2π2π?ω/T ()()T k k k k kD N L

==== 式中:D 为模拟频率的分辨率或频率间隔;T s 为采样信号的周期,Ts =1/Fs ;定义信号时域长度L =N T s 。

在使用FFT 进行DFT 的高效运算时,一般不直接用n 从n 1到n 2的()x n ,而是取x(

)n 的主值区间(n =0,1,…,N -1)的数据,经FFT 将产生N 个数据,定位在k =0,1,…,N -1的数字频率点上,

即对应[0,2π]

。如果要显示[-π,π]范围的频谱,则可以使用fftshift(X)进行位移。 频谱的显示及分辨率问题:

例1: 已知有限长序列()x n =[1,2,3,2,1],其采样频率F s =10 Hz 。请使用FFT 计算其频谱。 MATLAB 程序如下:

Fs=10;

xn=[1, 2, 3, 2, 1]; N=length(xn);

D=2*pi*Fs/N; %计算模拟频率分辨率

k=floor(-(N-1)/2: (N-1)/2); %频率显示范围对应 [-π,π]

X=fftshift(fft(xn, N)); %作FFT 运算且移位π

subplot(1, 2, 1); plot(k*D, abs(X), 'o:'); %横轴化成模拟频率作幅度谱

title('幅度频谱'); xlabel('rad/s');

subplot(1, 2, 2); plot(k*D, angle(X), 'o:'); %横轴化成模拟频率作相位谱

title('相位频谱'); xlabel('rad/s');

由运行结果可知,当有限长序列的长度N =5时,频谱的频率样本点数也为5,如图上用“。”表示的点位。频率点之间的间距非常大,即分辨率很低。即使使用了plot 命令的插值功能,显示出的曲线仍是断断续续的,与真实曲线有较大的误差。

改变分辨率的基本方法是给输入序列补零,即增加频谱的密度。注意,这种方法只是改善了图形的视在分辨率,并不增加频谱的细节信息。

将上述有限长序列()x n =[1,2,3,2,1]末尾补0到N =1000点,将程序改为:

Fs=10; N=1000;

xn=[1, 2, 3, 2, 1]; Nx=length(xn);

xn=[1, 2, 3, 2, 1, zeros(1, N-Nx)];

(下同,略)

此时程序执行结果可以看出,图形的分辨率提高,曲线几乎是连续的频谱了。

实偶序列如何补0问题:

例2: 已知一个矩形窗函数序列为

15x()0

5

n n n ?≤?=?>?? 采样周期T s =0.5 s ,要求用FFT 求其频谱。 解:由于该序列是一个实的偶序列,因而补0时需要仔细分析。假定按N =32补0,则主值区域在n =0~31,FFT 的输入应为

()[ones(1,6),zeros(1,11),ones(1,5)]x n N =?

即原来n =[-5:-1]的前五个点移到n =[27:31]中去了。

下面考虑分别用N =32,64,512,观察不同N 值代入对频谱的影响。

程序如下:

Ts=0.5; C=[32, 64, 512]; %输入不同的N 值

for r=0: 2;

N=C(r+1);

xn=[ones(1, 6), zeros(1, N-11), ones(1, 5)];

%建立x(n) D=2*pi/(N*Ts);

k=floor(-(N-1)/2: (N-1)/2);

X=fftshift(fft(xn, N));

subplot(3, 2, 2*r+1); plot(k*D, abs(X)); %幅度频谱

subplot(3, 2, 2*r+2); stairs(k*D, angle(X)); %相位频谱

end

注意:此处相位频谱使用了stairs ,因为该相位频谱变化率比较陡峭。

如果将x(n)的输入写成: ()x n =[ones(1,11),zeros(1,N -11)];%建立x(n -5)

相当于起点不是取自n =0而是n =-5,计算的是x(n -5)的频谱。幅度频谱不受影响,相位频谱引入一个线性相位-5w 。

3)用FFT 计算无限长序列的频谱

用FFT 进行无限长序列的频谱计算,首先要将无限长序列截断成一个有限长序列。序列长度的取值对频谱有较大的影响,带来的问题是引起频谱的泄漏和波动。

例3:已知一个无限长序列为

0.5e 0x()00

n

n n n ??≥=?

采样频率F s =20 Hz ,要求用FFT 求其频谱。

MATLAB 程序如下:

Fs=20; C=[8, 16, 128]; %输入不同的N 值

for r=0:2;

N=C(r+1);

n=0: N-1;

xn=exp(-0.5*n); %建立x(n)

D=2*pi*Fs/N;

k=floor(-(N-1)/2: (N-1)/2);

X=fftshift(fft(xn, N));

subplot(3, 2, 2*r+1); plot(k*D, abs(X));

axis([-80, 80, 0, 3]);

subplot(3, 2, 2*r+2); stairs(k*D, angle(X));

axis([-80, 80, -1, 1]);

end

由运行结果可见,N 值取得越大,即序列保留得越长,曲线精度越高。

例4:用FFT 计算下列连续时间信号的频谱,并观察选择不同的Ts 和N 值对频谱特性的影响。

0.01a ()(sin 2sin 2.1sin 2.2),0t x t e t t t t ?=++≥

解 该题选择了三个非常接近的正弦信号,为了将各频率成分区分出来,在满足奈奎斯特定理的条件下确定采样周期,选择三组数据,分别是T s =0.5 s 、0.25 s 和0.125 s ;再确定N 值,分别选择N =256和2048。观察不同Ts 和N 的组合对频谱的影响。

程序如下:

T0=[0.5, 0.25, 0.125, 0.125]; %输入不同的Ts 值

N0=[256, 256, 256, 2048]; %输入不同的N 值

for r=1: 4;

Ts=T0(r); N=N0(r); %赋Ts 和N 值

n=0: N-1;

D=2*pi/(Ts*N); %计算模拟频率分辨率

xa=exp(-0.01*n*Ts).*(sin(2*n*Ts)+sin(2.1*n*Ts)+sin(2.2*n*Ts));

k=floor(-(N-1)/2: (N-1)/2);

Xa=Ts*fftshift(fft(xa, N));

subplot(2, 2, r); plot(k*D, abs(Xa), 'k');

axis([1, 3, 1.1*min(abs(Xa)), 1.1*max(abs(Xa))]);

end

由运行结果可以得出以下结论:

(1) N同样取256(如前三个图形),当Ts越大时,时域信号的长度L=N T s保留得越长,则分辨率越高,频谱特性误差越小;反之,则分辨率越低,频谱特性误差越大,甚至丢失某些信号分量。

(2) T s相同(如后两个图形),当N越大时,在[0,2π]范围内等间隔抽样点数越多,且时域信号的长度L=N T s保留得越长,则分辨率越高,频谱特性误差越小;反之,当N越小时,在[0,2π]范围内等间隔抽样点数越少,则有可能漏掉某些重要的信号分量,称为栅栏效应。

4.3实验内容

1)阅读并输入实验原理中介绍的例题程序,观察输出的数据和图形,结合基本原理理解每一条语句的含义。

2)已知有限长序列x(n)=[1,0.5,0,0.5,1,1,0.5,0],要求:

①用FFT算法求该时域序列的DFT、IDFT的图形;

②假定采样频率F s=20 Hz,序列长度N分别取8、32和64,使用FFT来计算其幅度频谱和相位频谱。

③已知一个无限长序列x(n)=0.5n(n≥0),采样周期Ts=0.2 s,要求序列长度N分别取8、32和64,用FFT求其频谱。

4.4实验报告

(1)列写调试通过的实验内容程序,打印或描绘实验程序产生的图形和数据。

(2)思考题:使用MATLAB语言提供的快速傅里叶变换(FFT)有关子函数,进行有限长和无限长序列频谱分析时,需注意哪些问题?

MAtlab傅里叶变换实验报告

班级信工142 学号 22 姓名何岩实验组别实验日期室温报告日期成绩报告内容:(目的和要求,原理,步骤,数据,计算,小结等) 1.求信号的离散时间傅立叶变换并分析其周期性和对称性; 给定正弦信号x(t)=2*cos(2*pi*10*t),fs=100HZ,求其DTFT。 (a)代码: f=10;T=1/f;w=-10:0.2:10; t1=0:0.0001:1;t2=0:0.01:1; n1=-2;n2=8;n0=0;n=n1:0.01:n2; x5=[n>=0.01]; x1=2*cos(2*f*pi*t1); x2=2*cos(2*f*pi*t2); x3=(exp(-j).^(t2'*w)); x4=x2*x3; subplot(2,2,1);plot(t1,x1); axis([0 1 1.1*min(x2) 1.1*max(x2)]); xlabel('x(n)');ylabel('x(n)'); title('原信号x1'); xlabel('t');ylabel('x1'); subplot(2,2,3);stem(t2,x2); axis([0 1 1.1*min(x2) 1.1*max(x2)]); title('原信号采样结果x2'); xlabel('t');ylabel('x2'); subplot(2,2,2);stem(n,x5); axis([0 1 1.1*min(x5) 1.1*max(x5)]); xlabel('n');ylabel('x2'); title('采样函数x2'); subplot(2,2,4);stem(t2,x4); axis([0 1 -0.2+1.1*min(x4) 1.1*max(x4)]); xlabel('t');ylabel('x4'); title('DTFT结果x4'); (b)结果: 2.用以下两个有限长序列来验证DTFT的线性、卷积和共轭特性; (n) x1(n)=[1 2 3 4 5 6 7 8 9 10 11 12];x2(n)=R 10 (1)线性:(a)代码: w=linspace(-8,8,10000); nx1=[0:11]; nx2=[0:9]; x1=[1 2 3 4 5 6 7 8 9 10 11 12];

实验八 利用快速傅里叶变换(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)

MAtlab 傅里叶变换 实验报告

陕西科技大学实验报告 班级信工142 学号22 姓名何岩实验组别实验日期__________ 室温_____________ 报告日期________________ 成绩报告内容:(目的和要求,原理,步骤,数据,计算,小结等) 1.求信号的离散时间傅立叶变换并分析其周期性和对称性; 给定正弦信号x(t)=2*cos(2*pi*10*t),fs=100HZ, 求其DTFT (a)代码: f=10;T=1/f;w=-10:0.2:10; t1=0:0.0001:1;t2=0:0.01:1; n1=-2; n2=8; n0=0; n=n 1:0.01: n2; x5=[ n>=0.01]; x1=2*cos(2*f*pi*t1); x2=2*cos(2*f*pi*t2); x3=(exp(-j)4(t2'*w)); x4=x2*x3; subplot(2,2,1);plot(t1,x1); axis([0 1 1.1*mi n(x2) 1.1*max(x2)]); xlabel('x( n)');ylabel('x( n)'); title('原信号x1'); xlabel('t');ylabel('x1'); subplot(2,2,3);stem(t2,x2); axis([0 1 1.1*mi n(x2) 1.1*max(x2)]); title(' 原信号采样结果x2'); xlabel('t');ylabel('x2'); subplot(2,2,2);stem( n, x5); axis([0 1 1.1*mi n(x5) 1.1*max(x5)]); xlabel(' n');ylabel('x2'); title(' 采样函数x2'); subplot(2,2,4);stem(t2,x4); axis([0 1 -0.2+1.1*mi n(x4) 1.1*max(x4)]); xlabel('t');ylabel('x4'); title('DTFT 结果x4'); (b)结果:

实验一快速傅里叶变换

实验一 快速傅里叶变换之报告 一 、实验目的 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)=

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

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

快速傅里叶变换 一.实验目的 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 =

FFT超全快速傅里叶

快速傅里叶变换 FFT是离散傅立叶变换的快速算法,可以将一个信号变换到频域。有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了。这就是很多信号分析采用FFT变换的原因。另外,FFT可以将一个信号的频谱提取出来,这在频谱分析方面也是经常用的。 虽然很多人都知道FFT是什么,可以用来做什么,怎么去做,但是却不知道FFT之后的结果是什意思、如何决定要使用多少点来做FFT。 现在圈圈就根据实际经验来说说FFT结果的具体物理意义。一个模拟信号,经过ADC采样之后,就变成了数字信号。采样定理告诉我们,采样频率要大于信号频率的两倍,这些我就不在此罗嗦了。 采样得到的数字信号,就可以做FFT变换了。N个采样点,经过FFT之后,就可以得到N个点的FFT结果。为了方便进行FFT运算,通常N取2的整数次方。 假设采样频率为Fs,信号频率F,采样点数为N。那么FFT之后结果就是一个为N点的复数。每一个点就对应着一个频率点。这个点的模值,就是该频率值下的幅度特性。具体跟原始信号的幅度有什么关系呢?假设原始信号的峰值为A,那么FFT的结果的每个点(除了第一个点直流分量之外)的模值就是A的N/2倍。而第一个点就是直流分量,它的模值就是直流分量的N倍。而每个点的相位呢,就是在该频率下的信号的相位。第一个表示直流分量(即0Hz),而最后一个点N的再下一个点(实际上这个点是不存在的,这里是假设的第N+1个点,也可以看做是将第一个点分做两半分,另一半移到最后)则表示 采样频率Fs,这中间被N-1个点平均分成N等份,每个点的频率依次增加。例如某点n所表示的频率为:Fn=(n-1)*Fs/N。由上面的公式可以看出,Fn所能分辨到频率为为Fs/N,如果采样频率Fs为1024Hz,采样点数为1024点,则可以分辨到1Hz。1024Hz的采样率采样1024点,刚好是1秒,也就是说,采样1秒时间的信号并做FFT,则结果可以分析到1Hz,如果采样2秒时间的信号并做FFT,则结果可以分析到0.5Hz。如果要提高

信号与系统实验报告3实验3 傅里叶变换及其性质

信息工程学院实验报告 课程名称: 实验项目名称:实验3 傅里叶变换及其性质 实验时间:2015/11/17 班级:通信141 姓名: 学号: 一、实 验 目 的: 学会运用MATLAB 求连续时间信号的傅里叶(Fourier )变换;学会运用MATLAB 求连续时间信号的频谱图;学会运用MATLAB 分析连续时间信号的傅里叶变换的性质。 二、实 验 设 备 与 器 件 软件:Matlab 2008 三、实 验 原 理 3.1傅里叶变换的实现 信号()f t 的傅里叶变换定义为: ()[()]()j t F F f t f t e dt ωω∞ --∞ ==? , 傅里叶反变换定义为:1 1()[()]()2j t f t F F f e d ωωωωπ ∞ --∞ == ? 。 信号的傅里叶变换主要包括MATLAB 符号运算和MATLAB 数值分析两种方法,下面分别加以探讨。同时,学习连续时间信号的频谱图。 3.1.1 MATLAB 符号运算求解法 MATLAB 符号数学工具箱提供了直接求解傅里叶变换与傅里叶反变换的函数fourier( )和ifourier( )。Fourier 变换的语句格式分为三种。 (1)F=fourier(f):它是符号函数f 的Fourier 变换,默认返回是关于ω的函数。 (2)F=fourier(f,v):它返回函数F 是关于符号对象v 的函数,而不是默认的 ω,即 ()()j v t F v f t e d t ∞ --∞ =? 。 (3)F=fourier(f,u,v):是对关于u 的函数f 进行变换,返回函数F 是关于v 的函数,即 ()()jvu F v f t e du ∞ --∞ =?。 傅里叶反变换的语句格式也分为三种。 (1)f=ifourier(F):它是符号函数F 的Fourier 反变换,独立变量默认为ω,默认返回是关于x 的函数。 (2)f=ifourier(F,u):它返回函数f 是u 的函数,而不是默认的x 。 (3)f=ifourier(F,u,v):是对关于v 的函数F 进行反变换,返回关于u 的函数f 。

快速傅里叶变换实验报告

快速傅里叶变换实验报告

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

快速傅里叶变换实验报告 机械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,泄漏现象没有体现出来。 频谱图:

实验三傅里叶变换及其性质

信息工程学院实验报告 课程名称:信号与系统 实验项目名称:实验3 傅里叶变换及其性质实验时间:2013-11-29 班级: 姓名: 学号: 一、实验目的: 1、学会运用MATLAB 求连续时间信号的傅里叶(Fourier )变换; 2、学会运用MATLAB 求连续时间信号的频谱图; 3、学会运用MATLAB 分析连续时间信号的傅里叶变换的性质。 二、实验环境: 1、硬件:在windows 7 操作环境下; 2、软件:Matlab 版本7.1 三、实验原理: 3.1傅里叶变换的实现 信号()f t 的傅里叶变换定义为: ()[()]()j t F F f t f t e dt ωω∞ --∞ == ? , 傅里叶反变换定义为:1 1 ()[()]()2j t f t F F f e d ωωωωπ ∞ --∞ == ? 。 信号的傅里叶变换主要包括MATLAB 符号运算和MATLAB 数值分析两种方法,下面分别加以探讨。同时,学习连续时间信号的频谱图。 3.1.1 MATLAB 符号运算求解法 MATLAB 符号数学工具箱提供了直接求解傅里叶变换与傅里叶反变换的函数fourier( )和ifourier( )。Fourier 变换的语句格式分为三种。 (1)F=fourier(f):它是符号函数f 的Fourier 变换,默认返回是关于ω的函数。 (2)F=fourier(f,v):它返回函数F 是关于符号对象v 的函数,而不是默认的ω,即()()jvt F v f t e dt ∞ --∞ = ? 。 (3)F=fourier(f,u,v):是对关于u 的函数f 进行变换,返回函数F 是关于v 的函数,即 ()()jvu F v f t e du ∞ --∞ =? 。 傅里叶反变换的语句格式也分为三种。 (1)f=ifourier(F):它是符号函数F 的Fourier 反变换,独立变量默认为ω,默认返回是关于x 的函数。 (2)f=ifourier(F,u):它返回函数f 是u 的函数,而不是默认的x 。 (3)f=ifourier(F,u,v):是对关于v 的函数 F 进行反变换,返回关于u 的函数f 。

快速傅里叶变换实验报告

快速傅里叶变换实验报告 快速傅里叶变换实验报告 机械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,故满足采样定理,不会发生混叠现象。 频谱图: 在忽略旁瓣信号的情况下,可近似认为:

快速傅里叶变换(FFT)课程设计

快速傅里叶变换(FFT)的DSP 实现 (马灿明 计算机学院 计算机应用技术 2110605410) 摘要:本文对快速傅里叶变换(FFT)原理进行简单介绍后,然后介绍FFT 在TMS320C55xx 定 点DSP 上的实现,FFT 算法采用C 语言和汇编混合编程来实现,算法程序利用了CCS 对其结果进行了仿真。 关键字:FFT ,DSP ,比特反转 1.引言 傅里叶变换是将信号从时域变换到频域的一种变换形式,是信号处理领域中一种重要的分析工具。离散傅里叶变换(DFT )是连续傅里叶变换在离散系统中的表现形式。由于DFT 的计算量很大,因此在很长一段时间内使其应用受到很大的限制。 20世纪60年代由Cooley 和Tukey 提出了快速傅里叶变换(FFT )算法,它是快速计算DFT 的一种高效方法,可以明显地降低运算量,大大地提高DFT 的运算速度,从而使DFT 在实际中得到了广泛的应用,已成为数字信号处理最为重要的工具之一。 DSP 芯片的出现使FFT 的实现变得更加方便。由于多数的DSP 芯片都能在单指令周期内完成乘法—累加运算,而且还提供了专门的FFT 指令(如实现FFT 算法所必需的比特反转等),使得FFT 算法在DSP 芯片上实现的速度更快。本节首先简要介绍FFT 算法的基本原理,然后介绍FFT 算法的DSP 实现。 2.FFT 算法的简介 快速傅里叶变换(FFT )是一种高效实现离散傅里叶变换(DFT )的快速算法,是数字信号处理中最为重要的工具之一,它在声学,语音,电信和信号处理等领域有着广泛的应用。 2.1离散傅里叶变换DFT 对于长度为N 的有限长序列x(n),它的离散傅里叶变换(DFT )为 1,1,0, )()(1 0-==∑-=N k W n x k X n n nk N (1) 式中, N j N e W /2π-= ,称为旋转因子或蝶形因子。 从DFT 的定义可以看出,在x(n)为复数序列的情况下,对某个k 值,直接按(1) 式计算X(k) 只需要N 次复数乘法和(N-1)次复数加法。因此,对所有N 个k 值,共需要N 2 次复数乘法和N(N-1)次复数加法。对于一些相当大有N 值(如1024点)来说,直接计算它的DFT 所需要的计算量是很大的,因此DFT 运算的应用受到了很大的限制。 2.2快速傅里叶变换FFT 旋转因子W N 有如下的特性。 。对称性: 2/N k N k N W W +-= 。周期性: N k N k N W W += 利用这些特性,既可以使DFT 中有些项合并,减少了乘法积项,又可以将长序列的DFT

快速傅里叶变换实验报告

快速傅里叶变换实验报告 机械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,泄漏现象没有体现出来。 频谱图:

傅里叶变换实验报告

南昌大学实验报告 学生姓名:学号:6100209228 班级:电子093班 实验类型:□验证□综合■设计□创新实验日期:2011-04-8 实验成绩: 傅里叶变换 (一)实验目的 1、掌握对不同的函数进行傅里叶变换的程序编写; 2、熟悉生成联系周期信号的方法; 3、练习matlab编程。 (二) 实验内容 1.请编写函数F=fsana(t,f,,N),计算周期信号f的前N个指数形式的傅立叶级数系数,t表示f对应的抽样时间(均为一个周期);再编写函数f=fssyn(F,t),由傅立叶级数系数F合成抽样时间t对应的函数。设计信号验证这两个是否正确。 定义F=fsana(t,f,N)。 function F=fsana(t,f,N) omg1=2*pi/(max(t)-min(t)); k=[0:N]'; F=1/length(t)*exp(-j*kron(k*omg1,t.'))*f 定义f=fssyn(F,t) function f=fssyn(F,t) omg1=2*pi/(max(t)-min(t)); N=floor(length(F)/2); k=[0:N]; f=exp(j*kron(t,k*omg1))*F; 运行所定义的函数 T1=2*pi; %一个周期时域范围 N1=300; %时域抽样点数

t=linspace(0,T1-T1/N1,N1)'; %生成抽样时间点 f=cos(t); %生成抽样函数值 subplot(2,2,1) plot(t,f); title ('原函数') N=10; F1=fsana(t,f,N); %调用fsana函数求解前N项傅立叶级数系数 subplot(2,2,2) stem(abs(F1),'s'); %绘制离散的幅度曲线 title('前N项傅立叶级数系数幅度曲线'); f2=fssyn(F1,t); %调用fssyn函数求原时域函数 subplot(2,2,3) plot(t,f2,'k'); title('傅立叶逆变换后时域函数'); 运行结果

快速傅里叶变换实验

快速傅里叶变换实验

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

实验七快速傅里叶变换实验 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;

详解FFT(快速傅里叶变换FFT.

kn N W N N 第四章 快速傅里叶变换 有限长序列可以通过离散傅里叶变换(DFT)将其频域也离散化成有限长 序列.但其计算量太大,很难实时地处理问题,因此引出了快速傅里叶变换 (FFT). 1965 年,Cooley 和 Tukey 提出了计算离散傅里叶变换(DFT )的快 速算法,将 DFT 的运算量减少了几个数量级。从此,对快速傅里叶变换(FFT ) 算法的研究便不断深入,数字信号处理这门新兴学科也随 FFT 的出现和发 展而迅速发展。根据对序列分解与选取方法的不同而产生了 FFT 的多种算 法,基本算法是基2DIT 和基2DIF 。FFT 在离散傅里叶反变换、线性卷积 和线性相关等方面也有重要应用。 快速傅里叶变换(FFT )是计算离散傅里叶变换(DFT )的快速算法。 DFT 的定义式为 N ?1 X (k ) = ∑ x (n )W N R N (k ) n =0 在所有复指数值 W kn 的值全部已算好的情况下,要计算一个 X (k ) 需要 N 次复数乘法和 N -1 次复数加法。算出全部 N 点 X (k ) 共需 N 2 次复数乘法 和 N ( N ? 1) 次复数加法。即计算量是与 N 2 成正比的。 FFT 的基本思想:将大点数的 DFT 分解为若干个小点数 DFT 的组合, 从而减少运算量。 W N 因子具有以下两个特性,可使 DFT 运算量尽量分解为小点数的 DFT 运算: (1) 周期性: ( k + N ) n N = W kn = W ( n + N ) k (2) 对称性:W ( k + N / 2 ) = ?W k N N 利用这两个性质,可以使 DFT 运算中有些项合并,以减少乘法次数。例子: 求当 N =4 时,X(2)的值

实验五 快速傅里叶变换

CENTRAL SOUTH UNIVERSITY 数字信号处理实验报告 题目快速傅里叶变换 学生姓名 学院物理与电子学院 专业班级电子信息科学与技术1105班 学号140411072

实验五快速傅里叶变换 一、实验仪器 PC机一台、JQ—SOPC开发系统实验箱及辅助软件(DSP Builder、Matlab/Simulink、QuartusII、Modelsim)。 二、实验目得 1、了解快速傅里叶变换得基本结构组成、 2、学习使用DSP Builder设计FFT。 三、实验原理 1、FFT得原理: 快速傅里叶变换(FFT)就是离散傅里叶变换(DFT)得一种高效运算方法,它大大简化了DFT得运算过程,使运算时间缩短几个数量级、FFT算法可以分为按时间抽取(DIT)与按频率抽取(DIF)两类,输入也可分为实数与复数两种情况。八点时间抽取基—2FFT算法信号流图如图1示: 图18点基-2 DIT-FFT信号流图 四、实验步骤 1、将桌面得my_fft_8。mdl拷贝到“D:\Program Files\MATLAB71\work”(MATLAB安装目录下得work文件夹)处,并双击打开。

图5-1快速傅里叶变换系统图 图5—2 快速傅里叶变换子系统1图

图5—3快速傅里叶变换子系统2图

图5—3 快速傅里叶变换子系统3图 2、点击工具栏即可开始系统级simulink仿真,以验证该模型得正确性、在仿真进行过程中分别将三个输入控制开关打到000、001、010、011、100以选择五组输入数据进行FFT运算。 (1)当开关打到000时选择第一组数据{2.0,2.0,4。0,7。0,3.0,5。0,5、0,8.0},其运算结果应为36、-2、41+3.84i、—4+8i、0、4219+1.844i、—8、0。4102-1、84i、-4-8i、-2、422-3.844i。 (2)当开关打到001时选择第二组数据{1。1,5。0,10.5,15、3,20。2,25。7,30、6,40。1},其运算结果应该为148、5、-16、1+52、35i、-19.8+24、7i、-22、02+12。25i、—23.7、-22、1-12。15i、-19.8-24。7i、-16.9—52、45i、 (3)当开关打到010时选择第三组数据{5.6,5、0,15、8,20.4,25、2,35、1,40、2,45。0},其运算结果结果应该为192。3、-23.39+63、19i、—25。2+25、3i、-15.69+14。49i、—18、7、-15。81—14、39i、-25。2-25。3i、-23。51-63、29i。 (4)当开关打到011选择第四组数据{10、2,15。3,18。1,20。3,24.2,30、0,35.2,42、3},

fft快速傅里叶变换 c语言实现

#include #include #include #define N 1000 /*定义复数类型*/ typedef struct{ double real; double img; }complex; complex x[N], *W; /*输入序列,变换核*/ int size_x=0; /*输入序列的大小,在本程序中仅限2的次幂*/ double PI; /*圆周率*/ void fft(); /*快速傅里叶变换*/ void initW(); /*初始化变换核*/ void change(); /*变址*/ void add(complex ,complex ,complex *); /*复数加法*/ void mul(complex ,complex ,complex *); /*复数乘法*/ void sub(complex ,complex ,complex *); /*复数减法*/ void output(); int main(){ int i; /*输出结果*/ system("cls"); PI=atan(1)*4; printf("Please input the size of x:\n"); scanf("%d",&size_x); printf("Please input the data in x[N]:\n"); for(i=0;i

实验二 快速傅里叶变换算法实验

快速傅里叶变换算法实验 院系:电子与信息工程学院 班级:电信10-2 姓名:张玥 学号:10071201026 指导老师:郜参观

快速傅里叶变换算法实验 一、实验目的 1、加深对DFT算法原理和基本性质的理解; 2、熟悉FFT算法原理和FFT子程序的应用; 3、学习用FFT对连续信号和时域信号进行谱分析的方法,了解可能 出现的分析误差及其原因,以便在实际中正确应用FFT。 二、实验设备 计算机 CCS2.0版软件实验箱 DSP仿真器 三、基本原理 1、离散傅里叶变换DFT的定义:将时域的采样变换成频域的周期性离散函数,频域的采样也可以变换成时域的周期性离散函数,这样的变换称为离散傅里叶变换,简称DFT。 2、FFT是DFT的一种快速算法,将DFT的步运算减少为 步,极大地提高了运算速度。 3、旋转因子的变化规律。 4、蝶形运算规律。 5、基2FFT算法。 四、实验步骤 复习DFT的定义、性质和用DFT作谱分析的有关内容; 1、复习FFT算法原理与编程思想,并对照DIT-FFT运算流程图 和程序框图,了解本试验提供的FFT子程序; 2、阅读本实验所提供的样例子程序;

3、运行CCS软件,对样例程序进行跟踪,分析结果;记录 必要的参数。 4、填写实验报告。 5、提供样例程序实验操作说明。 A、实验前准备: ⑴、开关K9拨到右边,即仿真器选择连接右边的CPU:CPU2; ⑵、“A/D转换单元”的拨码开关设置; ⑶、拨码开关设置: JP3拨码开关: SW2拨码开关:

S23拨码开关: ⑷、检查:计算机、DSP仿真器、实验箱是否正确连接。 正确完成计算机、DSP仿真器和实验箱的连接后,系统上电。 B、实验 ⑴、启动CCS2.0,project/open打开“algorithm”目录“exp01_cpu2”中子目录下“exp01.pjt”工程文件;双击“exp01.pjt”及“source”可查看各源程序;加载“exp01.out”;在中断子程序中,flag=0处设置断点;单击“run”运行程序,程序将运行至断点处停止,如图(一)所示;

相关文档
最新文档