基于BP神经网络的室内声源定位算法(附有程序)

基于BP神经网络的室内声源定位算法的实现(附有程序)

  • 问题描述
    现在有一个安静的房子,有一个人在房间里走动,我要利用屋里的麦克风接收这个人的脚步声,然后对这个人进行定位。
  • 研究的意义
    声源定位可以克服视觉定位的缺点,对看不见的地方也可以定位,在机器人追踪与探测方面得到了很好的应用。室内声源定位被广泛应用于视频会议、智能家居、车载通话设备等场景中。特别是在人工智能时代,结合机器学习和深度学习,室内声源定位问题的应用价值变得非常大。
  • 问题的研究方法
    目前解决这个问题的主流方法有三个,分别是基于最大输出功率的可控波束形成技术、基于高分辨率谱估计技术、基于声达时间差的定位技术。这三种方法都是通过研究声音的物理性质,建立相应的方程,然后进行求解,过程复杂,求解难度高。
    基于上述原因,本文从人工智能的角度考虑,我们把声音在室内空间的混乱场当成一个黑匣子,只分析输入输出的数据特征,从而找到普遍的规律,达到解决问题的目的。本文利用的人工智能算法是BP神经网络算法,下面将按照正常人的逻辑思维顺序,一步一步介绍算法的实现。
  • 摘要
    本文设计了离线采样方案,构建了隐含层为7个神经元的网络结构,利用 LevenBerg-Marquardt的BP算法作为训练函数,编写了matlab程序用模拟定位,实现了在100平方米的房子里,只需要采样100组数据进行机器训练,就可以将定位误差控制在几厘米的效果。
  • 模型的建立
    (1)离线采样方案
    在建立神经网络之前,我们要先设计出采样模型,分别得到输入数据和输出数据的形式,才能具体的设计神经网络,因此,下面先设计采样模型,再设计网络模型。
    在这里插入图片描述
    如上图所示,我先对将地面划分为n个小区域,用发声装置分别在每一个小区域的中心点坐标处发声一次,每发声一次,就用四个麦克风记录下时间差,,只需要三个时间差即可,分别为
    在这里插入图片描述
    这样,我们能得到n组数据,第i组数据如下所示:
    在这里插入图片描述
    其中x_i,y_i分别代表地面横坐标值和纵坐标值。这n组数据就可以作为BP神经网络的训练数据,离线采样操作就完成了。
    (2)BP神经网络的构建
    离线采样之后,我们就可以构建BP神经网络了。因为输入数据是三个分量,输出数据是两个分量,所以构建的BP神经网络的输入层与输出层分别是三个单位和两个单位。通过不断测试,我得出当隐含层含有7个神经元时,预测结果最佳。网络结构如下图所示。
    在这里插入图片描述
    构建了神经网络的结构,接下来我们要确定的是使用什么激活函数,训练算法和性能函数。在一般情况下,隐含层都是用S形激活函数,输出层都是用线性激活函数,此处的用法也是如此。由于用梯度下降法训练函数构建的网络速度比较慢,而基于LevenBerg-Marquardt算法的训练网络的速度非常快,所以我们使用LevenBerg-Marquardt的BP算法训练函数。由于我们要考虑的是网络的整体性能,所以我们使用的性能函数是均方误差函数。
  • 数值模拟训练和定位测试
    不妨假设房子是个标准的长方体,它的长、宽、高分别为10米、10米、5米,四个麦克风在空间中构成一个四面体,假设四个麦克风在空间的坐标分别为A(4.9,4.9,1.0)、B(4.9,5.1,1.0)、C(5.1,5.1,1.0),D(5.0,5.0,2.0)。地面面积为100平方米,取每一个小区域面积为1平方米,则可得到100组训练数据。将这100组训练数据用BP神经网络算法进行机器学习之后,下面就可以用BP神经网络进行定位测试了。
    接下来我们就可以想一下怎么进行定位测试了,首先,我们将声源随机放置在房间中,即用计算机模拟一个的随机位置坐标,然后根据声音的传播速度,可以求出各个麦克风首次接受到声音的时间差,将这组时间差作为定位测试的输入数据,用已经训练好的BP神经网络进行预测,得到预测值,然后再分析预测位置与真实位置的误差。
    在100平方米的房间里,我们只用了100组训练数据,重复10次定位操作,得到的预测位置与实际位置的关系如下表所示。
    测试次数 声源的实际位置 BP神经网络的预测位置
    在这里插入图片描述
    误差分析如下图所示。
    在这里插入图片描述
    机器训练的结果分析如下图所示。
    在这里插入图片描述
    可以看出,用BP神经网络算法对100平方米的室内进行声源定位,只需要采集100组训练数据,就可以使预测位置与实际位置的误差只有几厘米。从机器训练的结果可以看出,整个定位过程所用时间非常短,收敛速非常快,均方误差已经达到了4×10^(-6)米。
  • matlab程序代码
%% 清空环境变量
clc
clear
%% 生成训练数据与预测数据
%%%训练数据
A=[4.9,4.9,1];%%%麦克风A的坐标
B=[4.9,5.1,1];%%%麦克风B的坐标
C=[5.1,5.1,1];%%%麦克风C的坐标
D=[5.0,5.0,2];%%%麦克风D的坐标
%x=0.5:1:9.5;y=0.5:1:9.5;%%%用100组数据训练
x=0.5:0.5:10;y=0.5:0.5:10;%%%用400组数据训练
[X,Y]=meshgrid(x,y);
tAB=(sqrt((A(1)-X).^2+(A(2)-Y).^2+A(3).^2)-sqrt((B(1)-X).^2+(B(2)-Y).^2+B(3).^2)); %%%声源到A,B两个麦克风的时间差,下同
tBC=(sqrt((B(1)-X).^2+(B(2)-Y).^2+B(3).^2)-sqrt((C(1)-X).^2+(C(2)-Y).^2+C(3).^2));
tCD=(sqrt((C(1)-X).^2+(C(2)-Y).^2+C(3).^2)-sqrt((D(1)-X).^2+(D(2)-Y).^2+D(3).^2));
ttAB=tAB(:)';
ttBC=tBC(:)';
ttCD=tCD(:)';
input_train=[ttAB;ttBC;ttCD];%%%训练数据的输入值(是麦克风接受声音的时间差)
XX=X(:)';
YY=Y(:)';
output_train=[XX;YY];%%%训练数据的输出值(是位置坐标)
%%%预测数据
m=10;   %%%预测m个位置(就是分别将声源放到m个位置,用BP神经网络算法预测,然后对比预测结果和实际结果)
X=rand(1,m)*10;
Y=rand(1,m)*10;
tAB=(sqrt((A(1)-X).^2+(A(2)-Y).^2+A(3).^2)-sqrt((B(1)-X).^2+(B(2)-Y).^2+B(3).^2));
tBC=(sqrt((B(1)-X).^2+(B(2)-Y).^2+B(3).^2)-sqrt((C(1)-X).^2+(C(2)-Y).^2+C(3).^2));
tCD=(sqrt((C(1)-X).^2+(C(2)-Y).^2+C(3).^2)-sqrt((D(1)-X).^2+(D(2)-Y).^2+D(3).^2));
input_test=[tAB;tBC;tCD];%%%预测数据的输入值(是麦克风接受声音的时间差)
real_locate=[X;Y];%%%真实的声源坐标,用于检验预测值是否正确
%% 数据归一化
[inputn,inputps]=mapminmax(input_train);  %%%其中inputps是用于记录数据归一化方法
[outputn,outputps]=mapminmax(output_train);   %%%outputps同理
%% BP网络训练
% %初始化网络结构
net=newff(inputn,outputn,7);%%%建立一个由7个神经元组成的隐藏层构成了一个网络,这是新版matlab的用法
net.trainParam.epochs=5000;%%%最大迭代次数
net.trainParam.lr=0.1;%%%学习率
net.trainParam.goal=0.000004;%%%目标误差
net.trainParam.max_fail=10000;
%网络训练
net=train(net,inputn,outputn);
%% BP网络预测
%预测数据归一化
inputn_test=mapminmax('apply',input_test,inputps);%%%对测试数据再进行数据归一化,之前是对训练数据进行数据归一化,而且归一化方式和前面的一样
 
%网络预测输出
an=sim(net,inputn_test);   %训练输出的结果
 
%网络输出反归一化
BPoutput=mapminmax('reverse',an,outputps);%%反归一化得到实际结果
%% 结果分析
for i=1:m
fprintf('第%d 次测试的实际位置是:(%d,%d)',i,real_locate(:,i));fprintf('\n');
fprintf('BP神经网络预测位置是:(%d,%d)',BPoutput(:,i));fprintf('\n');
end
%%%画图
plot(real_locate(1,:),real_locate(2,:),'*')
hold on
plot(BPoutput(1,:),BPoutput(2,:),'o')
legend('实际位置','预测位置')
title('BP网络预测输出','fontsize',12)
ylabel('Y方向','fontsize',12)
xlabel('X方向','fontsize',12)
%%%误差分析(预测位置的分量与实际位置的分量做差取绝对值再相加)
figure(2)
r=real_locate-BPoutput;
r=abs(r(1,:))+abs(r(2,:));
plot(r,'-*')
title('BP网络预测误差','fontsize',12)
legend('误差')
ylabel('误差(单位/米)','fontsize',12)
xlabel('位置','fontsize',12)

本来想给你上传程序文件的,但是我还不会怎么上传了程序文件,所以等我之后上传了再来这里给链接吧。

  • 30
    点赞
  • 178
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 17
    评论
### 回答1: 基于bp神经网络的模糊控制算法程序是一种利用bp神经网络与模糊控制相结合的控制方法。该算法程序通过训练bp神经网络,将输入变量与输出变量之间的映射关系建立起来,使得输入变量的模糊语义能够转化为具体的控制命令。 首先,该算法程序需要对输入变量和输出变量进行模糊化处理。通过将输入变量进行隶属度分配,将其转化为模糊语义,可以更好地描述实际问题。然后,利用bp神经网络对输入变量和输出变量之间的关系进行训练,得到输入变量与输出变量之间的映射关系,建立模糊控制模型。 接下来,通过输入变量的模糊化处理,将模糊语义转化为具体的输入值。利用训练好的bp神经网络,将输入值映射为相应的输出值。最终,通过解模糊化处理,将输出值转化为具体的控制命令。 基于bp神经网络的模糊控制算法程序具有较高的适应性和智能性。通过训练神经网络,该算法程序能够根据实际问题动态调整模糊控制模型,提供更加准确的控制命令。同时,bp神经网络具有自学习和自适应能力,能够适应不同环境和实际问题的变化。 总之,基于bp神经网络的模糊控制算法程序是一种利用神经网络与模糊控制相结合的控制方法。通过训练神经网络,建立输入变量与输出变量之间的映射关系,将模糊语义转化为具体的控制命令,实现智能化的控制。这种算法程序具有较高的适应性和智能性,能够适应不同环境和实际问题的变化。 ### 回答2: 基于BP神经网络的模糊控制算法是一种基于模糊逻辑和神经网络相结合的智能控制方法。这种算法程序实现主要包括以下几个步骤: 第一步是建立BP神经网络模型。需要确定输入层、隐藏层和输出层的节点数量,并建立神经网络的连接权重。输入层接收模糊控制的输入信号,经过隐藏层的处理后,输出给输出层进行最终的输出。 第二步是进行模糊化处理。将输入信号进行模糊化,将模糊量映射到一个模糊集合上。这个过程主要是根据具体的问题,选择适当的模糊化方法和模糊集合。 第三步是进行训练过程。在这个过程中,利用已知的输入和输出数据对神经网络进行训练,更新连接权重,使得神经网络能够根据输入信号输出正确的结果。使用BP算法进行反向传播误差的计算,不断调整权值和阈值,直到误差满足要求。 第四步是进行解模糊化处理。将神经网络输出的结果进行解模糊化,将模糊量转化为具体的控制量。这个过程主要包括将模糊量映射到具体的输出范围。 第五步是将解模糊化后的控制量应用到实际控制系统中。根据需要,将控制量转化为具体的控制指令,对被控对象进行控制。 通过以上几个步骤,基于BP神经网络的模糊控制算法程序实现可以实现自适应控制,能够根据输入输出数据对神经网络进行训练,并将训练后的网络应用于实际控制中。这种算法具有较好的适应性和鲁棒性,可以在复杂和不确定的控制环境中实现较好的控制效果。 ### 回答3: 基于BP神经网络的模糊控制算法程序是一种控制算法,它结合了神经网络和模糊控制的方法。该算法的目的是通过训练神经网络来建立一个模糊控制器,实现对系统的控制。 首先,基于BP神经网络的模糊控制算法程序需要收集到的输入和输出数据,以建立输入-输出模型。然后,通过训练神经网络,将输入数据映射到输出数据。训练过程使用的是反向传播算法,通过调整网络的权重和偏置来最小化模型的误差。 在训练完成后,模糊控制器将使用神经网络来进行实时控制。它接收系统当前的输入信息,并通过神经网络计算出相应的模糊控制输出。这些输出通过一系列的模糊规则和模糊推理进行转换,以生成最终的控制信号。 模糊控制器的输入通常是系统的测量值,如温度、压力等,而输出则是控制信号,如阀门的开度或电机的转速。神经网络作为核心部分,负责对系统的状态信息进行建模和预测,以便进行准确的控制。 基于BP神经网络的模糊控制算法程序具有一定的优势。首先,它可以通过训练过程自动地学习系统的动态特性,从而提高控制的精度和效果。其次,模糊控制器可以处理模糊、不确定和非线性的系统,具有很高的鲁棒性和适应性。 综上所述,基于BP神经网络的模糊控制算法程序是一种通过训练神经网络来建立模糊控制器的方法。它可以有效地对系统进行控制,适用于各种模糊、不确定和非线性的系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ai_Taoism

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值