《《信号处理matlab仿真》大作业.pdf》由会员分享,可在线阅读,更多相关《《信号处理matlab仿真》大作业.pdf(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、中国石油大学(华东)信息与控制工程学院中国石油大学(华东)信息与控制工程学院信号处理信号处理 matlabmatlab 仿真结课作业仿真结课作业专业班级:电子班学号:*姓名:*任课老师:*20882088 年年 1111 月月 1212 日日信号处理 matlab 仿真结课作业一、实现算法及设计思路1、基本信号显示正弦信号的显示,可以对它的幅度、角频率以及初相位进行设置输入。A1=get(handles.edit1,String);A=str2num(A1);w1=get(handles.edit2,String);w=str2num(w1);p1=get(handles.edit3,Stri
2、ng);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:5y1=u(t);plot(t,y1,r);gridtitl
3、e(单位阶跃信号)1信号处理 matlab 仿真结课作业U(t):function f=u(t)f=(t0);%t0时,f为1,否则为0end抽样信号:t=-15:0.01:15;t1=t/pi;y4=sinc(t1);plot(t,y4,r-);gridtitle(抽样信号);指数信号:clct=0:.001:10;ft=exp(t);plot(t,ft,r-),gridtitle(指数信号)2、序列运算单位脉冲序列,可以对位移量进行设置:t=str2num(get(handles.edit1,String);k=t-3:t+7;fk=(k-t)=0;stem(k,fk)title(单位脉冲
4、序列)单位阶跃序列,可以对位移量进行设置: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);2信号处理 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;
5、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、卷积与傅里叶变换卷积,针对两个特定的信号,对卷积幅度进行设置:clct=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;3信号处理 matlab 仿真结课作业t3=t11+t21:0.001:
6、t12+t22;ft3=conv(ft1,ft2);ft3=t*ft3*0.001;plot(t3,ft3)title(f1(t)*f2(t)方波傅里叶分析,对方波幅度进行设置:clcf=str2num(get(handles.edit2,String);t=0:0.01:2*pi;y=f*sin(t);plot(t,y),hold ony=f*(sin(t)+sin(3*t)/3);plot(t,y),hold ony=f*(sin(t)+sin(3*t)/3+sin(5*t)/5);plot(t,y),hold ony=f*(sin(t)+sin(3*t)/3+sin(5*t)/5+sin
7、(7*t)/7);plot(t,y),hold ony=f*(sin(t)+sin(3*t)/3+sin(5*t)/5+sin(7*t)/7+sin(9*t)/9);plot(t,y),hold ony=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),gridtitle(方波傅立叶分析)4信号处理 matlab 仿真结课作业离散傅里叶变化,针对指数信号,对底数进行设置:t=str2num(get(handles.edit3,String);n=-5:5;x=t.n;k=-200:200;
8、w=(pi/100)*k;X=x*(exp(-j*pi/100).(n*k);p=abs(X);plot(w/pi,p),gridtitle(离散傅立叶变换);快速傅里叶变化,针对指数信号,对底数进行设置: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(ha
9、ndles.edit1,String);N=str2num(A1);w1=get(handles.edit2,String);Wn=str2num(w1);b=fir1(N,Wn,low);5信号处理 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=
10、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);巴特沃斯低通滤波器:6信号处理 matlab 仿真结课作业b,a=butter(11,0.5);figure(1);freqz(b,a,512,
11、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);gridtitle(x(n);subplot(1,2,2)stem(n,y)gridtitle(y=filter(b,a,x);切比雪夫 I 型滤波器:wp1=1000;ws1=1500;wc=3000;7信号处理 matlab 仿真结课作业wp=wp1/wc;ws=ws1/wc;n,wn=cheb1ord(wp,ws,1,15);b,a=cheby1(n,1,wn);fr
12、eqz(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;elsefile=pathname,filename;%将文件名和目录名组合成一个完整的路径x=imread
13、(file);%读入图像set(handles.axes1,HandleVisibility,ON);%设置图形对象属性,可从命令窗口中和 GUIs 中访问axes(handles.axes1);%定义图形区域 axes1imshow(x);%显示图像8信号处理 matlab 仿真结课作业set(handles.axes1,HandleVisibility,OFF);%设置图形对象属性,不可从命令窗口中和 GUIs 中访问axes(handles.axes2);%定义图形区域 axes2imshow(x);%显示图像handles.img=x;%把图像发给 handles.imgend灰度处理
14、:global T%定义全局变量axes(handles.axes2);%定义图形区域 axes2T=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
15、=fftshift(f1);%将变换后的图象频谱中心从矩阵的原点移到矩阵的中心i=log(1+abs(fc1);%对变换后的图像矩阵数据求绝对值后取自然对数imshow(i);9信号处理 matlab 仿真结课作业xlabel(傅里叶变换图像);handles.img=i;直方图均衡化:axes(handles.axes2);%定义图形区域 axes2T=getimage;%从坐标轴获取图像数据x=rgb2gray(handles.img);%利用 rgb2gray 函数对源图像进行灰度处理h=histeq(x);%对图像进行直方图均衡化处理imshow(h);%显示图像xlabel(直方图均
16、衡化后的图像);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;%截止频率 50Hzm=fix(M/2);n=fix(N/2);%取矩阵 g 的行数和列数一半的整数10信号处理
17、matlab 仿真结课作业for i=1:Mfor 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);%结果返回到 resultendendresult=ifftshift(result);%将图象频谱中心从矩阵的中心移到矩阵的原点y2=ifft2(result);%二维离散傅里叶反变换y3=uint8(real(y2);%把矩阵 y2 实部转换成 8 位无符号数据imshow(y3);%显示低通滤波后的图像xlabel(低通滤波图像);handles.img=y3;高
18、通滤波器处理: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;%二阶11信号处理 matlab 仿真结课作业d0=25;%截止频率 25Hzm=fix(M/2);n=fix(N/2);for i=1:Mfor j=1:N%循环d=sqrt(i-m)2+(j-n
19、)2);if d=d0 h=0;else h=1;endresult(i,j)=h*g(i,j);%结果返回到 resultendendresult=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.im
20、g);%将图像矩阵上下翻转12信号处理 matlab 仿真结课作业imshow(f);%显示翻转后的图像xlabel(上下翻转后的图像);handles.img=f;左右翻转:axes(handles.axes2);T=getimage;%从坐标轴获取图像数据f=fliplr(handles.img);%将图像矩阵左右翻转imshow(f);%显示翻转后的图像xlabel(左右翻转后的图像);handles.img=f;二、调试分析这个错误主要是不细心造成,检查发现右括号少了,加上就解决了。对变量没有定义,直接进行使用,在程序开始之前对其进行了重新定义。13信号处理 matlab 仿真结课作业
21、Freqz 错误使用,对程序及 freqz 参数调整,得到解决。跟上面的问题一样,都是对 freqz 重新调整,得到解决。如图所示:没有对 axes1 进行定义,直接使用,程序加了:axes(handles.axes1);得到解决。14信号处理 matlab 仿真结课作业这个错误开始的时候以为是图窗设计的不合理,或者是程序的问题,就把图窗和.m 文件都删了重新设计,还是这个错误,排除了图窗设计错误,就对程序进行重新设计,最后实现了简单的图像处理按钮的编写并且没有了错误。直接对.img 进行了使用,对程序作了一下改动,此问题得到解决:三、测试结果1 1、仿真系统开始界面:、仿真系统开始界面:15
22、信号处理 matlab 仿真结课作业2、基本信号显示:基本信号显示:正弦信号的显示:方波信号的显示:锯齿信号的显示:16信号处理 matlab 仿真结课作业:单位阶跃信号的显示:抽样信号的显示:17信号处理 matlab 仿真结课作业:指数信号的显示:3、序列运算:序列运算:单位脉冲序列:单位阶跃序列:指数序列:18信号处理 matlab 仿真结课作业:序列卷积:4、卷积与傅里叶变换:卷积与傅里叶变换:卷积:方波傅里叶分析:19信号处理 matlab 仿真结课作业:离散傅里叶变换:(主要是对指数信号):快速傅里叶变换:(主要是对指数信号)20信号处理 matlab 仿真结课作业5、滤波器设计:
23、滤波器设计:FIR 低通滤波器:FIR 高通滤波器:FIR 带通滤波器:巴特沃斯低通滤波器:(幅频与相频图线)21信号处理 matlab 仿真结课作业:切比雪夫 I 型滤波器:6、简单图像处理:简单图像处理:选择图片打开:22信号处理 matlab 仿真结课作业:灰度处理:傅里叶变换:直方图均衡化:23信号处理 matlab 仿真结课作业:低通滤波器处理:高通滤波器处理:上下翻转:24信号处理 matlab 仿真结课作业:左右翻转:注:每项操作完成后,都有一个返回主界面按钮,为退出此项操作,这里不一一展示。四、课程总结及心得体会通过近一段的学习,我明确了 matlab 是一款集数据分析、矩阵运
24、算、信号处理和图形显示于一体,可方便地应用于数学计算、算法开发、数据采集、系统建模和仿真、数据分析和可视化、科学和应用软件开发等方面的强悍软件,是研究人员、工程人员研究工作中不可多得的工具,也是我们学习过程中必不可少的软件。而正因为其强25信号处理 matlab 仿真结课作业大之处,以及可视性及可交互性使我对它的学习产生了浓厚的兴趣。开学至今,我们学习了 matlab 矩阵及其运算、matlab 程序设计、m 文件操作、m 文件 调试、m 文件编程以及 matlab 绘图等,一段时间下来,对 matlab 还是有了一定的框架性认识及编程能力。并且在学习 matlab 过程中,我感觉到它和 c
25、语言有许多相似之处,它有 c 语言的特征,但是比 c 语言编程计算更加简单,适合于复杂的数学运算。以上就是我对此课程的总结和心得体会。根据自己学习的过程提出以下两点建议:1、针对上课学习:对于软件类的学习存在这样一个问题,我们可以上课时带电脑到课堂上或机房授课,一方面老师在讲台上演示,另 一方面同学们在下面即时练习,这样印象会更加深刻。2、针对课下学习:近期 matlab 学习,老师给的课下作业很少,仅有实验,也许老师考虑同学们比较忙,以及可能交上来的作业效果质量达不到预期效果。但我认为适量的课下作业还是非常有必要的,尤其是对于我们这些普遍自制力较差的情况,这点显得更加有意义。课下作业可以布置那些老师演示过的程序或 ppt 中程序略加改动,让我们下课后及时完成上交。可以使我们及时巩固。26