close all;
clear all;
M=2;
N=8;
c=3e+8;
fc=20.4e+9;
wavelength = c/fc;
d =8*0.5*wavelength;
fi = 1e+6;
fs = 8e+9;
dert=0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% get the filter coefficient
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
theta0=45*pi/180;
fai0 = 90*pi/180;
k_vector = [sin(theta0)*cos(fai0) sin(theta0)*sin(fai0) cos(theta0)]';
tao = zeros(M,N);
Filter_len = 26; % the number should be even which is the order of filter
for m=1:M
for n=1:N
position=[(m-1)*d (n-1)*d 0]';
tao(m,n) = k_vector'*position/c;
end
end
D = tao*fs;
D_integer = fix(D);
D_fraction = D - D_integer;
Co_matrix = zeros(M*N,Filter_len+1);
Temp = 1;
for m=1:M
for n=1:N
D_temp = D_fraction(m,n);
Co_matrix(Temp,:)=Filter_Design(Filter_len,D_temp);
Temp = Temp+1;
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Pattern
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
step_theta = 1;
step_fai = 1;
theta = (0:step_theta:90)*pi/180;
fai = (0:step_fai:360)*pi/180;
Signal_len = 1000;
for p=1:1:length(theta)
for q=1:1:length(fai)
delay = Delay_Compute(M,N,d,theta(p),fai(q));
S_matrix = Signal_Generate( fi,fs,Signal_len,delay );
Y_matrix = Delay_Filtering(S_matrix,Co_matrix,D_integer);
Y_out = sum(Y_matrix);
Y_out = Y_out(2*Filter_len+1:length(Y_out));
Power(p,q) = Y_out*Y_out';
end
end
% B = 10*log10(Power/max(max(Power)));
% B_subarray=Subarray_Pattern( dert,step_theta,step_fai );
B=Power/max(max(Power));
B_subarray= Subarray_Pattern( theta0,fai0,dert,step_theta,step_fai );
T=10*log10(B.*B_subarray/max(max(B.*B_subarray)));
B_Result= T;
[R V]=size(T);
for r=1:R
for v=1:V
if T(r,v) < -50
T(r,v) = -50;
end
end
end
mesh(fai*180/pi,theta*180/pi,T);
axis([0 360 0 90 -50 0]);
xlabel('\phi/degree');
ylabel('\theta/degree');
zlabel('Pattern/dB');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Draw 3D Pattern
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
level_db=100;
Angle_step1=step_theta;
Angle_step2=step_fai;
DOA_theta = (0:Angle_step1:90)*pi/180; % Range of scanning angle
DOA_phi = (0:Angle_step2:360)*pi/180; % Range of scanning angle
n_points_theta=length(DOA_theta);
n_points_phi=length(DOA_phi);
% RADIUS=Power/max(max(Power));
RADIUS=B.*B_subarray;
% Set RADIUS to dB
for p=1:n_points_theta,
for q=1:n_points_phi,
if(RADIUS(p,q)<10^(-level_db/20)), RADIUS(p,q)=0;
else RADIUS(p,q)=20*log10(RADIUS(p,q))+level_db;
end;
end;
end;
THETA=DOA_theta';
PHI=DOA_phi;
% Parametrize the points to be used in surf() function
XX=sin(THETA)*cos(PHI).*RADIUS;
YY=sin(THETA)*sin(PHI).*RADIUS;
ZZ=cos(THETA)*ones(1,n_points_phi).*RADIUS;
figure
ps=surf(XX,YY,ZZ,'EdgeColor', 'blue', 'EdgeAlpha', 0.50, 'LineWidth', 1.00);
set(ps,'FaceColor',[0.502 0.502 1.000]);
alpha(0.75); %透明度
cdzp=1.15; % Proportion of z axis for locating the text
text(level_db,level_db,cdzp*level_db,'NPD (dB)','FontSize',12,'Color','black','HorizontalAlignment','center');
tick_pos=(-level_db:5:level_db); ticks=abs(tick_pos)-level_db;
set(gca,'XTick',tick_pos,'XTickLabel',ticks);
set(gca,'YTick',tick_pos,'YTickLabel',ticks);
set(gca,'ZTick',tick_pos,'ZTickLabel',ticks);
xlabel('X','FontSize',12,'position',[0 cdzp*level_db level_db], 'HorizontalAlignment', 'center');
ylabel('Y','FontSize',12,'position',[cdzp*level_db 0 level_db],'HorizontalAlignment', 'center');
set(gca,'XColor', 'blue','YColor', 'blue','ZColor', 'blue');
axis equal; axis auto; box on;
camlight; lightangle(0,45); lighting gouraud;
camproj('perspective'); % view(45,20);
Y=B_Result;
[Raw Vol]=size(Y);
% tempfai=round(Vol*fai0/360);
tempfai=fix(fai0/(2*pi)*(length(fai)-1)+1);
sita_max=45;
tempsita=fix(sita_max/90*(length(theta)-1)+1);
figure;
plot(theta*180/pi,Y(:,tempfai));
axis([0 90 -50 0]);
xlabel('\theta/degree');
ylabel('Pattern/dB');
grid on;
figure;
plot(fai*180/pi,Y(tempsita,:));
axis([0 360 -50 0]);
xlabel('\phi/degree');
ylabel('Pattern/dB');
grid on;
评论2
最新资源