运行结果显示:
信号的频率:
常规波束形成结果:
clear
close all
clc
% 度与弧度常数
deg2rad = pi/180; % 度转换成弧度
rad2deg = 180/pi; % 弧度转换成度
%% 阵列参数设置
c = 1500; % 水体声速,米/秒 m/s
N = 70; % 阵元数
sqrtN=sqrt(N); % 驾驶向量归一化常数
T=10; % 数据时长,秒sec
FS=24e3; % 采样频率,赫兹Hz
LEN=T*FS; % 数据长度,点数
t=(0:LEN-1)./FS; % 数据时间轴,秒sec,1 x LEN
fc=300; % 阵列中心频率,赫兹Hz
lambda = c/fc; % 波长,米m
lambda2 = lambda / 2; % 半波长,米m
d = 0.27; % 阵元间距,米m
ra=d*(0:N-1).'; % 阵元坐标,N x 1
%% 目标方位角设置
thetas_deg=60; % 目标方位角,度deg
thetas_rad=thetas_deg*deg2rad; % 目标方位角,弧度rad
%% 目标信号生成
f0=300; % 声源频率,Hz
f1=f0; % 起始处理频率,Hz
B=10; % 处理带宽,Hz
s=exp(1j*2*pi*f0.*t); % 目标复数信号,1 x LEN
sf=fft(s.',LEN); % 目标信号FFT,LEN x 1
ks=2*pi*f0/c; % 声源波数,1/m
% 指向目标方位的驾驶向量生成
as=exp(-1j*2*pi*ra*f0*cos(thetas_rad)/c); % 目标驾驶向量,N x 1
rf=sf*(as.'); % 指向目标方向的水听器阵元输出复数信号,LEN x N
% 指向目标方位的阵列输出信号生成
snr=40; % 信噪比设置
rx=awgn(real(as*s), snr, 'measured'); % 含加性高斯噪声的水听器输出时间波形实数矩阵
x = rx.'; % 输出波形矩阵转置,便于二维数组FFT列运算,LEN x N
%% 基础数据
df = FS / LEN; % 采样分辨率,即某个采样点对应的频率
figure(1);plot((0:LEN-1)*FS / LEN,abs(rf(:,1))); % 测试图像,观察目标信号傅里叶变换:频率为f0 = 300
place = round(f0/df) + 1; % 获取信号FFT频率对应位置
sig = rf(place,:); % 获取频率为f0信号的FFT结果 1*N
theta_N = 0:0.1:180; % 角度遍历
%% 常规频域窄带波束
for i = 1:length(theta_N)
tao = cos(theta_N(i)*deg2rad)*ra/c; % 每个阵元在theta_N(i)角度下的时延 N*1
pt_sig(i) = sig * exp(1j*2*pi*f0*tao); % 常规窄带波束 1*N*N*1
power_sig(i) = sig * exp(1j*2*pi*f0*tao) * sig * exp(1j*2*pi*f0*tao); % 功率
end
pt_abs = abs(pt_sig);
pt2one = pt_abs ./ max(pt_abs); % 归一化
power_abs = abs(power_sig);
power2one = power_abs ./ max(power_abs); % 归一化
figure(2)
plot(theta_N,20*log10(pt2one),'r');
figure(3)
plot(theta_N,20*log10(power2one),'b');