中国石油大学(华东)信息与控制工程学院《信号处理matlab仿真》结课作业专业班级:电子班学号:*****姓名:******任课老师:*****2088年11月12日《信号处理matlab仿真》结课作业1一、实现算法及设计思路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-.');gridtitle('正弦信号');方波信号:t0=-6*pi;t1=6*pi;dt=1;t=t0:dt:t1;y1=square(t);plot(t,y1,'r-');gridtitle('方波信号')锯齿信号:t0=-6*pi;t1=6*pi;dt=0.05;t=t0:dt:t1;f=sawtooth(pi/5*t,0);plot(t,f,'r-')gridtitle('锯齿信号')单位阶跃信号:t=-5:0.01:5y1=u(t);plot(t,y1,'r');gridtitle('单位阶跃信号')《信号处理matlab仿真》结课作业2U(t):functionf=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('单位脉冲序列')单位阶跃序列,可以对位移量进行设置: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仿真》结课作业3k=[0:10];fk=t.^k;stem(k,fk)title('指数序列')序列卷积,可以对卷积幅度进行设置(针对了特定的两个序列):t=str2num(get(handles.edit4,'String'));k1=-1:3;k2=-1:3;f1=[01320];f2=[04321];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;《信号处理matlab仿真》结课作业4t3=t11+t21:0.001: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),holdony=f*(sin(t)+sin(3*t)/3);plot(t,y),holdony=f*(sin(t)+sin(3*t)/3+sin(5*t)/5);plot(t,y),holdony=f*(sin(t)+sin(3*t)/3+sin(5*t)/5+sin(7*t)/7);plot(t,y),holdony=f*(sin(t)+sin(3*t)/3+sin(5*t)/5+sin(7*t)/7+sin(9*t)/9);plot(t,y),holdony=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('方波傅立叶分析')《信号处理matlab仿真》结课作业5离散傅里叶变化,针对指数信号,对底数进行设置: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),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(handles.edit1,'String');N=str2num(A1);w1=get(handles.edit2,'String');Wn=str2num(w1);b=fir1(N,Wn,'low');《信号处理matlab仿真》结课作业6fs=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仿真》结课作业7[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]);gridtitle('x(n)');subplot(1,2,2)stem(n,y)gridtitle('y=filter(b,a,x)');切比雪夫I型滤波器:wp1=1000;ws1=1500;wc=3000;《信号处理matlab仿真》结课作业8wp=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';'*.*'},'载入图像');%选择路径打开图像ifisequal(filename,0)|isequal(pathname,0)%若filename为0或pathname为0,即未选中文件errordlg('未选中文件','警告');%建立一个名为警告的错误对话框,内容为“未选中文件”return;elsefile=[pathname,filename];%将文件名和目录名组合成一个完整的路径x=imread(file);%读入图像set(handles.axes1,'HandleVisibility','ON');%设置图形对象属性,可从命令窗口中和GUIs中访问axes(handles.axes1);%定义图形区域axes1imshow(x);%显示图像《信号处理matlab仿真》结课作业9set(handles.axes1,'HandleVisibility','OFF');%设置图形对象属性,不可从命令窗口中和GUIs中访问axes(handles.axes2);%定义图形区域axes2imshow(x);%显示图像handles.img=x;%把图像发给handles.imgend灰度处理:globalT%定义全局变量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=fftshift(f1);%将变换后的图象频谱中心从矩阵的原点移到矩阵的中心i=log(1+abs(fc1));%对变换后的图像矩阵数据求绝对值后取自然对数imshow(i);《信号处理matlab仿真》结课作业10xlabel('傅里叶变换图像');handles.img=i;直方图均衡化:axes(handles.axes2);%定义图形区域axes2T=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;%截止频率50Hzm=fix(M/2);n=fix(N/2);%取矩阵g的行数和列数一半的整数《信号处理matlab仿真》结课作业11fori=1:Mforj=1:N%循环d=sqrt((i-m)^2+(j-n)^2);h=1/(1+0.414*(d/d0)^(2*nn));%计算低通滤波器传递函数resul