DSP MATLAB教程.docx
- 文档编号:6184233
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:30
- 大小:211.30KB
DSP MATLAB教程.docx
《DSP MATLAB教程.docx》由会员分享,可在线阅读,更多相关《DSP MATLAB教程.docx(30页珍藏版)》请在冰豆网上搜索。
DSPMATLAB教程
数字信号处理
DigitalSignalProcessing
西南交通大学电气工程学院电子信息工程
李岗:
ligang@
2009-11
目录
第0章绪论1
1Matlab科学计算语言1
2Matlab与Notebook3
第一章离散时间信号与系统5
1、绘制下列信号图形5
2、序列运算10
3、序列与频谱11
4、采样12
5、欠采样及样值恢复13
6、二倍采样及样值恢复14
7、过采样及样值恢复16
第二章z变换18
8、系统响应18
第三章离散傅里叶变换19
9、正弦序列的离散傅里叶变换19
10、正弦序列的离散傅里叶变换和反变换20
第四章快速傅里叶变换22
11、绘制下列信号图形。
22
第五章滤波器结构23
12、绘制下列信号图形。
23
第六章滤波器的设计24
13、巴特沃斯低通滤波器24
14、巴特沃斯低通滤波器设计24
15、窗函数25
第1章绪论
1Matlab科学计算语言
MATLAB名称由Matrix和Laboratory两词的前三个字母组合而成,顾名思义其主要功能是矩阵运算,其首创者是CleveMoler教授。
1980年前后,当时的新墨西哥大学计算机系主任Moler教授在讲授线性代数课程时,发现了用其他高级语言编程极为不便,便构思并开发了MATLAB,这一软件利用了当时数值线性代数领域最高水平的EISPACK和LINPACK两大软件包中可靠的子程序,用Fortran语言编写了一套集命令翻译、科学计算于一身的交互式软件系统。
该语言无需像C和Fortran语言那样编写源程序、编译、连接,最终形成可执行文件。
早期的MATLAB是用Fortran语言编写的,只能作矩阵运算,绘图也只能用极其原始的方法,内部函数也只提供了几十个。
1984年,CleveMoler和JohnLittle等人成立了MathWorks公司,正式将MATLAB推向市场。
从此MATLAB的内核采用C语言编写,除了原有的数值计算能力外,还增加了丰富多彩的图形图像处理、多媒体功能、符号运算和与其他流行软件的接口功能,使得MATLAB的功能越来越强大。
MATLAB以其良好的开放性和运行的可靠性,使很多领域的封闭式的数值计算软件包纷纷被淘汰,而改在MATLAB平台上重建。
20世纪90年代,MATLAB已经成为国际控制界公认的标准计算软件,在国际上30多个数学类科技应用软件中,MATLAB在数值计算方面独占鳌头。
●MathWorks公司于1993年推出了具有划时代意义的基于Windows平台的MATLAB4.0版本,使之应用范围越来越广。
●1994年推出的4.2版本扩充了4.0版本的功能,尤其在图形界面设计方面更提供了新的方法。
●1997年推出了MATLAB5.0版,定义了更多的数据结构,如单元数据、数据结构体、多维矩阵、对象与类等,使其成为一种更方便编程的语言。
1999年初推出的MATLAB5.3版在很多方面又进一步改进了MATLAB语言的功能。
●2000年10月底推出了其全新的MATLAB6.0正式版,在核心数值算法、界面设计、外部接口、应用桌面等诸多方面有了极大的改进。
2002年夏推出的MATLAB6.5版,其最大特点是采用了JIT加速器,使MATLAB的运算速度进一步加快。
●2005年9月发布的MATLAB7.1完整版,提供了MATLAB、Siulink的升级以及其他最新的75个模块的升级,并具有用于数据分析、大规模建模、固定点开发、编码等的新特征。
2007年秋天发布了MATLAB7.4版本,该版本对以前版本的很多模块做了升级改进,同时增加了MATLABBuilderfor.net,扩展了MATLABCompiler的功能,使网络程序员可以通过C#,VB.net等语言使用MATLAB。
虽然MATLAB是计算数学专家倡导并开发的,但其普及和发展离不开自动控制领域学者的贡献,因为在MATLAB的发展进程中,许多有代表性的成就与控制界的要求是分不开的,其大多数工具箱也都是有关控制方面的。
MATLAB具有强大的数学运算能力、方便实用的绘图功能及语言的高度集成性,它在其他科学与工程领域的应用也是越来越广,并且有着更广阔的应用前景和无穷无尽的潜能。
MATLAB是一个十分有效的工具能解决在教学与研究中遇到的问题,可以将使用者从繁琐、无谓的底层编程中解放出来,把有限的宝贵时间更多地花在解决问题中,大大提高工作效率。
目前,MATLAB已经成为国际上最流行的科学与工程计算的软件工具,它不仅是一个“矩阵实验室”和一张“手写式计算纸”,而且已经成为了一种具有广泛应用前景的全新的计算机高级编程语言,有人称它为“第四代”计算机语言,它在国内外高校和研究部门正扮演着重要的角色。
MATLAB不仅仅是一门编程语言,还是一个集成的软件平台,包含以下几个主要部分。
序号
名称
描述
1
MATLAB
语言
MATLAB是一种高级编程语言,它提供了多种数据类型、丰富的运算符和程序控制语句供用户使用。
用户可以根据需求,按照MATLAB语言的约定,编程完成特定的工作。
2
MATLAB
集成工作环境
MATLAB集成工作环境包括程序编辑器、变量查看器、系统仿真器和帮助系统等。
用户在集成工作环境中可以完成程序的编辑、运行和调试,输出和打印程序的运行结果。
3
MATLAB
图形系统
用MATLAB的句柄图形,可以实现二维、三维数据的可视化、图象处理,也可以完全或局部修改图形窗口,还可以方便的设计图形界面。
4
MATLAB
数学函数库
MATLAB提供了丰富的数值计算函数库,既包括常用的数学函数,又包含了各个专业领域独有的数值计算实现,用户可以通过简单的函数调用就可以完成复杂的数学计算任务。
5
Siulink
交互式仿真环境
通过交互式的仿真环境Siulink,用户可以采用图形化的数学模型,完成对各类系统的模型建立和系统仿真,仿真结果也能够以直观的图形方式显示。
Siulink可以接受用户的键盘鼠标输入,也可以通过程序语句来实现数据交换,应用方便灵活。
6
MATLAB
编译器
可以将用MATLAB语言编写的程序编译成脱离MATLAB环境的C源代码、动态连接库或者可以独立运行的可执行文件。
7
应用程序接口API
这是MATLAB的应用程序接口,它提供了MATLAB和C、Fortran、VB、VC等多种语言之间的接口程序库,使用户可以在这些语言的程序里调用MATLAB程序。
8
MATLA工具箱
MATLAB包含了各种可选的工具箱。
工具箱则是由各个领域的高水平专家编写的,所以用户不必编写该领域的基础程序就可以直接进行更高层次的研究。
9
Notebook
Notebook能够让用户在Word环境中使用MATLAB的各种资源,为用户营造容文字处理、科学计算、工程设计于一体的完美的工作环境。
用Notebook制作的M-Book文档不仅拥有Word的全部字处理功能,而且具备MATLAB的数学运算能力和计算结果可视化的能力。
MATLAB被称为第四代计算机语言,利用其丰富的函数资源,可使编程人员从繁琐的代码中解脱出来。
MATLAB用更直观、符合人们思维习惯的代码,代替了C语言的冗长代码,给用户带来的是最直观、最简洁的程序开发环境。
MATLAB语言的主要特点是:
●语言简洁紧凑,语法限制不严格,程序设计自由度大,使用方便灵活。
●数值算法稳定可靠,库函数十分丰富。
●运算符丰富。
●MATLAB既具有结构化的控制语句(if、for),又支持面向对象的程序设计。
●程序的可移植性好,程序几乎不用修改就可以移植到其它机型和操作系统中运行。
●MATLAB的图形功能强大,支持数据的可视化操作,方便的显示程序的运行结果。
●源程序的开发性,系统的可扩充能力强。
●MATLAB是解释执行语言。
MATLAB程序解释执行,速度较慢,效率比C等高级语言要低,而且无法脱离MATLAB环境运行,这是MATLAB的缺点。
但是MATLAB的编程效率远远高于一般的高级语言,这使我们可以把大量的时间花费在对控制系统的算法研究上,而不是浪费在大量的基础代码上,这是MATLAB能够被广泛应用于科学计算和系统仿真的主要原因。
2Matlab与Notebook
Notebook是一张“手写式计算纸”,能使用户能在Word环境中“随心所欲地享用”MATLAB的各种资源,为用户营造融文字处理、科学计算、工程设计于一体的完美工作环境。
MATLABNotebook制作的M-book文档不仅拥有MS-Word的全部文字处理功能,而且具备MATLAB无与伦比的数学解算能力和灵活自如的计算结果可视化能力。
M-book既可以看作是解决各种计算问题的字处理软件,也可以看作具备完善文字编辑功能的科技应用软件。
M-book文档最显著的特点它的“活”性:
1、在科技报告、论文、著作和讲义教材的撰写过程中,为作者营造了文字语言思维和科学计算思维的和谐氛围。
2、用M-book写成的电子著作、电子讲义、网上教材不仅图文并茂,而且动静结合。
那些由MATLAB指令构成的例题、演示,都可供读者亲自操作,举一反三,从而在“手脑并用”的环境中由此及彼、由浅入深。
3、M-book文档能“无缝”地与PowerPointer、Authorware等应用软件相链,使计算机演讲不仅使听讲者看到事先编排的“幻灯片”和“影片”,而且可以让听讲者看到实时科学计算结果,增加听讲者的临场感、与感。
本章叙述由MATLA和Word组合成的中文Notebook环境的配置过程。
具体资料,请读者查阅MATLAB随带文件matlab\help\pdf_doc\matlab\notebook.pdf。
在Matlab中配置NoteBook命令如下:
在Matlab命令窗口中直接运行“notebook”,就可以打开word正常使用。
clear;clc;
第一章离散时间信号与系统
clear;clc;
1、绘制下列信号图形
1)单位冲激函数
%impulse
n=-30:
30;n0=0;
x=[(n-n0)==0];
subplot(3,1,1);plot(n,x);title('单位冲激信号');
subplot(3,1,2);stem(n,x);title('单位冲激序列');
y=abs(fft(x));subplot(3,1,3);stem(y);title('序列频谱');
2)单位阶跃函数
%step
x=[(n-n0)>=0];
subplot(3,1,1);plot(n,x);title('单位阶跃信号');
subplot(3,1,2);stem(n,x);title('单位阶跃序列');
y=abs(fft(x));subplot(3,1,3);stem(y);title('序列频谱');
%real
t=0:
100;x=0.6.^t;
subplot(3,1,1);plot(t,x);title('实数指数信号');
subplot(3,1,2);stem(t,x);title('实数指数序列');
y=abs(fft(x));subplot(3,1,3);stem(y);title('序列频谱')
%sin
t=0:
0.01:
2-eps;
k=1;x=sin(2*pi*k*t+pi/3);
subplot(3,1,1);plot(t,(x));title('正弦波信号');
subplot(3,1,2);stem(t,(x));title('正弦波序列');
y=abs(fft(x));subplot(3,1,3);stem(y);title('序列频谱');
%sin1
t=0:
0.01:
2-eps;
k=3;x=sin(2*pi*k*t+pi/3);
subplot(3,1,1);plot(t,(x));title('正弦波信号');
subplot(3,1,2);stem(t,(x));title('正弦波序列');
y=abs(fft(x));subplot(3,1,3);stem(y);title('序列频谱');
%sin2
t=0:
0.01:
2-eps;
x=sin(2*pi*1*t+pi/3)+0.5*sin(2*pi*3*t+pi/3);
subplot(3,1,1);plot(t,(x));title('正弦波信号');
subplot(3,1,2);stem(t,(x));title('正弦波序列');
y=abs(fft(x));subplot(3,1,3);stem(y);title('序列频谱');
%rand
x=randn(1,100);
subplot(3,1,1);plot((x));title('随机信号');
subplot(3,1,2);stem((x));title('随机序列');
y=abs(fft(x));subplot(3,1,3);stem(y);title('序列频谱');
%rand1
x=randn(1,100);
subplot(3,1,1);plot((x));title('随机信号1');
subplot(3,1,2);stem((x));title('随机序列1');
y=abs(fft(x));subplot(3,1,3);stem(y);title('序列频谱');
2、序列运算
Ts=1/10;t=0:
Ts:
2-eps;N=length(t)-1;
fs=1/Ts;w=fs*(0:
1:
N-1)/N;
n=0:
N-1;
%»基波
x0=1*sin(0.2*pi*n);
y0=abs(fft(x0))/N;
subplot(4,2,1);stem(n,x0);
subplot(4,2,2);stem(w(1:
N/2),y0(1:
N/2));
%3次谐波¨
x1=0.5*sin(0.2*3*pi*n);
y1=abs(fft(x1))/N;
subplot(4,2,3);stem(n,x1);
subplot(4,2,4);stem(w(1:
N/2),y1(1:
N/2));
%求和
x=x0+x1;
y=abs(fft(x))/N;
subplot(4,2,5);stem(n,x);
subplot(4,2,6);stem(w(1:
N/2),y(1:
N/2));
%乘积
x=x0.*x1;
y=abs(fft(x))/N;
subplot(4,2,7);stem(n,x);
subplot(4,2,8);stem(w(1:
N/2),y(1:
N/2));
3、序列与频谱
一个1Hz的正弦波信号:
10Hz采样后的序列:
20Hz采样后的序列:
t=0:
0.001:
1-eps;
x=sin(2*pi*t);
y=abs(fft(x));
subplot(3,1,1);plot(t,x);
Ts=1/10;t=0:
Ts:
1-eps;N=length(t)-1;
fs=1/Ts;w=fs*(0:
1:
N-1)/N;
n=0:
N-1;
x=sin(0.2*pi*n);
y=abs(fft(x));
subplot(3,2,3);stem(n,x);
subplot(3,2,4);stem(w(1:
N/2),y(1:
N/2));
Ts=1/20;t=0:
Ts:
1-eps;N=length(t)-1;
fs=1/Ts;w=fs*(0:
1:
N-1)/N;
n=0:
N-1;
x=sin(0.1*pi*n);
y=abs(fft(x));
subplot(3,2,5);stem(n,x);
subplot(3,2,6);stem(w(1:
N/2),y(1:
N/2));
4、采样
t=0:
0.01:
60;
x=(sin(t)+0.1*sin(2*t)+0.2*sin(3*t));
subplot(4,1,1);
plot(t,(x));
t=0:
0.5:
60;
x=(sin(t)+0.1*sin(2*t)+0.2*sin(3*t));
subplot(4,1,2);stem(t,(x));
t=0:
1:
60;
x=(sin(t)+0.1*sin(2*t)+0.2*sin(3*t));
subplot(4,1,3);stem(t,(x));
t=0:
3:
60;
x=(sin(t)+0.1*sin(2*t)+0.2*sin(3*t));
subplot(4,1,4);
stem(t,(x));
5、欠采样及样值恢复
%原始信号f=60,采样频率80,欠采样
clear;clf;clc;
fs=80;
xString='sin(2*pi*60*t)+0.1*cos(2*pi*15*t)+0.2*cos(2*pi*30*t)';
%原始信号
fs0=1000;tp=0.1;t=[-tp:
1/fs0:
tp];
N=length(t);f=(-N/2:
N/2-1)*fs0/N;
x0=eval(xString);
y0=fft(x0);y0=[y0(N/2:
N),y0(1:
N/2)];
subplot(3,2,1),plot(t,x0,'r');title('原信号');
subplot(3,2,2),plot(f,abs(y0),'r');title('原信号幅度频谱');
%信号采样
Ts=1/fs;t1=-tp:
Ts:
tp;t=t1;
N=length(t);f=(-N/2:
N/2-1)*fs/N;
x1=eval(xString);
y1=fft(x1);y1=[y1(N/2:
N),y1(1:
N/2)];
subplot(3,2,3),stem(t,x1,'.');title('取样信号');
subplot(3,2,4),plot(f,abs(y1),'m');title('取样信号幅度频谱');
%样值恢复
T=1/fs;dt=T/10;tp=0.1;
t=-tp:
dt:
tp;n=-tp/T:
tp/T;
TMN=ones(length(n),1)*t-n'*T*ones(1,length(t));
x2=x1*sinc(fs*TMN);
y2=fft(x2);y2=[y2(N/2:
N),y2(1:
N/2)];
subplot(3,2,5),plot(t,x2,'g'),title('样值恢复');
subplot(3,2,6),plot(f,abs(y2),'g');title('恢复信号频谱');
Warning:
Integeroperandsarerequiredforcolonoperatorwhenusedasindex
Warning:
Integeroperandsarerequiredforcolonoperatorwhenusedasindex
Warning:
Integeroperandsarerequiredforcolonoperatorwhenusedasindex
Warning:
Integeroperandsarerequiredforcolonoperatorwhenusedasindex
Warning:
Integeroperandsarerequiredforcolonoperatorwhenusedasindex
Warning:
Integeroperandsarerequiredforcolonoperatorwhenusedasindex
6、二倍采样及样值恢复
%原始信号f=60,采样频率120,欠采样
clear;clf;clc;
fs=120;
xString='sin(2*pi*60*t)+0.1*cos(2*pi*15*t)+0.2*cos(2*pi*30*t)';
%原始信号
fs0=1000;tp=0.1;t=[-tp:
1/fs0:
tp];
N=length(t);f=(-N/2:
N/2-1)*fs0/N;
x0=eval(xString);
y0=fft(x0);y0=[y0(N/2:
N),y0(1:
N/2)];
subplot(3,2,1),plot(t,x0,'r');title('原信号');
subplot(3,2,2),plot(f,abs(y0),'r');title('原信号幅度频谱');
%信号采样
Ts=1/fs;t1=-tp:
Ts:
tp;t=t1;
N=length(t);f=(-N/2:
N/2-1)*fs/N;
x1=eval(xString);
y1=fft(x1);y1=[y1(N/2:
N),y1(1:
N/2)];
subplot(3,2,3),stem(t,x1,'.');title('取样信号');
subplot(3,2,4),plot(f,abs(y1),'m');title('取样信号幅度频谱');
%样值恢复
T=1/fs;dt=T/10;tp=0.1;
t=-tp:
dt:
tp;n=-tp/T:
tp/T;
TMN=ones(length(n),1)*t-n'*T*ones(1,length(t));
x2=x1*sinc(fs*TMN);
y2=fft(x2);y2=[y2(N/2:
N),y2(1:
N/2)];
subplot(3,2,5),plot(t,x2,'g'),title('样值恢复');
subplot(3,2,6),plot(f,abs(y2),'g');title('恢复信号频谱');
Warning:
Integeroperandsarerequiredforcolonoperatorwhenusedasindex
Warning:
Integeroperandsarerequiredforcolonoperatorwhenusedasindex
Warning:
Integeroperandsarerequiredforcolonoperatorwhenusedasindex
Warning:
Integerop
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP MATLAB教程 MATLAB 教程