首页数学计算数学MATLAB实验教程 06 第6章 MATLAB在其他领域中的应用.pptx

06 第6章 MATLAB在其他领域中的应用.pptx

页数:58页文件大小:1.45 MB来源: MATLAB实验教程ppt课件

本课件展示MATLAB在更多领域的用法,包括智能天线DOA的Capon与Music算法比较、Hopfield神经网络数字识别、BP神经网络手写字母识别、数据聚类、声音信号频谱分析仪、单层感知器分类与Simulink仿真。

第6章MATLAB在其他领域中的应用章首导论页,在智能天线、神经网络、模式识别等很多方面MATLAB都有着广泛的应用MATLAB提供的S
第6章MATLAB在其他领域中的应用要点说明页,本章知识架构
智能天线DOA的Capon算法实验目的页,了解用户的DOA在智能天线中的作用。(2)理解DOA的传统算法Capon最小方差法的原理
查看本课件的文字版(共 58 页,供检索与复制)

第1页:第6章MATLAB在其他领域中的应用

在智能天线、神经网络、模式识别等很多方面MATLAB都有着广泛的应用MATLAB提供的Simulink仿真功能能搭建出与真实电路相似的仿真模型,使大家可以看到在一个系统中的实时信号。本章通过介绍MATLAB在智能天线、神经网络Simulink仿真等方面应用的例子揭示了MATLAB的应用。

第2页:本章知识架构

【本章知识架构】

第3页:智能天线DOA·实验目的

1.实验目的

(1)了解用户的DOA在智能天线中的作用。

(2)理解DOA的传统算法Capon最小方差法的原理。

(3)理解DOA算法中的Music算法的原理。

(4)对比Capon算法与Music算法的仿真结果。2.实验原理用户的DOA(Direction of Arrival)作为反映用户空间位置的重要参量在智能天线中扮MATLAB演着非常重要的角色,因此,如何准确地估计各个用户的DOA是非常值得研究的领域。

第4页:智能天线DOA的Capon算法(续)

  • (1)Capon最小方差法使用部分(不是全部)自由度在期望观测方向形成一个波束,同时利用剩余的自由度在干扰信号方向形成零陷。此方法使输出功率最小,达到使非期望干扰的贡献最小的目的,同时增益在观测方向保持为常数,通常为1.
  • (2)Music算法是根据窄带数据模型以几何观点考察信号参数估计的问题。如果有D个信号入射到M元阵列上,则阵列接收到的输入数据向量可以表示为D个入射波形与噪声的线性组合。

第5页:智能天线DOA·程序代码

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)];%输入信号矢量

第6页:智能天线DOA·程序代码

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]; for n=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法估计的波达方向图

第7页:智能天线DOA·程序代码

T1=T*180/pi; semilogy(T1,P1);grid axis([0,200,1e-10,1e40]); xlabel('Angle(deg)'); ylabel('Spectrum') grid on; figure(2) %绘出Capon法估计的波达方向图 T1=T*180/pi; semilogy(T1,P2);grid axis([0,200,1e-10,1e10]); xlabel('Angle(deg)'); ylabel('Spectrum') grid on;

第8页:智能天线DOA·运行结果与分析

5.运行结果与分析其输出结果如图6.1和图6.2所示。通过以上实验对比,可看出在理想情况下Music算法比Capon算法在DOA估计上谱峰更高,相邻角度信号之间的过渡更平缓,所以Music性能更好。6.思考题Music算法相对于Capon算法具有什么优势?具有什么缺点?如何对Music算法进行改进?

第9页:Hopfield神经网络数·实验目的

1.实验目的

(1)学习MATLAB在神经网络系统中的应用。

(2)掌握Hopfield神经网络识别数字方法。2.实验原理Hopfield神经网络的应用形式有联想记忆和优化计算两种。其中联想记忆是指当网络输入某个矢量后,网络经过反馈演化,从网络输出端得到另一个矢量,这样输出矢量称为网络从初始输入矢量联想得到一个稳定记忆,即网络的一个平衡点。优化计算是指当某一个问题存在多种解法时,可以设计一个目标函数,得到寻求满足这一目标函数的最优解法。本例将采用联想记忆的形式进行数字识别。

第10页:Hopfield神经网络数·仿真思路

3.仿真思路本例采用MATLAB神经网络工具箱提供的网络创建函数建立一个Hopfield神经网络,其中目标矢量T的元素必须是+1或-1。因此,在数字的识别过程中,每个目标向量代表一个数字,可以通过以下准则进行目标向量的设置。数字从0到9,共有10个对应位置,每个数字在其对应位置的值为1,而其他位置的值为−1。建立网络后,给网络输入一个含噪声的随机向量,通过仿真网络,可获取网络输出、训练终止时的输入延迟状态、训练终止时的层延迟状态。通过调整批处理数据的个数和网络仿真的时间步数,将得到不同的网络输出。

第11页:Hopfield神经网络数·程序代码

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 for ii=0:9, subplot(2,5,ii+1); imshow(reshape(T(:,ii+1),10,10)); title(['当前数字' num2str(ii)])

第12页:Hopfield神经网络数·程序代码

end

%加入噪声的数字点阵(固定法)

noise_matrix=load('noise_matrix.txt');

%加入噪声的数字点阵(随机法)

%noise_matrix=zero; %for i=1:100 % a=rand; % if a<0.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 for ii=1:5 subplot(2,3,1+ii) imshow(reshape(No22{ii},10,10)); title(['第' num2str(ii) '仿真结果']) end

第13页:Hopfield神经网络数·运行结果与分

5.运行结果与分析观察其结果,如图6.4所示。图6.4含噪声数字2的识别

第14页:仿真结果表明

仿真结果表明,数字的识别已经回到了相应的稳定点。受噪声污染的数字2已经恢复正常,Hopfield网络是渐进稳定的,随着计算的推移,网络状态向能量减小的方向移动,稳定平衡状态就是能量的极小点。由此可见,在此条件下,Hopfield网络经过学习,能够完全正确地识别出所有数字。6.思考题

  • (1) Hopfiled神经网络具有什么特点?本例可否用别的形式的神经网络来识别?
  • (2)改变训练序列为10个不同的人脸图像,输入一个带噪的人脸图像,用类似方法进行图像识别的实验。

第15页:BP神经网络手写字母识别·实验目的

1.实验目的

(1)进一步了解BP网络的理论基础、学习算法。

(2)学习基于BP网络的手写字母识别算法以及其实现。

(3)掌握BP网络的误差分析方法。2实验原理BP网络是一种单向传播的多层前向网络,其结构如图6.5所示。由图可见,BP网络是一种具有3层或3层以上的神经网络,包括输入层、中间层(隐层)和输出层。上下层之间实现全连接,而每层神经元之间无连接。当一对学习样本提供给网络后,神经元的激活值从输入层经各中间层向输出层传播,在输出层的各神经元获得网络的输入响应。接下来,按照减少目标输出与误差的原则,从输出层经过各中间层逐步修正各连接权值,

第16页:最后回到输入层

最后回到输入层,这种算法称为“误差逆传播算法”,即BP算法,随着这种误差逆的传播修正不断进行,网络对输入模式响应的正确率也不断上升。图6.5 BP网络结构

第17页:BP神经网络手写字母识别·仿真思路

3.仿真思路设计一个网络并训练它来识别字母表中的26个字母。要求设计网络不仅能够对理想输入向量进行很好的分类,也能够准确识别含有误差的输入向量。26个字母被定义成输入向量,每个字母的输入量均有35个元素(7*5),组成输入阵,期望输出向量为26个元素,如A为(1,0,0,…)。根据要求,输入向量为35个元素,输出为反映字母位置的有26个元素的输出向量。输入一个字母,网络就能输出一个向量,它对应位置的元素值为1,其他位置的元素值为0。网络还应有鲁棒性(容错能力)。实际中,网络接收的信号不理想,有噪声,因此需要加入对噪声的识别环节,这就是网络的鲁棒性。另外,本题中输出向量里当对应位置输出为1时,其他位置的元素值只能为0,这是需要对其严格处理的,因此不妨引入竞争传递函数compet。本题采用了有动量的梯度下降法与自适应的梯度下降法的完美结合。所以采用了函数traingdx。

第18页:BP神经网络手写字母识别·程序代码

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),[S1 S2],{'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'; %定义平方和误差函数

第19页:BP神经网络手写字母识别·程序代码

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=[targets targets targets targets];%为保证容错性,用两套理想字母向量 P=[alphabet,alphabet,... %两套有噪声字母向量作为训练样本 (alphabet+randn(R,Q)*0.1),... (alphabet+randn(R,Q)*0.2)]; %省略号表示续行 [netn,tr]=train(netn,P,T); %进行再次训练

%再次无噪声训练

netn.trainParam.goal=0.1; %定义训练方向,均方误差小于0.1时停止训练 netn.trainParam.epochs=500; %定义训练次数,大于500次停止训练 netn.trainParam.show=5; %定义训练过程显示频率,训练5次后显示训练结果

第20页:BP神经网络手写字母识别·程序代码

P=alphabet; T=targets; [netn,tr]=train(netn,P,T); %再次进行训练

%系统性能测试

noise_range=0:0.05:0.5; %产生噪声 max_test=100; %测试次数/噪声信号的个数 network1=[]; network2=[]; T=targets; for noiselevel=noise_range %依次加入误差(噪声) errors1=0; errors2=0; for i=1:max_test %测试开始 P=alphabet+randn(35,26)*noiselevel; %输入中加入噪声

A=sim(net,P); %比较无噪声和有噪声时候的识别误差

AA=compet(A); %引进竞争函数 errors1=errors1+sum(sum(abs(AA-T)))/2;%识别误差用矩阵全加和的方式

%内层sum对每行求和,外层的sum对每列求和

第21页:BP神经网络手写字母识别·程序代码

An=sim(netn,P); AAn=compet(An); errors2=errors2+sum(sum(abs(AAn-T)))/2; end network1=[network1 errors1/26/100]; %每个噪声信号在每个字母上产生的平均噪声 network2=[network2 errors2/26/100]; end figure(1); plot(noise_range,network1*100,'r-',noise_range,network2*100,'g-');

%扩大100倍方便画图

title('识别误差'); xlabel('噪声指标'); ylabel('无噪声训练r-有噪声训练*');

%随意挑字母验证

noiseJ=alphabet(:,1)+randn(35,1)*0.2; %挑第一个字母并加入噪声 figure(2); plotchar(noiseJ); %画出输入向量 A2=sim(net,noiseJ); A2=compet(A2); %计算输出并通过竞争函数 answer=find(compet(A2)==1); %通过比较找出对应的输出向量

第22页:BP神经网络手写字母识别·程序代码

figure(3); plotchar(alphabet(:,answer)); %画出网络识别后的图形 noiseJ=alphabet(:,6)+randn(35,1)*0.2; figure(4); plotchar(noiseJ); A2=sim(net,noiseJ); A2=compet(A2); answer=find(compet(A2)==1); figure(5); plotchar(alphabet(:,answer)); noiseJ=alphabet(:,9)+randn(35,1)*0.2; figure(6); plotchar(noiseJ); A2=sim(net,noiseJ); A2=compet(A2); answer=find(compet(A2)==1); figure(7); plotchar(alphabet(:,answer));

第23页:BP神经网络手写字母识别·运行结果与分析

5.运行结果与分析由图6.6及图6.7可见,无论是无噪声训练还是有噪声训练,训练序列都能收敛到目标曲线。由图6.8可知,两者的系统误差曲线相差无几。对于字母验证的结果,在有噪声并且书写很不规范的情况下,都能正确识别手写字母,如图6.9所示。说明BP神经网络对于手写字母识别还是非常有效的。6.思考题

  • (1) BP神经网络与Hopfield神经网络相比,有什么优缺点?
  • (2)试用Hopfield神经网络重做此例。

第24页:字母验证结果

图6.9字母验证结果

第25页:数据聚类算法·实验目的

1.实验目的

(1)学习数据聚类方法,掌握树聚类和k均值聚类。

(2)利用MATLAB对树聚类和k均值聚类进行仿真。2.实验原理数据聚类是特征向量的非监督分类方法,实质是一种“数据驱动”的方法,它试图去发现数据自身的内部结构,将特征向量以“聚类”的形式分组。根据聚类的方法,可以将算法分为两大类。层次化算法和质心调整算法。

第26页:数据聚类算法·仿真思路

3.仿真思路

使用MATLAB提供的函数实现聚类。4.程序代码

1) k-means聚类法

%两类类各产生55个点

X=[randn(55,2)+ones(55,2);randn(55,2)+ones(55,2);]; [idx,ctrs] = kmeans(X,2); % kmeans方法聚类 plot(X(idx==1,1),X(idx==1,2),'rx','MarkerSize',7) %画出第一类点

hold on %保留第一类点,画出第二类点

plot(X(idx==2,1),X(idx==2,2),'b*','MarkerSize',7) %画出第二类点 plot(ctrs(:,1),ctrs(:,2),'ko', 'MarkerSize',9,'LineWidth',2)

%画出两个类的质心

legend('Cluster','Cluster2', ...'Centroids','Location','NW') title('用kmeans方式聚类'); %加注标签

第27页:树聚类法程序代码

2)树聚类法

X = [randn(20,2)+ones(20,2)]; %产生20个随机点

y = pdist(X); %计算各两点间的欧式距离存于y中

z=linkage(y,'single'); %使用单联接准则聚类 w=linkage(y,'average'); %使用类间平均联接准则聚类 subplot(3,1,1); plot(X,'b.','MarkerSize',12); %画出随机产生的点 title('产生的随机数据'); subplot(3,1,2); dendrogram(z); %画出聚类后的z的柱状图 title('single-l聚类后的数据'); legend('single linkage '); hold on subplot(3,1,3); dendrogram(w); %画出聚类后的z的柱状图 title('average-l聚类后的数据'); legend('average linkage '); hold on

第28页:数据聚类算法·运行结果与分析

5.运行结果与分析

1) k-means聚类法

通过k均值聚类方式实现了对110个数据点的聚类。聚了两个类,每个类中有55个点,如图6.10所示。图6.10k均值聚类算法仿真图

第29页:数据聚类算法(续)

2)树聚类算法用树类方法对20个数据点进行聚类,给出了点间的柱状图。分别使用了单联接规则和类间平均联接规则进行了聚类。由图6.11可以看出,不同的规则对同一点的聚类结果是不同的。6.思考题

树聚类算法中,不同的聚类规则对聚类的结果不同,这样合理吗?

第30页:数据聚类算法·运行结果图

图6.11树聚类算法仿真图

第31页:声音信号频谱分析仪·实验目的

1.实验目的

(1)进一步了解声音信号。

(2)学习基于声卡与MATLAB的声音信号分析以及其实现。

(3)加强对MATLAB的进一步掌握。2.实验原理应用波形分析原理和频谱分析原理

第32页:声音信号频谱分析仪·仿真思路

3.仿真思路MATLAB提供的GUIDE工具为可视化编程工具,使得软件的界面设计像VB一样方便。为了实现预期的功能,设计如图6.13所示的界面。图6.12频谱分析仪的模块划分

第33页:声音信号频谱分析仪设计界面

图6.13声音信号频谱分析仪设计界面

第34页:声音信号频谱分析仪·程序代码

4.程序代码

1)声卡输入

%这里声卡输入是指由麦克风录音得到的声音信号的输入,MATLAB提供了

% wavrecord函数,该函数能够实现读取麦克风录音信号。以下是''开始录

%音''按钮的回调函数内容

%首先获得设定的Fs值

Fs=str2double(get(findobj('Tag','samplerate'),'String'));

%根据设定的录音时长进行录音,将其存入handles.y中

handles.y=wavrecord(str2double(get(handles.recordtime,'String'))*Fs, Fs,'int16');

%保存handles结构体,使得handles.y在别的函数中也能使用

guidata(hObject,handles);

%在波形显示区绘出波形

plot(handles.time,handles.y); title('WAVE');

%将所采到的点的数量输出在''采样点数''中

ysize=size(handles.y) set(handles.samplenum,'String',num2str(ysize(1)));

第35页:声音信号频谱分析仪(续)

2) WAV文件输入

MATLAB提供了wavread函数,该函数能够方便地打开并读取WAV文件中的声音信

息,并且同时读取所有声道。下面是“打开文件”按钮回调函数的部分代码。其他代码与

声卡输入的类似

%从WAV文件中读取声音信息并临时存放到temp变量中

temp = wavread(get(findobj('Tag','filename'),'String'));

%获得所选择的声道

channel=str2double(get(handles.channel,'String'));

%将指定声道的信息存放到handles.y中

handles.y=temp(:,channel);3)信号发生器

%MATLAB有产生标准信号的函数,如sawtooth能够产生三角波或钜齿波,首先

%利用get函数获得波形soundtype,频率frequency,幅值amp和相位phase,

%然后是以下代码

第36页:声音信号频谱分析仪·程序代码

switch soundtype case 1 %标准正弦波 y=amp*sin(2*pi*x*frequency+phase); case 2 %方波 y=amp*sign(sin(2*pi*x*frequency+phase)); case 3 %三角波 y=amp*sawtooth(2*pi*x*frequency+phase,0.5); case 4 %钜齿波 y=amp*sawtooth(2*pi*x*frequency+phase); case 5 %白噪声 y=amp*(2*rand(size(x))-1); otherwise errordlg('Illegal wave type','Choose error'); end if get(handles.add,'Value')==0.0 handles.y=y; %若没有勾选上''混迭'',则将生成的波形赋给handles.y

else %否则将生成的波形与原有波形叠加

handles.y=handles.y+y; end

第37页:时域分析程序代码

4)时域分析

%下面是过零检测之后的代码,其中T为过零检测得到的周期(向量),amp为过零检测得到的幅

值(向量),n为过零点数

freq=Fs/mean(T); %计算频率 set(handles.outt,'String',1/freq); %输出周期估计值 set(handles.outfreq,'String',num2str(freq)); %输出频繁估计值

%计算并输出幅值,以幅值均值作为其估计

set(handles.outamp,'String',num2str(mean(amp(2:n-1))));

%将待分析信号的过零点与标准信号的过零点比较,得出相位

phase=2*pi*(1-(ti(1:n-1)-1)./T+floor((ti(1:n-1)-1)./T)); set(handles.outphase,'String',num2str(mean(phase)));

%最大值与最小值的一半即为峰值

set(handles.outpeak,'String',(max(handles.y(from:to))-min(handles.y(from:to) ))/2); %from,to即是界面中的''从第from点到第to点''

%计算并输出均值

set(handles.outmean,'String',mean(handles.y(from:to)));

%计算并输出均方值

set(handles.outmeansquare,'String',mean(handles.y(from:to).^2));

%计算半输出方差

set(handles.outs,'String',std(handles.y(from:to))^2);

第38页:频域分析程序代码

5)频域分析

%频域分析需要作傅里叶变换,MATLAB提供了fft函数,能够方便地实现快速傅里叶

%变换算法。以下代码省去了从界面中获得from、to、Fs的部分,也省去了绘图后设置横、

纵坐标轴的名称部分

%首先提取出待分析的样本,将其存入sample中

sample=handles.y(from:to);

%生成离散化的频率点,以采样频率作为离散化的间隔

f=linspace(0,Fs/2,(to-from+1)/2);

%对样本做快速傅里叶变换,变换结果存入Y中

Y=fft(sample,to-from+1); [C,I]=max(abs(Y)); %获得幅值最大的点及其所对应的下标值I

%则f(I)为最大的幅值所对应的频率,即信号频率的估计值

set(handles.foutt,'String',1/f(I)); %计算并输出周期的估计值 set(handles.foutfreq,'String',f(I)); %输出频率的估计值 Y=Y(1:(to-from+1)/2); %为与f对应,只取Y的前半部分 plot(handles.plot1,f,2*sqrt(Y.*conj(Y))); %绘制幅值谱曲线 plot(handles.plot2,f,angle(Y)); %绘制相位谱曲线 plot(handles.plot3,f,real(Y)); %绘制实频谱曲线 plot(handles.plot4,f,imag(Y)); %绘制虚频谱曲线 plot(handles.plot5,f,abs(Y).^2); %绘制功率谱曲线

第39页:声音信号频谱分析仪·运行结果图

图6.14用信号发生器生成的正弦波分析

第40页:声音信号频谱分析仪·运行结果与分析

5.运行结果与分析由仿真结果图6.14可知,用MATLAB分析信号方便明了。尽管MATLAB有强大的数学函数库,使得编程时间大大缩短,但也有它固有的缺陷,如运行速度太慢,而且运行依赖MATLAB软件,无法发布为商用软件,另外在控制用户输入上也比较难以实现。这导致了用MATLAB开发的软件也有这些缺陷。6.思考题利用同样的方法构建图像信号的频谱分析仪。

第41页:单层感知器分类·实验目的

1.实验目的

(1)进一步了解神经网络理论基础、感知器分类特点,主要应用场合,使用注意事项。

(2)学习感知器网络MATLAB实现具体步骤,设置误差要求,寻找最优网络。

(3)掌握感知器网络训练方法。2.实验原理单层感知器模型如图6.15所示。单层感知器可将外部输入分为两类。当感知器的输出为+1时,输入属于一类,当感知器的输出为−1时,输入属于另一类,从而实现两类目标的识别。在二维空间,单层感知器进行模式识别的判决超平面由式(6-44)决定:

第42页:单层感知器分类·仿真思路

3.仿真思路两个一维Gauss分布类A和B,其方差都是1,A的均值是−10,B的均值是10。用单层感知器设计一个分类器来分离这两个线性可分的类。图6.15单层感知器模型

第43页:单层感知器分类·程序代码

4.程序代码

m=0; n=0; x11=0; x12=0; T1=0;T2=0; count=0; %初始化 r1=20*rand(1,100)-10; %产生[-10 10]均匀随机数

for k=1:100 %根据样本分布计算概率密度函数值以及目标向量

if r1(k)>0 r2(k)=100*exp((r1(k)-10)^2*(-0.5))/(sqrt(2*pi));

%由于概率密度值太小,不方便计算,因此将其扩大100倍

T1(k)=1; Else r2(k)=100*exp((r1(k)+10)^2*(-0.5))/(sqrt(2*pi)); T1(k)=0; end end

第44页:单层感知器分类·程序代码

for k=1:100﹪对样本进行筛选 if r1(k)>-2&r1(k)<2 m=m+1; x11(m)=r1(k); x12(m)=r2(k); T21(m)=T1(k); else n=n+1; x21(n)=r1(k); x22(n)=r2(k); T22(n)=T1(k); end end

X2=[x21;x22];﹪筛选出来的样本作为参考样本

W=[-0.1 0.2];﹪权值的初始化 C2=rand(1,1);﹪阈值的初始化

Y2=W*X2+C2;﹪计算感知器的输出

﹪开始训练

for j=1:500﹪设定训练次数 count=count+1;﹪记录训练次数

for i=1:n﹪根据Y值将输出离散化

第45页:单层感知器分类·程序代码

if Y2(i)>0 F2(i)=1; else F2(i)=0; end end a=isequal(F2,T22);

if a==1﹪根据矩阵相等性判断是否训练完毕

break; end dW=(T22-F2)*X2';﹪权值的修正 dC=0.1*(T22-F2);﹪阈值的修正 W=W+dW;﹪新权值 C2=C2+dC;﹪新阈值 Y2=W*X2+C2; end

figure

  • (1);﹪绘制训练样本和分割线
plotpv(X2,T22); plotpc(W,C2); grid on xlabel('x21'),ylabel('x22')

﹪开始验证

X1=[x11;x12];﹪用敏感样本进行验证

第46页:单层感知器分类·程序代码

alpha=sum(C2)/n;

C=zeros(1,m)+alpha;﹪用训练完成的阈值的均值作为神经元的阈值

Y1=W*X1+C; for j=1:m if Y1(j)>0 F1(j)=1; else F1(j)=0; end if F1(j)==T21(j)﹪用Result判断敏感样本的符合度 Result(j)=1; else Result(j)=0; end end

figure

  • (2);﹪绘制敏感样本以及分割线
plotpv(X1,T21); plotpc(W,C2); grid on xlabel('x11'),ylabel('x12')

第47页:单层感知器分类·运行结果与分析

5.运行结果与分析样本及分类线如图6.18所示。图6.18样本及分类线

第48页:测试样本及分类线

测试样本及分类线如图6.19所示。图6.19测试样本及分类线6.思考题简述单层感知器分类的算法步骤。

第49页:模拟线性调制·实验目的

1.实验目的通过对常规调幅、单边带调制、双边带调制这3种调制方式的Simulink仿真的模拟,了解Simulink仿真的实现方式,并对3种调制方式进行对比。2.实验原理1)常规调幅(AM)

  • (1)基本原理。任意的AM已调信号可以表示为:SAM(t) =c(t)m(t) (6-49)

第50页:模拟线性调制·程序代码

(2) Simulink实现如图6.20所示。图6.20常规调幅的Simulink仿真

第51页:模拟线性调制·运行结果图

图6.21常规调幅的调制信号图6.22常规调幅的载波信号

第52页:模拟线性调制·运行结果图

图6.23常规调幅的已调制信号图6.24常规调幅的解调信号

第53页:模拟线性调制的Simulink仿(续)

2)双边带调幅(DSB)

  • (1)基本原理。双边带调制信号的时域表达式:

第54页:模拟线性调制·运行结果图

图6.26双边带调制信号图6.28双边带调制的已调信号

第55页:模拟线性调制的Simulink仿(续)

3) SSB单边带信号调制基本原理。只传输一个边带的调制方式称为单边带抑制载波调制,简称为单边带调制(SSB)。采用单边带调制,除了节省载波功率外,还可以节省一半传输频带,仅传输双边带信号的一个边带(上边带或下边带)。

第56页:模拟线性调制·运行结果图

图6.32单边带调制信号图6.34单边带调制的上边带信号

第57页:本章小结

本章小结MATLAB提供的神经网络工具箱、系统识别工具箱等功能也是非常强大的。本章通过智能天线算法仿真、神经网络数字识别、Simulink仿真的实例展现了MATLAB在别的领域中的应用。本章的内容较为零散,旨在扩大读者的视野,了解MATLAB的强大功能。

第58页:结束页

Thanks书山有路勤为径,学海无涯苦作舟。好好学习,天天向上

顶部目录