数字信号处理
课程设计报告
题 目: MATLAB余弦离散傅里叶变换 学 院: 培黎工程技术学院 班 级: 电信111本
学 号: 20110602050147 姓 名:联系方式: 136xxxxxxxx 指导教师: 石 蕊 报告成绩:
20xx年 12月24日
目 录
一、 设计目的······································3
二、 设计要求······································3
三、 设计原理·······································3
3.1、采样定理···································4
3.2、FFT快速离散傅里叶变换······················5
四、设计思路··········································6
五,系统调试与仿真结果分析····························7
六、课程设计总结·······································11
6.1、课程设计心得体会
6.2、课程设计建议与问题
七、参考文献············································15
前言
MATLAB课程设计与《现代信号处理》课程配套,是通信工程类专业的重要实践环节。数字信号处理是每一个电子信息科学工作者必须掌握的重要知识。它采用计算机仿真软件,以数值计算的方法对信号进行分析、变换、滤波、检测、估计与识别等加工处理,以达到提取信息便于使用的目的。
通信工程专业的培养目标是具备通信技术的基本理论和应用技术,能从事电子、信息、通信等领域的工作。鉴于我校充分培养学生实践能力的办学宗旨,对本专业学生的培养要进行工程素质培养、拓宽专业口径、注重基础和发展潜力。特别是培养学生的创新能力,以实现技术为主线多进行实验技能的培养。学生通过《现代信号处理》课程设计这一重要环节,可以将本专业的主干课程《现代信号处理》从理论学习到实践应用,对数字信号处理技术有较深的了解,进一步增强学生动手能力和适应实际工作的能力。
一. 设计目的
1.要求学生会用MATLAB语言进行编程,绘出所求波形,并且运用FFT,DFT求对连续信号进行分析。
2. 掌握信号分析与处理的基本方法与实现
3.提高综合运用所学知识独立分析和解决问题的能力;
4.熟练使用一种高级语言进行编程实现。
二. 设计要求
1、用Matlab产生正弦波,矩形波,并显示各自的时域波形图;
2、进行FFT变换,显示各自频谱图,其中采样率、频率、数据长度自选,要求注明;
3 ,1)选择采样频率Fs = 5000Hz和合适的信号长度,采样得到序列 x1(n)。求并画出x1(n)及其序列傅里叶变换 |X1(ejw)|。
2)选择采样频率Fs = 1000Hz和合适的信号长度,采样得到序列 x2(n)。
求并画出x2(n)及其序列傅里叶变换 |X2(ejw)|。
3) 说明|X1(ejw)|与|X2(ejw)|间的区别
4.比较不同采样频率下对模拟信号的采样后序列的傅里叶变换产生的影响和前后两次波形区别。
三.设计原理
3.1采样定理
最简单的模拟信号形式是正弦波,此时所有的信号能量都集中在一个频率上。现实中,模拟信号通常具有复杂的信号波形,并带有众多频率成份或谐波。例如,一个方波除了它的基频之外,还包含有无穷多的奇次谐波。因此,根
据 Nyquist 定理,要从时间交叉的采样中完整地重建一个方波,采样频率必须远远高于方波的基频。
奈奎斯特,香农定理,久采样原理分析及ADC的选择
欠采样或奈奎斯特(Nyquist)准则是 ADC 应用上经常使用的一种技术。射频(RF)通信和诸如示波器等高性能测试设备就是其中的一些实例。在这个“灰色”地带中经常出现一些困惑,如是否有必要服从 Nyquist 准则,以获取一个信号的内容。对于 Nyquist 和 Shannon 定理的检验将证明:ADC 采样频率的选择与最大输入信号频率对输入信号带宽的比率有很强的相关性。
3.2 FFT快速傅里叶变换原理
经常需要进行频谱分析的信号是模拟信号和时域离散信号。频谱分辨率直接和FFT的变换区间N有关,因为FFT能够实现频率分辨率是2π/N。
x(n)是一个长度为M的有限长序列,则x(n)的N点离散傅立叶变换为:
N?1knx(n)W?NWNn?0X(k)=DFT[x(n)]=,k=0,1,...,N-1?j?e2?N
1N?1?knX(k)W?NNn?0逆变换:x(n) =IDFT[X(k)]= ,k=0,1,...,N-1
但FFT是一种比DFT更加快速的一种算法,提高了DFT的运算速率,为数字信号处理技术应用于各种信号处理创造了条件,大大提高了数字信号处理技术的发展。
四.设计思路
题目要求对给定的模拟信号进行不同频率的采样,得到采样后的序列,然后选择合适的长度将得到的采样序列画出来;然后将得到的采样序列进行序列傅里
叶变换,并将序列的傅里叶变换的频谱特性画出来。首先对于采样定理来说,采样只需要将连续的时间t进行离散化即可,然后用stem()画图函数将其画出来。 对于采样后的序列进行序列傅里叶变换,有两种方法:第一种是直接用定义去表示,然后通过plot()函数即可,不过其中要处理的是要定义一个向量w,来作为序列傅里叶变换的横坐标,其次还要在画图函数plot()中对w进行频率归一化;第二种方法是可以直接通过调用fft()函数来画频谱函数,不过它进行频率归一化处理的方法是通过一个公式来确定的。
对连续时间信号的抽样,对抽样信号进行傅里叶变换以及不同采样频率对幅频特性曲线的影响等。
主要的理论依据如下:
(1) 对连续时间信号的抽样:设连续时间信号为x(t),则对其采样得到的
离散时间信号为x(n)=x(nT),T为采样周期;
(2) 离散时间信号的傅里叶变换:X(e)?FT[x(n)]?j?
n????x(n)e??j?n。
题给的模拟信号:选择不同的采样频率和适宜的信号长度,即可得到离散信号x1(n),x2(n)。通过傅里叶|X(ejw)|变化画出其幅频特性。对于原信号,其中e-5=0,
所以选取采样时间t的范围为t=-0.005:+0.005.采样间隔dt,采样频率分别为f1s=5000Hz,f2s=1000Hz。由t=1/fs得到采样的时间间隔dt。因原型号,可以看出其为偶信号,所以进行50点离散傅里叶变换时,只对t>0的部分进行变化,然后通过矩阵转置函数fliplr得到t<0部分的幅频图形。
五.程序源代码
clear all;
close all;
t=-0.005:0.00001:0.005;
xa=cos(500*pi*t);
Ts=0.0002;n=-25:1:25;
x=cos(500*pi*(n*Ts));
K=100;k=0:1:K;w=pi*k/K;
X=x*exp(-j*n'*w);X=real(X);
w=[-fliplr(w),w(2:K+1)];
X=[fliplr(X),X(2:K+1)];
figure(1);
subplot(1,1,1)
subplot(2,2,1);plot(t*1000,xa)
xlabel('t/毫秒');ylabel('x1(n)');
title('离散信号 ts=5000采样'); hold on stem(n*Ts*1000,x,'.');hold off
subplot(2,2,2);plot(w/pi,X);
xlabel('以w/pi为单位的频率');ylabel('X1(jw)'); title('序列傅里叶变换');
t=-0.005:0.00005:0.005;
xa=cos(500*pi*t);
Ts=0.001;n=-5:1:5;
x=cos(500*pi*(n*Ts));
K=100;k=0:1:K;w=pi*k/K;
X=x*exp(-j*n'*w);X=real(X);
w=[-fliplr(w),w(2:K+1)];
X=[fliplr(X),X(2:K+1)];
subplot(2,2,3); plot(t*1000,xa);
xlabel('t/毫秒');ylabel('x2(n)');
title('离散信号 ts=1000采样');hold on stem(n*Ts*1000,x,'.');hold off
subplot(2,2,4);plot(w/pi,X);
xlabel('以w/pi为单位的频率');ylabel('X2(jw)'); title('序列傅里叶变换');
第二种编程
figure(1)
t=-0.005:0.0001:0.005;
y1=exp(-10*abs(t));
T=0.0002;n=-25:1:25;
y2=exp(-10*abs(n*T));
N=200;k=0:1:N;w=pi*k/N;
X=y2*exp(-j*n'*w);X=real(X);
w=[-fliplr(w),w(2:N+1)];
X=[fliplr(X),X(2:N+1)];
subplot(2,2,1);plot(t,y1);
title('原函数');xlabel('t/秒');ylabel('y1(n)'); subplot(2,2,2);stem(n*T,y2,'.');
xlabel('n*T/秒');ylabel('y2(n)');
title('(1)离散序列,fs=5000');
subplot(2,3,4);plot(w/pi,X);
xlabel('频率/\pi');ylabel('Xl(w)')
title('(1)序列的傅里叶变换')
t=-0.005:0.0001:0.005;
y1=exp(-1000*abs(t));
T=0.001;n=-5:1:5;
y2=exp(-1000*abs(n*T));
N=200;k=0:1:N;w=pi*k/N;
X=y2*exp(-j*n'*w);X=real(X);
w=[-fliplr(w),w(2:N+1)];
X=[fliplr(X),X(2:N+1)];
subplot(2,3,5);stem(n*T,y2,'.');
xlabel('n*T/秒');ylabel('y2(n)');
title('(2)离散序列,fs=1000');
subplot(2,3,6);plot(w/pi,X);
xlabel('频率/\pi');ylabel('Xl(w)')
title('(2)序列的傅里叶变换')
第三编程
figure(1)
t=-0.005:0.0001:0.005;
y1=cos(100*pi*t);
T=0.0002;n=-25:1:25;
y2=cos(100*pi*(n*T));
N=200;k=0:1:N;w=pi*k/N;
X=y2*exp(-j*n'*w);X=real(X);
w=[-fliplr(w),w(2:N+1)];
X=[fliplr(X),X(2:N+1)];
subplot(2,2,1);plot(t,y1);
title('原函数');xlabel('t/秒');ylabel('y1(n)'); subplot(2,2,2);stem(n*T,y2,'.');
xlabel('n*T/秒');ylabel('y2(n)');
title('(1)离散序列,fs=5000');
subplot(2,3,4);plot(w/pi,X);
xlabel('频率/\pi');ylabel('Xl(w)')
title('(1)序列的傅里叶变换')
t=-0.005:0.0001:0.005;
y1=cos(100*pi*t);
T=0.001;n=-5:1:5;
y2=cos(100*pi*(n*T));
N=200;k=0:1:N;w=pi*k/N;
X=y2*exp(-j*n'*w);X=real(X);
w=[-fliplr(w),w(2:N+1)];
X=[fliplr(X),X(2:N+1)];
subplot(2,3,5);stem(n*T,y2,'.');
xlabel('n*T/秒');ylabel('y2(n)');
title('(2)离散序列,fs=1000');
subplot(2,3,6);plot(w/pi,X);
xlabel('频率/\pi');ylabel('Xl(w)')
title('(2)序列的傅里叶变换')
五.系统调试与结果分析
结果发现
由X1(n)与X2(n)傅里叶变化可以看出,由于采样频率的不同X1(ejw)的最大幅度为10,而X2(ejw)最大幅度为2. X1(ejw)的幅度在-0.5到0.5之间。X2(ejw)的幅度范围在-1到1之间,比较平缓。而且X2(ejw)的图像会发生混叠。
结果分析:
在进行模拟/数字信号的转换过程中,当采样频率fs大于信号中最高频率fmax的2倍时(fs >=2fmax),采样之后的数字信号完整地保留了原始信号中的信息,采样定理又称奈奎斯特定理。在本题中很明显当Fs=1000Hz时图形发生了较大范围的混叠,而且采样频率Fs越小,混叠情况越严重,图形失真情况也越严重。
时域采样定理 频带为F的连续信号 f(t)可用一系列离散的采样值f(t1),f(t1±Δt),f(t1±2Δt),...来表示(其中Δt=1/Fs),只要这些采样点的时间间隔Δt≤1/2F(即Fs≥2F),便可根据各采样值完全恢复原来的信号f(t)。时域采样定理的另一种表述方式是:当时间信号函数f(t)的最高频率分量为
fM
时,f(t)的值可由一系列采样间隔小于或等于1/2fM的采样值来确定,即采样点的重复频率f≥2fM。
分析: 分别以所要求采样频率fs=5000Hz、1000Hz对x(t)进行等间隔采样,a
得到x(n)?xa(nT),(T?1/fs为采样周期),可知,采样信号的频谱函数是在原
模拟信号频谱函数的周期延拓;若以频率f为自变量,则以采样频率fs?1/T为延拓周期;对频带限于fc的模拟信号xa(t),根据采样定理,只有当fs?2fc时,采样后才不会发生频谱混叠失真。但是在Matlab上是无法计算连续函数,只有在当fs足够大的时候,我们才将频谱混叠忽略不计,从而可对采样序列进行傅
里叶变换;最后应用subplot()命令实现画图,并注意到要归一化。
由以上实验得到的图形结果可以看到:,当采样频率越大的时候,采样信号的频谱越陡峭,而其失真情况也越来越小,根据采样定理“采样频率越接近信号频率,其失真情况就越小”可以得到上述结论。
六.课程设计总结
6.1 课程设计心得体会
通过这周的《现代信号处理》课程设计实践,我学习会了MATLAB编程语言的基本概念、语法、语义和数据类型的使用特点,加深了对数字信号处理这门学科所学理论知识的理解,掌握了运用结构化程序设计的基本思想和方法,更重要的是培养了自己的自学能力。
因为这是我们第一次接触MATLAB编程语言,在编写程序以及调试的过程中遇到了很多困难,但是我通过去图书馆查找资料,请教同学老师,再自己一点点改善程序,最终还是编写出一个比较完善的程序,基本实现了所有要求功能,这是最值得我欣慰的一点。
刚拿到程序设计课题时,我感觉一片茫然,因为在之前的信号处理学习中,本身对数字信号处理这门学科的学习就不精深,更何况只是在一些例题中接触过MATLAB语言,甚至没有看过一些基础的书籍,更没有上过课,所以初次遇到一个实际问题,感觉无从下手。这是由于自己对MATLAB的模块设计不够理解,同时对MATLAB的基本语句一无所知,不过通过请教老师懂得了首先要了解解题思路,以及若要实现此次设计需要哪些最基本的思路和函数。这样一下子豁然开朗,掌握了基本设计思路之后,后面的编程就顺利多了。至此,我真真体会到清晰地思路对成功编写一个程序的重要性。
当然成功编写一个程序绝非易事,之前,我总以为程序能够正常运行,就代
表着编程成功,后来我才发现我大错特错了。我用了三天时间,完成了程序的编写、改错,但我立刻发现尽管程序能够正常运行,部分功能却不完善,甚至不能出现自己想要的结果。经过一次又一次调试、修改又修改,一点一点发现问题并改正,我才真正发现编程远没有想象中的简单,并且深刻体会到编程和单纯的解题是有着多么大的不同。它需要的不仅是清晰地编程思路、编程技巧,还需要细心,有耐心有毅力。
在编程过程中,我遇到了许多问题,通过查找资料也未能找到原因,每次我想老师请教,可老师总不是万能的,顾不到每一位同学的要求。这时,同学就是一个很好的求助对象。我们可以找曾经接触过MATLAB的同学学习、交流、讨论。这样不仅我们可以学习,他们也可以更加巩固他们的知识。我想这便是团队精神,有的时候真的是人多力量大。
最后,在此次编程过程中,我收获的不仅仅是对上学期已学的知识的巩固,和MATLAB这项新的工作平台,我还学会了遇到难题时不能轻易放弃,要有迎难而上的勇气,有时候自己一个人完成不了的理解不了的知识,多请教请教别人是一项很好的选择等等。总之,这次课程设计让我学会了很多,我会铭记于心,让其在以后的学习、生活或者工作中都时刻激励着我。
6.2.课程设计建议及问题
首先在第一题上面花费了很多时间,因为信号处理学过的时间有点久了,对基本知识的掌握有所生疏,所以刚开始得对所学的知识重新的复习一遍,更主要的是,Matlab是一个从未接触过的软件,对它没有任何的基础,即使我了解数字信号处理的知识,也不会用任何的思路来通过Matlab语言来实现结果。所以在开始之前我先做足了准备工作,包括去图书馆借阅图书,上网寻找有关资料等。
刚开始拿到设计题时,完全不知道从何处入手,一开始只会按照书上的解题思路一步步来算,一步步来解这些题目,解出来后再设法将其输入编程中,从而的到想要的答案。可是每次如此,系统输出的结果总是和预想中的不一样,有些甚至不知道哪里出了错。不过后来,在翻阅了有关参考文献后,知道了题目中大部分内容都可以通过MATLAB强大的函数工具箱里的函数直接实现。开始设计后,总是用错函数,输错参数等,这类问题层出不穷,毕竟是第一次用MATLAB进行设计实践,很多问题还是要虚心向老师和同学请教的。在很多次的请教,修改后,程序基本成功地得到了运行,调试过程中又遇到了一些小问题,大多是由于粗心导致的,这些问题在调试过程中都得到了修正。
这次课程设计过程中遇到的主要问题是频率归一化的问题,开始对归一化的概念不是很清楚。在问了班上能力较强的同学后,对这个概念深入理解了,并在程序中成功地实现了。
七.参考文献
1.《MATLAB及在电子信息课程中的应用》 吴大正 陈怀琛 高西全 编著 电子工业出版社 2009
2.《信号与系统 》 郑君里编著 高等教育出版社 2002
3.《现代通信原理》 丁玉美、高西全编著 西安电子科技大学出版社 2003