第6章MATLAB在其他领域中的应用在智能天线、神经网络、模式识别等很多方面MATLAB都有着广泛的应用MATLAB提供的Simulink仿真功能能搭建出与真实电路相似的仿真模型,使大家可以看到在一个系统中的实时信号。本章通过介绍MATLAB在智能天线、神经网络Simulink仿真等方面应用的例子揭示了MATLAB的应用。【本章知识架构】6.1智能天线DOA的Capon算法与Music算法比较1.实验目的•(1)了解用户的DOA在智能天线中的作用。•(2)理解DOA的传统算法Capon最小方差法的原理。•(3)理解DOA算法中的Music算法的原理。•(4)对比Capon算法与Music算法的仿真结果。2.实验原理用户的DOA(DirectionofArrival)作为反映用户空间位置的重要参量在智能天线中扮MATLAB演着非常重要的角色,因此,如何准确地估计各个用户的DOA是非常值得研究的领域。(1)Capon最小方差法使用部分(不是全部)自由度在期望观测方向形成一个波束,同时利用剩余的自由度在干扰信号方向形成零陷。此方法使输出功率最小,达到使非期望干扰的贡献最小的目的,同时增益在观测方向保持为常数,通常为1.(2)Music算法是根据窄带数据模型以几何观点考察信号参数估计的问题。如果有D个信号入射到M元阵列上,则阵列接收到的输入数据向量可以表示为D个入射波形与噪声的线性组合。•4.程序代码•clear;•d=1;%天线阵元的间距•lma=2;%信号中心波长•q1=1*pi/4;•q2=pi/3;•q3=pi/6;•q4=3*pi/4;%4个输入信号的方向•A1=[exp(-2*pi*j*d*[0:6]*cos(q1)/lma)]';•A2=[exp(-2*pi*j*d*[0:6]*cos(q2)/lma)]';•A3=[exp(-2*pi*j*d*[0:6]*cos(q3)/lma)]';•A4=[exp(-2*pi*j*d*[0:6]*cos(q4)/lma)]';•A=[A1,A2,A3,A4];%得出A矩阵•n=1:1900;•v1=.015;%4个信号的频率•v2=.05;•v3=.02;•v4=.035;•d=[1.3*cos(v1*n);1*sin(v2*n);1*sin(v3*n);1*sin(v4*n)];%输入信号矢量•U=A*d;%总的输入信号•U1=(U)';•c=cov(U*U1);%总输入信号的协方差矩阵•[s,h]=eig(c);%求协方差矩阵的特征矢量及特征值•Vn=s(:,1:3);%求与零特征值对应的特征矢量•ci=inv(c);%求协方差矩阵的逆矩阵•q1b=[pi/180:pi/180:pi];•forn=1:length(q1b)•q1a(n)=q1b(n);•A1a=[exp(-2*pi*j*1*[0:6]*cos(q1a(n))/lma)]';•Pmusic(n)=(A1a)'*A1a*(inv((A1a)'*Vn*(Vn)'*A1a));%应用Music法估计输出•Pcap(n)=inv((A1a)'*ci*(A1a));%应用Capon法估计输出•T(n)=q1a(n);•P1=abs(Pmusic);•P2=abs(Pcap);•end•figure(1)%绘出Music法估计的波达方向图•T1=T*180/pi;•semilogy(T1,P1);grid•axis([0,200,1e-10,1e40]);•xlabel('Angle(deg)');•ylabel('Spectrum')•gridon;•figure(2)%绘出Capon法估计的波达方向图•T1=T*180/pi;•semilogy(T1,P2);grid•axis([0,200,1e-10,1e10]);•xlabel('Angle(deg)');•ylabel('Spectrum')•gridon;5.运行结果与分析其输出结果如图6.1和图6.2所示。通过以上实验对比,可看出在理想情况下Music算法比Capon算法在DOA估计上谱峰更高,相邻角度信号之间的过渡更平缓,所以Music性能更好。6.思考题Music算法相对于Capon算法具有什么优势?具有什么缺点?如何对Music算法进行改进?6.2Hopfield神经网络数字识别1.实验目的•(1)学习MATLAB在神经网络系统中的应用。•(2)掌握Hopfield神经网络识别数字方法。2.实验原理Hopfield神经网络的应用形式有联想记忆和优化计算两种。其中联想记忆是指当网络输入某个矢量后,网络经过反馈演化,从网络输出端得到另一个矢量,这样输出矢量称为网络从初始输入矢量联想得到一个稳定记忆,即网络的一个平衡点。优化计算是指当某一个问题存在多种解法时,可以设计一个目标函数,得到寻求满足这一目标函数的最优解法。本例将采用联想记忆的形式进行数字识别。•3.仿真思路本例采用MATLAB神经网络工具箱提供的网络创建函数建立一个Hopfield神经网络,其中目标矢量T的元素必须是+1或-1。因此,在数字的识别过程中,每个目标向量代表一个数字,可以通过以下准则进行目标向量的设置。数字从0到9,共有10个对应位置,每个数字在其对应位置的值为1,而其他位置的值为−1。建立网络后,给网络输入一个含噪声的随机向量,通过仿真网络,可获取网络输出、训练终止时的输入延迟状态、训练终止时的层延迟状态。通过调整批处理数据的个数和网络仿真的时间步数,将得到不同的网络输出。•4.程序代码•%数字0~9的标准点距•zero=load('zero.txt');•one=load('one.txt');•two=load('two.txt');•three=load('three.txt');•four=load('four.txt');•five=load('five.txt');•six=load('six.txt');•seven=load('seven.txt');•eight=load('eight.txt');•nine=load('nine.txt');•%训练目标样本•T=[zero(:),one(:),two(:),three(:),four(:),five(:),six(:),seven(:),eigh•t(:),nine(:)];•%输出数字0~9•figure•forii=0:9,•subplot(2,5,ii+1);•imshow(reshape(T(:,ii+1),10,10));•title(['当前数字'num2str(ii)])•end•%加入噪声的数字点阵(固定法)•noise_matrix=load('noise_matrix.txt');•%加入噪声的数字点阵(随机法)•%noise_matrix=zero;•%fori=1:100•%a=rand;•%ifa0.1•%noise_matrix(i)=-zero(i);•%end•%end•figure•subplot(2,3,1)•imshow(noise_matrix);•title('带噪声样本');•%创建Hopfield网络•net=newhop(T);%创建网络,开始训练•No22=sim(net,{1,5},{},{noise_matrix(:)});%仿真5次,一个样本噪声noise_matrix•forii=1:5•subplot(2,3,1+ii)•imshow(reshape(No22{ii},10,10));•title(['第'num2str(ii)'仿真结果'])•end5.运行结果与分析观察其结果,如图6.4所示。图6.4含噪声数字2的识别仿真结果表明,数字的识别已经回到了相应的稳定点。受噪声污染的数字2已经恢复正常,Hopfield网络是渐进稳定的,随着计算的推移,网络状态向能量减小的方向移动,稳定平衡状态就是能量的极小点。由此可见,在此条件下,Hopfield网络经过学习,能够完全正确地识别出所有数字。6.思考题(1)Hopfiled神经网络具有什么特点?本例可否用别的形式的神经网络来识别?(2)改变训练序列为10个不同的人脸图像,输入一个带噪的人脸图像,用类似方法进行图像识别的实验。6.3BP神经网络手写字母识别1.实验目的•(1)进一步了解BP网络的理论基础、学习算法。•(2)学习基于BP网络的手写字母识别算法以及其实现。•(3)掌握BP网络的误差分析方法。2实验原理BP网络是一种单向传播的多层前向网络,其结构如图6.5所示。由图可见,BP网络是一种具有3层或3层以上的神经网络,包括输入层、中间层(隐层)和输出层。上下层之间实现全连接,而每层神经元之间无连接。当一对学习样本提供给网络后,神经元的激活值从输入层经各中间层向输出层传播,在输出层的各神经元获得网络的输入响应。接下来,按照减少目标输出与误差的原则,从输出层经过各中间层逐步修正各连接权值,最后回到输入层,这种算法称为“误差逆传播算法”,即BP算法,随着这种误差逆的传播修正不断进行,网络对输入模式响应的正确率也不断上升。图6.5BP网络结构3.仿真思路设计一个网络并训练它来识别字母表中的26个字母。要求设计网络不仅能够对理想输入向量进行很好的分类,也能够准确识别含有误差的输入向量。26个字母被定义成输入向量,每个字母的输入量均有35个元素(7*5),组成输入阵,期望输出向量为26个元素,如A为(1,0,0,…)。根据要求,输入向量为35个元素,输出为反映字母位置的有26个元素的输出向量。输入一个字母,网络就能输出一个向量,它对应位置的元素值为1,其他位置的元素值为0。网络还应有鲁棒性(容错能力)。实际中,网络接收的信号不理想,有噪声,因此需要加入对噪声的识别环节,这就是网络的鲁棒性。另外,本题中输出向量里当对应位置输出为1时,其他位置的元素值只能为0,这是需要对其严格处理的,因此不妨引入竞争传递函数compet。本题采用了有动量的梯度下降法与自适应的梯度下降法的完美结合。所以采用了函数traingdx。•4.程序代码•%初始化生成代表26个字母布尔值的样本数据,然后应用函数newff()构建一个神经网络•[alphabet,targets]=prprob;%生成35*26和26*26的矩阵•[R,Q]=size(alphabet);%提取样本数目•[S2,Q]=size(targets);•S1=10;%隐含层的神经元个数•P=alphabet;%给输入赋值•net=newff(minmax(P),[S1S2],{'logsig','logsig'},'traingdx');%构建神经•网络•net.LW{2,1}=net.LW{2,1}*0.01;%线性网络的权值•net.b{2}=net.b{2}*0.01;%线性网络的偏差•%无噪声训练•T=targets;%给输出赋值•net.performFcn='sse';%定义平方和误差函数•net.trainParam.goal=0.1;%定义训练方向,均方误差小于0.1时停止训练•net.trainParam.show=20;%定义训练过程显示频率,训练20次后显示训练结果•net.trainParam.epochs=5000;%定义训练次数,大于5000次停止训练•net.trainParam.mc=0.95;%定义训练动力值0.95•[net,tr]=train(net,P,T);%开始对网络训练•%有噪声训练•netn=net;%重新使用新的网络•netn.trainParam.goal=0.6;%定义训练方向,均方误差小于0.6时停止训练•netn.trainParam.epochs=300;%定义训练次数,大于300次停止训练•T=[targetstargetstargetstargets];%为保证容错性,用两套理想字母向量•P=[alphabet,alphabet,...%两套有噪声字母向量作为训练样本•(alphabet+