十字线阵---CBF,传统波束形成
%传统波束形成,CBF (Ps:这个程序是别人的,不是我写的,但是具体是在哪里找到的已经忘了)
clear all; close all; clc;
%---------初始化常量----------%
c = 334; % 声速c
fs = 1000; % 抽样频率fs
T = 0.1; %
t = 0:1/fs:T; % 时间 [0,0.1]
L = length(t); % 时间长度,采样总点数:101个
f = 500; % 感兴趣的频率,信号自己的频率
w = 2*pi*f; % 角频率 k = w/c; % 波数 k
M = 18; % 阵元个数,实际只有17个
%接下来是阵元坐标,声源位置,这里设置的是(12,10,12)点,同时设置阵元的高斯白噪声。
%---------各阵元坐标---------% %
Nmid = 12; % 参考点 %
d = 3; % 阵元间距 %
m = (0:1:M-1) yi = zeros(M,1); % 生成一个M*1维的零矩阵
zi = [0;3;6;9;12;15;18;21;24;12;12;12;12;12;12;12;12;12];
xi = [12;12;12;12;12;12;12;12;12;0;3;6;9;12;15;18;21;24]; %形成柿子麦克风阵列坐标 %xi = xi.' % 列向量 m*d 阵元数*阵元间距
figure(1)
plot(xi,zi,'r*'); title('十字形麦克风阵列') %--------- 声源位置----------% x1 = 12; y1 = 10; z1 = 12; %声源位置 (12,10,12) x,z为水平面

x2 = 12; y2 = 0; z2 = 12; %参考点:(12,0,12)
Ric1 = sqrt((x1-xi).^2+(y1-yi).^2+(z1-zi).^2); % 声源到各阵元的距离
Ric2 = sqrt((x1-x2).^2+(y1-y2).^2+(z1-z2).^2); %声源到参考点的距离
Rn1 = Ric1 - Ric2; %声源至各阵元与参考阵元的声程差矢量
s1 = cos(2*w*t); % 参考阵元接收到的矢量
Am = 10^(-1); % 振幅
n1 = Am * (randn(M,L)+j*randn(M,L)); % 各阵元加上高斯白噪声,考虑复数18*101的阵列
p1 = zeros(M,L);
%3、延迟求和----------------------------------------------------------------------------
%整个程序最关键的部分,延迟求和,同时得到各阵元接收的声压信号矩阵。以及协方差矩阵,这个还有疑问,要把论文读懂来理解。
%--------------------------各阵元的延迟求和--------------------------------%
for k1 = 1:M
p1(k1,:) = Ric2/Ric1(k1)*s1.*exp(-j*w*Rn1(k1)/c); %Ric2/Ric1(k1)等于把每一个点的距离归一化.exp()表示时延 18*101的矩阵 % 接收到的信号
%时间和阵元的矩阵
end
p = p1+n1; % 各阵元接收的声压信号矩阵 R = p*p'/L; % 接收数据的自协方差矩阵 A.'是一般转置,A'是共轭转置。 %%%R代表幅值吗? %18*18
%4、扫描整个声源平面------------------------------------------------------------------------
%我们设置步长为0.1,扫描范围是20x20的平面,双重for循环得到M*1矢量矩阵,最后得到交叉谱矩阵(cross spectrum matrix)。由DSP理论,这个就是声音的功率。 %-------扫描范围------%
step_x = 0.1; % 步长设置为0.1 %和线阵里面扫描角度是一个道理
step_z = 0.1;
y = y1; %y=10
y1=10 x = (9:step_x:15); % 扫描范围 9-15
z = (9:step_z:15);
for k1=1:length(z) %先扫x轴,再扫z轴,设扫描到的点为(x=k2,z=k1),y=10 k1=61,k2=61
for k2=1:length(x)
Ri = sqrt((x(k2)-xi).^2+(y-yi).^2+(z(k1)-zi).^2); %(x(k2),10,z(k1))走到的点距离阵元的距离 %每走一步,产生一个18*1的矩阵
Ri2 = sqrt((x(k2)-x2).^2+(y-y2).^2+(z(k1)-z2).^2); %走到的点距离参考点的距离 %一个数 % 该扫描点到各阵元的聚焦距离矢量
Rn = Ri-Ri2; %每一步产生一个1*18的矩阵 % 扫描点到各阵元与参考阵元的程差矢量
b = exp(-j*w*Rn/c); % 声压聚焦方向矢量 %归整到阵元,18*1的矩阵,消除时间的影响
Pcbf(k1,k2) = abs(b'*R*b); % CSM
end
end %声音的功率
%5、归一化处理
%归一化处理的程序 %--------------------------------------归一化------------------------------%
for k1 = 1:length(z);
pp(k1) = max(Pcbf(k1,:)); % Pcbf 的第k1行的最大元素的值
end
Pcbf = Pcbf/max(pp); % 所有元素除以其最大值 归一化幅度
%6、作图
%观察得到的结果 %-------------------------------作图展示-----------------------------------%
figure(2);
surf(x,z,Pcbf); xlabel('x(m)'),ylabel('z(m)') ;title('CBF三维单声源图'); colorbar

figure(3) ;
pcolor(x,z,Pcbf); shading interp; xlabel('x(m)'); ylabel('z(m)'); title('CBF单声源图') ;colorbar

%7、结果
%十字型阵列最终得到的结果效果并不理想,没有达到一个点声源的理想结果
刚开始这个程序其实没怎么看懂,于是在网上找了CBF的知识,找到一篇可以找到参考的论文。【水声定位算法之CBF波束形成_360doc个人图书馆】http://www.360doc.cn/mip/558928696.html
自己照着这个程序写了一个线阵的,可是写了一天都没有写出来,后面的有些地方有点模糊,不知道怎么处理,以后再思考一下吧。
十字线阵---CBF,传统波束形成的更多相关文章
- beacon帧字段结构最全总结(二)——HT字段总结
一.HT Capabilities HT Capabilities:802.11n的mac层给802.11的mac层加入了高吞吐量单元.所有新加的802.11n功能都是通过管理帧中的HT单元才得以实现 ...
- [报告] Microsoft :Application of deep learning methods in speech enhancement
Application of deep learning methods in speech enhancement 语音增强中的深度学习应用 按: 本文是DNS,AEC,PLC等国际级语音竞赛的主办 ...
- 矢量水听器 近场 远场 --------------------常规波束形成,MVDR的比较
摘自<水平线阵的反卷积常规波束形成>,IRONMAN--------------------------------------------------- 在常规的波束形成中,是将阵列上的 ...
- 【自适应波束形成】MVDR(Minimum Variance Distortionless Response )笔记
参考: https://blog.csdn.net/qq_40981790/article/details/80143524 1. MVDR简介(Minimum Variance Distortion ...
- 空间谱专题02:波束形成(Beamforming)
作者:桂. 时间:2017-08-22 10:56:45 链接:http://www.cnblogs.com/xingshansi/p/7410846.html 前言 本文主要记录常见的波束形成问题 ...
- 东芝线阵CCD芯片TCD1305DG驱动时序设计
最近在做微型光谱仪,用到了东芝的CCD芯片TCD1305DG,该芯片是单行3648像素,输出信号是时间上离散的模拟信号,典型输出速率为0.5M,即每2000ns输出一个像素值(模拟信号),芯片内部集成 ...
- MYSQL主从复制--传统方式
目录 0.MYSQL主从复制概述 1.主从复制的作用 2.主从复制存在的问题 3.主从复制问题的解决办法 4.主从复制的原理(面试必问) 1.MYSQL主从复制-传统方式 1.环境准备 2.Maste ...
- 麦克风阵列波束形成之DSB原理与实现
语音识别有近场和远场之分,且很多场景下都会用到麦克风阵列(micphone array).所谓麦克风阵列是一组位于空间不同位置的麦克风按一定的形状规则布置形成的阵列,是对空间传播声音信号进行空间采样的 ...
- DDD CQRS架构和传统架构的优缺点比较
明天就是大年三十了,今天在家有空,想集中整理一下CQRS架构的特点以及相比传统架构的优缺点分析.先提前祝大家猴年新春快乐.万事如意.身体健康! 最近几年,在DDD的领域,我们经常会看到CQRS架构的概 ...
随机推荐
- 以Windows服务方式运行ASP.NET Core程序【转载】
我们对ASP.NET Core的使用已经进行了相当一段时间了,大多数时候,我们的Web程序都是发布到Linux主机上的,当然了,偶尔也有需求要发布到Windows主机上,这样问题就来了,难道直接以控制 ...
- MongoDB的启动与停止(一)
1:启动和停止Mongodb 1)从命令行启动 执行mongod,启动MongoDB服务器,mongod有很多可配置的启动选项,可以使用mongod --help查看所有选项 -- ...
- Python小练习(一)
1:有一个列表,其中包括10个元素,例如这个列表是[1,2,3,4,5,6,7,8,9,0],要求将列表中的每个元素一次向前移动一个位置,第一个元素到列表的最后,然后输出这个列表.最终样式是[2,3, ...
- Eclipse+PyDev 安装和配置
Eclipse+PyDev 安装和配置 2012-03-17 23:23:23 | 17465次阅读 | 评论:0 条 | Python开发有很多工具,其中Eclipse+Pydev 是最常见的一种 ...
- 如何配置nginx负载均衡配置(轮询,权重,ip绑定)
集群是为了解决单节点无法服务高并发的情况,在集群中nginx是如何分配将来自客户端的请求 转发给服务器的 负载均衡可以提高网站的吞吐量(接受和响应),减轻单台服务器的压力 负载均衡提供了三种策略:轮询 ...
- 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) ...ubuntu 18.04 安装vim遇到的错误
安装vim: sudo apt-get install vim-gtk 问题: E:无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) E:无法锁定管理目录(/ ...
- SAS LOGISTIC 逻辑回归中加(EVENT='1')和不加(EVENT='1')区别
区别在于:最大似然估计分析中估计是刚好正负对调加上EVENT:%LET DVVAR = Y;%LET LOGIT_IN = S.T3;%LET LOGIT_MODEL = S.Model_Params ...
- Jobs深入学习
代码回顾 Quartz 需要了解你可能希望该作业的实例拥有的各种属性,这是通过JobDetail 类完成的. JobDetail 实例是使用 JobBuilder 类构建的. JobDetail j ...
- 第19课 类型萃取(3)_类型选择的traits
1. std::conditional (1)原型:template <bool Cond, class T, class F> struct conditional; //根据条件获取T ...
- 完整安装always on 集群
1. 四台已安装windows server 2008 r2 系统的虚拟机,配置如下: CPU : 1核 MEMORY : 2GB DISK : 40GB(未分区) NetAdapter : 2块 ...