【实验6】——时域波束形成与频域波束形成

概述

    上一篇博文简单介绍了波束形成的原理,即通过对阵列信号的补偿实现一定方位的波束,可用于测向。之前的仿真时使用的是已知的单频信号,信号时延直接在解析式上进行,但实际情况中的信号往往没有解析形式,仅仅是一个数列。故解析理论中的时延就变成了对应点数的平移。

时域波束形成

理论

    理论用的就是之前的理论,不同阵元加上不同的时延,波束会在声波入射的方向处达到最大值。
    首先对信号做一个带通滤波的处理。
    这里要注意的就是平移的点数 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('频域波束形成结果');

  • 37
    点赞
  • 204
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值