天天看點

波束形成

1.問題描述:

2.部分程式:

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)));%三種頻率下的參考信号
 endfor 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);      

3.仿真結論:

繼續閱讀