《数字信号处理》上机实习报告6.docx
《《数字信号处理》上机实习报告6.docx》由会员分享,可在线阅读,更多相关《《数字信号处理》上机实习报告6.docx(36页珍藏版)》请在冰豆网上搜索。
《数字信号处理》上机实习报告6
计算机编程与数字信号处理实习报告
实习日记
1.6月21日,了解matlab基本使用方法,学习基本编程命令。
2.6月22日,编写实习要求第一题,观察gibbs现象。
3.6月23日,编写实习第二题,matlab基本程序编写。
4.6月24日,着手编写程序计算普通褶积和循环褶积的时间域和频率域。
未完待续。
5.6月25日,编写程序,了解循环褶积的边界效应做相关分析的程序。
编程了解滤波器方法,及高中低频问题。
6.6月26日、6月27日,放假啦!
在寝室里休息~。
~
7.6月28日,编写一维滤波器的程序,初步了解二维滤波器。
8.6月29日,编写出一种二维滤波器。
9.6月30日,编写出第七题的题目。
10.7月3日,编写完成第八题,完成实验报告。
实习过程,分析,结果
一、从给定的程序(文件包Friday.rar)中,选择一个源程序做详细标注。
(目的:
熟悉Matlab程序)
程序名:
DSP1.m
程序思路:
学习matlab基础程序
二、能够利用Matlab熟悉地画图,内容包括:
X、Y坐标轴上的label,每幅图上的title,绘画多条曲线时的legend,对图形进行适当的标注等。
(1)在一副图上画出多幅小图;
(2)画出一组二维图形;
(3)画出一组三维图形;(4)画出复数的实部与虚部。
(5)完成对一个源程序进行详细注释。
(一)源程序为:
clearall;
closeall;
t=-5:
0.1:
5;
subplot(2,2,1);
plot(t,sin(t));
axis([-5,5,-1.5,1.5]);
title('ÕýÏÒÇúÏß');
xlabel('x');
ylabel('y');
grid;
subplot(2,2,2);
plot(t,cos(t),'-r','LineWidth',2);
axis([-5,5,-1.5,1.5]);
title('ÓàÏÒÇúÏß');
xlabel('x');
ylabel('y');
grid;
subplot(2,2,3);
plot(t,tan(t),'-b','LineWidth',1);
axis([-5,5,-1.5,1.5]);
title('ÕýÇÐÇúÏß');
xlabel('x');
ylabel('y');
subplot(2,2,4);
plot(t,rectpuls(t,2),'-r',t,sawtooth(t,1));
axis([-5,5,-1.5,1.5]);
title('Èý½ÇÂö³åºÍ¾ØÐÎÂö³å');
xlabel('x');
ylabel('y');
Legend('rectpuls(t,2)','sawtooth(t,1)');
grid;
print-djpeg-r0Firstwork.jpeg;
程序名为DSP2-1.m
运行结果:
(二)源程序为:
clearall;
closeall;
t=-10:
0.2:
10;
title('a');
xlabel('x');
ylabel('y');
grid;
subplot(2,2,3);
plot(t,tan(t),'-b','LineWidth',1);
程序名为DSP2-2
运行结果:
(三)源程序为:
closeall;
clearall;
[x,y]=meshgrid(-4:
0.1:
4);
figure
(1);
z=peaks(x,y);
mesh(x,y,z);
axis([-4,4,-4,4,-5,5]);
hiddenoff;
print-djpeg-r0Firstwork1.jpeg;
程序名为DSP2-3.m
运行结果:
(四)源程序:
b=3+4i;
compass(b);
print-djpeg-r0Firstwork2.jpeg
程序名为DSP2-4.m
运行结果:
(五)
closeall;
clearall;
%%%%%%%%%%%%%%产生网孔%%%%%%%%%%%%%%%%
[x,y]=meshgrid(-4:
0.1:
4);
figure
(1);
z=peaks(x,y);
%%%%%%%%%%画出立体图像%%%%%%%%%%%%%%%%
mesh(x,y,z);
axis([-4,4,-4,4,-5,5]);
hiddenoff;
%%%%%%%%%%%保存图像%%%%%%%%%%%%%%%%%%%
print-djpeg-r0Firstwork1.jpeg;
%%%%%%%%画出具有下方轮廓线的图像%%%%%%%
三、计算普通褶积与循环褶积,分别使用时间域与频率域两种方法进行正、反演计算,指出循环褶积计算时所存在的边界效应现象;编写一个做相关分析的源程序。
一
(1)在时间域计算线性褶积
程序名:
DSP3-1.m
当两信号分别为x=[1234]',y=[456]'时,利用matlab中conv命令求得的线性褶积
xy0=yx0=[41328433824]’,利用下面线性褶积公式:
求得的线性褶积结果为xy1=[41328433824]’,与matlab中自带命令所求结果
一致。
程序:
x=[1234]';
y=[456]';
%%%%%%%%%%%%%%%%%%%%%%%%利用conv求线性褶积
xy0=conv(x,y);
yx0=conv(y,x);
xy0-yx0;%利用matlab中conv命令验证线性褶积具有交换性
%%%%%%%%%%%%%%%%%%%线性褶积:
利用自己编写的程序进行计算。
N1=length(x);
N2=length(y);
NN=N1+N2-1;
F=zeros(NN,N2);
forj=1:
N2
fori=j:
j+N1-1
F(i,j)=x(i-j+1);
end
end
xy1=F*y;%利用公式编写程序计算出来的线性褶积结果
xy0-xy1;
yx0-xy1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
(2)在时间域正演计算循环褶积
利用如下循环褶积公式:
求得的循环褶积结果为列向量xy2=yx2=[41328433824]’,该段程序如下:
x1=zeros(NN,1);
y1=zeros(NN,1);
x1(1:
N1)=x;
y1(1:
N2)=y;
forj=1:
NN
fori=1:
NN
s=i+j-1;
ifs>NN
s=s-NN;
end
S1(s,j)=x1(i);
S2(s,j)=y1(i);
end
end
xy2=S1*y1;%利用公式编写程序计算出来的循环褶积结果
yx2=S2*x1;%可验证循环褶积是否具有交换性
(3)在频率域反演计算循环褶积
分别对两向量信号做fft变换求频谱,将其频谱相乘,再做ifft反变换得到循环褶积为
Z1=[41328433824]’,该段程序如下:
x1=zeros(NN,1);
y1=zeros(NN,1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%频率域计算循环褶积
X1=fft(x1);%信号x1的频谱
Y1=fft(y1);%信号y1的频谱
XY3=X1.*Y1;%两信号频谱乘积
Z1=ifft(XY3)%由两频谱相乘再反变换得到的信号
(4)验证循环褶积计算时所存在的边界效应现象
有上述计算可知,在频率域反演计算循环褶积所得结果等于线性褶积结果,
此时都是将两向量信号x,y扩展成长度length(x)+length(y)-1,当两信号程度小
于KZ2=[2813284338]’,与所求的线性褶积结果不同,故循环褶积的维度
在length(x)+length(y)-1处存在边界效应,大于等于该值时,循环褶积等于线性
褶积,小于该维度时二者不等,该段程序如下:
%%%%%%%%%%%%%%%%%%%%检验边界效应,
K=NN-1;%当维数N不同,N<=N1+N2-1时,计算线性褶积
x2=zeros(K,1);%扩展信号x2成K行一列的列向量
y2=zeros(K,1);%扩展信号y2成K行一列的列向量
x2(1:
N1)=x;%构造的新信号包含前信号的内容
y2(1:
N2)=y;
X2=fft(x2);%信号x2频谱
Y2=fft(y2);
XY2=X2.*Y2;%信号长度小于N1+N2-1时的两信号频谱乘积
Z2=ifft(XY2)
%当维数N不同时,N〉=N1+N2-1时,线形褶积等于循环褶积;当N〈N1+N2-1时,线形褶积不等于循环褶积
二编写一个做相关分析的源程序
程序名:
DSP3-2.m
做两信号的循环相关,得到相关值xy2=[32473833]’,yx2=[32333847]’,
该段程序如下:
%%循环相关性
x=[1234]';%自己定义的信号
y=[456]';
N1=length(x);%信号长度
N2=length(y);
K=max(N1,N2);%最长信号长度
x1=zeros(K,1);%将两信号长度扩展成最长信号长度
y1=zeros(K,1);
x1(1:
N1)=x;
y1(1:
N2)=y;
S1=zeros(K,K);%定义循环相关系数矩阵
S2=zeros(K,K);
forj=1:
K
fori=1:
K
ifi+j-1<=K
S1(i,j)=x1(i+j-1);%求循环相关系数矩阵
S2(i,j)=y1(i+j-1);
else
S1(i,j)=x1(i+j-1-K);
S2(i,j)=y1(i+j-1-K);
end
end
end
y2=conj(y1);%信号y2的共轭
x2=conj(x1);
XY2=S1*y2%两信号的循环相关
YX2=S2*x2
四、设计一个病态(矩阵)系统,分析其病态程度;找出对应的解决方法(提示:
添加白噪因子)。
实习成果:
本题中设计的病态矩阵为A1(具体设计过程见程序),该病态矩阵的病态程度为RCOND=4.972710e-018,解决办法是添加K=0.001的白噪因子,经过添加白噪因子后对方程A1*X=B,即可解出唯一的、有意义的解。
结果:
>inv(A1)
Warning:
Matrixisclosetosingularorbadlyscaled.
Resultsmaybeinaccurate.RCOND=2.108638e-017.
求出的结果
X=
0.9000+0.0000i
-0.0951+0.0000i
-0.0809+0.0000i
-0.0588+0.0000i
-0.0309+0.0000i
-0.0000+0.0000i
0.0309-0.0000i
0.0588-0.0000i
0.0809-0.0000i
0.0951-0.0000i
0.1000-0.0000i
0.0951-0