第一篇:《信号处理matlab仿真》大作业
中国石油大学(华东)信息与控制工程学院
《信号处理matlab仿真》结课作业
专业班级:电子班 学
号:***** 姓
名:****** 任课老师:***** 2088年11月12日
《信号处理matlab仿真》结课作业
一、实现算法及设计思路
1、基本信号显示
正弦信号的显示,可以对它的幅度、角频率以及初相位进行设置输入。
A1=get(handles.edit1,'String');A=str2num(A1);
w1=get(handles.edit2,'String');w=str2num(w1);
p1=get(handles.edit3,'String');p=str2num(p1);t=-2*pi:0.01:2*pi;y=A*sin(w*t+p);plot(t,y,'r-.');grid
title('正弦信号');
方波信号:
t0=-6*pi;t1=6*pi;dt=1;t=t0:dt:t1;y1=square(t);plot(t,y1,'r-');grid
title('方波信号')锯齿信号:
t0=-6*pi;t1=6*pi;dt=0.05;t=t0:dt:t1;
f=sawtooth(pi/5*t,0);plot(t,f,'r-')grid
title('锯齿信号')单位阶跃信号:
t=-5:0.01:5 y1=u(t);plot(t,y1,'r');grid
title('单位阶跃信号')
《信号处理matlab仿真》结课作业
U(t):
function f=u(t)f=(t>0);%t>0时,f为1,否则为0 end 抽样信号:
t=-15:0.01:15;t1=t/pi;y4=sinc(t1);plot(t,y4,'r-');grid title('抽样信号');指数信号:
clc t=0:.001:10;ft=exp(t);plot(t,ft,'r-'),grid title('指数信号)')
2、序列运算
单位脉冲序列,可以对位移量进行设置:
t=str2num(get(handles.edit1,'String'));k=[t-3:t+7];fk=[(k-t)==0];stem(k,fk)title('单位脉冲序列')单位阶跃序列,可以对位移量进行设置:
t=str2num(get(handles.edit2,'String'));k=[t-3:t+7];fk=[(k-t)>=0];stem(k,fk)title('单位阶跃序列')指数序列,可以对底数进行设置:
t=str2num(get(handles.edit3,'String'));
《信号处理matlab仿真》结课作业
k=[0:10];fk=t.^k;stem(k,fk)title('指数序列')序列卷积,可以对卷积幅度进行设置(针对了特定的两个序列): t=str2num(get(handles.edit4,'String'));k1=-1:3;k2=-1:3;f1=[0 1 3 2 0 ];f2=[0 4 3 2 1 ];y=t*conv(f1,f2);k0=k1(1)+k2(2);k3=length(f1)+length(f2)-2;k=k0:k0+k3;stem(k,y)title('卷积序列')
3、卷积与傅里叶变换
卷积,针对两个特定的信号,对卷积幅度进行设置: clc
t=str2num(get(handles.edit1,'String'));t11=0;
t12=1;
t21=0;
t22=2;
t1=t11:0.001:t12;ft1=2*rectpuls(t1-0.5,1);t2=t21:0.001:t22;ft2=t2;
《信号处理matlab仿真》结课作业
t3=t11+t21:0.001:t12+t22;ft3=conv(ft1,ft2);ft3=t*ft3*0.001;plot(t3,ft3)title('f1(t)*f2(t)')方波傅里叶分析,对方波幅度进行设置: clc f=str2num(get(handles.edit2,'String'));t=0:0.01:2*pi;y=f*sin(t);plot(t,y),hold on y=f*(sin(t)+sin(3*t)/3);plot(t,y),hold on y=f*(sin(t)+sin(3*t)/3+sin(5*t)/5);plot(t,y),hold on y=f*(sin(t)+sin(3*t)/3+sin(5*t)/5+sin(7*t)/7);plot(t,y),hold on y=f*(sin(t)+sin(3*t)/3+sin(5*t)/5+sin(7*t)/7+sin(9*t)/9);plot(t,y),hold on y=f*(sin(t)+sin(3*t)/3+sin(5*t)/5+sin(7*t)/7+sin(9*t)/9+sin(11*t)/11);plot(t,y),grid title('方波傅立叶分析')
《信号处理matlab仿真》结课作业
离散傅里叶变化,针对指数信号,对底数进行设置: t=str2num(get(handles.edit3,'String'));n=-5:5;x=t.^n;k=-200:200;w=(pi/100)*k;X=x*(exp(-j*pi/100)).^(n'*k);p=abs(X);plot(w/pi,p),grid title('离散傅立叶变换');快速傅里叶变化,针对指数信号,对底数进行设置: N=str2num(get(handles.edit3,'String'));x0=sin(N*2*pi*[1:8]/8)*5;dt=2*pi/8;w=linspace(0,2*pi,1000)/dt;x0=x0*exp(-j*[1:length(x0)]'*w)*dt;plot(w,abs(x0))title('快速傅立叶变换')
4、滤波器设计
FIR低通滤波器,可以对阶数、截止频率进行设置:
A1=get(handles.edit1,'String');N=str2num(A1);w1=get(handles.edit2,'String');Wn=str2num(w1);b=fir1(N,Wn,'low');
《信号处理matlab仿真》结课作业
fs=2000;[h,f]=freqz(b,1,1024,fs)plot(f,20*log10(abs(h)));FIR高通滤波器,可以对阶数、截止频率进行设置: A1=get(handles.edit3,'String');N=str2num(A1);w1=get(handles.edit4,'String');Wn=str2num(w1);b=fir1(N,Wn,'high');fs=2000;[h,f]=freqz(b,1,1024,fs)plot(f,20*log10(abs(h)));FIR带通滤波器,可以对阶数、截止频率进行设置: A1=get(handles.edit5,'String');N=str2num(A1);w1=get(handles.edit6,'String');Wn=str2num(w1);b=fir1(N,Wn);fs=2000;[h,f]=freqz(b,1,1024,fs)plot(f,20*log10(abs(h)));巴特沃斯低通滤波器:
《信号处理matlab仿真》结课作业
[b,a]=butter(11,0.5);figure(1);freqz(b,a,512,1000)n=0:40;x1=[(n-3)>=0];x2=[(n-20)>=0];x=x1-x2;y=filter(b,a,x);figure(2)subplot(1,2,1)stem(n,x);axis([0,35,-0.3,1.3]);grid title('x(n)');subplot(1,2,2)stem(n,y)grid title('y=filter(b,a,x)');切比雪夫I型滤波器: wp1=1000;ws1=1500;wc=3000;
《信号处理matlab仿真》结课作业
wp=wp1/wc;ws=ws1/wc;[n,wn]=cheb1ord(wp,ws,1,15);[b,a]=cheby1(n,1,wn);freqz(b,a,512,6000);axis([0,3000,-40,5]);
5、简单图像处理:
打开图片:
[filename,pathname]=uigetfile({'*.jpg';'*.bmp';'*.tif';'*.*'},' 载入图像 ');%选择路径打开图像
if isequal(filename,0)|isequal(pathname,0)%若 filename 为 0 或 pathname为 0,即未选中文件
errordlg('未选中文件 ','警告');%建立一个名为警告的错误对话框,内容为“未选中文件 ”
return;else
file=[pathname,filename];%将文件名和目录名组合成一个完整的路径
x=imread(file);%读入图像
set(handles.axes1,'HandleVisibility','ON');%设置图形对象属性,可从命令窗口中和 GUIs 中访问
axes(handles.axes1);%定义图形区域 axes1
imshow(x);%显示图像
《信号处理matlab仿真》结课作业
set(handles.axes1,'HandleVisibility','OFF');%设置图形对象属性,不可从命令窗口中和 GUIs 中访问
axes(handles.axes2);%定义图形区域 axes2 imshow(x);%显示图像
handles.img=x;%把图像发给handles.img end 灰度处理:
global T %定义全局变量
axes(handles.axes2);%定义图形区域 axes2 T=getimage;%从坐标轴获取图像数据
x=rgb2gray(handles.img);%利用 rgb2gray函数对源图像进行灰度处理 imshow(x);%显示图像
xlabel('灰度图像 ');% x 轴名为“灰度图像 ”
handles.img=x;%把图像发给 handles.img 傅里叶变换:
axes(handles.axes2);i1=handles.img;%获取图像
i2=im2double(i1);%图像矩阵转换成双精度浮点类型
f1=fft2(i2);%对图像进行二维离散傅里叶变换
fc1=fftshift(f1);%将变换后的图象频谱中心从矩阵的原点移到矩阵的中心
i=log(1+abs(fc1));%对变换后的图像矩阵数据求绝对值后取自然对数 imshow(i);
《信号处理matlab仿真》结课作业
xlabel('傅里叶变换图像 ');handles.img=i;直方图均衡化:
axes(handles.axes2);%定义图形区域 axes2 T=getimage;%从坐标轴获取图像数据
x=rgb2gray(handles.img);%利用 rgb2gray函数对源图像进行灰度处理 h=histeq(x);%对图像进行直方图均衡化处理
imshow(h);%显示图像
xlabel('直方图均衡化后的图像 ');handles.img=h;低通滤波器处理: axes(handles.axes2);y1=handles.img;%获取图像
x=rgb2gray(handles.img);%灰度变换
f=double(x);%数据类型转换为双精度数值
g=fft2(f);%二维离散傅里叶变换
g=fftshift(g);%将变换后的图象频谱中心从矩阵的原点移到矩阵的中心
[M,N]=size(g);%返回矩阵 g 的大小,即 M 为行数,N 为列数
nn=2;%二阶巴特沃斯低通滤波器 d0=50;%截止频率 50Hz m=fix(M/2);
n=fix(N/2);%取矩阵 g 的行数和列数一半的整数
《信号处理matlab仿真》结课作业
for i=1:M
for j=1:N % 循环
d=sqrt((i-m)^2+(j-n)^2);
h=1/(1+0.414*(d/d0)^(2*nn));%计算低通滤波器传递函数
result(i,j)=h*g(i,j);%结果返回到 result
end end result=ifftshift(result);%将图象频谱中心从矩阵的中心移到矩阵的原点 y2=ifft2(result);%二维离散傅里叶反变换
y3=uint8(real(y2));%把矩阵 y2 实部转换成 8 位无符号数据
imshow(y3);%显示低通滤波后的图像
xlabel('低通滤波图像 ');handles.img=y3;高通滤波器处理: axes(handles.axes2);x=handles.img;%获取图像
y=rgb2gray(handles.img);%灰度变换
f=double(y);%数据类型转换为双精度数值 k=fft2(f);%二维离散傅里叶变换
g=fftshift(k);%将变换后的图象频谱中心从矩阵的原点移到矩阵的中心
[M,N]=size(g);%返回矩阵 g 的大小,即 M 为行数,N 为列数
nn=2;%二阶
《信号处理matlab仿真》结课作业
d0=25;%截止频率 25Hz m=fix(M/2);n=fix(N/2);for i=1:M
for j=1:N %循环 d=sqrt((i-m)^2+(j-n)^2);if d<=d0 h=0;else h=1;end result(i,j)=h*g(i,j);%结果返回到 result end end result=ifftshift(result);%将图象频谱中心从矩阵的中心移到矩阵的原点
y2=ifft2(result);%二维离散傅里叶反变换
y3=uint8(real(y2));%把矩阵 y2 实部转换成 8 位无符号数据 imshow(y3);%显示高通滤波后的图像
xlabel('高通滤波图像 ');handles.img=y3;上下翻转:
axes(handles.axes2);
T= getimage;%从坐标轴获取图像数据 f=flipud(handles.img);%将图像矩阵上下翻转
《信号处理matlab仿真》结课作业
imshow(f);%显示翻转后的图像
xlabel('上下翻转后的图像 ');handles.img=f;左右翻转:
axes(handles.axes2);T= getimage;%从坐标轴获取图像数据 f=fliplr(handles.img);%将图像矩阵左右翻转
imshow(f);%显示翻转后的图像
xlabel('左右翻转后的图像 ');handles.img=f;
二、调试分析
这个错误主要是不细心造成,检查发现右括号少了,加上就解决了。
对变量没有定义,直接进行使用,在程序开始之前对其进行了重新定义。
《信号处理matlab仿真》结课作业
Freqz错误使用,对程序及freqz参数调整,得到解决。
跟上面的问题一样,都是对freqz重新调整,得到解决。如图所示:
没有对axes1进行定义,直接使用,程序加了:axes(handles.axes1);得到解决。
《信号处理matlab仿真》结课作业
这个错误开始的时候以为是图窗设计的不合理,或者是程序的问题,就把图窗和.m文件都删了重新设计,还是这个错误,排除了图窗设计错误,就对程序进行重新设计,最后实现了简单的图像处理按钮的编写并且没有了错误。
直接对.img进行了使用,对程序作了一下改动,此问题得到解决:
三、测试结果
1、仿真系统开始界面:
《信号处理matlab仿真》结课作业
2、基本信号显示:
①:正弦信号的显示:
②:方波信号的显示:
③:锯齿信号的显示:
《信号处理matlab仿真》结课作业
④:单位阶跃信号的显示:
⑤:抽样信号的显示:
《信号处理matlab仿真》结课作业
⑥:指数信号的显示:
3、序列运算:
①:单位脉冲序列:
②:单位阶跃序列:
③:指数序列:
《信号处理matlab仿真》结课作业
④:序列卷积:
4、卷积与傅里叶变换:
①:卷积:
②:方波傅里叶分析:
《信号处理matlab仿真》结课作业
③:离散傅里叶变换:(主要是对指数信号)
④:快速傅里叶变换:(主要是对指数信号)
《信号处理matlab仿真》结课作业
5、滤波器设计:
①:FIR低通滤波器:
②:FIR高通滤波器:
③:FIR带通滤波器:
④:巴特沃斯低通滤波器:(幅频与相频图线)
《信号处理matlab仿真》结课作业
⑤:切比雪夫I型滤波器:
6、简单图像处理:
①:选择图片打开:
《信号处理matlab仿真》结课作业
②:灰度处理:
③:傅里叶变换:
④:直方图均衡化:
《信号处理matlab仿真》结课作业
⑤:低通滤波器处理:
⑥:高通滤波器处理:
⑦:上下翻转:
《信号处理matlab仿真》结课作业
⑧:左右翻转:
注:每项操作完成后,都有一个返回主界面按钮,为退出此项操作,这里不一一展示。
四、课程总结及心得体会
通过近一段的学习,我明确了matlab是一款集数据分析、矩阵运算、信号处理和图形显示于一体,可方便地应用于数学计算、算法开发、数据采集、系统建模和仿真、数据分析和可视化、科学和应用软件开发等方面的强悍软件,是研究人员、工程人员研究工作中不可多得的工具,也是我们学习过程中必不可少的软件。而正因为其强
《信号处理matlab仿真》结课作业
大之处,以及可视性及可交互性使我对它的学习产生了浓厚的兴趣。开学至今,我们学习了 matlab 矩阵及其运算、matlab 程序设计、m文件操作、m文件 调试、m文件编程以及 matlab 绘图等,一段时间下来,对 matlab 还是有了一定的框架性认识及编程能力。并且在学习matlab 过程中,我感觉到它和 c 语言有许多相似之处,它有c语言的特征,但是比 c 语言编程计算更加简单,适合于复杂的数学运算。以上就是我对此课程的总结和心得体会。
根据自己学习的过程提出以下两点建议:
1、针对上课学习: 对于软件类的学习存在这样一个问题,我们可以上课时带电脑到课堂上或机房授课,一方面老师在讲台上演示,另 一方面同学们在下面即时练习,这样印象会更加深刻。
2、针对课下学习:近期 matlab 学习,老师给的课下作业很少,仅有实验,也许老师考虑同学们比较忙,以及可能交上来的作业效果质量达不到预期效果。但我认为适量的课下作业还是非常有必要的,尤其是对于我们这些普遍自制力较差的情况,这点显得更加有意义。课下作业可以布置那些老师演示过的程序或 ppt 中程序略加改动,让我们下课后及时完成上交。可以使我们及时巩固。
第二篇:基于matlab的语音信号滤波处理——数字信号处理课程设计
数字信号处理课程设计
题目: 学院: 专业: 班级: 学号: 姓名: 指导教师:
基于matlab的语音信号滤波处理
物理与电子信息学院电子信息工程
摘要:
语音信号处理是研究用数字信号处理技术和语音学知识对语音信号进行处理的新兴学科,是目前发展最为迅速的学科之一,通过语音传递信息是人类最重要,最有效,最常用和最方便的交换信息手段,所以对其的研究更显得尤为重要。
Matlab语言是一种数据分析和处理功能十分强大的计算机应用软件,它可以将声音文件变换成离散的数据文件,然后用起强大的矩阵运算能力处理数据。这为我们的本次设计提供了强大并良好的环境!
本设计要求自己录制一段自己的语音后,在MATLAB软件中采集语音信号、回放语音信号并画出语音信号的时域波形和频谱图。再在Matlab中分别设计不同形式的FIR数字滤波器。之后对采集的语音信号经过不同的滤波器(低通、高通、带通)后,观察不同的波形,并进行时域和频谱的分析。对比处理前后的时域图和频谱图,分析各种滤波器对于语音信号的影响。最后分别收听进行滤波后的语音信号效果,做到了解在怎么样的情况下该用怎么样的滤波器。
目录
1.设计内容……………………………………………………………4 2.设计原理……………………………………………………………4 2.1语音信号的时域分析…………………………………………4 2.2语音信号的频域分析…………………………………………5 3.设计过程……………………………………………………………5 3.1实验程序源代码………………………………………………6
3.1.1原语音信号时域、频域图………………………………6
3.1.2低通滤波器的设计………………………………………6
3.1.3高通滤波器的设计………………………………………7
3.1.4带通滤波器的设计………………………………………8
3.1.5语音信号的回放………………………………………9 3.2调试结果描述…………………………………………………10 3.3所遇问题及结果分析…………………………………………15
3.3.1所遇主要问题…………………………………………16
3.3.2结果分析………………………………………………16 4.体会与收获…………………………………………………………17 5.参考文献……………………………………………………………17
1.设计内容:
1.首先录制好一段自己的语音。
2.用Matlab分别设计好3种类型的滤波器(指标自己确定):低通型、高通型、带通型。3.用Matlab将语音信号进行采样,并分别将其通过所设计的3种滤波器。4.用Matlab自带的语音返回函数收听滤波后的语音信号,分析并比较其与原语音信号的差异。
2.设计原理:
语音信号时一种非平稳的时变信号,它带着各种信息。在语音编码、语音合成、语音识别和语音增强等语音处理中无一例外需要提取语音中包含的各种信息。语音信号分析的目的就在于方便有效的提取并表示语音信号所携带的信息。语音信号处理可以分为时域和变换域等处理方法,其中时域分析是最简单的方法,直接对语音信号的时域波形进行分析,崎岖的特征参数主要有语音的短时能量,短时平均过零率,短时自相关函数等。2.1语音信号的时域分析
信号提取:通过图形用户界面上的菜单功能按键采集电脑上的一段音频信号,完成音频信号的频率,幅度等信息的提取,并得到该语音信号的波形图。
信号调整:在设计的用户图形界面下对输入的音频信号进行各种变化,如变化幅度、改变频率等操作,以实现对语音信号的调整。
2.2语音信号的频域分析
信号的傅里叶表示在信号的分析和处理中起着重要的作用。因为对于线性系统来说,可以很方便地确定其对正弦或复指数和的响应,所以傅里叶分析方法能完善地解决许多信号分析和处理问题。另外,傅里叶表示使信号的某些特性变得更明显,因此,它能更深入地说明信号的各项红物理现象。
由于语音信号时随着时间变化的,通常认为,语音是一个受准周期脉冲或随机噪声源激励的线性系统的输出。输出频谱是声道系统频率响应与激励源频谱的乘积。身份到系统的频率响应及激励源都是随时间变化的,因此一般标准的傅里叶表示虽然适用于周期及平稳随机信号的表示,但不能直接用于语音信号。由于语音信号可以认为在短时间内,近似不变,因而可以采用短时分析法。
1.信号变换:在用户图形界面西啊对采集的语音信号进行Fourier等变换,并画出变换前后的频谱图和倒谱图。
2.信号滤波:滤除语音信号中的噪音部分,可以采用抵用滤波、高通滤波、带通滤波,并比较各种滤波后的效果。
3.设计过程:
3.1实验程序源代码(原语音信号存放在e:下):
3.1.1.原语音信号的时域、频域图
[x1,fs,bits]=wavread('e:txwz.wav');%sound(x1,fs,bits);figure(1);
plot(x1);%做原始语音信号的时域图形 title('原始语音信号');xlabel('时间 t');ylabel('音量 n');figure(2);y1=fft(x1);%做length(x1)点的FFT y1=fftshift(y1);%平移,是频率中心为0 derta_fs = fs/length(x1);%设置频谱的间隔,分辨率 plot([-fs/2:derta_fs: fs/2-derta_fs],abs(y1));%画出原始语音信号的频谱图
title('原始语音信号的频谱');grid on;3.1.2低通滤波器的设计
%低通滤波:截止频率4000,阻带衰减20dB,过渡带宽0.1π
fc1=4000;N1=2*pi*0.9/(0.1*pi)wc1=2*pi*fc1/fs;if rem(N1,2)==0 N1=N1+1;end Window= boxcar(N1+1);%长度为N1的矩形窗Window b1=fir1(N1,wc1/pi,Window);
figure(3);freqz(b1,1,512);title('低通滤波器的频率响应');x1_low = filter(b1,1,x1);%对信号进行低通滤波 figure(4);plot(x1_low);title('信号经过低通滤波器(时域)');figure(5);plot([-fs/2:derta_fs:fs/2-derta_fs],abs(fftshift(fft(x1_low))));title('信号经过低通滤波器(频域)');3.1.3高通滤波器的设计
%高通滤波:截止频率4000,阻带衰减40dB,过渡带宽0.1π
fc2=4000;N2=2*pi*3.1/(0.1*pi)wc2=2*pi*fc1/fs;N2=N2+mod(N2,2);Window=hanning(N2+1);b2=fir1(N2,wc2/pi,'high',Window);figure(6);freqz(b2,1,512);%数字滤波器频率响应 title('高通滤波器的频率响应');
x1_high = filter(b2,1,x1);%对信号进行高通滤波 figure(7);plot(x1_high);title('信号经过高通滤波器(时域)');figure(8);plot([-fs/2:derta_fs:fs/2-derta_fs],abs(fftshift(fft(x1_high))));title('信号经过高通滤波器(频域)')3.1.4带通滤波器的设计
%带通滤波:下截止频率4000,上截止频率8000,阻带衰减20dB,过渡带宽度0.1π
f1=4000;f2=8000;%带通滤波器的通带范围 w1=2*pi*f1/fs;w3=w1+0.1*pi;w2=2*pi*f2/fs;w4=w2-0.1*pi;w=[(w1+w3)/2,(w2+w4)/2];B=0.1*pi;N3=ceil(2*0.9*pi/B);N3=N3+mod(N3,2);Window=boxcar(N3+1);b3=fir1(N3,w/pi,'stop',Window);%带通滤波器
figure(9);freqz(b3,1,512);%数字滤波器频率响应 title('带通滤波器的频率响应');x1_daitong = filter(b3,1,x1);%对信号进行带通滤波 figure(10);plot(x1_daitong);title('信号经过带通滤波器(时域)');figure(11);plot([-fs/2:derta_fs:fs/2-derta_fs],abs(fftshift(fft(x1_daitong))));title('信号经过带通滤波器(频域)');3.1.5语音信号的回放(分别执行)
sound(x1,fs,bits);%原始信号
sound(x1_low,fs,bits);%经过低通滤 sound(x1_high,fs,bits);%经过高通滤波 sound(x1_daitong,fs,bits);%经过带通滤波
3.2调试结果描述
原始语音信号的时域图形:
原始语音信号频谱:
低通滤波器的频率响应:
信号经过低通滤波后的时域波形:
信号经过低通滤波后的频域波形
高通滤波器的频率响应:
信号经过高通滤波后的时域波形:
信号经过高通滤波后的频域波形:
带通滤波器的频率响应:
信号经过带通滤波后的时域波形:
信号经过带通滤波后的频域波形:
3.3所遇问题及结果分析
3.3.1所遇主要问题
1.在高通与带通滤波器的设计时老是报错,但同样的用法在低通滤波器中就可以实现
b2=fir1(N2,wc2/pi,'high',Window);??? Error using ==> fir1 The window length must be the same as the filter length.其要求在fir函数中所选用的窗长要和滤波器长度一致。但在参考书上指出,滤波器阶数必须为窗长加1。经上网查询后,原来高通、带阻滤波器的阶数应该控制为奇数,因为如果阶数为偶数,则在π点必有一零点,这对于高通带阻来说是不允许的,故取阶数为奇数,而你FIR1滤波器阶数为M+1阶,所以你的M必须为偶数,所以可以将程序中去窗长算法由原程序的: N2=2*pi*0.9/(0.1*pi);if rem(N2,2)==0 N2=N2+1;End 和: N3=2*pi*0.9/(0.1*pi);if rem(N3,2)==0 N3=N3+1;End 改为了:
N2=N2+mod(N2,2);和: B=0.1*pi;(B为过渡带宽)N3=ceil(2*0.9*pi/B);N3=N3+mod(N3,2);2.在设计高通滤波器时先是使用的矩形窗,用矩形窗验证出来的结果中低频语音分量依旧很强,不能将其全部抑制在0,之后换窗,选着了最小衰减可以到达53dB的海明窗,再次试验,非常成功!3.3.2结果分析
经过回放三个不同类型滤波器输出的语音信号,并与原语音信号对比得到了如下结论。
语音高频成分音质非常尖锐,齿音中,声音有些暗淡。语音低频成分音质沉稳,空间感觉强,语音浑厚。语音中频成分音质有力度,有通透感。
4.体会与收获
以往都是通过课本来感性的认知语音信号,通过本次的课程设计,让我对语音信号有了一个较为实际的认识。于此同时,让我再次把数字信号处理及数字滤波器的设计方法重新进行了复习和学习。而对于Matlab,也再次让我感受到了其功能的强大。最为重要的是,本次课 17
程设计让我重新审视了学习的过程:只去做实验是不行的,首先还是要思考,遇到了问题查书籍,百度搜索也只是一种手段,更加重要的是想,再理解,只有这样才能真正的做好实验。
5.参考文献
《数字信号处理》钱同惠、百度文库
第三篇:基于Matlab的ASK仿真
基于MATLAB的2ASK调制
根据数字带通调制原理,运用MATLAB进行编程,仿真调制过程,记录并分析仿真结果。
形成设计报告。
课程设计需要运用MATLAB编程实现2ASK,2FSK,2PSK,2DPSK调制解调过程,并且输出其调制后的波形,画出频谱、功率谱密度图,并比较各种调制的误码率情况,讨论其调制效果。
二进制数字调制技术原理
数字信号的传输方式分为基带传输和带通传输,在实际应用中,大多数信道具有带通特性而不能直接传输基带信号。为了使数字信号在带通信道中传输,必须使用数字基带信号对载波进行调制,以使信号与信道的特性相匹配。这种用数字基带信号控制载波,把数字基带信号变换为数字带通信号的过程称为数字调制。通常使用键控法来实现数字调制,比如对载波的振幅、频率和相位进行键控。
2ASK
2ASK信号的产生方法通常有两种:模拟调制和键控法。解调有相干解调和非相干解调。P=1时f(t)=Acoswt;p=0时f(t)=0;其功率谱密度是基带信号功率谱的线性搬移
2.2 数字调制技术的仿真实现
MATLAB是一种功能强大的科学计算和工程仿真软件,它的交互式集成界面能够帮助用户快速的完成数值分析、数字信号处理、仿真建模、和优化等功能。本课程设计需要运用MATLAB编程实现2ASK,2FSK,2PSK,2DPSK调制解调过程,并且输出其调制后的波形,画出频谱、功率谱密度图,并比较各种调制的误码率情况,讨论其调制效果。
3.程序与调试图形 3.1、ASK调制解调 3.1.1 ASK程序: 3.3.2 ASK图形:
close all clear all n=16;fc=1000000;
%fc>=bitRate fc/bitRate为每个二进制包含sin周期个数 bitRate=1000000;N=50;%noise=ti;noise=10;
signal=source(n,N);transmittedSignal=askModu(signal,bitRate,fc,N);signal1=gussian(transmittedSignal,noise);configueSignal=demoASK(signal1,bitRate,fc,n,N);
1.随机信号的产生
2.ASK信号调制
3.信道加噪声后信号
4.接收信号的解调
5.解调出的二进制信号
3.4、误码率分析
1.ASK误码率分析
ASK clear all close all i=10;j=5000;
t=linspace(0,5,j);%取0,0.001,0.002。。5 共5001个点
fc=10;fm=i/5;B=2*fc;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%生基带信号
a=round(rand(1,i));%随机序列
figure(2)
产
plot(rand(1,i))st=t;for n=1:10
if a(n)<1;
for m=j/i*(n-1)+1:j/i*n
%一个信号取500个点
st(m)=0;
end
else
for m=j/i*(n-1)+1:j/i*n
st(m)=1;
end
end end figure(1);subplot(421);plot(t,st);axis([0,5,-1,2]);title('基带信号');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%载波
s1=cos(2*pi*fc*t);subplot(422);
plot(s1);title('载波信号');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%调制
e_2ask=st.*s1;subplot(423);plot(t,e_2ask);title('已调信号');noise =rand(1,j);
e_2ask=e_2ask+noise;%加入噪声
subplot(424);plot(t,e_2ask);
title('加入噪声的信号');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%相干解调
at=e_2ask.*cos(2*pi*fc*t);at=at-mean(at);subplot(425);plot(t,at);
title('相乘后信号');
[f,af] = T2F(t,at);%通过低通滤波器
[t,at] = lpf(f,af,2*fm);subplot(426);
plot(t,at);
title('解调后波形');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%抽样判决
for m=0:i-1;
if at(1,m*500+250)+0.5<0.5;
for j=m*500+1:(m+1)*500;
at(1,j)=0;
end else
for j=m*500+1:(m+1)*500;
at(1,j)=1;
end end end subplot(427);plot(t,at);axis([0,5,-1,2]);title('抽样判决后波形')
第四篇:数字信号处理课后习题Matlab作业
数字信号处理MATLAB
第1页
习题数字信号处理MATLAB习题
M1-1 已知g1(t)cos(6t),g2(t)cos(14t),g3(t)cos(26t),以抽样频率fsam10Hz对上述三个信号进行抽样。在同一张图上画出g1(t),g2(t)和g3(t)及抽样点,对所得结果进行讨论。
解:
第2页
从以上两幅图中均可看出,三个余弦函数的周期虽然不同,但它们抽样后相应抽样点所对应的值都相同。那么这样还原回原先的函数就变成相同的,实际上是不一样的。这是抽样频率太小的原因,我们应该增大抽样频率才能真实还原。如下图:f=50Hz
第3页
程序代码
f=10;
t=-0.2:0.001:0.2;g1=cos(6.*pi.*t);g2=cos(14.*pi.*t);g3=cos(26.*pi.*t);k=-0.2:1/f:0.2;h1=cos(6.*pi.*k);h2=cos(14.*pi.*k);h3=cos(26.*pi.*k);% subplot(3,1,1);
% plot(k,h1,'r.',t,g1,'r');% xlabel('t');% ylabel('g1(t)');% subplot(3,1,2);
% plot(k,h2,'g.',t,g2,'g');% xlabel('t');% ylabel('g2(t)');% subplot(3,1,3);
% plot(k,h3,'b.',t,g3,'b');% xlabel('t');% ylabel('g3(t)');
plot(t,g1,'r',t,g2,'g',t,g3,'b',k,h1,'r.',k,h2,'g.',k,h3,'b.')
第4页
xlabel('t');ylabel('g(t)');
legend('g1(t)','g2(t)','g3(t)');
M2-1 利用DFT的性质,编写一MATLAB程序,计算下列序列的循环卷积。
(1)g[k]={1,-3,4,2,0,-2,},h[k]={3,0,1,-1,2,1};(2)x[k]=cos(k/2),y[k]=3k,k=0,1,2,3,4,5。解:(1)循环卷积结果
6.0000-3.0000 17.0000-2.0000 7.0000-13.0000
程序代码
第5页
g=[1-3 4 2 0-2];h=[3 0 1-1 2 1];l=length(g);L=2*l-1;GE=fft(g,L);HE=fft(h,L);y1=ifft(GE.*HE);for n=1:l
if n+l<=L
y2(n)=y1(n)+y1(n+l);else
y2(n)=y1(n);
end end y2
stem(0:l-1,y2)xlabel('k')ylabel('y(k)')title('循环卷积')
(2)循环卷积结果
-71.0000-213.0000 89.0000 267.0000 73.0000 219.0000
第6页
程序代码
k=0:5;
x=cos(pi.*k./2);y=3.^k;l=length(x);L=2*l-1;GE=fft(x,L);HE=fft(y,L);y1=ifft(GE.*HE);for n=1:l
if n+l<=L
y2(n)=y1(n)+y1(n+l);
else
y2(n)=y1(n);
end end y2
stem(0:l-1,y2)xlabel('k')ylabel('y’(k)')title('循环卷积')
第7页
M2-2 已知序列x[k]cos(k/2N),|k|N
0,其他(1)计算序列DTFT的表达式X(ej),并画出N=10时,X(ej)的曲线。
(2)编写一MATLAB程序,利用fft函数,计算N=10时,序列x[k]的DTFT在m2m/N的抽样值。利用hold函数,将抽样点画在X(ej)的曲线上。
解:
(1)X(e)DTFT{x[k]}jkx[k]ejkkNcos(k/2N)eNjk
程序代码
N=10;k=-N:N;
x=cos(k.*pi./(2*N));W=linspace(-pi,pi,512);
第8页
X=zeros(1,length(W));for k=-N:N
X1=x(k+N+1).*exp(-j.*W.*k);X=X+X1;end
plot(W,abs(X))xlabel('W');ylabel('abs(X)');
(2)
程序代码
N=10;k=-N:N;
x=cos(k.*pi./(2*N));X_21=fft(x,21);L=-10:10;
W=linspace(-pi,pi,1024);X=zeros(1,length(W));for k=-N:N
X1=x(k+N+1).*exp(-j.*W.*k);X=X+X1;end
第9页
plot(W,abs(X));hold on;
plot(2*pi*L/21,fftshift(abs(X_21)),'o');xlabel('W');ylabel('abs(X)');
M2-3 已知一离散序列为x[k]Acos0kBcos[(0)k]。用长度N=64的Hamming窗对信号截短后近似计算其频谱。试用不同的A和B的取值,确定用Hamming窗能分辨的最小的谱峰间隔wc的值。
解:f1=100Hz f2=120Hz时
2中cN
f2=140Hz时
第10页
f2=160Hz时
第11页
由以上三幅图可见
f2=140Hz时,各谱峰可分辨。则f又
wc2N
40Hz
且
wT2fT2401 800所以c=3.2(近似值)
程序代码
N=64;L=1024;
f1=100;f2=160;;fs=800;
A=1;B1=1;B2=0.5;B3=0.25;B4=0.05;T=1/fs;ws=2*pi*fs;k=0:N-1;
x1=A*cos(2*pi*f1*T*k)+B1*cos(2*pi*f2*T*k);x2=A*cos(2*pi*f1*T*k)+B2*cos(2*pi*f2*T*k);x3=A*cos(2*pi*f1*T*k)+B3*cos(2*pi*f2*T*k);x4=A*cos(2*pi*f1*T*k)+B4*cos(2*pi*f2*T*k);hf=(hamming(N))';x1=x1.*hf;x2=x2.*hf;x3=x3.*hf;x4=x4.*hf;
X1=fftshift(fft(x1,L));X2=fftshift(fft(x2,L));X3=fftshift(fft(x3,L));X4=fftshift(fft(x4,L));
W=T*(-ws/2+(0:L-1)*ws/L)/(2*pi);subplot(2,2,1);plot(W,abs(X1));title('A=1,B=1');xlabel('W');ylabel('X1');subplot(2,2,2);
第12页
plot(W,abs(X2));title('A=1,B=0.5');xlabel('W');ylabel('X2');subplot(2,2,3);plot(W,abs(X3));title('A=1,B=0.25');xlabel('W');ylabel('X3');subplot(2,2,4);plot(W,abs(X4));title('A=1,B=0.05');xlabel('W');ylabel('X4');
M2-4 已知一离散序列为x[k]cos0k0.75cos1k,0k63。其中, 02/15,12.3/15。
(1)对x[k]做64点FFT, 画出此时信号的谱。
(2)如果(1)中显示的谱不能分辨两个谱峰,是否可对(1)中的64点信号补0而分辨出两个谱峰。通过编程进行证实,并解释其原因。
解:(1)
第13页
程序代码
W0=2*pi/15;W1=2.3*pi/15;N=64;k=0:N-1;
x=cos(W0*k)+0.75*cos(W1*k);X=fft(x);
plot(k/N,abs(X));grid on;
title('64点FFT');
(2)
第14页
第15页
由以上三幅图看出:不能对(1)中的64点信号补零而分辨出两个谱峰,这样的方法只能改变屏幕分辨率,但可以通过加hamming窗来实现对谱峰的分辨。程序代码
W0=2*pi/15;W1=2.3*pi/15;N=64;L=1024;k=0:N-1;
x=cos(W0*k)+0.75*cos(W1*k);X=fft(x,L);
plot((0:L-1)/N,abs(X));grid on;
title('1024点FFT');
M2-5 已知一连续信号为x(t)=exp(-3t)u(t),试利用DFT近似分析
第16页
其频谱。若要求频率分辨率为1Hz,试确定抽样频率fsam、抽样点数N以及持续时间Tp。
解:
本题使用矩形窗,则Nfsamfsam1fsam,Tp1 f1f
第17页
由以上三幅图可以看出当fsam越来越大时,近似值越来越接近
第18页
于实际值。即fsam越大拟合效果越好,造成的混叠也是在可以允许的范围内。程序代码
fs=100;ws=2*pi*fs;Ts=1/fs;N=fs;
x=exp(-3*Ts*(0:N-1));y=fft(x,N);l=length(y);
k=linspace(-ws/2,ws/2,l);
plot(k,Ts*fftshift(abs(y)),'b:');hold on;
w=linspace(-ws/2,ws/2,1024);y1=sqrt(1./(9+w.^2));plot(w,y1,'r')
title('fs=100Hz时的频谱')legend('近似值','实际值);
M2-6 试用DFT近似计算高斯信号g(t)exp(dt2)的频谱抽样值。
π2通过和频谱的理论值G(j)exp()比较,讨论如何根据时域的信
d4d号来恰当地选取截短长度和抽样频率使计算误差能满足精度要求。
解:
第19页
第20页
由以上三幅图可以看出:
当时域截取长度相同时,抽样间隔越小时误差越小,当抽样间隔一定时,时域截取长度越长,误差越小。当取抽样间隔为1S,时域截取长度为2S时,误差较大,绝对误差在0.5左右;当抽样间隔为0,5S,时域截取长度为2S时,误差比间隔为1S时小,绝对误差不大于0.2;当抽样间隔为0.5S时域截取长度为4S时,误差更小,绝对误差不大于0.04。因为时域截取长度越长,保留下来的原信号中的信息越多,抽样间隔越小,频谱越不容易发生混叠,所以所得频谱与理论值相比,误差更小。
程序代码
Ts=0.5;N=4;N0=64;
k=(-N/2:(N/2))*Ts;
第21页
x=exp(-pi*(k).^2);X=Ts*fftshift(fft(x,N0));
w=-pi/Ts:2*pi/N0/Ts:(pi-2*pi/N0)/Ts;XT=(pi/pi)^0.5*exp(-w.^2/4/pi);subplot(2,1,1)
plot(w/pi,abs(X),'-o',w/pi,XT);xlabel('omega/pi');ylabel('X(jomega)');
legend('试验值','理论值');
title(['Ts=',num2str(Ts)subplot(2,1,2)plot(w/pi,abs(X)-XT)ylabel('实验误差')
xlabel('omega/pi');
'N=',num2str(N)]);第22页
' '
第五篇:MATLAB作业
第一章 MATLAB R2010a简介
主要内容总结如下:
本章主要介绍了MATLAB的功能和它的用户界面以及MATLAB R2010a的路径搜索。MATLAB的功能是多种多样的,有数学计算功能、图形化显示功能、M语言编程功能、编译功能Simulink建模仿真功能,自动代码生成功能,图形用户界面开发功能等一系列功。在介绍MATLAB R2010a用户界面时,主要介绍了它的启动方法,主菜单及其功能。学习心得体会:
通过本章的学习,我了解了MATLAB的基本功能,认识了它的界面和启动方法,以及主菜单功能,被他强大的计算功能和其他功能深深吸引,学会了MATLAB,将会为我以后学习其他方面的知识提供一种工具,使学习其他的东西更加的方便。我非常喜欢这门课,所以我一定会努力学好它的。
第二章 基本使用方法
主要内容总结如下:
本章主要介绍了MATLAB中一些简单的数学运算和常用的数学函数和数学运算符,标点符号的使用,常用的操作命令和快捷键,整数、浮点数、复数、逻辑变量等数据类型和他们之间的转换,数据类型操作函数和变量,MATLAB中的关系运算符逻辑运算符等运算符和它们的优先级,以及一些基础函数,如位操作函数、逻辑运算函数、集合函数、时间与日期函数。本章还介绍了MATLAB中的脚本文件。
学习心得体会:
通过本章的学习我了解了MATLAB中的简单数学运算符,一些操作命令和快捷键,MATLAB R2010a的数据类型和运算符,还有一些基础函数,脚本文件。我认为这些东西是基本的东西,但是我又必须要学好它们,只有把这些基础都掌握了,才能为以后的学习打下坚实的基础。我认为MATLAB中的许多函数我应该熟练它的作用,做到看到函数要知道其作用。我在这一部分的学习中,脚本文件的编写对我来说有一定的困难,我以后一定多加练习,学好他们。
第三章 数组和向量
主要内容总结如下:
本章主要介绍了数组和向量两个大的方面。其中数组介绍了数组的创建,数组的操作(如获取数组中的元素,从数组中移除元素,数组算术操作,数组逻辑运算数组连接,切片、重排和线性化数组),和一些实例应用;向量部分介绍了向量的创建,尺寸,索引(包括数值索引、逻辑索引),缩短,向量操作(包括算术操作、逻辑操作、应用库函数、连接、切片)等知识。学习心得体会:
通过本章的学习我对数组和向量有了一个全新的认识,这部分的学习有许多细节需要注意,如我们在从数组中移除元素时,元素必须整列整行的移除;行向量可以直接输入,列向量输入时中间需要用到分号;.*,./,和.^被分别用作逐个元素相乘,相除,及指数运算等等。还有一些函数如zeros,rand,diag,magic等都可以产生一些常用的数组,学习时应该熟练掌握。向量的索引对我来说是比较难的知识,刚开始学的时候不太理解,不过后来经过我反复的学习逐渐了解,这部分知识我还需要努力。向量和数组这部分知识在以后的几章会经常用到,并且和实际联系的也比较紧密,所以我必须要学好他们。
第四章MATLAB 的数学运算 本章主要内容总结如下:
本章主要介绍了多项式与差值,函数运算,微分方程三大模块。其中多项式与插值主要介绍了多项式的四则运算,roots函数,polyval函数,polyder函数,多项式拟合,以及数据插值;函数运算主要介绍了函数图像的绘制,函数的极值,数值积分和含参数函数的使用;微分积分主要介绍了常微分初值问题和常微分方程边值问题。
学习心得体会:
通过本章的学习掌握了在MATLAB中对多项式的处理,和图形的绘制,极值的求解,函数的求解,微分、积分的处理。本章所介绍的MATLAB处理方法处理的是高等数学中经常遇到的问题,从这里可以知道MATLAB是一种很好的数学工具。本章学习时有许多问题需要注意,如多项式在相加时要等长;绘制函数图像的函数为fplot;使用含参数函数还可以通过匿名函数来实现,函数的参数在使用之前必须先赋值等问题。这一部分也介绍了许许多多的函数,我应该在课下熟练掌握,充分理解其作用。
第五章 字符串、单元数组和结构体
本章主要内容总结如下:
本章主要介绍了的字符串生成、执行、字符串与数值之间的转化;单元数组的生成和一些操作;结构体的生成和一些操作。在MATLAB中,生成字符串的简单方法为stringname=’the content of the string’.;单元数组可以通过赋值语句直接创建,也可以利用cell函数先为单元数组分配一个内存空间,然后再给各个单元赋值;结构体的生成可以是直接输入,也可以使用结构体生成函数struct。还介绍了字符串的比较,字符串的查找和替换;单元数组的显示和图形显示和单元数组元素的删除;结构体中有添加成员变量,删除成员变量和调用成员变量。学习心得体会:
通过本章的学习了解了字符串,单元数组,结构体的一些基本的使用技巧,学会了字符串,单元数组,结构体的创建,以及它们的一些特殊的用途,如利用函数来进行字符串与数值之间的转化,单元数组的图形显示,在结构体中添加成员变量。字符串,单元数组和结构体是三种特殊的数据结构,字符串用于对字符型数据结构进行操作,单元数组和结构体数据类型允许用户将不同类型的数据集成为一个单一的变量,因此,相关的数据可以通过一个单元数组或是结构体进行组织和操作。在这一部分的学习中,感觉比较有意思,所以对这部分知识兴趣很高。觉的这一部分知识很是有用,所以应该好好学习。
第六章 MATLAB编程
本章主要内容总结如下:
本章主要介绍了MATLAB的脚本文件和编辑器/调试器,程序设计和开发,关系运算符和逻辑变量,逻辑运算符和函数,条件语句,和循环。其中脚本文件和编辑器主要介绍了脚本文件如何创建和使用,以及它的命令窗口的介绍,脚本文件的调试,如何使用脚本文件存储数据,以及如何控制输入和输出;程序设计和开发主要介绍了算法和控制结构,结构化程序设计以及伪代码;关系运算符和逻辑变量主要介绍了logical类,logical函数以及使用逻辑数组访问数组;逻辑运算符和函数主要介绍了一些如与、或、非等逻辑运算符以及它,们的优先级别和使用方法,还介绍了短路逻辑运算符,find函数;条件语句主要介绍了if语句,elseif语句和它们的使用方法,还简要介绍了如何输入和输出参数的数量;循环主要介绍了for循环,break和continue语句,使用数组作为循环索引,隐含循环,使用逻辑数组作为掩码等知识。学习心得体会:
通过本章的学习初步掌握了MATLAB的脚本文件及其编辑和调试方法,掌握了MATLAB的程序设计和开发流程,和MATLAB的关系运算符、逻辑运算及函数操作,MATLAB中的流程控制语句包括if语句,switch语句,contine语句。本章的脚本文件对今后的学习非常有帮助,条件语句和循环语句可用于解决实际生活中许多问题。我对这一部分的认识是:感觉不是太难,又不会的地方也及时请教老师,所以没有遗留太多疑问。再者,大一时也学过条件语句和循环语句,所以学起来没有那么的吃力。习题如下:
编程:求[100]以内的全部素数(素数是大于1且除了1和它本身以外不能被其他任何整数所整除的整数。为了判断整数m是否为素数,一个最简单的办法用2,3,4,5, m-1这些数逐个去除m看能否除尽,如果全都除不尽,则m是素数;否则,只要其中一个能除尽,则m不是素数。)
程序如下: disp(2)for m=3:1:100 for x=2:1:m-1 if rem(m,x)==0 break
elseif(x>=m-1)disp(m)end
end end
第七章 MATLAB的符号处理
本章主要内容总结如下:
本章主要介绍了符号运算的简介,符号表达式的化简与替换,符号函数图形的绘制,符号微积分,符号方程的求解,符号积分变换,MAPLE函数的调用,符号函数计算器。其中符号运算简介主要介绍了符号对象,符号变量、表达式的生成,以及findsym函数和subs函数,符号和数值之间的转化;符号表达式的化简与替换主要介绍了用collect函数合并同类项,用expand函数进行符号表达式的展开,用horner函数将函数转化为嵌套格式,用factor函数来实现因式分解的功能,simplify和simple函数来实现表达式的化简,符号表达式的替换可以用subexpr和subs函数;符号函数图形绘制主要介绍了符号函数曲线的绘制,符号函数曲面网格图及表面图的绘制和等值线的绘制;符号微积分主要介绍了符号表达式求极限,符号微分、积分,级数求和和Taylor级数;符号方程的求解主要包括代数方程的求解,代数方程组的求解,微分方程的求解,微分方程组的求解等;符号积分变换主要有符号傅立叶变换,符号拉普拉斯变换,符号Z变换。学习心得体会: 通过本章的学习了解了MATLAB符号计算的几个功能,有计算、线性代数、化简、方程求解、特殊的数学函数、符号积分变换,MATLAB提供了与MAPLE的良好接口,通过maple.m和map.m实现。这样,MATLAB可以实现更强大的符号运算功能功能,为习惯于MAPLE的用户提供了方便。本章的学习让我领会了MATLAB强大的符号功能,能够很好的解决实际生活中问题。
第八章 MATLAB绘图
本章主要内容总结如下:
本章主要介绍了MATLAB的绘图功能,首先介绍了MATLAB的图形窗口,包括图形窗口的创建与控制,图形窗口的菜单栏的主要功能;然后介绍了基本图形的绘制,有二维图形的绘制,三维图形的绘制以及如何对图形进行操作;介绍了特殊图形的绘制,有条形图、面积图、饼状图、离散型数据图、方向矢量图和速度矢量图、等值线绘制,还介绍了在图形中添加基本注释,包括文本框,线条,箭头,框图,标题,坐标轴,颜色条,图例;最后介绍了一些三维图像的高级控制。学习心得体会:
通过本章的学习了解了MATLAB的图形窗口,掌握了MATLAB基本二维图形、三维图形的绘制,以及图形的基本操作,掌握了MATLAB特殊图形的绘制,如柱状图,饼状图,掌握了图形注释的添加及管理,了解了三维图形的视点控制及颜色、光照控制。本章的学习和实际生活联系的非常紧密,把抽象的数学式子转化为易理解的图形,给人一目了然的清晰感觉。这部分知识是一个很好的绘图工具,对解决其他学科的问题很有帮助。我在学习这一部分知识时,上课紧跟着老师的思路走,模块很是清晰,学习兴趣极高,但是仍存在许多不足的地方,课下一定再进一步努力学习。习题如下:
绘图:在同一图像窗口中绘制六副子图
1.在第一个子图中同时绘制不同线型不同颜色的正弦和余弦曲线,添加图例、坐标轴、标题、网格线和边框线。2.在第二个子图中绘制磁盘空间的饼图。3.在第三个子图中绘制三维网格图(surf)。4.在第四个子图中绘制三维曲面图(mesh)。
5.在第五—六个子图中同时绘制二维正弦离散图和红色点划线余弦阶跃图。
程序如下:
>> x=[0:pi/10:2*pi];subplot(3,2,1);plot(x,sin(x));hold on;plot(x,cos(x),'r-.');grid on box on >> m=[8 17];>> subplot(3,2,2);>> pie(m,{'可用空间','已用空间'});>> t=0:pi/50:10*pi;>> subplot(3,2,3),plot3(sin(t),cos(t),t);>> grid on >> axis square >> X=-1:0.1:1;>> Y=X';>> X1=X.^2;>> Y1=Y.^2;>> p=ones(3,1);>> p=ones(length(X),1);>> q=ones(1,length(Y));>> X1=p*X1;>> Y1=Y1*q;>> Z=X1+Y1;>> subplot(3,2,4)>> mesh(X,Y,Z)>> n=[0:10:360]*pi/180;>> N=sin(n);>> subplot(3,2,5),stem(n,N)>> subplot(3,2,6),stairs(n,N,'r-.');
运行结果如下:
第九章 句柄图形
本章主要内容总结如下:
本章主要介绍了MATLAB 的图形对象,图形对象的属性,和图形对象的属性值的设置和查询。MATLAB介绍了Root对象,Figure对象,Core对象,Plot对象,Annotation对象,Group对象;图形对象的属性包括公共属性和特有属性;图形对象属性值的设置和查询首先通过构造函数返回其创建的对象句柄,然后利用该句柄,用户可以在对象创建完成后对其属性值进行查询和修改。学习心得体会:
通过本章的学习了解MATLAB图形对象及其属性,掌握MATLAB图形对象属性的设置及其查询,掌握了MATLAB图形句柄的访问及其操作。句柄图形是MATLAB中用于创建图形的面向对象的图形系统。通过图形句柄,MATLAB可以对图形元素进行操作,而这些图形正是产生各种类型图形的基础。利用图形句柄,可以在MATLAB中修改图形的显示效果,创建绘图函数。对于这部分知识的学习有所欠缺,课下应该多加练习。
第十章GUI设计
本章主要内容总结如下:
本章主要介绍了GUI的基本控件,如何创建简单的GUI,如何向界面中添加控件以及如何设置设置控件的属性和编写响应函数;本章还介绍了通过向导创建GUI界面和通过程序创建GUI,其中通过向导创建包括1,启动GUIDE2,2,向GUI中添加控件并设置控件标志和控件显示文本,3,创建菜单;通过程序创建GUI的步骤主要包括1,需要实现的功能及需要包含的控件2,需要使用的技术3,创建GUI,4,创建GUI界面和控件,5,初始化GUI,6,定义响应函数,7,该GUI的完整M文件;本章还介绍了如何编写GUI代码,包括GUI文件和响应函数。学习心得体会:
通过本章的学习掌握了图形用户界面和GUI中所包含的多个图形对象,如窗口、图标、菜单和文本的用户界面。以某种方式选择或激活这些对象,通常引起动作或发生变化。了解GUI的基本控件,掌握了通过GUIDE创建GUI的方法,也掌握了通过程序创建GUI的方法。对于本章的知识我是比较陌生的,以前从来没有接触过,所以刚开始学的时候比较吃力,后来经过老师的讲解,和自己在课下的学习,对这部分知识有了一个系统的了解。做作业时,刚开始时,程序运行出错,后来经过反复修改,终于运行成功,看着自己的GUI成功运行,心中是比较兴奋的,课下一定会多加练习的。习题如下:
GUI:绘制抛物线y=ax2+bx+c的图像,其中参数a、b、c及标题等由界面文本编辑框输入,设计边框线按钮和边框菜单。M文件程序如下:
function varargout = untitled(varargin)gui_Singleton = 1;gui_State = struct('gui_Name', mfilename,...'gui_Singleton', gui_Singleton,...'gui_OpeningFcn', @untitled_OpeningFcn,...'gui_OutputFcn', @untitled_OutputFcn,...'gui_LayoutFcn', [] ,...'gui_Callback', []);if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});end
if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});else
gui_mainfcn(gui_State, varargin{:});end
function untitled_OpeningFcn(hObject, eventdata, handles, varargin)handles.output = hObject;guidata(hObject, handles);function varargout = untitled_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;function go_Callback(hObject, eventdata, handles)grid on function tit_Callback(hObject, eventdata, handles)title('¶þ´ÎÇúÏßy=a*x.^2+b*x+c')function ax_Callback(hObject, eventdata, handles)axis([-7 7-10 10])function gf_Callback(hObject, eventdata, handles)grid off
function togglebutton5_Callback(hObject, eventdata, handles)function op_Callback(hObject, eventdata, handles)box on box off
function bo_Callback(hObject, eventdata, handles)box on
function bf_Callback(hObject, eventdata, handles)box off
function pushbutton2_Callback(hObject, eventdata, handles)function edit1_Callback(hObject, eventdata, handles)x=str2num(get(handles.edit1,'string'));t=-10:.001:10;y=x(1)*t.^2+x(2)*t+x(3);plot(t,y)function edit1_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');end
运行结果如下:
第十一章 Simulink的建模与仿真
本章主要内容总结如下:
本章主要介绍了Simulink中的建模方法和基本功能模块,首先介绍了Simulink建模的基本操作和基本流程,然后介绍了Simulink的各,功能模块和常见Simulink模型,最后介绍S函数,并通过实例建模以使读者对Simulink有进一步的认识。学习心得体会:
通过本章的学习了解了Simulink的建模方法和基本模块,这一部分知识对我来说完全是新的内容,学起来有点吃力,所以应该多花点时间在这部分。这部分知识和专业联系的比较紧密,专业性很强,一定要学好。
第十二章 文件和数据的导入与导出
本章主要内容总结如下:
本章主要介绍了文件的存储,数据的导入,文件的打开,文本文件的读写,低级文件I/O和利用界面工具导入数据。文本文件的读写可以用csvread,csvwrite,dlmread,dlmwrite,textread,textscan等函数来实现。学习心得体会:
通过本章的学习了解了MATLAB的基本数据操作,掌握了MATLAB中文本文件的读写方式和MATLAB通过界面导入导出数据,了解MATLAB中的基本输入输出函数,这部分知识要深入了解,达到融会贯通的程度。