数字信号课设-利用FFT对信号进行频谱分析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

学号1207040208
天津城建大学
数字信号处理
设计说明书
利用FFT对信号进行频谱分析起止日期:2015年1月5日至2015年1月16日
学生姓名刘浩男
班级12电信2班
成绩
指导教师(签字)
计算机与信息工程学院
2015年1月16日
天津城建大学
课程设计任务书
2014—2015学年第1学期计算机与信息工程学院电子信息工程专业12电信2班班级课程设计名称:数字信号处理设计题目:
利用FFT 对信号进行频谱分析完成期限:自2015年1月5日至2015年1月16日共2周设计依据、要求及主要内容:
一.课程设计依据
在掌握数字信号处理相关理论的基础上,根据数字信号处理课程所学知识,利用Matlab 对正弦信号和输入的语音信号进行频谱分析。

二.课程设计内容
1.模拟信号()2sin(4)5cos(8)x t t t ππ=+,以0.01(0:1)t n n N ==-进行采样,求N=128点FFT 的幅度频谱;要求:求出信号的2个模拟频率和数字频率各为多少?这两个频率数值与利用Matlab 进行FFT 频谱分析结果是否一致?
2.在Matlab 程序中读入一段语音信号,对语音信号进行频谱分析。

三.课程设计要求
1.
要求独立完成设计任务。

2.
课程设计说明书封面格式要求见《天津城建大学课程设计教学工作规范》附表13.
课程设计的说明书要求简洁、通顺,计算正确,图纸表达内容完整、清楚、规范。

4.
运行程序,观察并保存程序运行结果,能够对运行结果进行结果分析。

5.课设说明书要求:
1)
说明题目的设计原理和思路、采用方法及程序。

2)
详细说明调试方法和调试过程,并给程序加注释。

3)给出程序运行结果,并对其进行说明和分析。

指导教师(签字):
系主任(签字):
批准日期:2014年12月31日
目录
第一章设计任务及要求 (1)
1.1课程设计依据 (1)
1.2课程设计内容 (1)
1.3课程设计要求 (1)
第二章设计原理 (2)
2.1FFT基本原理 (2)
2.2FFT基本应用 (2)
2.3MATLAB基本函数调用 (3)
第三章设计实现 (4)
3.1模拟信号的频谱分析 (4)
3.1.1任务要求 (4)
3.1.2程序代码 (4)
3.1.3运行结果 (5)
3.2语音信号的频谱分析 (6)
3.2.1程序代码 (6)
3.2.2运行结果 (6)
第四章设计结果及分析 (7)
4.1模拟信号频谱结果的分析 (7)
4.2语音信号频谱结果的分析 (10)
第五章总结 (11)
参考文献 (12)
附录主要程序 (13)
第一章
设计任务及要求
1.1课程设计依据在掌握数字信号处理相关理论的基础上,根据数字信号处理课程所学知识,利用Matlab 对正弦信号和输入的语音信号进行频谱分析。

1.2课程设计内容
1.模拟信号()2sin(4)5cos(8)x t t t ππ=+,以0.01(0:1)t n n N ==-进行采样,求N =128点FFT 的幅度频谱;要求:求出信号的2个模拟频率和数字频率各为多少?这两个频率数值与利用Matlab 进行FFT 频谱分析结果是否一致?
2.在Matlab 程序中读入一段语音信号,对语音信号进行频谱分析。

1.3课程设计要求
1.要求独立完成设计任务。

2.课程设计说明书封面格式要求见《天津城建大学课程设计教学工作规范》附表1
3.课程设计的说明书要求简洁、通顺,计算正确,图纸表达内容完整、清楚、规范。

4.运行程序,观察并保存程序运行结果,能够对运行结果进行结果分析。

5.课设说明书要求:
1)说明题目的设计原理和思路、采用方法及程序。

2)详细说明调试方法和调试过程,并给程序加注释。

3)给出程序运行结果,并对其进行说明和分析。

第二章设计原理
2.1FFT基本原理
离散傅里叶变换(Discrete Fourier Transform,缩写为DFT),是傅里叶变换在时域和频域上都呈离散的形式,将信号的时域采样变换为其DTFT的频域采样。

在形式上,变换两端(时域和频域上)的序列是有限长的,而实际上这两组序列都应当被认为是离散周期信号的主值序列。

即使对有限长的离散信号作DFT,也应当将其看作其周期延拓的变换。

在实际应用中通常采用快速傅里叶变换(即FFT)计算DFT。

FFT,即为快速傅里叶变换,是离散傅里叶变换的快速算法,它是根据离散傅里叶变换的奇、偶、虚、实等特性,对离散傅里叶变换的算法进行改进获得的。

它对傅里叶变换的理论并没有新的发现,但是对于在计算机系统或者说数字系统中应用离散傅里叶变换,可以说是进了一大步。

设x(n)为N项的复数序列,由DFT变换,任一X(m)的计算都需要N次复数乘法和N-1次复数加法,而一次复数乘法等于四次实数乘法和两次实数加法,一次复数加法等于两次实数加法,即使把一次复数乘法和一次复数加法定义成一次“运算”(四次实数乘法和四次实数加法),那么求出N项复数序列的X (m),即N点DFT变换大约就需要N2次运算。

当N=1024点甚至更多的时候,需要N2=1048576次运算,在FFT中,利用WN的周期性和对称性,把一个N项序列(设N=2k,k为正整数),分为两个N/2项的子序列,每个N/2点DFT变换需要(N/2)2次运算,再用N次运算把两个N/2点的DFT变换组合成一个N 点的DFT变换。

这样变换以后,总的运算次数就变成N2(N/2)2=N N2/2。

继续上面的例子,N=1024时,总的运算次数就变成了525312次,节省了大约50%的运算量。

而如果我们将这种“一分为二”的思想不断进行下去,直到分成两两一组的DFT运算单元,那么N点的DFT变换就只需要Nlog2N次的运算,N 在1024点时,运算量仅有10240次,是先前的直接算法的1%,点数越多,运算量的节约就越大,这就是FFT的优越性。

当然,也因为这一思想,只有当项数N=2M(M为正整数)时,才能进行FFT的运算。

2.2FFT基本应用
周期信号的频谱是离散谱,只有用整数倍周期的长度作FFT,得到的离散谱才能代表周期信号的频谱。

如果不知道信号周期,可以尽量选择信号的观察时间长一些。

在各种信号序列中,有限长序列占重要地位。

对有限长序列可以利用离散傅立叶变换(DFT)进行分析。

DFT不但可以很好的反映序列的频谱特性,而且易于用快速算法(FFT)在计算机上进行分析。

有限长序列的DFT是其z变换在单位圆上的等距离采样,或者说是序列傅立叶的等距离采样,因此可以用于序列的谱分析。

FFT是DFT的一种快速算法,它是对变换式进行一次次分解,使其成为若干小数据点的组合,从而减少运算量。

在MATLAB信号处理工具箱中的函数fft(x,n),可以用来实现序列的N点快速傅立叶变换。

频谱分辨率直接和FFT的变换区间N有关,因为FFT能够实现的频率分辨率是2π/N≤D。

可以根据此式选择FFT的变换区间N。

误差主要来自于用FFT作频谱分析是,得到的是离散谱,儿信号(周期信号除外)是连续谱,只有当N较大时,离散谱的包络才能逼近于连续谱,因此N要适当选择大一些。

2.3MATLAB基本函数调用
cos();%余弦函数
sin();%正弦函数
fft();%FFT变换函数
wavread();%读WA V音频文件函数length();%求长度函数
figure();%新建图形函数
subplot();%图形分块函数
plot();%绘制折线图函数
stem();%绘制杆图函数
title();%写标题函数
xlabel();%写x轴标题函数
ylabel();%写y轴标题函数
grid;%添加网格
第三章
设计实现3.1
模拟信号的频谱分析3.1.1任务要求
模拟信号()2sin(4)5cos(8)x t t t ππ=+,以0.01(0:1)t n n N ==-进行采样,求N =128点FFT 的幅度频谱;要求:求出信号的2个模拟频率和数字频率各为多少?这两个频率数值与利用Matlab 进行FFT 频谱分析结果是否一致?
3.1.2程序代码
close all;clc;clear all;%清零,清屏,关闭其他窗口,
f1=2;A1=2;%指定各余弦信号的频率和幅值
f2=4;A2=5;
fs=128;%指定采样频率
n=0:127;%指定采样时刻
x1=A1*sin(2*pi*f1/fs*n);%产生各余弦信号序列
x2=A2*cos(2*pi*f2/fs*n);
y1=x1+x2;%通过叠加形成复合信号y1
%绘制各余弦信号,噪声信号及其复合信号
subplot(3,1,1);plot(n,x1);title('余弦信号1');grid;
subplot(3,1,2);plot(n,x2);title('余弦信号2');grid;
subplot(3,1,3);plot(n,y1);title('复合信号');grid;
%用快速傅立叶变换对复合信号进行频谱分析
Fy1=fft(y1);
figure;%换一页显示
subplot(1,1,1);stem(n,abs(Fy1),'.');
title('复合信号的FFT 频谱分析');
xlabel('2πk/N');ylabel('|X(k)|');grid;
3.1.3运行结果
020406080100120140-2
2
余弦信号1
020406080100120140-5
5
余弦信号2020406080100120140
-100
10
复合信号0204060
80100120140
复合信号的FFT 频谱分析
2πk/N |X (k )|
3.2
语音信号的频谱分析3.2.1程序代码
(在Matlab 程序中读入一段语音信号,对语音信号进行频谱分析。


[x1,fs,nbits]=wavread('abc.wav');
%matlab 中fs 默认44100Hz ,nbits 为16bit
%sound(x1,fs);
n=length(x1);
t=0:1/fs:(n-1)/fs ;
x11=fft(x1,n);
f=0:fs/n:fs*(n-1)/n;
figure(1);
subplot(2,1,1);plot(t,x1);grid;
title('原始语音时域信号波形');
xlabel('时间(t)');
ylabel('幅值(x)');
subplot(2,1,2);
plot(f,abs(x11));grid;
xlabel('频率(f )');
ylabel('幅度(z )');
title('原始语音频域信号波形');
3.2.2运行结果
05101520253035404550
原始语音时域信号波形
时间(t)
幅值(x )00.51 1.52 2.53 3.54
4.5x 104
频率(f )幅度(z )原始语音频域信号波形
第四章
设计结果及分析4.1模拟信号频谱结果的分析
由题意可知,给定的模拟信号为()2sin(4)5cos(8)x t t t ππ=+,则该模拟信号对应的2个模拟角频率为Ω1=4π,Ω2=8π(单位:rad/s ),其相应的2个模拟频率为f 1=2,f 2=4(单位:Hz )。

以0.01(0:1)t n n N ==-进行采样(采样频率fs=100Hz ,N=128),得到采样序列x(n)=2sin(0.04πn)+5cos(0.08πn),则该采样序列对应的2个数字频率为ω1=Ω1/fs=0.04π,ω2=Ω2/fs=0.08π下面是利用Matlab 进行FFT 频谱分析的结果:
0204060
80100120140
复合信号的FFT 频谱分析
2πk/N |X (k )|图4.1.1fs=100Hz 的频谱分析
由上图可以看出,由MATLAB 进行FFT 频谱分析的结果并不是和理论求得的只有两个频率上有频率分量而别的频率分量都为0,而是出现了5个左右的频率分量,而且数字频率的值也并不与理论分析的值重合。

这是为什么呢?下面是原因分析:
1、FFT 是DFT 的快速算法,而DFT 的实质是有限长序列傅里叶变换的有限点离散采样,而上述得到的采样序列是周期序列,并不是有限长序列。

2、根据DFT 的隐含周期性可知,DFT 实质上是有限长序列的周期延拓序列的频谱特性。

根据这一特性可知,当从周期序列截取的有限长序列正好是原周期序列的一个周期或正整数个周期时,利用FFT 分析的有限长序列的频谱特性正好是原周期序列的频谱特性;反之,当从周期序列截取的有限长序列不是原周
期序列的一个周期或正整数个周期时,利用FFT 分析的有限长序列的频谱特性不是原周期序列的频谱特性,而是此时截取的有限长序列的周期延拓序列的频谱特性。

根据上述原因分析,只有当截取的有限长序列正好是原周期序列的一个周期或正整数个周期时,利用FFT 分析的有限长序列的频谱特性才能正好是原周期序列的频谱特性。

根据ω1=Ω1/fs ,ω2=Ω2/fs 可知,T 1=2π/ω1=2π/(Ω1/fs)=2πfs/Ω1=2πfs/4π=fs/2,T 2=2π/ω2=2π/(Ω2/fs)=2πfs/Ω2=2πfs/8π=fs/4,因此T=fs/2,则N/T=N/(fs/2)=2N/fs ;当N/T (即2N/fs )的值为正整数时,利用FFT 分析的有限长序列的频谱特性才能正好是原周期序列的频谱特性。

将N=128带入,得N/T=256/fs ;
同时,采样频率fs 应该满足采样定理,即Ωs>2Ωc ,因为Ω1=4π,Ω2=8π,则Ωc=8π,即Ωs 的取值为Ωs>16π,即fs>8,再根据N/T=256/fs 的取值为正整数这一条件,可以求得fs 的可能取值为16,32,64,128,256。

即只有当fs 取16,32,64,128,256这五个值时,利用FFT 分析的有限长序列的频谱特性才能正好是原周期序列的频谱特性。

下面我们来验证一下我们的推论:
当fs=100Hz 时,正如图4.1.1所示,利用FFT 所得到的频谱分析结果和理论分析的结果并不一致。

再如,当fs=90Hz 时,利用FFT 所得到的频谱分析结果如下图:
0204060
80100120140
复合信号的FFT 频谱分析
2πk/N |X (k )|图4.1.2fs=90Hz 的频谱分析
很显然,在该情况下利用FFT 所得到的频谱分析结果与理论分析的结果也不一致。

当fs=128Hz 时,利用FFT 所得到的频谱分析结果如下图:
图4.1.3fs=128Hz的频谱分析
此时,在该情况下利用FFT所得到的频谱分析的结果与理论预测的一样,只有两个频率有频率分量,别的频率分量均为0。

而且,这两条频率分量对应的数字频率分别为ω1=2πk1/N,ω2=2πk2/N,将k1=2,k2=4,N=128代入可以得到,ω1=2πk1/N=2π*2/128=π/32,ω2=2πk2/N=2π*4/128=π/16。

在该情况下的理论计算值为:ω1=Ω1/fs=4π/128=π/32,ω2=Ω2/fs=8π/128=π/16。

可以看出,利用FFT所得到的频谱分析的结果与理论分析的结果完全一致。

同样再如,当fs=64Hz时,利用FFT所得到的频谱分析结果如下图:
图4.1.4fs=64Hz的频谱分析
同样,此时在该情况下利用FFT 所得到的频谱分析的结果与理论预测的一样,只有两个频率有频率分量,别的频率分量均为0。

而且,这两条频率分量对应的数字频率分别为ω1=2πk 1/N ,ω2=2πk 2/N ,将k 1=4,k 2=8,N=128代入可以得到,ω1=2πk 1/N=2π*4/128=π/16,ω2=2πk 2/N=2π*8/128=π/8。

在该情况下的理论计算值为:ω1=Ω1/fs=4π/64=π/16,ω2=Ω2/fs=8π/64=π/8。

可以看出,利用FFT 所得到的频谱分析的结果与理论分析的结果完全一致。

由此,可以验证“当从周期序列截取的有限长序列正好是原周期序列的一个周期或正整数个周期时,利用FFT 分析的有限长序列的频谱特性正好是原周期序列的频谱特性;反之,当从周期序列截取的有限长序列不是原周期序列的一个周期或正整数个周期时,利用FFT 分析的有限长序列的频谱特性不是原周期序列的频谱特性,而是此时截取的有限长序列的周期延拓序列的频谱特性。

”这一结论。

综上所述,利用FFT 对周期信号进行频谱分析时,当从周期序列截取的有限长序列正好是原周期序列的一个周期或正整数个周期时,分析结果是正确的,与理论值完全一致;反之,当从周期序列截取的有限长序列不是原周期序列的一个周期或正整数个周期时,根据截断效应可之,此时会产生频谱泄漏的现象,使原来的离散谱线向附近展宽,使频谱变模糊,使谱分辨率降低。

4.2语音信号频谱结果的分析
众所周知,语音信号是一种典型的低频信号,其频谱特性只有在低频率上有频率分量,频率越高频率分量越少,高频率上频率分量为0,下面我们利用FFT 进行语音信号的频谱分析来验证这一结果。

05101520253035404550
-1-0.5
0.5
1
原始语音时域信号波形
时间(t)
幅值(x )00.51 1.52 2.53 3.54 4.5
x 104
01000
20003000
4000
频率(f )幅度(z )原始语音频域信号波形上图中,第一个图为原始语音信号的波形,第二个图为利用FFT 进行语音信号的频谱分析的波形。

利用DTFT 本身的偶函数特性和DTFT 的周期性(DTFT 是频率ω的周期函数,周期是2π)以及DFT (或FFT )和DTFT 的变换关系可得FFT 频谱分析结果在其区间内也是具有对称性的,对称轴在其区间的正中间处,在区间的正中间处,频率f 为∞,越远离对称轴频率越低,在0和区间最大处频率为0。

由此,可以很显然的验证其频谱特性只有在低频率上有频率分量,频率越高频率分量越少,高频率上频率分量为0。

利用FFT 对语音信号进行频谱分析的结果与理论分析的结果一致。

第五章总结
数字信号处理是利用计算机或专用处理设备,以数值计算的方法对信号进行采集、抽样、变换、综合、估值与识别等加工处理,借以达到提取信息和便于应用的目的。

采样序列是对连续的模拟信号进行等间隔采样得到的,通过对模拟信号的采样与恢复来实现用数字信号处理的方法处理连续的模拟信号。

利用FFT 对模拟信号进行频谱分析可以加深对DTFT、DFT、FFT以及采样定理的理解。

Matlab是一个强大的数学工具,它的应用广泛,涉及到各个领域。

它使用起来十分方便,不用麻烦去定义变量。

它的绘图能力很强,甚至可以模拟出三维视图。

矩阵是它应用的核心,许多工程繁琐的运算都需要靠矩阵来化简,这正是它的生命力所在。

但是,他的函数很多,开始学时记的比较痛苦,我已经深深感觉到了。

不过看多了也就熟了,感觉和学五笔差不多。

它的语法简单,像我学过C语言的学起来还是蛮容易的。

它的数组定义十分符合自然,是从1开始的,数组元素的调用也很接近数学的表达。

此外,函数的名字也很符合英文规则。

从课题中心来看,课题“利用FFT对信号进行频谱分析”是希望通过此次课程设计加深对典型序列的理解,同时学会运用数字信号处理的知识和MATLAB对信号进行频谱分析,同时要求对DTFT、DFT、FFT 和采样定理的原理有更透彻的理解。

本课题的特色在于要很好的掌握理论知识,要学会用MATLAB解决本次课程设计的问题,熟悉的掌握利用FFT对信号进行频谱分析的原理,把数字信号处理的知识学以至用,运用理论对FFT的频谱分析结果加以分析,这就是把理论运用到实践中来。

通过学习matlab,我又一次锻炼了自己的思维,它学起来得心应手也让我明白了学习一门语言(c语言)对学习其他语言的帮助指导作用。

同时,它也加强了我理论联系实际的能力。

这是一个专业课的基础工具,学好它是必要的。

在实际操作中也遇到很多问题,最终通过询问老师和同学把问题一一解决了,同时也阅读了很多图书和文献,并学会了如何撰写课程设计。

通过这次课程设计,我学会了很多东西,总之这次课程设计最大的收益这还是自己。

参考文献
[1]高西全.丁玉美.数字信号处理.西安电子科技大学出版社,2008,第3版
[2]赵之劲.刘顺兰.数字信号处理实验.浙江大学出版社,2007
[3]宗孔德.多抽样率信号处理.北京:清华大学出版社,1987
[4]陈怀探.数字信号处理教程—MATALAB释义与实现.电子工业出版社,2005
[5]韩纪庆,张磊,郑铁然.语音信号处理[M].北京:清华大学出版社,2004
附录主要程序
1、模拟信号的频谱分析
close all;clc;clear all;%清零,清屏,关闭其他窗口,
f1=2;A1=2;%指定各余弦信号的频率和幅值
f2=4;A2=5;
fs=128;%指定采样频率
n=0:127;%指定采样时刻
x1=A1*sin(2*pi*f1/fs*n);%产生各余弦信号序列
x2=A2*cos(2*pi*f2/fs*n);
y1=x1+x2;%通过叠加形成复合信号y1
%绘制各余弦信号,噪声信号及其复合信号
subplot(3,1,1);plot(n,x1);title('余弦信号1');grid;
subplot(3,1,2);plot(n,x2);title('余弦信号2');grid;
subplot(3,1,3);plot(n,y1);title('复合信号');grid;
%用快速傅立叶变换对复合信号进行频谱分析
Fy1=fft(y1);
figure;%换一页显示
subplot(1,1,1);stem(n,abs(Fy1),'.');
title('复合信号的FFT频谱分析');
xlabel('2πk/N');ylabel('|X(k)|');grid;
2、语音信号的频谱分析
[x1,fs,nbits]=wavread('abc.wav');
%matlab中fs默认44100Hz,nbits为16bit
%sound(x1,fs);
n=length(x1);
t=0:1/fs:(n-1)/fs;
x11=fft(x1,n);
f=0:fs/n:fs*(n-1)/n;
figure(1);
subplot(2,1,1);plot(t,x1);grid;
title('原始语音时域信号波形');
xlabel('时间(t)');
ylabel('幅值(x)');
subplot(2,1,2);
plot(f,abs(x11));grid;
xlabel('频率(f)');
ylabel('幅度(z)');
title('原始语音频域信号波形');。

相关文档
最新文档