数字信号处理实验五 用FFT做频谱分析
- 格式:doc
- 大小:174.50 KB
- 文档页数:5
用FFT对信号作频谱分析快速傅立叶变换(FFT)是一种在信号处理中常用于频谱分析的方法。
它是傅立叶变换的一种快速算法,通过将信号从时间域转换到频域,可以提取信号的频率信息。
FFT算法的原理是将信号分解为不同频率的正弦波成分,并计算每个频率成分的幅度和相位。
具体而言,FFT将信号划分为一系列时间窗口,每个窗口内的信号被认为是一个周期性信号,然后对每个窗口内的信号进行傅立叶变换。
使用FFT进行频谱分析可以得到信号的频率分布情况。
频谱可以显示信号中各个频率成分的强度。
通过分析频谱可以识别信号中的主要频率成分,判断信号中是否存在特定频率的干扰或噪声。
常见的应用包括音频信号处理、图像处理、通信系统中的滤波和解调等。
使用FFT进行频谱分析的步骤如下:1.首先,获取待分析的信号,并确保信号是离散的,即采样频率与信号中的最高频率成分满足奈奎斯特采样定理。
2.对信号进行预处理,包括去除直流分量和任何不需要的干扰信号。
3.对信号进行分段,分段后的每个窗口长度在FFT算法中通常为2的幂次方。
常见的窗口函数包括矩形窗、汉明窗等。
4.对每个窗口内的信号应用FFT算法,将信号从时间域转换到频域,并计算每个频率成分的幅度和相位。
5.对所有窗口得到的频谱进行平均处理,以得到最终的频谱分布。
在使用FFT进行频谱分析时需要注意的问题有:1.噪声的影响:FFT对噪声敏感,噪声会引入幅度偏差和频率漂移。
可以通过加窗等方法来减小噪声的影响。
2.分辨率的选择:分辨率是指在频谱中能够分辨的最小频率间隔。
分辨率与信号长度和采样频率有关,需要根据需求进行选择。
3.漏泄效应:当信号中的频率不是FFT长度的整数倍时,会出现漏泄效应。
可以通过零填充等方法来减小漏泄效应。
4.能量泄露:FFT将信号限定在一个周期内进行计算,如果信号过长,则可能导致部分频率成分的能量泄露到其他频率上。
总之,FFT作为信号处理中常用的频谱分析方法,能够提取信号中的频率信息,广泛应用于多个领域。
FFT实验一.内容1. 用Matlab产生正弦波,矩形波,以及白信号,并显示各自时域波形图;2. 进行FFT变换,显示各自频谱图,其中采样率,频率、数据长度自选;3. 做出上述三种信号的均方根图谱,以及对数均方根图谱;4. 用IFFT傅里叶反变换恢复信号,并显示恢复的正弦信号时域波形图;5.滤波器的设计。
(一).编写程序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,sq);xlabel('频率(HZ)’);ylabel('对数谱’);title('正弦信号y=2*pi*10t对数谱’);grid;%用IFFT恢复原始信号xifft=ifft(y);magx=real(xifft);ti=[0:length(xifft)-1]/fs;figure(1);subplot(236);plot(ti,magx);xlabel('t’);ylabel('y’);title('通过IFFT转换的正弦信号波形’);grid;2.矩形波fs=10;%设定采样频率t=-5:0.1:5;x=rectpuls(t,2);x=x(1:99);figure(2);subplot(231);plot(t(1:99),x);%作矩形波的时域波形xlabel('t');ylabel('y');title('矩形波时域波形');grid;%进行FFT变换并做频谱图y=fft(x);%进行fft变换mag=abs(y);%求幅值f=(0:length(y)-1)'*fs/length(y);%进行对应的频率转换figure(2);subplot(232);plot(f,mag);%做频谱图xlabel('频率(HZ)');ylabel('幅值');title('矩形波幅频谱图'); grid;%求均方根谱sq=abs(y);figure(2);subplot(233);plot(f,sq);xlabel('频率(HZ)');ylabel('均方根谱');title('矩形波均方根谱'); grid;%求功率根谱power=sq.^2;figure(2);subplot(234);plot(f,power);xlabel('频率(HZ)');ylabel('功率谱');title('矩形波功率谱'); grid;%求对数谱ln=log(sq);figure(2);subplot(235);plot(f,ln);xlabel('频率(HZ)');ylabel('对数谱');title('矩形波对数谱'); grid;%用IFFT恢复原始信号xifft=ifft(y);magx=real(xifft);ti=[0:length(xifft)-1]/fs; figure(2);plot(ti,magx);xlabel('t');ylabel('y');title('通过IFFT转换的矩形波波形');grid;3.白噪声fs=10;%设定采样频率t=-5:0.1:5;x=zeros(1,100);x(50)=100000;figure(3);subplot(231);plot(t(1:100),x);%作白噪声的时域波形xlabel('t');ylabel('y');title('白噪声时域波形');grid;%进行FFT变换并做频谱图y=fft(x);%进行fft变换mag=abs(y);%求幅值f=(0:length(y)-1)'*fs/length(y);%进行对象的频率转换figure(3);subplot(232);plot(f,mag);%做频谱图xlabel('频率(HZ)');ylabel('幅值');title('白噪声幅频谱图');grid;%求均方根谱sq=abs(y);figure(3);subplot(233);plot(f,sq);xlabel('频率(HZ)');ylabel('均方根谱');title('白噪声均方根谱');grid;%求功率谱power=sq.^2;figure(3);plot(f,power);xlabel('频率(HZ)');ylabel('功率谱');title('白噪声功率谱');grid;%求对数谱ln=log(sq);figure(3);subplot(235);plot(f,ln);xlabel('频率(HZ)');ylabel('对数谱');title('白噪声对数谱');grid;%用IFFT恢复原始信号xifft=ifft(y);magx=real(xifft);ti=[0:length(xifft)-1]/fs;figure(3);subplot(236);plot(ti,magx);xlabel('t');ylabel('y');title('通过IFFT转换的白噪声波形'); grid;4.巴特沃斯高通数字滤波器Fs=5000;wp=2000*2/Fs;ws=1500*2/Fs;Rp=1;Rs=20;Nn=128;[N,Wn]=buttord(wp,ws,Rp,Rs);[b,a]=butter(N,Wn,'high');freqz(b,a,Nn,Fs)(二).程序执行后得到的图像①正弦波②矩形波③白噪声④巴特沃斯高通滤波器四.结论1. FFT是离散傅立叶变换的快速算法,可以将一个信号变换到频域。
20090401310074 海南大学实验二 应用FFT 对信号进行频谱分析一、实验目的1、进一步加深DFT 算法原理和基本性质的理解(因为FFT 只是DFT 的一种快速算法, 所以FFT 的运算结果必然满足DFT 的基本性质)。
2、学习用FFT 对连续信号和时域离散信号进行谱分析的方法,了解可能出现的分析误差及其原因,以便在实际中正确应用FFT 。
二、实验原理i.模拟信号频率Ω和采样得到的数字信号频率ω的关系:/s T f ω=Ω=Ωii.DTFT 与对应的理想采样信号的频谱之间的对应关系为:|^()()jw a T X j X e ω=ΩΩ=即DTFT 与FT 的关系为:12()[()]j a r X e X j r T T Tωωπ∞=-∞=-∑就是说,只要知道了采样序列的频谱,就可以得到相应的连续信号的频谱。
(满足耐奎斯特采样定理)iii.DFT 是对离散时间序列的频域采样,是对ZT 上单位圆上的均匀采样,或者是DTFT 上[0,2]π的等间距采样。
当满足频域的采样定理时,便可以由频域的采样值恢复ZT 或者是DTFT 。
所以能用DFT 对信号进行频谱分析。
当采样的点数足够时,便能用它的包络作为模拟信号的近似谱。
近似的过程中,可能会有混叠现象,泄露现象和栅栏效应这三种误差。
iv.离散傅立叶变换DFT :10()(),0,1,2...,1N nkN n X k x n W k N -===-∑[]101()()(),0,1,2...,1N nkN n x n IDFT X k X k W n N N --====-∑反变换与正变换的区别在于N W 变为1-N W ,并多了一个N 1的运算。
因为N W 和1-N W 对于推导按时间抽取的快速傅立叶变换算法并无实质性区别,因此借助FFT 来实现IFFT.三、实验内容和结果:1. 高斯序列的时域和频域特性:高斯序列的时域表达式:2(),015()0,n p q a e n x n -⎧⎪≤≤=⎨⎪⎩其它i. 固定参数p=8,改变参数q 的值,记录时域和频域的特性如下图。
∑-=--==101,....,0,)(1)(N k nk N N n W k X N n x (3.2) 离散傅立叶反变换与正变换的区别在于N W 变为1-N W ,并多了一个N 1的运算。
因为N W 和1-N W 对于推导按时间抽取的快速傅立叶变换算法并无实质性区别,因此可将FFT 和快速傅立叶反变换(IFFT )算法合并在同一个程序中。
2.利用FFT 进行频谱分析若信号本身是有限长的序列,计算序列的频谱就是直接对序列进行FFT 运算求得)(k X ,)(k X 就代表了序列在[]π2,0之间的频谱值。
幅度谱 )()()(22k X k X k X I R +=相位谱 )()(arctan )(k X k X k R I =ϕ 若信号是模拟信号,用FFT 进行谱分析时,首先必须对信号进行采样,使之变成离散信号,然后就可按照前面的方法用FFT 来对连续信号进行谱分析。
按采样定理,采样频率s f 应大于2倍信号的最高频率,为了满足采样定理,一般在采样之前要设置一个抗混叠低通滤波器。
用FFT 对模拟信号进行谱分析的方框图如下所示。
3.在运用DFT 进行频谱分析的过程中可能产生三种误差:(1)混叠序列的频谱是被采样信号频谱的周期延拓,当采样速率不满足Nyquist 定理时,就会发生频谱混叠,使得采样后的信号序列频谱不能真实的反映原信号的频谱。
避免混叠现象的唯一方法是保证采样速率足够高,使频谱混叠现象不致出现,即在确定采样频率之前,必须对频谱的性质有所了解。
在一般情况下,为了保证不出现频谱混叠,在采样前,先进行抗混叠滤波。
(2)泄漏实际中我们往往用截短的序列来近似很长的甚至是无限长的序列,这样可以使用较短的DFT 来对信号进行频谱分析,这种截短等价于给原信号序列乘以一个矩形窗函数,也相当于在频域将信号的频谱和矩形窗函数的频谱卷积,所得的频谱是原序列频谱的扩展。
抗混叠低通滤波器 采样T=1/f s N 点FFT泄漏不能与混叠完全分开,因为泄漏导致频谱的扩展,从而造成混叠。
备注:(1)、按照要求独立完成实验内容。
(2)、实验结束后,把电子版实验报告按要求格式改名,由实验教师批阅记录后;实验室统一刻盘留档。
实验五 用FFT 对信号做频谱分析一、实验目的学习用FFT 对连续信号和时域离散信号进行谱分析的方法,了解可能出现的分析误差及其原因,以便正确应用FFT 。
二、实验原理用FFT 对信号作频谱分析是学习数字信号处理的重要内容。
经常需要进行谱分析的信号是模拟信号和时域离散信号。
对信号进行谱分析的重要问题是频谱分辨率D 和分析误差。
频谱分辨率直接和FFT 的变换区间N 有关,因为FFT 能够实现的频率分辨率是 ,因此要求 。
可以根据此式选择FFT 的变换区间N 。
误差主要来自于用FFT 作频谱分析时,得到的是离散谱,而信号(周期信号除外)是连续谱,只有当N 较大时离散谱的包络才能逼近于连续谱,因此N 要适当选择大一些。
周期信号的频谱是离散谱,只有用整数倍周期的长度作FFT ,得到的离散谱才能代表周期信号的频谱。
如果不知道信号周期,可以尽量选择信号的观察时间长一些。
对模拟信号进行谱分析时,首先要按照采样定理将其变成时域离散信号。
如果是模拟周期信号,也应该选取整数倍周期的长度,经过采样后形成周期序列,按照周期序列的谱分析进行。
三、实验内容(包括代码与产生的图形及分析讨论)1. 对以下序列进行谱分析:1423()()1,03()8,470, 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('¦Ø/¦Ð');ylabel('·ù¶È'); axis([0,2,0,1.2*max(abs(X1k8))]) subplot(2,1,2);mstem(X1k16);title('(1b)16µãDFT[x_1(n)]');xlabel('¦Ø/¦Ð');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];X2k8=fft(x2n,8); X2k16=fft(x2n,16); subplot(2,1,1);mstem(X2k8);title('(2a) 8点DFT[x_2(n)]');xlabel('ω/π');ylabel('幅度'); axis([0,2,0,1.2*max(abs(X2k8))]) subplot(2,1,2);mstem(X2k16);title('(2b)16点DFT[x_2(n)]');xlabel('ω/π');ylabel('幅度'); axis([0,2,0,1.2*max(abs(X2k16))])图形如下:ω/π幅度(2a) 8点DFT[x 2(n)]ω/π幅度(2b)16点DFT[x 2(n)](3))(3n x 代码如下:x3n=[xb,xa];X3k8=fft(x3n,8); X3k16=fft(x3n,16); subplot(2,1,1);mstem(X3k8);title('(3a) 8点DFT[x_3(n)]');xlabel('ω/π');ylabel('幅度'); axis([0,2,0,1.2*max(abs(X3k8))]) subplot(2,1,2);mstem(X3k16);title('(3b)16点DFT[x_3(n)]');xlabel('ω/π');ylabel('幅度'); axis([0,2,0,1.2*max(abs(X3k16))])图形如下:ω/π幅度(3a) 8点DFT[x 3(n)]ω/π幅度(3b)16点DFT[x 3(n)]2.对以下周期序列进行谱分析:选择FFT 的变换区间N 为8和16 两种情况分别对以上序列进行频谱分析。
电子信息工程系实验报告课程名称:数字信号处理 实验时间:2013-05-15实验项目名称:用DFT (FFT )对时域离散信号进行频谱分析班级:通信102 姓名:申太友 学号:010705244实 验 目 的:1. 进一步加深DFT 算法原理和基本性质的理解(因为FFT 只是DFT 的一种快速算法, 所以FFT 的运算结果必然满足DFT 的基本性质)。
2.掌握DFT (FFT )对时域离散信号进行频谱分析的方法。
实 验 环 境:计算机 、MATLAB 软件 原理说明:1、DFT 和FFT 原理:长度为N 的序列x(n)的离散傅立叶变换为X(k):∑-=-==101,....,0,)()(N n nkN N k W n x k X首先按n 的奇偶把时间序列x(n)分解为两个长为N/2点的序列:x n x r 12()()= r=0,1,...,N/2-1x n x r 221()()=+ r=0,1,...,N/2-1则x(n)的DFT 为X(k)X k x n W x r W x r W x r W x r W W n N Nknr N N krr N Nk r r N N krr N N kr Nk()()()()()()//()//==++=+=-=-=-+=-=-∑∑∑∑∑1212021210211202122221由于WeeW NkrjNKr jN kr N kr 222222===--ππ//,故有:X k x r WWx r W X k W X k k N r N N kr N kr N N krN k()()()()(),,...,/////=+=+=-=-=-∑∑21122122120121其中X 1(k) 和X 2(k)分别为x 1(n) 和x 2(n)的N/2点DFT 。
因为X 1(k) 和X 2(k)均是以N/2为周期的,且W W N k N Nk+=-/2。
因此可将N 点DFT X(k)分解为下面的形式:X k X k W X k N k()()()=+12k=0,1,...,N/2-1k=0,1,...,N/2-1成 绩:指导教师(签名):通过上面的推导可以看出,N 点的DFT 可以分解为两个N/2点的DFT ,每个N/2点的DFT 又可以分解为两个N/4点的DFT 。
电子信息工程系实验报告课程名称:数字信号处理Array实验项目名称:用DFT(FFT)对连续信号进行频谱分析实验时间:班级:通信姓名: xxp 学号:一、实验目的:1.掌握用DFT(FFT)对模拟信号进行谱分析的方法,理解可能出现的分析误差及其原因,以便在实际中正确应用FFT。
2.熟悉应用FFT实现两个序列的线性卷积的方法。
二、实验原理:1.用DFT(FFT)对连续信号进行频谱分析用DFT(FFT)对模拟信号做谱分析是一种近似的谱分析。
首先一般的模拟信号(周期信号除外)的频谱是连续谱,而用FFT做谱分析得到的是数字谱,因此应该取FFT的点数多一些,用它的包络作为模拟信号的近似谱。
另外,如果模拟信号不是严格的带限信号,会因为频谱混叠现象引起谱分析的误差,这种情况下可以预先将模拟信号进行预滤,或者尽量将采样频率取高一些。
最后要注意一般的模拟信号是无限长的,分析时要截断,截断的长度与对模拟信号进行频谱分析的分辨率有关。
如果要进行谱分析的模拟信号是周期信号,最好选择观测时间是信号周期的整数倍,如果不知道信号的周期,要尽量选择观测时间长一些,以减少截断效应的影响。
在运用DFT(FFT)对模拟信号进行谱分析的过程中主要可能产生以下三种误差:(1) 混叠现象对模拟信号进行谱分析时首先要对其采样,当采样速率不满足Nyquist定理时,就会发生频谱混叠,使得采样后的信号序列频谱不能真实的反映原模拟信号的频谱。
避免混叠现象的唯一方法是保证采样速率足够高,使频谱混叠现象不致出现,即在确定采样频率之前,必须对频谱的性质有所了解,在一般情况下,为了保证高于折叠频率的分量不会出现,在采样前,先用低通模拟滤波器对信号进行滤波。
(2) 截断效应实际中我们往往用截短的序列来近似很长的甚至是无限长的序列,这样可以使用较短的DFT来对信号进行频谱分析,这种截短等价于给原信号序列乘以一个矩形窗函数,也相当于在频域将信号的频谱和矩形窗函数的频谱卷积,所得的频谱是原序列频谱的扩展。
数字信号处理实验五
用FFT做频谱分析
实验目的:
(1)通过本实验,加深对DTFT和IDFT以及DFT和FFT的理解,熟悉FFT子程序
(2)熟悉应用FFT对典型信号进行频谱分析的方法
(3)了解应用FFT进行信号频谱分析过程中可能出现的问题,以便在实际中正确应用FFT
(4)熟悉应用FFT实现两个序列线性卷积的方法
(5)初步了解用周期图法做随机信号频谱分析的方法
实验内容:
(1)已知有限长序列x(n)=[1,0.5,0,0.5,1,1,0.5,0],要求:
用FFT求该序列的DFT、IDFT的图形。
程序如下:
xn=[1,0.5,0,0.5,1,1,0.5,0]; n=length(xn);
k=0:n-1;
subplot(2,2,1);
stem(k,xn,'k.');
title('x(n)');
Xk=fft(xn,n);
subplot(2,1,2);
stem(k,abs(Xk));
title('Xk=DFT(xn)'); xn1=ifft(Xk,n); subplot(2,2,2);
stem(k,xn1);
title('x(n)=IDFT(Xk)');
波形如下:
假设采样频率Fs=20Hz,序列长度N分别取8、32和64,用FFT计算幅度谱和相位谱。
程序如下:
clear;close all
fs=20;
T=1/fs;
N=[8,32,64];
for m=1:3
x=[1,0.5,0,0.5,1,1,0.5,0];
x1=fft(x,N(m));
x2=ifft(x,N(m));
subplot(3,2,2*m-1);
stem([0:N(m)-1],abs(x1),'o');
title('幅度谱');
subplot(3,2,2*m);
stem([0:N(m)-1],abs(x2),'o');
title('相位谱');
end
波形如下:
(2)用FFT计算下面连续信号的频谱,并观察选择不同的采样周期Ts和序列长度N值对频谱特性的影响:
+
+
t
=-t
t
x e t
t
t
sin
2.2
),
)(01.0≥
sin
1.2
(sin
2
a
程序如下:
clear;close all
fs=4;T=1/fs;
Tp=4;N=Tp*fs;
N1=[N,4*N,8*N];
T1=[T,2*T,4*T];
for m=1:3
n=1:N1(m);
x1=exp(-0.01*T);
x2=sin(2*n*T)+sin(2.1*n*T)+sin(2.2*n*T);
x=x1*x2;
xk=fft(x,51)
fk=[0:50]/51/T
subplot(3,2,2*m-1);
stem(fk,abs(xk)/max(abs(xk)),'k.');
xlabel(T1(m));
ylabel(N1(m));
if m==1
title('序列长度')
end
end
for m=1:3
n=1:14;
x1=exp(-0.01*T1(m));
x2=sin(2*n*T1(m))+sin(2.1*n*T1(m))+sin(2.2*n*T1(m));
x=x1*x2;
xk=fft(x,51)
fk=[0:50]/51/T
subplot(3,2,2*m);
stem(fk,abs(xk)/max(abs(xk)),'k.');
xlabel(T1(m));
ylabel(N1(m));
if m==1
title('采样周期')
end
end
波形如下:。