%%验证12GHztest/n%dx/dy/nclear all;/nclose all;/nclc/nN=6;%x方向阵元个数/nM=6;%y方向阵元个数/nf=12;%信号频率 单位GHz/nc=2.9979210^2;%光速 单位m/s/nlambda=c/f;%波长/nlambdag = lambda 0.88 %波导中波长/ndx=lambdag/5;%x方向单元间距/ndy=lambdag/5;%y方向单元间距/nphi=linspace(-90,90,181); %方位角范围/ntheta=linspace(-90,90,181);%俯仰角范围/ntheta0=1; %目标俯仰角/nphi0=180; %预先设定的方向,目标方位角/nAmax = 1;%用于幅值调整/nAmin = 0.5;%用于幅值调整/nk = 1;%用于循环变量/np = zeros(3,MN);%生成3行,mn列的矩阵/nfor iii = 1 : N/n for jjj = 1: M/n p(:,k) = [-(N+1)/2dx+iiidx,-(M+1)/2dy+jjjdy,0]';%单行时应把对应坐标调为0 即在dx/dy上乘一个0/n k = k+1;/n end/nend %阵元的位置信息/n/n%在三维图中绘制所有阵元/nfigure(1);/nplot3(p(1,:),p(2,:),p(3,:),'ko');/nhold on;/nxlabel('/it x');/nylabel('/it y');/nzlabel('/it z');/n/n%二维全息幅值计算 /nA0 = p %获取所有辐射点位置坐标信息可以去掉/nP0 = 2 pi / lambda [sin(theta0pi/180)cos(phi0pi/180),sin(theta0pi/180)sin(phi0pi/180),cos(theta0pi/180)].'%目标波除位置信息外信息/nQ0 = P0.' p;%目标波全部信息/nq = 1;%用于循环变量/nfor qq = 1 : ( M N )/n if p(2 ,q) > 0/n R0(:,q) = Q0(:,q) - 2 pi / lambdag power(power(p(1,q),2)+power(p(2,q),2),1/2) - pi;%将一半部分补180°相位防止凹陷/n else/n R0(:,q) = Q0(:,q) - 2 pi / lambdag power(power(p(1,q),2)+power(p(2,q),2),1/2);/n end/n q = q + 1;/n /nend/nR = R0;%检查是否补180°相位 代入PCAAD时无需考虑反向 因为相位设置是延轴向设置/nM0 = Amax + Amin cos(R0);%幅值进行缩放/nm = 1;%用于循环变量/nn = length(M0);/nfor mm = 1 : length(M0)/n if M0(:,m) > 1,/n M0(:,m) = 1;/n else/n M0(:,m) = 0;/n end/n/n m = m+1;/nend/nm0 = M0;/n%以上对幅值进行归一化/nMM0 = M0';%用于pcaad幅值文件/nMM1 = reshape(MM0,N,M);%用于绘制黑白图/n/nfigure(5);%绘制黑白格/n[a,b]=size(MM1);/nMM11=zeros(a+1,b+1);/nMM11(2:a+1,1:b)=MM1;/npcolor(flipud(1-MM11))/ncolormap(gray(2))/naxis square/n/n%以下为绘制方向图函数程序/nv = zeros(m,n);/nfor ii= 1 : length(theta)/n for jj= 1 : length(phi)/n k=2pi/lambda[sin(theta(ii)*pi/180)*cos(phi(jj)*pi/180)+lambda/lambdag,sin(theta(ii)*pi/180)*sin(phi(jj)pi/180)+lambda/lambdag,0].';/n v = exp(1ik.'*p).m0 %x方向阵因子/n b(ii,jj) = v;/n end/nend/nB1 = max(abs(b(:,:)));%获取在目标方向的最大值用于验证/nB=20log10(abs(b)/max(max(abs(b(:,:)))));%以下二维方向图中所有方向信息对数化--dB形式/n/nfigure(2);%绘制方位角方向/nplot(phi,B(:,theta0),'k-')/ngrid on,hold on/nxlabel('方位角(deg)'), ylabel('阵列方向图(dB)')/naxis([-90 90 -50 10]);%可为x轴和y轴设置一个极限范围/n/nfigure(3);%绘制俯仰角方向图/nplot(theta,B(phi0,:))/ngrid on,hold on/nxlabel('俯仰角(deg)'), ylabel('阵列方向图(dB)')/naxis([-90 90 -50 10]);%可为x轴和y轴设置一个极限范围/n/nfigure(4);%绘制3D方向图/nmesh(B)/ntitle('圆阵动态30度指向方向图');/nxlabel('俯仰角/(/circ)');/nylabel('方位角/(/circ)');/nzlabel('阵列方向图(dB)');/naxis([-90 90 -90 90 -50 10]);%可为x轴和y轴设置一个极限范围/ngrid on/n以上代码的错误在哪里 请指出并更正/n内容:在计算方向图的循环中,对于每个方向角(theta,phi)的计算,应该是将所有阵元的位置信息p乘以对应的相位因子v,然后再进行幅度的归一化,最后计算方向图b。所以需要对代码进行如下修改:/n/nmatlab/nv = zeros(m,n);/nfor ii= 1 : length(theta)/n for jj= 1 : length(phi)/n k=2*pi/lambda*[sin(theta(ii)*pi/180)*cos(phi(jj)*pi/180)+lambda/lambdag,sin(theta(ii)*pi/180)*sin(phi(jj)*pi/180)+lambda/lambdag,0].';/n v = exp(1i*k.'*p);/n b(ii,jj) = abs(sum(v.*m0))/sqrt(M*N);/n end/nend/n/n/n另外,在计算方位角方向图和俯仰角方向图时,应该使用绝对值函数abs取绝对值,而不是将整个方向图对数化。所以需要对代码进行如下修改:/n/nmatlab/nfigure(2);%绘制方位角方向/nplot(phi,20*log10(abs(B(:,theta0))),'k-')/ngrid on,hold on/nxlabel('方位角(deg)'), ylabel('阵列方向图(dB)')/naxis([-90 90 -50 10]);%可为x轴和y轴设置一个极限范围/n/nfigure(3);%绘制俯仰角方向图/nplot(theta,20*log10(abs(B(phi0,:))))/ngrid on,hold on/nxlabel('俯仰角(deg)'), ylabel('阵列方向图(dB)')/naxis([-90 90 -50 10]);%可为x轴和y轴设置一个极限范围/n/n/n这样修改后的代码中,方向图的计算和绘制应该是正确的。


原文地址: https://www.cveoy.top/t/topic/pu91 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录