对于FFT和IFFT的算法和频谱分析的研究

对于FFT和IFFT的算法和频谱分析的研究
对于FFT和IFFT的算法和频谱分析的研究

FFT 和IFFT 算法及频谱分析 科研训练论文

西安邮电大学

通信与信息工程学院

科研训练论文

专业班级: 学生姓名: 学号(班内序号):

2013 年 9 月 22日

——————————————————————————装

线

——————————————————————————————————————————————————

报告份数:

实验总成绩:

对于FFT和IFFT的算法和频谱分析的研究(The algorithms and spectrum analysis of FFT

and IFFT)

摘要:

快速傅里叶变换(FastFourier Tranformation,FFT)是将一个大点数N的DFT 分解为若干小点的DFT的组合。将运算工作量明显降低,从而大大提高离散傅里叶变换(DFT)的计算速度,从而更加适合进行实时运算。因各个科学技术领域广泛的使用了FFT技术它大大推动了信号处理技术的进步,现已成为数字信号处理强有力的工具,本论文将比较全面的叙述各种快速傅里叶变换算法原理、特点,并完成了基于MATLAB的实现。最后通过FFT和IFFT的两个应用升余弦滚降和确定函数的频谱分析来分别验证FFT和IFFT的正确性和优越性。

关键词:

MATLAB FFT IFFT 升余弦滚降函数三角函数三角波函数

Abstract:

Fast Fourier Transformation is mainly achieved by deviding the DFT which is consisted of N points into a lot of little size of DFT,thus the

workload could be reduced to some extent.It is obvious that the reduce of

workload may improve the computing speed,so it is fit to get the results

immediately.Because of its wide application in various fields of science , the

computing speed is considerably improved.FFT and IFFT promote the advancement of signal processing especially Digital Signal Processing,so it has become a powerful tool in DSP.This article will introduce the theory,the feature of FFT and IFFT,then we will get it achieved based on MATLAB.Finally we will get two applications of FFT and IFFT including raised cosine roll-off and the spectrum analyzing of two determined function to verify the FFT and IFFT

correctness and superiority respectively.

Key words:

MATLAB ,FFT ,IFFT,Raised cosine function,Trigonometric,

Triangular wave function

引言

1965年,库利(J.W.Cooley)和图基(J.W.Tukey)在《计算数学》杂志上发表了“机器计算傅立叶级数的一种算法”的文章,这是一篇关于计算DFT的一种快速有效的计算方法的文章。它的思路建立在对DFT运算内在规律的认识之上。这篇文章的发表使DFT的计算量大大减少,并导致了许多计算方法的发现。这些算法统称为快速傅立叶变换(Fast Fourier Transform),简称FFT,1984年,法国的杜哈梅尔(P.Dohamel)和霍尔曼(H.Hollmann)提出的分裂基快速算法[2][6]

使运算效率进一步提高。FFT即为快速傅氏变换,是离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。它对傅氏变换的理论并没有新的发现,但是对于在计算机系统或者说数字系统中应用离散傅立叶变换,可以说是进了一大步。随着科学的进步,FFT 算法的重要意义已经远远超过傅里叶分析本身的应用。FFT算法之所以快速,其根本原因在于原始变化矩阵的多余行,此特性也适用于傅里叶变换外的其他一些正交变换,例如,快速沃尔什变换、数论变换等等。在FFT的影响下,人们对于广义的快速正交变换进行了深入研究,使各种快速变换在数字信号处理中占据了重要地位。因此说FFT对数字信号处理技术的发展起了重大推动作用。

1.FFT的算法

1.1 FFT算法的基本思想[1]

设离散的有限长时间序列x(n),

0≤n≤N-1,则其离散傅立叶变换为:

这样,矩阵W 中有许多相同的元素,从而可

以简化DFT的运算过程.FFT 算法有许多形式,

笔者只讨论最基本的时间抽取基-2FFT 算法.

1.2 算法分析

一个N 点长序列,直接用DFT 方法需要复数乘法N2次;复数加法N(N-1)次。而由

图2 可知,采用FFT 则只需要复数乘法次;复数加法次。当

时,这样,运算速度提高了1-2 个数量级.图1 为FFT 算法和直接DFT 算

法所需运算量与计算点数N 的关系曲线.显然,N 越大时,优越性越明显.但当

N 相当大时,利用单机串行进行FFT 运算同样满足不了实时系统的需要.[ 1 ]

1.3 算法的程序实现思想及分析

首先检验待变换的序列的元素个数是否为2的幂次方个,如果不是的话则将其补零使之成为2的整数幂次方个。然后利用已经编好的位倒序子程序输出位倒序序号,将输入序列不断分组,进行处理后从新分组,直至完成最后的处理即可输出变换后的结果。需要注意的是,这里fft的变换后结果的元素个数可能与原输入序列的个数不一样,因为如果不是2的幂次方个的话输入序列后面是要补零的。(主程序为fft_dit和fft_dif)

1.4流程示意图

整个FFT 频谱分析与显示过程可用图2 所示的流程图示意.

x(0)X(0) x(1)

x(2)

x(3)

x(4)

x(5) x(6) x(7)

X(5)

X(4)

X(1)

X(2)

X(6)

X(3)

X(7) fft按频域抽取算法

x(0)x(4)x(6)x(2)x(1)x(5)x(7)

x(3)X(0)X(1)X(2)X(3)X(4)X(5)X(6)X(7)

fft 按时域抽取算法 图2 2.IFFT 的频谱变换基本原理

在实验中为了简化算法我们直接利用前面已经编好的fft_dit 或fft_dif 这两个现成函数来实现,基本原理如下:将要变换的频谱序列先取共轭然后将其送入前面的函数,将变化后的结果再取共轭即实现IFFT 的功能。主程序为ifft_my

待变换序列取共轭

快速傅里叶变换

取共轭

快速逆傅里叶变换的结

图3

3 升余弦滚降

3.1升余弦滚降原理

要实现无码间干扰基带传输时,系统必须满足奈奎斯特准则即:

()m m m X f Ts Ts =∞

=-∞

+=∑ 对于上述公式,我们分3种情况来说明其含义:

(1)Ts<1/2W,其中Ts 为系统的输入数据的符号间隔,W 为系统的传递函数 X (f )的截止频率。由于:

()()

m m m Z f X f Ts

=∞

=-∞

=

+∑

因而Z (f )是由频率间隔为1/Ts 的X (f )曲线无频率重叠地周期性复制构成。 (2)若Ts=1/2W 。Z (f )仍是由频率间隔为1/Ts 的X (f )曲线无频率重叠地周期性复制构成,在此情况下,仅有一个情况可满足无码间干扰传输的条件,即当

,0,()Ts f W

X f ?≤?

?=其他

此基带传输系统的传递函数是理想低通,其频带宽度为W,则该系统无码间干扰传输的最小Ts=1/2W,即无码间干扰传输的最大符号速率Rs=1/Ts=2W,称此传输速率为奈奎斯特速率。

在此理想情况下,虽然系统的频带利用率达到极限,但是此时x(t)是sinc函数,她是非因果的,是物理不可实现的。并且,此x(t)冲击脉冲形状收敛到0的速度极慢,若在收端低通滤波器输出端的采样时科存在定时误差,则在实际采样时刻的采样值会存在码间干扰

(3)对于Ts>1/2W情况,Z(f)由频率间隔为1/Ts的X(f)曲线无频率重叠地周期性复制并相加构成的,它还是周期性频谱。在这种情况下,有一特定频谱可满足无码间干扰传输的条件,它就是已获广泛应用的升余弦谱。升余弦滤波器的传递函数表示式为:

称α为滚降因子,取值为0≦α≦1。

在α=0时,滤波器的带宽W为1/(2Ts),称为奈奎斯特带宽;α=0.5时,滤波器的截止频率W=(1+α)/(2Ts)=0.75Rs; α=1时,滤波器的截止频率W=Rs

[2][3][4][5]

3.2 升余弦滚降的实现及其与快速傅里叶逆变换的关系

升余弦滚降函数是在基带无码间干扰传输中经常用到的频域函数。其主要特性是升余弦滚降函数经过频域平移叠加后能够成一个在各个频域幅度恒定的频域函数。我们在实现升余弦滚降时可以首先在频域实现α=0,α=0.5,α=0.75和α=1四种升余弦滚降函数,然后通过自己编写的ifft_my进行傅里叶逆变换,并将变换后的时域结果反映在图上,分别对比α不同是对应的时域上的不同的时域特性。

3.3 变换前的时域特性和变换后的频域特性

图4

4 利用fft和ifft进行具体函数频谱分析的实例

4.1 三角函数的频谱分析及其信号的恢复

在实际信号的分析中,三角函数是非常常见和基本的信号,在这里我们就对三角函数进行分析。在分析中我们会碰到要分析的函数的采样点数不是2的整数次幂个,我们要对它进行补零处理。

4.2 三角波函数的分析

在分析中因为可能会用到自己编写的T2F函数和F2T函数,但是这两个函数仍然是建立在自己编写的fft_dit和ifft_my的基础上的。只是对输入变量进行了更加完善的处理,一个是补零,另一个是对频域进行了搬移,将原来pi~2pi的部分

搬到-pi~0,因为大家在看频谱时比较习惯频谱是关于零对称的。

4.3 分析结果

5 结论

5.1 关于fft和ifft函数的分析

在fft和ifft的实现过程中,的确能降低运算的次数,但是也正好印证了一个很著名的理论,“时间换空间,空间换时间”。在fft和ifft的算法中,我们降低运算的次数是以占用更多的空间换来的。每次将要变换的的序列进行分组,然后对每个组进行处理,虽然降低了运算次数,但是也增加了运算空间的占用。5.2 关于升余弦滚降函数的结论

通过图形我们可以观察出,对于不同α的函数,时域主要部分占用的宽度是一样的。但是随着α的增大,时域的起伏是越来越小的。因此我们可以认为,α越大,时域起伏越小,因此在非线性系统中传输时的失真越小。但是与此同时带来的缺点是占用的α越大,频域占用的带宽是越大的,越利于在限带系统中传输,频率的利用率也就越低。

5.3 关于三角函数和三角波函数的频谱分析结论

(1)根据理论分析,三角函数的频谱因该是几个冲激函数的组合,三角波函数的频谱应该是Sa函数平方的形式。而在实际分析中我们通过观察频谱图可以看出分析的结果基本符合理论分析结果。这也侧面印证了我们自己编写的fft_dit和ifft_my的正确性和有效性。

(2)在通过频谱恢复时域时,我们观察到恢复后的三角函数的时域函数有所失真,三角波函数基本无失真。原因可能是在T2F和F2T

函数中可能因为补零改变了元素个数,因此引起了恢复后的函数时域出现失真。

附录1:

[1]蒋冬初,何飞.FFT算法的并行处理研究.湖南城市学院学报(自然科学版) .2005-06-30

[2]Oppenheim A V, Schafer R W.Digit al Signal Proces sing [M] . N Y: Prent ice-Hall , 1975.

[3]Proak is J G, Manolakis D G. Digital Signal Proces sing-Principles[M] . Algorithms and applicat ions ( 2nd Edit ion) , N Y:Print ice-Hall, 1995.

[4]崔灵智. M atlab 在数字信号处理课程设计中的应用[ J]. 山东水利职业学院刊, 2008. 3: 11- 12.

[5]樊昌信曹丽娜通信原理(第六版)国防工业出版社 2006.8

[6]卢光跃黄庆东包志强数字信号处理处理及应用人民邮电出版社 2012.6

[7]王立宁乐光新詹菲 MATLAB与通信仿真人民邮电出版社 2000.01.01

小组成员:

组长:08谷群(03101045)

组员:31王敏(03101069)

03陈若寰(03101040)

04边钰涵(03101041)

任务分配:

资料查阅:王敏

程序设计:谷群

文本编辑:边钰涵

技术校对:陈若寰

附录:

程序代码

1 .自己实现的fft

(1)fft_dit.m 按时域抽取快速傅里叶变换function [num3]=fft_dit(in1,k)

if nargin==1

N=length(in1);

else

N=k;

end

in=zeros(1,N);

in(1:length(in1))=in1;

num=zeros(1,N);

num3=zeros(1,N);

k=log2(N);

for n=1:N

num(n)=in(weidaoxu(n,N)+1);

end

for n=1:k

for c=1:2^(k-n)

num1=zeros(1,2^n);

num2=zeros(1,2^n);

num1=num((c-1)*2^n+1:c*2^n);

for m=1:2^(n-1)

num2(m)=num1(m)+num1(m+2^(n-1))*exp(-i*(m-1)*2*pi/2^n);

num2(m+2^(n-1))=num1(m)-num1(m+2^(n-1))*exp(-i*(m-1)*2*pi/2^n); end

num((c-1)*2^n+1:c*2^n)=num2;

end

end

num3=num;

(2)fft_dif.m 按频域抽取快速傅里叶变换

function [num3]=fft_dif(in1,k)

if nargin==1

N=length(in1);

else

N=k;

end

in=zeros(1,N);

in(1:length(in1))=in1;

num=in;

num3=zeros(1,N);

k=log2(N);

for n=1:k

for c=1:2^(n-1)

num1=zeros(1,2^(k+1-n));

num2=zeros(1,2^(k+1-n));

num1=num((c-1)*2^(k+1-n)+1:c*2^(k+1-n));

for m=1:2^(k-n)

num2(m)=num1(m)+num1(m+2^(k-n))

num2(m+2^(k-n))=(num1(m)-num1(m+2^(k-n)))*exp(-i*(m-1)*2*pi/2^(k+1-n ));

end

num((c-1)*2^(k+1-n)+1:c*2^(k+1-n))=num2;

end

end

for n=1:N

num3(n)=num(weidaoxu(n,N)+1);

end

(3)weidaoxu.m 位倒序函数

function out=niweidaoxu(in,long)

l=log2(long);

num1=zeros(1,l);

%out=0;

for i=1:l

num1(i)=mod(in,2);

out=(in-mod(in,2))/2;

end

(4)ifft_my.m 快速傅里叶逆变换

function [out]=ifft_my(in)

num1=conj(in);

num2=fft_dit(num1);

out=conj(num2)/length(in);

2.升余弦滚降函数的时域频域分析

(1)主函数

%通过FFT和IFFT来分析升余弦滚降函数的时域和频域的特点clear all;

a=0;

N=128;

l=2;

figure(1)

[f,out_f]=shengyuxiangunjiang(a,N,l);

subplot(221);

plot(f,out_f);

xlabel('f');

ylabel('a=0时的频谱幅度');

axis([-2 2 0 1.5]);

out_f_=[out_f((N/2+1):N),out_f(1:N/2)]; out_t=ifft_my(out_f_);

out_t_=[out_t((N/2+1):N),out_t(1:N/2)]; subplot(222);

plot(f,out_t_);

xlabel('t');

ylabel('a=0时的时域幅度');

axis([-0.25 0.25 -0.1 0.5]);

a=0.5;

[f,out_f]=shengyuxiangunjiang(a,N,l); subplot(223);

plot(f,out_f);

xlabel('f');

ylabel('a=0.5时的频谱幅度');

axis([-2 2 0 1.5]);

out_f_=[out_f((N/2+1):N),out_f(1:N/2)]; out_t=ifft_my(out_f_);

out_t_=[out_t((N/2+1):N),out_t(1:N/2)]; subplot(224);

plot(f,out_t_);

xlabel('t');

ylabel('a=0.5时的时域幅度');

axis([-0.25 0.25 -0.1 0.5]);

a=0.75;

figure(2)

[f,out_f]=shengyuxiangunjiang(a,N,l); subplot(221);

plot(f,out_f);

xlabel('f');

ylabel('a=0.75时的频谱幅度');

axis([-2 2 0 1.5]);

out_f_=[out_f((N/2+1):N),out_f(1:N/2)];

out_t=ifft_my(out_f_);

out_t_=[out_t((N/2+1):N),out_t(1:N/2)]; subplot(222);

plot(f,out_t_);

xlabel('t');

ylabel('a=0.75时的时域幅度');

axis([-0.25 0.25 -0.1 0.5]);

a=1;

[f,out_f]=shengyuxiangunjiang(a,N,l); subplot(223);

plot(f,out_f);

xlabel('f');

ylabel('a=1时的频谱幅度');

axis([-2 2 0 1.5]);

out_f_=[out_f((N/2+1):N),out_f(1:N/2)]; out_t=ifft_my(out_f_);

out_t_=[out_t((N/2+1):N),out_t(1:N/2)]; subplot(224);

plot(f,out_t_);

xlabel('t');

ylabel('a=1时的时域幅度');

axis([-0.25 0.25 -0.1 0.5]);

(2)shengyuxiangunjiang.m 产生升余弦滚降频谱的函数function [f,out_f]=shengyuxiangunjiang(a,N,l)

f=[-l:2*l/N:l-2*l/N];

out_f=zeros(1,N);

out_f(1:N/(2*l)*(1-a))=0;

k=[-pi/2:l*pi/(a*N):pi/2-l*pi/(a*N)]

out_f(N/(2*l)*(1-a)+1:N/(2*l)*(1+a))=(sin(k)+1)/2; out_f(N/(2*l)*(1+a)+1:N/2)=1;

for m=1:N/2

out_f(N+1-m)=out_f(m);

end

(3)rand01.m 产生随机的01序列

function s=rand01(p,m,n)

% 输入参数:

% p:0-1分布中1的概率

% m,n:产生的随机变量样本个数m×n

% 输出:产生的随机变量样本矢量

x=rand(m,n);

s=(sign(x-p+eps)+1)/2; % eps = 2^(-52).

3 确定函数的频谱分析

(1) pinpufenxi.m 主程序

clear all

dt=0.001;

df=0.2;

fs=1/dt;

t=[-10:dt:10-dt];

y=sin(2*pi*100*t)+2*sin(2*pi*400*t);

[M1,m1,df1,f1]=T2F(y,dt,df,fs);

figure(1)

subplot(211);

plot(t,y);

xlabel('t');

ylabel('三角函数频谱分析前的时域');

axis([-0.05,0.05,-5,5]);

subplot(212);

plot(f1,abs(M1));

xlabel('f');

ylabel('三角函数频谱分析后的频谱');

figure(2)

z=zeros(1,length(t));

z=[zeros(1,length(t)/4),[0:5*4/length(t):5-5*4/length(t)],zero s(1,length(t)/2)];

for n=1:length(t)/2

z(length(t)+1-n)=z(n);

end

[M2,m2,df2,f2]=T2F(z,dt,df,fs);

subplot(211);

plot(t,z);

xlabel('t');

ylabel('三角波频谱分析前的时域');

axis([-10,10,-1,5]);

subplot(212);

plot(f2,abs(M2));

xlabel('f');

ylabel('三角波频谱分析后的频谱');

axis([-1,1,0,30]);

figure(3)

[y1]=F2T(M1,fs);

应用FFT对信号进行频谱分析实验报告

实验 应用FFT 对信号进行频谱分析 一、实验目的 1、在理论学习的基础上,通过本次实验,加深对快速傅里叶变换的理解,熟悉FFT 算法及其程序的编写。 2、熟悉应用FFT 对典型信号进行频谱分析的方法。 3、了解应用FFT 进行新红啊频谱分析过程中可呢个出现的问题,以便在实际中正确应用FFT 。 二、实验原理 一个连续信号()a x t 的频谱可以用它的傅里叶变换表示为: ()()j t a a X j x t e dt +∞ -Ω-∞Ω=? (2-1) 如果对信号进行理想采样,可以得到离散傅里叶变换: ()()j n X e x n z ω +∞ --∞=∑ (2-2) 在各种信号序列中,有限长序列在数字信号处理中占有很重要的。无限长的序列往往可以用有限长序列来逼近。对于有限长的序列我们可以使用离散傅里叶变换(DFT ),这一序列可以很好的反应序列的频域特性,并且容易利用快速算法在计算机上实现当序列的长度是N 时,我们定义离散傅里叶变换为: 1 0()[()]()N kn N n X k DFT x n x n W -===∑ (2-3) DFT 是对序列傅里叶变换的灯具采样,因此可以用于序列的频谱分析。在利用DFT 进行频谱分析的时候可能有三种误差: (1)混叠现象 序列的频谱是采样信号频谱的周期延拓,周期是2/T π,因此当采样频率不满足奈奎斯特定理,即采样频率1/s f T =小于两倍的信号频率时,经过采样就会发生频谱混叠。这导致采样后的信号序列不能真实的反映原信号的频谱。 (2)泄漏现象 泄漏是不能和混叠完全分开的,因为泄漏导致频谱的扩展,从而造成混淆。为了减小混淆的影响,可以选择适当的窗函数使频谱的扩散减到最小。 (3)栅栏效应 因为DFT 是对单位圆上Z 变换的均匀采样,所以它不可能将频谱视为一个连续的函数。这样就产生了栅栏效应。减小栅栏效应的一个方法是在源序列的末端补一些零值,从而变动DFT 的点数。 三、实验内容和结果 1、观察高斯序列的时域和频域特性 (1)固定高斯序列()a x n 中的参数p=8,当q 为2,4,8时其时域和幅频特性分别如图 2.1,图2.2所示:

用MATLAB进行FFT频谱分析

用MATLAB 进行FFT 频谱分析 假设一信号: ()()292.7/2cos 1.0996.2/2sin 1.06.0+++=t t R ππ 画出其频谱图。 分析: 首先,连续周期信号截断对频谱的影响。 DFT 变换频谱泄漏的根本原因是信号的截断。即时域加窗,对应为频域卷积,因此,窗函数的主瓣宽度等就会影响到频谱。 实验表明,连续周期信号截断时持续时间与信号周期呈整数倍关系时,利用DFT 变换可以得到精确的模拟信号频谱。举一个简单的例子: ()ππ2.0100cos +=t Y 其周期为0.02。截断时不同的持续时间影响如图一.1:(对应程序shiyan1ex1.m ) 图 错误!文档中没有指定样式的文字。.1 140.0160.0180.02 截断时,时间间期为周期整数倍,频谱图 0.0250.03 0100200300400500600 7008009001000 20 40 60 80 100 截断时,时间间期不为周期整数倍,频谱图

其次,采样频率的确定。 根据Shannon 采样定理,采样带限信号采样频率为截止频率的两倍以上,给定信号的采样频率应>1/7.92,取16。 再次,DFT 算法包括时域采样和频域采样两步,频域采样长度M 和时域采样长度N 的关系要符合M ≧N 时,从频谱X(k)才可完全重建原信号。 实验中信号R 经采样后的离散信号不是周期信号,但是它又是一个无限长的信号,因此处理时时域窗函数尽量取得宽一些已接近实际信号。 实验结果如图一.2:其中,0点位置的冲激项为直流分量0.6造成(对应程序为shiyan1.m ) 图 错误!文档中没有指定样式的文字。.2 ?ARMA (Auto Recursive Moving Average )模型: 将平稳随机信号x(n)看作是零均值,方差为σu 2的白噪声u(n)经过线性非移变系统H(z)后的输出,模型的传递函数为 020406080100120140160180200 0.4 0.50.60.7 0.800.050.10.150.20.250.30.350.40.450.5 50100 150

用FFT对信号作频谱分析 实验报告

实验报告 实验三:用FFT 对信号作频谱分析 一、 实验目的与要求 学习用FFT 对连续信号和时域离散信号进行谱分析的方法,了解可能出现的分析误差及其原因,以便正确应用FFT 。 二、 实验原理 用FFT 对信号作频分析是学习数字信号处理的重要内容,经常需要进行分析的信号是模拟信号的时域离散信号。对信号进行谱分析的重要问题是频谱分辨率D 和分析误差。频谱分辨率直接和FFT 的变换区间N 有关,因为FFT 能够实现的频率分辨率是2π/N ,因此要求2π/N 小于等于D 。可以根据此式选择FFT 的变换区间N 。误差主要来自于用FFT 作频谱分析时,得到的是离散谱,而信号(周期信号除外)是连续谱,只有当N 较大时,离散谱的包络才能逼近连续谱,因此N 要适当选择大一些。 三、 实验步骤及内容(含结果分析) (1)对以下序列进行FFT 分析: x 1(n)=R 4(n) x 2(n)= x 3(n)= 选择FFT 的变换区间N 为8和16两种情况进行频谱分析,分别打印出幅频特性曲线,并进行讨论、分析与比较。 【实验结果如下】: n+1 0≤n ≤3 8-n 4≤n ≤7 0 其它n 4-n 0≤n ≤3 n-3 4≤n ≤7 0 其它 n

实验结果图形与理论分析相符。(2)对以下周期序列进行谱分析: x4(n)=cos[(π/4)*n]

x5(n)= cos[(π/4)*n]+ cos[(π/8)*n] 选择FFT的变换区间N为8和16两种情况进行频谱分析,分别打印出幅频特性曲线,并进行讨论、分析与比较。 【实验结果如下】: (3)对模拟周期信号进行频谱分析: x6(n)= cos(8πt)+ cos(16πt)+ cos(20πt) 选择采样频率Fs=64Hz,FFT的变换区间N为16、32、64三种情况进行频谱分析,分别打印出幅频特性曲线,并进行讨论、分析与比较。 【实验结果如下】:

频域分析实验报告

频域分析实验报告 班级: 学号: 姓名:

一、实验内容: 1利用计算机作出开环系统的波特图; 2、观察记录控制系统的开环频率特性; 3、控制系统的开环频率特性分析。 二、仿真原理: 对数频率特性图(波特图): 对数频率特性图包括了对数幅频特性图和对数相频特性图。横坐标为频率w,采用对数分度,单位为弧度/秒;纵坐标均匀分度,分别为幅值函数20lgA(w),以dB表示;相角,以度表示。MATLAB提供了函数bode()来绘制系统的波特图,其用法如下: (1)bode(num,den):可绘制出以连续时间多项式传递函数表示的系统的波特图。 (2)当带输出变量[mag,pha,w]或[mag,pha]引用函数时,可得到系统波特图相应的幅值mag、相角pha及角频率点w矢量或只是返回幅值与相角。相角以度为单位,幅值可转换为分贝单位:magdb=20×log10(mag) 二、实验验证 1、用Matlab作Bode图。要求:画出对应Bode图。 (1)G(S)=25/S2+4s+25 (7)G(S)=9(s2+0.2s+1)/s(s2+1.2s+9);

图 1 图 2 (1)G(S)=25/S2+4s+25 可以看成是一个比例环节和一个振荡环节组成,所以k=1,T1=0.04,因为v=0,所以在转折频率之前都为20lgk,因为k=1所以斜率为0,经过转折频率,分段直线斜率的变化量为-40db/dec。

(7)G(S)=9(s2+0.2s+1)/s(s2+1.2s+9); 可以看成是一个二阶微分环节和一个积分环节和一个振荡环节组成,化常数为1后,v=1,t1=1,t2=1/3,所以我们可以看到,在起始阶段是-20*vdb/dec,所以一开始斜率为-20db/dec。当经过1/3的转折频率之后分段直线的改变量为40db/dec,当经过1的转折频率之后分段直线的改变量为-40db/dec。故图像如图所示。 第二题: 典型二阶系统Gs=Wn2/s2+2ζWns+Wn2,试绘制取不同值时的Bode图。取Wn=8,ζ=0.1,0.2,0.3,,0.5,0.6; 图 3 如图所示。

MATLAB关于FFT频谱分析的程序

MATLAB关于FFT频谱分析的程序 %***************1.正弦波****************% fs=100;%设定采样频率 N=128; n=0:N-1; t=n/fs; f0=10;%设定正弦信号频率 %生成正弦信号 x=sin(2*pi*f0*t); figure(1); subplot(231); plot(t,x);%作正弦信号的时域波形 xlabel('t'); ylabel('y'); title('正弦信号y=2*pi*10t时域波形'); grid; %进行FFT变换并做频谱图 y=fft(x,N);%进行fft变换 mag=abs(y);%求幅值 f=(0:length(y)-1)'*fs/length(y);%进行对应的频率转换 figure(1); subplot(232); plot(f,mag);%做频谱图 axis([0,100,0,80]); xlabel('频率(Hz)'); ylabel('幅值');

title('正弦信号y=2*pi*10t幅频谱图N=128'); grid; %求均方根谱 sq=abs(y); figure(1); subplot(233); plot(f,sq); xlabel('频率(Hz)'); ylabel('均方根谱'); title('正弦信号y=2*pi*10t均方根谱'); grid; %求功率谱 power=sq.^2; figure(1); subplot(234); plot(f,power); xlabel('频率(Hz)'); ylabel('功率谱'); title('正弦信号y=2*pi*10t功率谱'); grid; %求对数谱 ln=log(sq); figure(1); subplot(235); plot(f,ln);

控制系统的频域分析实验报告

实验名称: 控制系统的频域分析 实验类型:________________同组学生姓名:__________ 一、实验目的和要求 用计算机辅助分析的方法,掌握频率分析法的三种方法,即Bode 图、Nyquist 曲线、Nichols 图。 二、实验内容和原理 (一)实验原理 1.Bode(波特)图 设已知系统的传递函数模型: 1 1211121)(+-+-+???+++???++=n n n m m m a s a s a b s b s b s H 则系统的频率响应可直接求出: 1 1211121)()()()()(+-+-+???+++???++=n n n m m m a j a j a b j b j b j H ωωωωω MATLAB 中,可利用bode 和dbode 绘制连续和离散系统的Bode 图。 2.Nyquist(奈奎斯特)曲线 Nyquist 曲线是根据开环频率特性在复平面上绘制幅相轨迹,根据开环的Nyquist 线,可判断闭环系统的稳定性。 反馈控制系统稳定的充要条件是,Nyquist 曲线按逆时针包围临界点(-1,j0)p 圈,为开环传递函数位于右半s 一平面的极点数。在MATLAB 中,可利用函数nyquist 和dnyquist 绘出连续和离散系统的乃氏曲线。 3.Nicho1s(尼柯尔斯)图 根据闭环频率特性的幅值和相位可作出Nichols 图,从而可直接得到闭环系统的频率特性。在 MATLAB 中,可利用函数nichols 和dnichols 绘出连续和离散系统的Nichols 图。 (二)实验内容 1.一系统开环传递函数为 ) 2)(5)(1(50)(-++=s s s s H 绘制系统的bode 图,判断闭环系统的稳定性,并画出闭环系统的单位冲击响应。 2.一多环系统 ) 10625.0)(125.0)(185.0(7.16)(+++=s s s s s G 其结构如图所示 试绘制Nyquist 频率曲线和Nichols 图,并判断稳定性。 (三)实验要求

实验五 用FFT对信号做频谱分析(数字信号实验)

备注:(1)、按照要求独立完成实验内容。 (2)、实验结束后,把电子版实验报告按要求格式改名,由实验教师批阅记录后;实验室 统一刻盘留档。 实验五 用FFT 对信号做频谱分析 一、实验目的 学习用FFT 对连续信号和时域离散信号进行谱分析的方法,了解可能出现的分析误差及其原因,以便正确应用FFT 。 二、实验原理 用FFT 对信号作频谱分析是学习数字信号处理的重要内容。经常需要进行谱分析的信号是模拟信号和时域离散信号。对信号进行谱分析的重要问题是频谱分辨率D 和分析误差。频谱分辨率直接和FFT 的变换区间N 有关,因为FFT 能够实现的频率分辨率是 ,因此要求 。可以根据此式选择FFT 的变换区间N 。误差主要来自于用FFT 作频谱分析时,得到的是离散谱,而信号(周期信号除外)是连续谱,只有当N 较大时离散谱的包络才能逼近于连续谱,因此N 要适当选择大一些。 周期信号的频谱是离散谱,只有用整数倍周期的长度作FFT ,得到的离散谱才能代表周期信号的频谱。如果不知道信号周期,可以尽量选择信号的观察时间长一些。 对模拟信号进行谱分析时,首先要按照采样定理将其变成时域离散信号。如果是模拟周期信号,也应该选取整数倍周期的长度,经过采样后形成周期序列,按照周期序列的谱分析进行。 三、实验内容(包括代码与产生的图形及分析讨论) 1. 对以下序列进行谱分析: 1423()() 1,03 ()8,47 0, 4,03()3, 470, x n R n n n x n n n n n n x n n n n =+≤≤?? =-≤≤???-≤≤?? =-≤≤???

选择FFT 的变换区间N 为8和16 两种情况进行频谱分析。分别打印其幅频特性曲线, 并进行对比、分析和讨论。 解:(1))(1n x 代码如下: x1n=[ones(1,4)]; X1k8=fft(x1n,8); X1k16=fft(x1n,16); subplot(2,1,1);mstem(X1k8); title('(1a) 8μ?DFT[x_1(n)]');xlabel('|?/|D');ylabel('·ù?è'); axis([0,2,0,1.2*max(abs(X1k8))]) subplot(2,1,2);mstem(X1k16); title('(1b)16μ?DFT[x_1(n)]');xlabel('|?/|D');ylabel('·ù?è'); axis([0,2,0,1.2*max(abs(X1k16))]) 图形如下: ω/π 幅度 (1a) 8点DFT[x 1(n)] ω/π 幅度 (1b)16点DFT[x 1(n)] (2))(2n x 代码如下: M=8;xa=1:(M/2); xb=(M/2):-1:1; x2n=[xa,xb];

信号与系统实验报告实验三 连续时间LTI系统的频域分析

实验三 连续时间LTI 系统的频域分析 一、实验目的 1、掌握系统频率响应特性的概念及其物理意义; 2、掌握系统频率响应特性的计算方法和特性曲线的绘制方法,理解具有不同频率响应特性的滤波器对信号的滤波作用; 3、学习和掌握幅度特性、相位特性以及群延时的物理意义; 4、掌握用MA TLAB 语言进行系统频响特性分析的方法。 基本要求:掌握LTI 连续和离散时间系统的频域数学模型和频域数学模型的MATLAB 描述方法,深刻理解LTI 系统的频率响应特性的物理意义,理解滤波和滤波器的概念,掌握利用MATLAB 计算和绘制LTI 系统频率响应特性曲线中的编程。 二、实验原理及方法 1 连续时间LTI 系统的频率响应 所谓频率特性,也称为频率响应特性,简称频率响应(Frequency response ),是指系统在正弦信号激励下的稳态响应随频率变化的情况,包括响应的幅度随频率的变化情况和响应的相位随频率的变化情况两个方面。 上图中x(t)、y(t)分别为系统的时域激励信号和响应信号,h(t)是系统的单位冲激响应,它们三者之间的关系为:)(*)()(t h t x t y =,由傅里叶变换的时域卷积定理可得到: )()()(ωωωj H j X j Y = 3.1 或者: ) () ()(ωωωj X j Y j H = 3.2 )(ωj H 为系统的频域数学模型,它实际上就是系统的单位冲激响应h(t)的傅里叶变换。即 ? ∞ ∞ --= dt e t h j H t j ωω)()( 3.3

由于H(j ω)实际上是系统单位冲激响应h(t)的傅里叶变换,如果h(t)是收敛的,或者说是绝对可积(Absolutly integrabel )的话,那么H(j ω)一定存在,而且H(j ω)通常是复数,因此,也可以表示成复数的不同表达形式。在研究系统的频率响应时,更多的是把它表示成极坐标形式: ) ()()(ω?ωωj e j H j H = 3.4 上式中,)j (ωH 称为幅度频率相应(Magnitude response ),反映信号经过系统之后,信号各频率分量的幅度发生变化的情况,)(ω?称为相位特性(Phase response ),反映信号经过系统后,信号各频率分量在相位上发生变换的情况。)(ωj H 和)(ω?都是频率ω的函数。 对于一个系统,其频率响应为H(j ω),其幅度响应和相位响应分别为)(ωj H 和)(ω?,如果作用于系统的信号为t j e t x 0)(ω=,则其响应信号为 t j e j H t y 0)()(0ωω= t j j e e j H 00)(0)(ωω?ω=))((000)(ω?ωω+=t j e j H 3.5 若输入信号为正弦信号,即x(t) = sin(ω0t ),则系统响应为 ))(sin(|)(|)sin()()(00000ω?ωωωω+==t j H t j H t y 3.6 可见,系统对某一频率分量的影响表现为两个方面,一是信号的幅度要被)(ωj H 加权,二是信号的相位要被)(ω?移相。 由于)(ωj H 和)(ω?都是频率ω的函数,所以,系统对不同频率的频率分量造成的幅度和相位上的影响是不同的。 2 LTI 系统的群延时 从信号频谱的观点看,信号是由无穷多个不同频率的正弦信号的加权和(Weighted sum )所组成。正如刚才所述,信号经过LTI 系统传输与处理时,系统将会对信号中的所有频率分量造成幅度和相位上的不同影响。从相位上来看,系统对各个频率分量造成一定的相位移(Phase shifting ),相位移实际上就是延时(Time delay )。群延时(Group delay )的概念能够较好地反

FFT详细分析

MATLAB中FFT的使用方法 2009-08-22 11:00 说明:以下资源来源于《数字信号处理的MATLAB实现》万永革主编 一.调用方法 X=FFT(x); X=FFT(x,N); x=IFFT(X); x=IFFT(X,N) 用MATLAB进行谱分析时注意: (1)函数FFT返回值的数据结构具有对称性。 例: N=8; n=0:N-1; xn=[4 3 2 6 7 8 9 0]; Xk=fft(xn) → Xk = 39.0000 -10.7782 + 6.2929i 0 - 5.0000i 4.7782 - 7.7071i 5.0000 4.7782 + 7.7071i 0 + 5.0000i -10.7782 - 6.2929i Xk与xn的维数相同,共有8个元素。Xk的第一个数对应于直流分量,即频率值为0。 (2)做FFT分析时,幅值大小与FFT选择的点数有关,但不影响分析结果。在IFFT时已经做了处理。要得到真实的振幅值的大小,只要将得到的变换后结果乘以2除以N即可。 二.FFT应用举例 例1:x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t)。采样频率fs=100Hz,分别绘制N=128、1024点幅频图。 clf; fs=100;N=128; %采样频率和数据点数 n=0:N-1;t=n/fs; %时间序列

x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号 y=fft(x,N); %对信号进行快速Fourier变换 mag=abs(y); %求得Fourier变换后的振幅 f=n*fs/N; %频率序列 subplot(2,2,1),plot(f,mag); %绘出随频率变化的振幅 xlabel('频率/Hz'); ylabel('振幅');title('N=128');grid on; subplot(2,2,2),plot(f(1:N/2),mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅 xlabel('频率/Hz'); ylabel('振幅');title('N=128');grid on; %对信号采样数据为1024点的处理 fs=100;N=1024;n=0:N-1;t=n/fs; x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号 y=fft(x,N); %对信号进行快速Fourier变换 mag=abs(y); %求取Fourier变换的振幅 f=n*fs/N; subplot(2,2,3),plot(f,mag); %绘出随频率变化的振幅 xlabel('频率/Hz'); ylabel('振幅');title('N=1024');grid on; subplot(2,2,4) plot(f(1:N/2),mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅xlabel('频率/Hz'); ylabel('振幅');title('N=1024');grid on; 运行结果:

用FFT对信号作频谱分析实验报告

实验一报告、用FFT 对信号作频谱分析 一、实验目的 学习用FFT 对连续信号和时域离散信号进行频谱分析的方法,了解可能出现的分析误差及其原因,以便正确应用FFT 。 二、实验内容 1.对以下序列进行频谱分析: ()() ()()4231038470n 4033 470n x n R n n n x n n n n n x n n n =+≤≤?? =-≤≤???-≤≤?? =-≤≤??? 其它其它 选择FFT 的变换区间N 为8和16两种情况进行频谱分析。分别打印其幅频特性曲线,并进行对比,分析和讨论。 2.对以下周期序列进行频谱分析: ()()45cos 4 cos cos 4 8 x n n x n n n π π π ==+ 选择FFT 的变换区间N 为8和16两种情况分别对以上序列进行频谱分析。分别打印其幅频特性曲线,并进行对比、分析和讨论。 3.对模拟信号进行频谱分析: ()8cos8cos16cos20x t t t t πππ=++ 选择采样频率64s F Hz =,对变换区间N=16,32,64 三种情况进行频谱分析。分别 打印其幅频特性,并进行分析和讨论。

三、实验程序 1.对非周期序列进行频谱分析代码: close all;clear all; x1n=[ones(1,4)]; M=8;xa=1:(M/2);xb=(M/2):-1:1;x2n=[xa,xb]; x3n=[xb,xa]; X1k8=fft(x1n,8);X1k16=fft(x1n,16); X2k8=fft(x2n,8);X2k16=fft(x2n,16); X3k8=fft(x3n,8);X3k16=fft(x3n,16); subplot(3,2,1);mstem=(X1k8);title('(1a)8点DFT[x_1(n)]'); subplot(3,2,2);mstem=(X1k16);title('(1b)16点DFT[x_1(n)]'); subplot(3,2,3);mstem=(X2k8);title('(2a)8点DFT[x_2(n)]'); subplot(3,2,4);mstem=(X2k16);title('(2b)16点DFT[x_2(n)]'); subplot(3,2,5);mstem=(X3k8);title('(3a)8点DFT[x_3(n)]'); subplot(3,2,6);mstem=(X3k16);title('(3b)16点DFT[x_3(n)]'); 2.对周期序列进行频谱分析代码: N=8;n=0:N-1; x4n=cos(pi*n/4); x5n=cos(pi*n/4)+cos(pi*n/8); X4k8=fft(x4n); X5k8=fft(x5n); N=16;n=0:N-1; x4n=cos(pi*n/4); x5n=cos(pi*n/4)+cos(pi*n/8); X4k16=fft(x4n); X5k16=fft(x5n); figure(2) subplot(2,2,1);mstem(X4k8);title('(4a)8点 DFT[x_4(n)]'); subplot(2,2,2);mstem(X4k16);title('(4b)16点DFT[x_4(n)]'); subplot(2,2,3);mstem(X5k8);title('(5a)8点DFT[x_5(n)]'); subplot(2,2,4);mstem(X5k16);title('(5a)16点DFT[x_5(n)]') 3.模拟周期信号谱分析 figure(3) Fs=64;T=1/Fs; N=16;n=0:N-1; x6nT=cos(8*pi*n*T)+cos(16*pi*n*T)+cos(20*pi*n*T); X6k16=fft(x6nT); X6k16=fftshift(X6k16);

用FFT对信号作频谱分析Matlab程序.doc

对以下序列进行FFT 分析 x 1(n)=R 4(n) x 2(n)= x 3(n)= x1n=[ones(1,4)]; %产生R4(n)序列向量 X1k8=fft(x1n,8); %计算x1n 的8点DFT X1k16=fft(x1n,16); %计算x1n 的16点DFT %以下绘制幅频特性曲线 N=8; f=2/N*(0:N-1); (不懂) figure(1); subplot(1,2,1);stem(f,abs(X1k8),'r','.'); %绘制8点DFT 的幅频特性图,abs 求得Fourier 变换后的振幅 title('(1a) 8点DFT[x_1(n)]');xlabel('ω/π');ylabel('幅度'); N=16; f=2/N*(0:N-1); subplot(1,2,2);stem(f,abs(X1k16),'.'); %绘制8点DFT 的幅频特性图 title('(1b) 16点DFT[x_1(n)]');xlabel('ω/π');ylabel('幅度'); %x2n 和 x3n M=8;xa=1:(M/2); xb=(M/2):-1:1; %从M/2到1每次递减1 x2n=[xa,xb]; %产生长度为8的三角波序列x2(n) x3n=[xb,xa]; n+1 0≤n ≤3 8-n 4≤n ≤7 0 其它n 4-n 0≤n ≤3 n-3 4≤n ≤7 0 其它 n

X2k8=fft(x2n,8); X2k16=fft(x2n,16); X3k8=fft(x3n,8); X3k16=fft(x3n,16); figure(2); N=8; f=2/N*(0:N-1); subplot(2,2,1);stem(f,abs(X2k8),'r','.'); %绘制8点DFT的幅频特性图title('(2a) 8点DFT[x_2(n)]');xlabel('ω/π');ylabel('幅度'); subplot(2,2,3);stem(f,abs(X3k8),'r','.'); %绘制8点DFT的幅频特性图title('(3a) 8点DFT[x_3(n)]');xlabel('ω/π');ylabel('幅度'); N=16; f=2/N*(0:N-1); subplot(2,2,2);stem(f,abs(X2k16),'.'); %绘制8点DFT的幅频特性图title('(2b) 16点DFT[x_2(n)]');xlabel('ω/π');ylabel('幅度'); subplot(2,2,4);stem(f,abs(X3k16),'.'); %绘制8点DFT的幅频特性图title('(3b) 16点DFT[x_3(n)]');xlabel('ω/π');ylabel('幅度'); %x4n 和 x5n N=8;n=0:N-1; x4n=cos(pi*n/4); x5n=cos(pi*n/4)+cos(pi*n/8); X4k8=fft(x4n,8); X4k16=fft(x4n,16); X5k8=fft(x5n,8); X5k16=fft(x5n,16); figure(3); N=8; f=2/N*(0:N-1); subplot(2,2,1);stem(f,abs(X4k8),'r','.'); %绘制8点DFT的幅频特性图title('(4a) 8点DFT[x_4(n)]');xlabel('ω/π');ylabel('幅度'); subplot(2,2,3);stem(f,abs(X5k8),'r','.'); %绘制8点DFT的幅频特性图title('(5a) 8点DFT[x_5(n)]');xlabel('ω/π');ylabel('幅度'); N=16; f=2/N*(0:N-1); subplot(2,2,2);stem(f,abs(X4k16),'.'); %绘制8点DFT的幅频特性图title('(4b) 16点DFT[x_4(n)]');xlabel('ω/π');ylabel('幅度'); subplot(2,2,4);stem(f,abs(X5k16),'.'); %绘制8点DFT的幅频特性图title('(5b) 16点DFT[x_5(n)]');xlabel('ω/π');ylabel('幅度'); %x8n Fs=64; T=1/Fs;

FFT频谱分析实验报告

实验二:用FFT作谱分析 一、实验目的 (1) 进一步加深DFT算法原理和基本性质的理解(因为FFT只是DFT的一种快速算法,所以FFT的运算结果必然满足DFT的基本性质)。 (2) 熟悉FFT算法原理和FFT子程序的应用。 (3) 学习用FFT对连续信号和时域离散信号进行谱分析的方法,了解可能出现的分析误差及其原因,以便在实际中正确应用FFT。 二、实验原理

三、实验内容 (1) 对2 中所给出的信号逐个进行谱分析。解:(1) n=0:3; xn1=[1 1 1 1]; XK18=fft(xn1,8); XK116=fft(xn1,16); n1=0:7; n2=0:15; subplot(131); stem(n,xn1); xlabel('n'); ylabel('xn1'); subplot(132); stem(n1,abs(XK18)); xlabel('n1'); ylabel('XK18'); title('xn的8点'); subplot(133); stem(n2,abs(XK116)); xlabel('n2'); ylabel('XK116'); title('xn的16点');

(2) n1=0:7; n2=0:15; xn2=[1 2 3 4 4 3 2 1]; XK28=fft(xn2,8); XK216=fft(xn2,16); subplot(131); stem(n1,xn2); xlabel('n1'); ylabel('xn2'); subplot(132); stem(n1,abs(XK28)); xlabel('n1'); ylabel('XK28'); title('xn2的8点'); subplot(133); stem(n2,abs(XK216)); xlabel('n2'); ylabel('XK216'); title('xn2的16点'); (3) n1=0:7; n2=0:15; xn3=[4 3 2 1 1 2 3 4]; XK38=fft(xn3,8);

频谱分析实验报告

频谱分析实验报告 许开龙 热能工程系2008010717 一、实验目的 通过实验,了解频谱分析的原理,掌握数据处理中的这一重要手段。 二、实验方法 1.预习实验原理,搞清程序流程和各参数的含义。 2.自己编制一个产生两个正弦波之和的程序,即, 其中A1,A2 分别为正弦波幅值,K 1=Fs/F 1 , K2=Fs/F2, Fs为采样频率,F1,F2分别为正弦波频率。将 产生的数据放入数据文件中,数据文件的格式为 T(1) , X(1) T(2) , X(2) T(3) , X(3) ……,…… T(512) , X(512) 其中T数组是正弦波采样点的时间值,X数组是正弦波采样值。 3.利用给定的频谱分析程序对信号进行分析。程序框图如下图 程序参数说明 M-FFT 的长度,应为2的幂次(64) IWIN-窗函数类型 IWIN=1,矩形窗

IWIN=2,汉明窗 L-窗长,L<=M(64) N-数据取样数(512) Fs-采样频率(一定要和对象截止频率对应) 三、实验步骤 1.调试自己编制的产生正弦波数据之和的程序,并将产生的数据放入数据文件中 2.运行频谱分析程序,画出正弦波信号的频谱图 3.改变PSDOLD程序中的M,L参数,看其对频谱的影响 四、实验结果及数据处理 1.产生正弦波数据之和程序见附件,令A1=20,A2=4,F1=60Hz,F2=200Hz,Fs=3000Hz得到的 波形如下图: 图表 1 正弦信号之和, A1=20,A2=4,F1=60Hz,F2=200Hz,Fs=3000Hz 2.频谱分析结果 图表 2 频谱分析结果F1=60Hz, F2=200Hz, Fs=3000Hz, N=512, M=256, IWIN=2, L=256

数字信号处理实验报告三 用FFT对信号作频谱分析

实验三 用FFT 对信号作频谱分析 姓名: 班级: 学号: 一、实验目的 学习用FFT 对连续信号和时域离散信号进行谱分析的方法,了解可能出现的分析误差及其原因,以便正确应用FFT 。 二、实验原理与方法 用FFT 对信号作频谱分析是学习数字信号处理的重要内容。经常需要进行谱分析的信号是模拟信号和时域离散信号。对信号进行谱分析的重要问题是频谱分辨率D 和分析误差。频谱分辨率直接和FFT 的变换区间N 有关,因为FFT 能够实现的频率分辨率是N /2π,因此要求D N ≤/2π。可以根据此式选择FFT 的变换区间N 。误差主要来自于用FFT 作频谱分析时,得到的是离散谱,而信号(周期信号除外)是连续谱,只有当N 较大时离散谱的包络才能逼近于连续谱,因此N 要适当选择大一些。 周期信号的频谱是离散谱,只有用整数倍周期的长度作FFT ,得到的离散谱才能代表周期信号的频谱。如果不知道信号周期,可以尽量选择信号的观察时间长一些。 对模拟信号进行谱分析时,首先要按照采样定理将其变成时域离散信号。如果是模拟周期信号,也应该选取整数倍周期的长度,经过采样后形成周期序列,按照周期序列的谱分析进行。 三、实验内容及步骤 (1)对以下序列进行谱分析。 1423()() 1,03()8,470,4,03()3,47 0,x n R n n n x n n n n n n x n n n n =+≤≤?? =-≤≤??? -≤≤?? =-≤≤??? 其他其他 选择FFT 的变换区间N 为8和16 两种情况进行频谱分析。分别打印其幅频特性曲线。并进行对比、分析和讨论。 (2)对以下周期序列进行谱分析。

实验三用FFT对信号进行频谱分析和MATLAB程序

实验三 用FFT 对信号进行频谱分析 一 实验目的 1 能够熟练掌握快速离散傅立叶变换的原理及应用FFT 进行频谱分析的基本方法; 2了解用FFT 进行频谱分析可能出现的分析误差及其原因; 二 实验原理 1.用DFT 对非周期序列进行谱分析 单位圆上的Z 变换就是序列的傅里叶变换,即 ()()j j z e X e X z ωω== (3-1) ()j X e ω是ω的连续周期函数。对序列()x n 进行N 点DFT 得到()X k ,则()X k 是在区间[]0,2π上对()j X e ω的N 点等间隔采样,频谱分辨率就是采样间隔 2N π。因此序列的傅里叶变换可利用DFT (即FFT )来计算。 用FFT 对序列进行谱分析的误差主要来自于用FFT 作频谱分析时,得到的是离散谱,而非周期序列的频谱是连续谱,只有当N 较大时,离散谱的包络才能逼近连续谱,因此N 要适当选择大一些。 2.用DFT 对周期序列进行谱分析 已知周期为N 的离散序列)(n x ,它的离散傅里叶级数DFS 分别由式(3-2)和(3-3) 给出: DFS : ∑-=-=1 2)(1N n kn N j k e n x N a π , n =0,1,2,…,N -1 (3-2) IDFS : ∑-==1 02)(N k kn N j k e a n x π , n =0,1,2,…,N -1 (3-3) 对于长度为N 的有限长序列x (n )的DFT 对表达式分别由式(3-4)和(3-5)给出: DFT : ∑-=-=1 02)()(N n kn N j e n x k X π , n =0,1,2,…,N -1 (3-4) IDFT : ∑-==1 02)(1)(N k kn N j e k X N n x π , n =0,1,2,…,N -1 (3-5) FFT 为离散傅里叶变换DFT 的快速算法,对于周期为N 的离散序列x (n )的频谱分析便可由式(3-6)和(3-7)给出:

实验三-周期信号的频谱分析-实验报告

信号与系统 实验报告 实验三周期信号的频谱分析 学院 专业班级 学号 指导教师 实验报告评分:_______

实验三 周期信号的频谱分析 一、实验目的 1、掌握连续时间周期信号的傅里叶级数的物理意义和分析方法; 2、观察截短傅里叶级数而产生的“Gibbs 现象”,了解其特点以及产生的原因; 3、掌握各种典型的连续时间非周期信号的频谱特征。 二、实验容 实验前,必须首先阅读本实验原理,读懂所给出的全部例程序。实验开始时,先在计算机上运行这些例程序,观察所得到的信号的波形图。并结合例程序应该完成的工作,进一步分析程序中各个语句的作用,从而真正理解这些程序。 实验前,一定要针对下面的实验项目做好相应的实验准备工作,包括事先编写好相应的实验程序等事项。 Q3-1 编写程序Q3_1,绘制下面的信号的波形图: -+-=)5cos(51 )3cos(31)cos()(000t t t t x ωωω∑∞ ==10)cos()2sin(1n t n n n ωπ 其中,ω0 = 0.5π,要求将一个图形窗口分割成四个子图,分别绘制cos(ω0t)、cos(3ω0t)、cos(5ω0t) 和x(t) 的波形图,给图形加title ,网格线和x 坐标标签,并且程序能够接受从键盘输入的和式中的项数。 抄写程序Q3_1如下: clear,%Clear all variables close all,%Close all figure windows dt = 0.00001; %Specify the step of time variable t = -2:dt:4; %Specify the interval of time w0=0.5*pi; x1=cos(w0.*t); x2=cos(3*w0.*t); x3=cos(5*w0.*t); N=input('Type in the number of the harmonic components N='); x=0; for q=1:N; x=x+(sin(q*(pi/2)).*cos(q*w0*t))/q; end

MATLAB中FFT的使用方法(频谱分析)

说明:以下资源来源于《数字信号处理的MATLAB实现》万永革主编 一.调用方法 X=FFT(x); X=FFT(x,N); x=IFFT(X); x=IFFT(X,N) 用MATLAB进行谱分析时注意: (1)函数FFT返回值的数据结构具有对称性。 例: N=8; n=0:N-1; xn=[4 3 2 6 7 8 9 0]; Xk=fft(xn) → Xk = 39.0000 -10.7782 + 6.2929i 0 - 5.0000i 4.7782 - 7.7071i 5.0000 4.7782 + 7.7071i 0 + 5.0000i -10.7782 - 6.2929i Xk与xn的维数相同,共有8个元素。Xk的第一个数对应于直流分量,即频率值为0。 (2)做FFT分析时,幅值大小与FFT选择的点数有关,但不影响分析结果。在IFFT时已经做了处理。要得到真实的振幅值的大小,只要将得到的变换后结果乘以2除以N即可。 二.FFT应用举例 例1:x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t)。采样频率fs=100Hz,分别绘制N=128、1024点幅频图。 clf; fs=100;N=128; %采样频率和数据点数

n=0:N-1;t=n/fs; %时间序列 x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号 y=fft(x,N); %对信号进行快速Fourier变换 mag=abs(y); %求得Fourier变换后的振幅 f=n*fs/N; %频率序列 subplot(2,2,1),plot(f,mag); %绘出随频率变化的振幅 xlabel('频率/Hz'); ylabel('振幅');title('N=128');grid on; subplot(2,2,2),plot(f(1:N/2),mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅xlabel('频率/Hz'); ylabel('振幅');title('N=128');grid on; %对信号采样数据为1024点的处理 fs=100;N=1024;n=0:N-1;t=n/fs; x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号 y=fft(x,N); %对信号进行快速Fourier变换 mag=abs(y); %求取Fourier变换的振幅 f=n*fs/N; subplot(2,2,3),plot(f,mag); %绘出随频率变化的振幅 xlabel('频率/Hz'); ylabel('振幅');title('N=1024');grid on; subplot(2,2,4) plot(f(1:N/2),mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅 xlabel('频率/Hz'); ylabel('振幅');title('N=1024');grid on;

相关文档
最新文档