Skip to content

Commit c2c4cbe

Browse files
authored
beamforming
1 parent d49fd27 commit c2c4cbe

File tree

4 files changed

+102
-0
lines changed

4 files changed

+102
-0
lines changed

Beamforming/2d.png

54.2 KB
Loading

Beamforming/3d.png

28.7 KB
Loading

Beamforming/array.png

7.74 KB
Loading

Beamforming/beamfoming.m

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
clc
2+
clear all
3+
close all
4+
5+
%% ------------------------------初始化常量-------------------------------%
6+
c = 334; % 声速c
7+
fs = 1000; % 抽样频率fs
8+
T = 0.1; % ??
9+
t = 0:1/fs:T; % 时间 [0, 0.1]
10+
L = length(t); % 时间长度:101
11+
f = 500; % 感兴趣的频率
12+
w = 2*pi*f; % 角频率
13+
k = w/c; % 波数 k
14+
15+
%% ------------------------------各阵元坐标-------------------------------%
16+
M = 17; % 阵元个数
17+
% Nmid = 12; % 参考点
18+
% d = 3; % 阵元间距
19+
% m = (0:1:M-1)
20+
yi = zeros(M,1); % 生成一个M*1维的零矩阵
21+
zi = [ 0; 3; 6; 9;12;15;18;21;24;12;12;12;12;12;12;12;12];
22+
xi = [12;12;12;12;12;12;12;12;12; 0; 3; 6; 9;15;18;21;24];
23+
%xi = xi.' % 列向量 m*d 阵元数*阵元间距
24+
25+
26+
figure(1)
27+
plot(xi,zi,'r*');
28+
title('十字形麦克风阵列')
29+
30+
31+
%% ---------------------------- 声源位置------------------------------------%
32+
x1 = 12;
33+
y1 = 10;
34+
z1 = 12; %声源位置 (12,10,12) x,z为水平面
35+
36+
x2 = 12; % array center
37+
y2 = 0;
38+
z2 = 12;
39+
40+
Ric1 = sqrt((x1-xi).^2+(y1-yi).^2+(z1-zi).^2); % 声源到各阵元的距离
41+
Ric2 = sqrt((x1-x2).^2+(y1-y2).^2+(z1-z2).^2); %sound to array center:10
42+
Rn1 = Ric1 - Ric2; %声源至各阵元与参考阵元的声程差矢量
43+
44+
s1 = cos(2*w*t); % 参考阵元接收到的矢量
45+
Am = 10^(-1); % 振幅
46+
n1 = Am * (randn(M, L) + j*randn(M, L)); % 各阵元高斯白噪声
47+
p1 = zeros(M,L);
48+
49+
50+
%% ----------------------------各阵元的延迟求和----------------------------------%
51+
% 整个程序最关键的部分,延迟求和,同时得到各阵元接收的声压信号矩阵,以及协方差矩阵
52+
for k1 = 1:M
53+
p1(k1,:) = Ric2/Ric1(k1) * s1.*exp(-j*w*Rn1(k1)/c);
54+
% 接收到的信号
55+
end
56+
57+
p = p1+n1; % 各阵元接收的声压信号矩阵
58+
R = p*p'/L; % 接收数据的自协方差矩阵 A.'是一般转置,A'是共轭转置
59+
60+
61+
%% ----------------------------------扫描范围----------------------------------%
62+
% 我们设置步长为0.1,扫描范围是20x20的平面,双重for循环得到M*1矢量矩阵,最后得到交叉谱矩阵(cross spectrum matrix)
63+
% 由DSP理论,这个就是声音的功率。
64+
step_x = 0.1; % 步长设置为0.1
65+
step_z = 0.1;
66+
y = y1;
67+
x = (9:step_x:15); % 扫描范围 9-15
68+
z = (9:step_z:15);
69+
70+
for k1=1:length(z)
71+
for k2=1:length(x)
72+
Ri = sqrt((x(k2)-xi).^2+(y-yi).^2+(z(k1)-zi).^2); % 该扫描点到各阵元的聚焦距离矢量
73+
Ri2 = sqrt((x(k2)-x2).^2+(y-y2).^2+(z(k1)-z2).^2); % 10.8628
74+
Rn = Ri-Ri2; % 扫描点到各阵元与参考阵元的程差矢量
75+
b = exp(-j*w*Rn/c); % 声压聚焦方向矢量
76+
Pcbf(k1,k2) = abs(b'*R*b); % CSM,最关键,(1,18)*(18,18)*(18,1)
77+
end
78+
end
79+
80+
81+
%% -------------------------------------归一化-------------------------------------%
82+
for k1 = 1:length(z)
83+
pp(k1) = max(Pcbf(k1,:)); % Pcbf 的第k1行的最大元素的值
84+
end
85+
86+
Pcbf = Pcbf/max(pp); % 所有元素除以其最大值 归一化幅度, (61,61)
87+
88+
89+
%% -------------------------------------作图展示------------------------------------%
90+
figure(2)
91+
surf(x,z,Pcbf);
92+
xlabel('x(m)'),ylabel('z(m)')
93+
title('三维单声源图')
94+
colorbar
95+
96+
figure(3)
97+
pcolor(x,z,Pcbf);
98+
shading interp;
99+
xlabel('x(m)');
100+
ylabel('z(m)');
101+
title('单声源图')
102+
colorbar

0 commit comments

Comments
 (0)