%传统波束形成,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,传统波束形成的更多相关文章

  1. beacon帧字段结构最全总结(二)——HT字段总结

    一.HT Capabilities HT Capabilities:802.11n的mac层给802.11的mac层加入了高吞吐量单元.所有新加的802.11n功能都是通过管理帧中的HT单元才得以实现 ...

  2. [报告] Microsoft :Application of deep learning methods in speech enhancement

    Application of deep learning methods in speech enhancement 语音增强中的深度学习应用 按: 本文是DNS,AEC,PLC等国际级语音竞赛的主办 ...

  3. 矢量水听器 近场 远场 --------------------常规波束形成,MVDR的比较

    摘自<水平线阵的反卷积常规波束形成>,IRONMAN--------------------------------------------------- 在常规的波束形成中,是将阵列上的 ...

  4. 【自适应波束形成】MVDR(Minimum Variance Distortionless Response )笔记

    参考: https://blog.csdn.net/qq_40981790/article/details/80143524 1. MVDR简介(Minimum Variance Distortion ...

  5. 空间谱专题02:波束形成(Beamforming)

    作者:桂. 时间:2017-08-22  10:56:45 链接:http://www.cnblogs.com/xingshansi/p/7410846.html 前言 本文主要记录常见的波束形成问题 ...

  6. 东芝线阵CCD芯片TCD1305DG驱动时序设计

    最近在做微型光谱仪,用到了东芝的CCD芯片TCD1305DG,该芯片是单行3648像素,输出信号是时间上离散的模拟信号,典型输出速率为0.5M,即每2000ns输出一个像素值(模拟信号),芯片内部集成 ...

  7. MYSQL主从复制--传统方式

    目录 0.MYSQL主从复制概述 1.主从复制的作用 2.主从复制存在的问题 3.主从复制问题的解决办法 4.主从复制的原理(面试必问) 1.MYSQL主从复制-传统方式 1.环境准备 2.Maste ...

  8. 麦克风阵列波束形成之DSB原理与实现

    语音识别有近场和远场之分,且很多场景下都会用到麦克风阵列(micphone array).所谓麦克风阵列是一组位于空间不同位置的麦克风按一定的形状规则布置形成的阵列,是对空间传播声音信号进行空间采样的 ...

  9. DDD CQRS架构和传统架构的优缺点比较

    明天就是大年三十了,今天在家有空,想集中整理一下CQRS架构的特点以及相比传统架构的优缺点分析.先提前祝大家猴年新春快乐.万事如意.身体健康! 最近几年,在DDD的领域,我们经常会看到CQRS架构的概 ...

随机推荐

  1. zombodb 数据类型映射

    zombodb 与es 数据类型的映射处理 通用数据类型映射 Postgres 类型 Elasticsearch JSON 映射定义 bytea {"type": "bi ...

  2. Yii2中多表关联查询(hasOne、hasMany、join、joinwith)

    表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer   (id  customer_name) 订单表Order      (id  order_name  customer_id ...

  3. day052 django第三天 url和视图

    一.基本格式 from django.conf.urls import url from . import views #循环urlpatterns,找到对应的函数执行,匹配上一个路径就找到对应的函数 ...

  4. TSP-UK49687

    Copied From:http://www.math.uwaterloo.ca/tsp/uk/index.html Shortest possible tour to nearly every pu ...

  5. Flask--(项目准备)--框架搭建,参数配置

    项目准备: 配置参数 项目配置: 新建工程: 配置虚拟环境: 通过配置类添加配置参数: Debug配置, 初始化数据库对象, Mysql配置及数据库创建 redis配置: 端口6379和域名: 创建存 ...

  6. 【ELK】之Kibana使用

    GET _search { "query": { "match_all": {} } } GET _cat/indices GET elk- GET /elk- ...

  7. 《Java程序设计》 第二周学习总结

    20175334 <Java程序设计>第二周学习总结 教材学习内容总结 了解Java编程风格 认识Java基本数据类型与数组 掌握Java运算符.表达式和语句 教材学习中的问题和解决过程 ...

  8. NodeJS对象数组Array 根据对象object key的值排序sort

    有个js对象数组 var ary=[{id:1,name:”b”},{id:2,name:”b”}] 需求是根据name 或者 id的值来排序,这里有个风骚的函数. /** * 对数组中的对象,按对象 ...

  9. 使用Oracle DBLink进行数据库之间对象的访问操作

    Oracle中自带了DBLink功能,它的作用是将多个oracle数据库逻辑上看成一个数据库,也就是说在一个数据库中可以操作另一个数据库中的对象,例如我们新建了一个数据database1,我们需要操作 ...

  10. centos 设置中文环境

    方法1: [hl@localhost ~]$ LANG=zh_CN.UTF-8 #只对当前shell有效,临时设置 [hl@localhost ~]$ ll 总用量 drwxrwxr-x. hl hl ...