数字信号处理实验——用FFT对连续信号和时域离散信号进行谱分析.docx

上传人:rrsccc 文档编号:9711045 上传时间:2021-03-19 格式:DOCX 页数:12 大小:167.06KB
返回 下载 相关 举报
数字信号处理实验——用FFT对连续信号和时域离散信号进行谱分析.docx_第1页
第1页 / 共12页
数字信号处理实验——用FFT对连续信号和时域离散信号进行谱分析.docx_第2页
第2页 / 共12页
数字信号处理实验——用FFT对连续信号和时域离散信号进行谱分析.docx_第3页
第3页 / 共12页
数字信号处理实验——用FFT对连续信号和时域离散信号进行谱分析.docx_第4页
第4页 / 共12页
数字信号处理实验——用FFT对连续信号和时域离散信号进行谱分析.docx_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《数字信号处理实验——用FFT对连续信号和时域离散信号进行谱分析.docx》由会员分享,可在线阅读,更多相关《数字信号处理实验——用FFT对连续信号和时域离散信号进行谱分析.docx(12页珍藏版)》请在三一文库上搜索。

1、课程名称: DSP实验 实验项目: 用 FFT作谱分析指导教师:王丽专业班级: 10 电子本姓名: 王海彪学号: 201000802119成绩:一、实验目的:1、在理论学习的基础上, 通过本实验, 加深对 FFT的理解,熟悉 MATLAB中的有关函数。2、熟悉应用 FFT对典型信号进行频谱分析的方法。熟悉 FFT算法原理和 FFT子程序的应用。3、学习用 FFT对连续信号和时域离散信号进行谱分析的方法。了解应用FFT进行信号频谱分析过程中可能出现的问题,以便在实际中正确应用FFT。二、实验原理:(一)、在各种信号序列中,有限长序列信号处理占有很重要地位,对有限长序列,我们可以使用离散傅里叶变换

2、 (DFT)。这一变换不但可以很好的反映序列的频谱特性,而且易于用快速算法在计算机上实现,当序列x(n) 的长度为 N 时,它的 DFT定义为:反变换为:有限长序列的 DFT 是其 Z 变换在单位圆上的等距采样,或者说是序列 Fourier 变换的等距采样,因此可以用于序列的谱分析。在信号处理中, DFT 的计算具有举足轻重的地位, ,信号的相关、滤波、谱估计等都要通过 DFT 来实现。然而,当 N 很大的时候, 求一个 N 点的 DFT 要完成 NN 次复 数乘 法和 N (N1) 次复 数加 法, 其计 算量 相当 大 。 1965 年J.W.Cooley和 J.W.Tukey巧妙地利用

3、WN 因子的周期性和对称性,构造了一个 DFT快速算法,即快速傅立叶变换(FFT)。(二)、在运用DFT进行频谱分析的过程中可能的产生混叠误差序列的频谱是被采样信号频谱的周期延拓,当采样速率不满足Nyquist定理时,就会发生频谱混叠, 使得采样后的信号序列频谱不能真实的反映原信号的频谱。 避免混叠现象的唯一方法是保证采样速率足够高,使频谱混叠现象不致出现, 即在确定采样频率之前,必须对频谱的性质有所了解,在一般情况下,为了保证高于折叠频率的分量不会出现, 在采样前,先用低通模拟滤波器对信号1进行滤波。(三)、 matlab 函数应用:MATLAB 为计算数据的离散快速傅立叶变换, 提供了一系

4、列丰富的数学函数,主要有 Fft、Ifft 、Fft2 、 Ifft2, Fftn、ifftn 和 Fftshift 、Ifftshift 等。当所处理的数据的长度为 2 的幂次时,采用基 -2 算法进行计算,计算速度会显著增加。所以,要尽可能使所要处理的数据长度为2 的幂次或者用添零的方式来添补数据使之成为 2 的幂次。1、 fft 和 Ifft 函数( 1)调用方式: Y=fft(X)参数说明如果 X 是向量,则采用傅立叶变换来求解X 的离散傅立叶变换;如果 X 是矩阵,则计算该矩阵每一列的离散傅立叶变换;如果 X 是( ND) 维数组,则是对第一个非单元素的维进行离散傅立叶变换;( 2)

5、 Y fft(X,N)参数说明N 是进行离散傅立叶变换的X 的数据长度,可以通过对X 进行补零或截取来实现。(3) Y fft(X,dim)或 Y fft(X,N,dim)参数说明在参数dim 指定的维上进行离散傅立叶变换;当 X 为矩阵时, dim 用来指定变换的实施方向: dim=1, 表明变换按列进行; dim=2 表明变换按行进行。函数 Ifft 的参数应用与函数Fft 完全相同。应用说明【实例 1】 fft 的应用X=2 1 2 8;Y=fft(X)2运行结果Y13.00000+7.0000i-5.00000-7.0000【实例 2】 fft(X,N,dim) 的应用A=2 5 7

6、8;1 4 0 5;3 8 5 1;9 1 2 7;Z=fft(A,1)2、 Fftshift 和 Ifftshift 函数调用方式Z=fftshift(Y)此函数可用于将傅立叶变换结果Y (频域数据)中的直流成分(即频率为0 处得值)移到频谱的中间位置。【实例 3】 fftshift 的应用X=rand(5,4);y=fft(X);z=fftshift(y);%只将傅立叶变换结果y 中的直流成分移到频谱的中间位置.运行结果:y=3.22502.52771.48201.63140.3294+0.2368i0.0768+0.3092i0.6453+0.4519i-0.7240-0.4116i-0

7、.2867-0.6435i0.5657+0.4661i-0.5515+0.2297i-0.0573-0.0881i-0.2867+0.6435i0.5657-0.4661i-0.5515-0.2297i-0.0573+0.0881i0.3294-0.2368i0.0768-0.3092i0.6453-0.4519i-0.7240+0.4116iZ=-0.5515-0.2297i-0.0573+0.0881i-0.2867+0.6435i0.5657-0.4661i0.6453-0.4519i-0.7240+0.4116i0.3294-0.2368i0.0768-0.3092i1.48201.6

8、3143.22502.527730.6453+0.4519i-0.7240-0.4116i0.3294+0.2368i0.0768+0.3092i-0.5515+0.2297i-0.0573-0.0881i-0.2867-0.6435i0.5657+0.4661i【实例 4】 fft 在信号分析中的应用使用频率分析方法对模拟信号x(t) x=sin(2*pi*100*t)进行频谱分析。 采样频率fs=1000 ,采样点数 N=512 。并画出信号的时域波形及FFT 变换后的幅频响应与相频响应。程序:fs=1000;% 采样频率N=512;% 数据点数n=0:N-1;t=0:1/fs:N/fs;

9、% 采样时间序列f0=100;% 信号频率x=sin(2*pi*f0*t);subplot(3,1,1);plot(t,x);xlabel(t);ylabel(sin(2*pi*100*t);title( 时域信号 );Y=fft(x,N);%对信号进行FFT 变换magY=abs(Y);% 求得 FFT 变换后的幅度angY=angle(Y)*180/pi;% 求得 FFT 变换后的相位f=n*fs/N;% 频率序列subplot(3,1,2);plot(f,magY);% 画出幅频响应xlabel(f);ylabel( 幅度 );title(N=512);grid;subplot(3,1,

10、3);plot(f,angY);% 画出相频响应xlabel(f);ylabel( 相位 )title(N=512);grid;4)t*001*pi*2(nsi时域信号10-100.10.20.30.40.50.60.7tN=512400度幅200001002003004005006007008009001000fN=512200位相0-20010020030040050060070080090010000f结果分析:假设采样频率为 Fs,信号频率 F,采样点数为 N。那么 FFT 之后结果就是一个为 N 点的复数。每一个点就对应着一个频率点。这个点的模值,就是该频率值下的幅度特性。假设原始信

11、号的峰值为 A ,那么 FFT 的结果的每个点 (除了第一个点直流分量之外) 的模值就是 A 的 N/2 倍。magY=abs(Y);% 求得 FFT 变换后的幅度如果要换算为实际的幅度需要改为:magY=MagY/(N/2);magY(1)=MagY(1)/2;每个点的相位 ,就是在该频率下的信号的相位。第一个点表示直流分量(即0Hz),而最后一个点 N 的再下一个点(假设的第N+1 个点)则表示采样频率Fs,这中间被N-1 个点平均分成 N 等份,每个点的频率依次增加。第 n 个点所表示的频率为:Fn=(n-1)*Fs/N 。由上面的公式可以看出,Fn 所能分辨到频率为为Fs/N,如果采样

12、频率Fs 为 1024Hz ,采样点 数为 1024 点,则可以分辨到 1Hz。前面的程序由: plot(f,magY);% 画出幅频响应三|、实验内容:1、对被白噪声污染的信号S23cos 100 t/ 61.5 cos150 t/ 2 进行频谱分析,从中鉴别出有用的信号。要求:将信号的幅度换算成实际的幅度,信号的频率换算成实际的频率fs=1000;% 采样频率N=512;% 数据点数n=0:N-1;randn(1,N);t=0:1/fs:(N-1)/fs;% 采样时间序列f0=100;% 信号频率x=2+3*cos(100*pi*t-pi/6)+(3/2)*cos(150*pi*t+pi/

13、2);subplot(3,1,1);plot(t,x);xlabel(t);ylabel(sin(2+3*cos(100*pi*t-pi/6)+(3/2)*cos(150*pi*t+pi/2);title( 时域信号 );5Y=fft(x,N);%对信号进行FFT 变换magY=abs(Y);% 求得 FFT 变换后的幅度angY=angle(Y)*180/pi;% 求得 FFT 变换后的相位f=n*fs/N;% 频率序列subplot(3,1,2);plot(f,magY);% 画出幅频响应xlabel(f);ylabel( 幅度 );title(N=512);grid;subplot(3,

14、1,3);plot(f,angY);% 画出相频响应xlabel(f);ylabel( 相位 )title(N=512);grid;2、对连续的单一频率周期信号 , Ssin 2 t , 信号频率 f=1Hzs=8Hz采样,截取长度N分别选 N=20和 N,观察其DFT结果的按采样频率 f=16幅度谱。并从中得出什么结论?程序: fs=8;% 采样频率N=16;% 数据点数n=0:N-1;t=0:1/fs:N/fs;% 采样时间序列f0=1;% 信号频率x=sin(2*pi*t);subplot(3,1,1);6stem(t,x);xlabel(t);ylabel(sin(2*pi*t);ti

15、tle( 时域信号 );Y=fft(x,N);%对信号进行FFT 变换magY=abs(Y);% 求得 FFT 变换后的幅度angY=angle(Y)*180/pi;% 求得 FFT 变换后的相位f=n*fs/N;% 频率序列subplot(3,1,2);stem(f,magY);% 画出幅频响应xlabel(f);ylabel( 幅度 );title(N=512);grid;subplot(3,1,3);stem(f,angY);% 画出相频响应xlabel(f);ylabel( 相位 )title(N=512);grid;结果:3、对三角波序列 xc (n)n 1,0n3 , xc (n)

16、0, else进行频谱分析设 n=16。8 - n,4n7程序: clear;7fs=16;% 采样频率N=16;% 数据点数n=0:N-1;t=0:1/fs:(N-1)/fs;% 采样时间序列f0=100;% 信号频率x=1,2,3,4,4,3,2,1,zeros(1,8);subplot(3,1,1);stem(t,x);xlabel(t);ylabel(1,2,3,4,4,3,2,1,zeros(1,8);title( 时域信号 );Y=fft(x,N);%对信号进行FFT 变换magY=abs(Y);% 求得 FFT 变换后的幅度angY=angle(Y)*180/pi;% 求得 FF

17、T 变换后的相位f=n*fs/N;% 频率序列subplot(3,1,2);stem(f,magY);% 画出幅频响应xlabel(f);ylabel( 幅度 );title(N=512);grid;subplot(3,1,3);stem(f,angY);% 画出相频响应xlabel(f);ylabel( 相位 )title(N=512);grid;实验结果:84、对矩形波进行频谱分析。矩形波为脉冲宽度为 2s,持续时间为 -55s ,采用矩形脉冲函数 rectpuls(t,2);四、实验报告:通过本实验加深了对 FFT的理解,更熟练的应用 Matlab 软件,提高了自己编写相关程序的能力, 熟悉并应用 FFT对典型信号进行频谱分析的方法, 学习了用FFT对连续信号和时域离散信号进行谱分析的方法, 在实验的过程中出现了些许错误,有操作上也有程序上的,通过本实验加强了自己动手纠错的能力。9

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1