概述
上一篇博文简单介绍了波束形成的原理,即通过对阵列信号的补偿实现一定方位的波束,可用于测向。之前的仿真时使用的是已知的单频信号,信号时延直接在解析式上进行,但实际情况中的信号往往没有解析形式,仅仅是一个数列。故解析理论中的时延就变成了对应点数的平移。
时域波束形成
理论
理论用的就是之前的理论,不同阵元加上不同的时延,波束会在声波入射的方向处达到最大值。
首先对信号做一个带通滤波的处理。
这里要注意的就是平移的点数
m
(
n
)
m(n)
m(n)和时延
τ
(
n
)
\tau(n)
τ(n)会存在一个四舍五入的误差
m
(
n
)
=
r
o
u
n
d
(
τ
(
n
)
×
f
s
)
m(n)=round(\tau(n)\times fs)
m(n)=round(τ(n)×fs)
τ
(
n
)
=
d
s
i
n
(
θ
)
c
\tau(n)=\frac{dsin(\theta)}{c}
τ(n)=cdsin(θ)
因为需要对序列进行平移,但序列是一串有限长的数列,故平移的本质是取其中的不同部分(起始位置不同的相同长度的子序列)。其他部分与上一篇博文中的仿真步骤是一样的,先空间积分,再时间积分,这里再说明一下,这样平移的结果是只用了序列中一部分的数据,带来的影响为能量的减小。
框图如下:
程序
clc;clear all;
c=1500;
d=1;
fs=6000;
M=6000;
st=rand(1,M);
N=20;
fh=700;
fl=300;
b=fir1(100,[fl/fs*2,fh/fs*2]);
st1=filter(b,1,st);
theta=30;
for a=1:N
tao(a)=round((a-1)*d*sind(theta)/c*fs);
end
posi=tao(N)+10;
for a=1:N
s(a,:)=st1(posi+tao(a):end-posi+tao(a));%生成各阵元的信号
end
angle=-90:90;
posi1=round(d*(N-1)/c*fs)+10;
for a=1:length(angle)
for b=1:N
fai(b)=round((b-1)*d*sind(angle(a))/c*fs);
x(b,:)=s(b,posi1-fai(b):end-posi1-fai(b));
end
y=sum(x,1);
E(a)=sum(y.^2);
end
E=E./max(E);
plot(angle,E);xlabel('角度');ylabel('幅值');title('时域波束形成结果');
频域波束形成
时域波束形成直接对信号进行平移,存在较大的误差,故引入了频域波束形成。
基本思想
对于单频信号的时延,可以写成如下形式:
e
j
ω
(
t
+
τ
)
=
e
j
ω
t
e
j
ω
τ
e^{j\omega(t+\tau)}=e^{j\omega t}e^{j\omega\tau}
ejω(t+τ)=ejωtejωτ
那么自然容易想到利用傅里叶变换展开成单频信号的叠加,再对不同的单频信号添加不同相移即可。在添加的时候注意,同一频率下,不同阵元的相移也不同,反应在
τ
(
n
)
=
d
s
i
n
(
θ
)
c
\tau(n)=\frac{dsin(\theta)}{c}
τ(n)=cdsin(θ)上。
然后首先对单频信号进行空间积分,然后根据帕斯瓦尔定理,能量也能表示为频域上的积分,最终得到指向性,框图如下:
程序
clc;clear all;
c=1500;
d=1;
fs=6000;
M=6000;
st=rand(1,M);
N=20;
fh=700;
fl=300;
b=fir1(100,[fl/fs*2,fh/fs*2]);
st1=filter(b,1,st);
theta=30;
for a=1:N
tao(a)=round((a-1)*d*sind(theta)/c*fs);
end
posi=tao(N)+10;
for a=1:N
s(a,:)=st1(posi+tao(a):end-posi+tao(a));%生成各阵元的信号
end
for a=1:N
sf(a,:)=fft(s(a,:),8192);%各阵元信号的频谱
end
angle=-90:90;
for a=1:length(angle)
b_f=round(fl/fs*8192)+1;
e_f=round(fh/fs*8192)+1;
for f=b_f:e_f
for b=1:N
tt(b)=(b-1)*sind(angle(a))*d/c;%各阵元的时延
x(b)=sf(b,f)*exp(-1j*2*pi*f*fs/8192*tt(b));
end
y(f)=sum(x);%各频率空间阵元求和
end
E(a)=sum(abs(y).^2);%频域求和 能量
end
E=E./max(E);
plot(angle,E);xlabel('角度');ylabel('幅值');title('频域波束形成结果');