《信号处理matlab仿真》大作业_matlab仿真大作业
《信号处理matlab仿真》大作业由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“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
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 中程序略加改动,让我们下课后及时完成上交。可以使我们及时巩固。