基于MATLAB的波速形成仿真
close all
clear all
%%波束形成
f=[4000,5000,6000];%信號頻率,單位Hz
w=[1,1,1,1,1;%每一行表示一種加權
? ? 1,2,4,2,1;
? ? 4,2,1,2,4];
fs=4*f;%采樣頻率取信號頻率的4倍
T=0.1;%信號長度,單位s
N=T*fs;%采樣點數
c=1500;%聲速,m/s
d=0.15;%陣元間距,單位m
jay=sqrt(-1);%復單位
theta=-90:1:90;%觀測角度范圍,單位度
tao=d*sin(pi*theta/180)/c;%相鄰陣元時延
xx=zeros(3,2400);%準備產生三種頻率下的參考信號
for i=1:3
? ? xx(i,1:N(i))=exp(jay*(2*pi*f(i)/fs(i)*(0:N(i)-1)));%三種頻率下的參考信號
end
for j=1:3%三種頻率循環
? ? for i=1:length(tao)%不同角度循環
? ? ? ? for k=(j-1)*5+1:(j-1)*5+5%第一種頻率下的五個陣元的信號
? ? ? ? ? ? x(k,:)=xx(j,:)*exp(-jay*2*pi*f(j)*(k-1)*tao(i));
? ? ? ? end
? ? ? ? r=x((j-1)*5+1:(j-1)*5+5,:)*x((j-1)*5+1:(j-1)*5+5,:)'/N(j);%求某一角度下的波束圖,用公式B=w*(∑x*x')*w'/N.
? ? ? ? B((j-1)*3+1,i)=w(1,:)*r*w(1,:)';%第j個頻率下的第一種加權的波束圖輸出
? ? ? ? B((j-1)*3+2,i)=w(2,:)*r*w(2,:)';%第j個頻率下的第二種加權的波束圖輸出
? ? ? ? B((j-1)*3+3,i)=w(3,:)*r*w(3,:)';%第j個頻率下的第三種加權的波束圖輸出
? ? end
end
%c產生的舉證B表示B=[B11;B12;B13;B21;B22;B23;B31;B32;B33];第一個下角標表示第幾個頻率,第二個下角標表示第幾種加權而得到的波束
for k=1:9%分別對9個波束圖進行歸一化和取對數
? ? B(k,:)=real(B(k,:))/max(real(B(k,:)));%歸一化
? ? B(k,:)=20*log10(B(k,:));%取對數
end
figure(1);%頻率f=4000,加權不同
subplot(3,1,1);
plot(theta,B(1,:));axis([-90 90 -60 0]);title('頻率f=4000,加權[1,1,1,1,1]');xlabel('角度/°');ylabel('波束圖/dB');
subplot(3,1,2);
plot(theta,B(2,:));axis([-90 90 -60 0]);title('頻率f=4000,加權[1,2,4,2,1]');xlabel('角度/°');ylabel('波束圖/dB');
subplot(3,1,3);
plot(theta,B(3,:));axis([-90 90 -60 0]);title('頻率f=4000,加權[4,2,1,2,4]');xlabel('角度/°');ylabel('波束圖/dB');
figure(2);%頻率f=5000,加權不同
subplot(3,1,1);
plot(theta,B(4,:));axis([-90 90 -60 0]);title('頻率f=5000,加權[1,1,1,1,1]');xlabel('角度/°');ylabel('波束圖/dB');
subplot(3,1,2);
plot(theta,B(5,:));axis([-90 90 -60 0]);title('頻率f=5000,加權[1,2,4,2,1]');xlabel('角度/°');ylabel('波束圖/dB');
subplot(3,1,3);
plot(theta,B(6,:));axis([-90 90 -60 0]);title('頻率f=5000,加權[4,2,1,2,4]');xlabel('角度/°');ylabel('波束圖/dB');
figure(3);%頻率f=6000,加權不同
subplot(3,1,1);
plot(theta,B(7,:));axis([-90 90 -60 0]);title('頻率f=6000,加權[1,1,1,1,1]');xlabel('角度/°');ylabel('波束圖/dB');
subplot(3,1,2);
plot(theta,B(8,:));axis([-90 90 -60 0]);title('頻率f=6000,加權[1,2,4,2,1]');xlabel('角度/°');ylabel('波束圖/dB');
subplot(3,1,3);
plot(theta,B(9,:));axis([-90 90 -60 0]);title('頻率f=6000,加權[4,2,1,2,4]');xlabel('角度/°');ylabel('波束圖/dB');
figure(4);%加權[1,1,1,1,1],頻率不同
subplot(3,1,1);
plot(theta,B(1,:));axis([-90 90 -60 0]);title('頻率f=4000,加權[1,1,1,1,1]');xlabel('角度/°');ylabel('波束圖/dB');
subplot(3,1,2);
plot(theta,B(4,:));axis([-90 90 -60 0]);title('頻率f=5000,加權[1,1,1,1,1]');xlabel('角度/°');ylabel('波束圖/dB');
subplot(3,1,3);
plot(theta,B(7,:));axis([-90 90 -60 0]);title('頻率f=6000,加權[1,1,1,1,1]');xlabel('角度/°');ylabel('波束圖/dB');
figure(5);%加權[1,2,4,2,1],頻率不同
subplot(3,1,1);
plot(theta,B(2,:));axis([-90 90 -60 0]);title('頻率f=4000,加權[1,2,4,2,1]');xlabel('角度/°');ylabel('波束圖/dB');
subplot(3,1,2);
plot(theta,B(5,:));axis([-90 90 -60 0]);title('頻率f=5000,加權[1,2,4,2,1]');xlabel('角度/°');ylabel('波束圖/dB');
subplot(3,1,3);
plot(theta,B(8,:));axis([-90 90 -60 0]);title('頻率f=6000,加權[1,2,4,2,1]');xlabel('角度/°');ylabel('波束圖/dB');
figure(6);%加權[4,2,1,2,4],頻率不同
subplot(3,1,1);
plot(theta,B(3,:));axis([-90 90 -60 0]);title('頻率f=4000,加權[4,2,1,2,4]');xlabel('角度/°');ylabel('波束圖/dB');
subplot(3,1,2);
plot(theta,B(6,:));axis([-90 90 -60 0]);title('頻率f=5000,加權[4,2,1,2,4]');xlabel('角度/°');ylabel('波束圖/dB');
subplot(3,1,3);
plot(theta,B(9,:));axis([-90 90 -60 0]);title('頻率f=6000,加權[4,2,1,2,4]');xlabel('角度/°');ylabel('波束圖/dB');
%計算主瓣寬度D和旁瓣級P
for k=1:9
? ? [i,j]=find(abs(B(k,:)+3)<0.5);%誤差限設在0.5dB。
? ? D(k)=(j(length(j))-j(1))*1;%每一個點之間是一度
end ? ?%根據計算D的結果可以發現,同一種頻率下三種加權分辨率最高的是第三種,其次是第一種。同一加權下,頻率越高,分辨率越高
disp('9個波束圖的參數依次為,其中分別表示:');
disp('f=4000,w=[1,1,1,1,1];f=4000,w=[1,2,4,2,1];f=4000,w=[4,2,1,2,4]');
disp('f=5000,w=[1,1,1,1,1];f=5000,w=[1,2,4,2,1];f=5000,w=[4,2,1,2,4]');
disp('f=6000,w=[1,1,1,1,1];f=6000,w=[1,2,4,2,1];f=6000,w=[4,2,1,2,4]');
disp('波束寬度為:');
ss=sprintf('%d ',D);
disp(ss);
NN=length(theta);%每一個波束圖離散的點數
for k=1:9
? ? for i=(NN-1)/2+1:NN-1%從主波束開始往后找到第一個次級大的位置
? ? ? ? if B(k,i)>=B(k,i+1)&&B(k,i)>=B(k,i-1)
? ? ? ? ? ? CC(k)=B(k,i);%記錄第一個次級大的分貝數
? ? ? ? end
? ? end
end
CC(2)=B(2,1);CC(5)=B(5,1);%由于在[-90,90]度的范圍內,第二種和第五種情況下沒有找到次級大,故用它在-90°的地方分貝數近似。
disp('旁絆級為:');
s=sprintf('%f ',CC);
disp(s);
?
總結
以上是生活随笔為你收集整理的基于MATLAB的波速形成仿真的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阵元间隔为半波长的均匀分布16元线阵
- 下一篇: 基于FPGA的智能PID控制器的设计与实