www.gusucode.com > matlab编程遗传算法计算匹配电路源码程序 > code1/code/MATLAB源代码/matlab_match/match1.m
function [ObjV,S21_passband_max,root_mean_square,VSWR1_max,VSWR2_max] = match1(Chrom,num_integer,num_parameter) %UNTITLED3 此处显示有关此函数的摘要 % 此处显示详细说明 %load('S1.mat'); %S11=reS11+1i*imS11; %S12=reS12+1i*imS12; %S21=reS21+1i*imS21; %S22=reS22+1i*imS22; ChromCopy=Chrom; column_of_compoment=num_integer+1:num_integer+(num_integer-1)*num_parameter; %代表元件值的基因所在列的列标号 num_structure=1:num_integer; %单元结构的标号 [num_of_individual,num_of_variable]=size(ChromCopy); %提取出种群的个体数目和变量数 %frequency_1MHz=1e6.*[30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 56 47 48 49 50 ... % 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 ... % 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88]; %frequency_1MHz=1e9.*[6 6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 ... % 7.0 7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9 ... % 8.0 8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 8.9 ... % 9.0 9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8 9.9 10]; frequency_1MHz=1e9.*[2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0 ... 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 4.0 ... 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 5.0 ... 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 6.0]; num_of_point=length(frequency_1MHz); %用于计算的频率点的数目 C0=90*1e-12; L0=100*1e-9; R1=50; R2=700; C1=50*1e-12; L1=100*1e-9; ABCD=zeros(2,2,num_of_individual,num_of_point); %预先给ABCD矩阵分配内存空间 for f=1:num_of_point %频率点循环 w=2*pi*frequency_1MHz(f); for k=1:num_of_individual %个体循环 % ABCD(:,:,k,f)=[1 0;1/(1i*w*L0)+1i*w*C0 1]; ABCD(:,:,k,f)=[1 0;0 1]; % A=((1+S11(f))*(1-S22(f))+S12(f)*S21(f))/(2*S21(f)); % B=50*((1+S11(f))*(1+S22(f))-S12(f)*S21(f))/(2*S21(f)); % C=((1-S11(f))*(1-S22(f))-S12(f)*S21(f))/(2*50*S21(f)); % D=((1-S11(f))*(1+S22(f))+S12(f)*S21(f))/(2*S21(f)); % ABCD(:,:,k,f)=[A B;C D]; structure=zeros(2,2,num_integer-1); %预先给structure矩阵分配内存空间,共包括num_integer个单元结构 % num_L=0; for m=2:ChromCopy(k,1)+1 increment=(m-2)*num_parameter; L=ChromCopy(k,column_of_compoment(1+increment))*1e-9; QL=300; % if (ChromCopy(k,num_structure(m))==1)||(ChromCopy(k,num_structure(m))==3) % num_L=num_L+1; % if num_L==1 % QL=ChromCopy(k,column_of_compoment(3+increment))*0.3; % end % end % ESR_L=w*L/QL; ESR_L=0; C=ChromCopy(k,column_of_compoment(2+increment))*1e-12; QC=3000; % ESR_C=1/(w*C*QC); ESR_C=0; R=ChromCopy(k,column_of_compoment(3+increment)); L2=ChromCopy(k,column_of_compoment(3+increment))*1e-9; % ESR_L2=w*L2/QL; ESR_L2=0; C2=ChromCopy(k,column_of_compoment(4+increment))*1e-12; % ESR_C2=1/(w*C2*QC); ESR_C2=0; switch ChromCopy(k,num_structure(m)) %判断单元电路的结构 case 0 %0代表空单元 A=1; B=0; C=0; D=1; case 1 %1代表串联L A=1; B=1i*w*L+ESR_L; C=0; D=1; case 2 %2代表串联C A=1; B=1/(1i*w*C)+ESR_C; C=0; D=1; case 3 %3代表并联L A=1; B=0; C=1/(1i*w*L+ESR_L); D=1; case 4 %4代表并联C A=1; B=0; C=1/(1/(1i*w*C)+ESR_C); D=1; case 5 %5代表串联的串联LC A=1; B=1i*w*L+ESR_L+1/(1i*w*C)+ESR_C; C=0; D=1; case 6 %6代表串联的并联LC A=1; B=1/(1/(1i*w*L+ESR_L)+1/(1/(1i*w*C)+ESR_C)); C=0; D=1; case 7 %7代表并联的串联LC A=1; B=0; C=1/(1i*w*L+ESR_L+1/(1i*w*C)+ESR_C); D=1; case 8 %8代表并联的并联LC A=1; B=0; C=1/(1i*w*L+ESR_L)+1/(1/(1i*w*C)+ESR_C); D=1; case 9 % A=1; B=0; C=1/(1i*w*L+ESR_L+1/(1i*w*C)+ESR_C+1/(1/(1i*w*L2+ESR_L2)+1/(1/(1i*w*C2)+ESR_C2))); D=1; case 10 %9代表 A=1; B=R; C=0; D=1; case 11 %10代表电阻 A=1; B=0; C=1/R; D=1; case 12 %11代表 A=1; B=R/(1+1i*w*R*C); C=0; D=1; case 13 %12代表 A=1; B=0; C=1/R+1i*w*C; D=1; case 14 %13代表 A=1; B=1/(1/R+1/(1i*w*L)); C=0; D=1; case 15 %14代表 A=1; B=0; C=1/R+1/(1i*w*L); D=1; case 16 %15代表 A=1; B=1/(1/R+1/(1i*w*L)+1i*w*C); C=0; D=1; case 17 %16代表 A=1; B=0; C=1/R+1/(1i*w*L)+1i*w*C; D=1; case 18 %17代表 A=1; B=R+1i*w*L; C=0; D=1; case 19 %18代表 A=1; B=R+1/(1i*w*C); C=0; D=1; case 20 %19代表 A=1; B=R+1i*w*L+1/(1i*w*C); C=0; D=1; case 21 %20代表 A=1; B=0; C=1/(R+1i*w*L); D=1; case 22 %21代表 A=1; B=0; C=1/(R+1/(1i*w*C)); D=1; case 23 %21代表 A=1; B=0; C=1/(R+1/(1/(1i*w*L)+1i*w*C)); D=1; case 24 %22代表 A=1; B=0; C=1/(R+1i*w*L+1/(1i*w*C)); D=1; case 25 %22代表 A=1; B=1/(1/R+1/(1i*w*L+1/(1i*w*C))); C=0; D=1; end ABCD(:,:,k,f)=ABCD(:,:,k,f)*[A B;C D]; % structure(:,:,m-1)=[A B;C D]; % if m<ChromCopy(k,1)/2 % ABCD(:,:,k,f)=structure(:,:,m-1)*ABCD(:,:,k,f); % else ABCD(:,:,k,f)=ABCD(:,:,k,f)*structure(:,:,m-1); % end % ABCD(:,:,k,f)=ABCD(:,:,k,f)*structure(:,:,m-1); end % A=((1+S11(f))*(1-S22(f))+S12(f)*S21(f))/(2*S21(f)); % B=50*((1+S11(f))*(1+S22(f))-S12(f)*S21(f))/(2*S21(f)); % C=((1-S11(f))*(1-S22(f))-S12(f)*S21(f))/(2*50*S21(f)); % D=((1-S11(f))*(1+S22(f))+S12(f)*S21(f))/(2*S21(f)); % ABCD(:,:,k,f)=ABCD(:,:,k,f)*[A B;C D]; % ABCD(:,:,k,f)=ABCD(:,:,k,f)*[1 1i*w*L1;0 1]*[1 0;1i*w*C1 1]; end end S21_all=zeros(num_of_point,num_of_individual); S11_all=zeros(num_of_point,num_of_individual); S22_all=zeros(num_of_point,num_of_individual); VSWR1=zeros(num_of_point,num_of_individual); VSWR2=zeros(num_of_point,num_of_individual); %polar_point=zeros(num_of_point,num_of_individual); for f=1:num_of_point RS=50; XS=0; RL=50; XL=0; ZS=RS+1i*XS; ZL=RL+1i*XL; AA=squeeze(ABCD(1,1,:,f)); BB=squeeze(ABCD(1,2,:,f)); CC=squeeze(ABCD(2,1,:,f)); DD=squeeze(ABCD(2,2,:,f)); Denominator=(AA+BB/50+CC*50+DD); S21_all(f,:)=-20*log10(abs(2./Denominator)); %由ABCD矩阵计算S21 S11_all(f,:)=abs((AA+BB/50-CC*50-DD)./Denominator); VSWR1(f,:)=(1+S11_all(f,:))./(1-S11_all(f,:)); S22_all(f,:)=abs((-AA+BB/50-CC*50+DD)./Denominator); VSWR2(f,:)=(1+S22_all(f,:))./(1-S22_all(f,:)); % S11_all(f,:)=-20*log10(abs((squeeze(ABCD(1,1,:,f))+squeeze(ABCD(1,2,:,f))/50-squeeze(ABCD(2,1,:,f))*50-squeeze(ABCD(2,2,:,f)))./(squeeze(ABCD(1,1,:,f))+squeeze(ABCD(1,2,:,f))/50+squeeze(ABCD(2,1,:,f))*50+squeeze(ABCD(2,2,:,f))))); % polar_point(f,:)=20*log10(abs((squeeze(ABCD(1,1,:,f))+squeeze(ABCD(1,2,:,f))/50+squeeze(ABCD(2,1,:,f))*50+squeeze(ABCD(2,2,:,f))))-2); end ObjV=zeros(num_of_individual,1); S21_all_cor=zeros(num_of_point,num_of_individual); S21_passband_max=zeros(num_of_individual,1); S21_passband_min=zeros(num_of_individual,1); VSWR1_max=zeros(num_of_individual,1); VSWR2_max=zeros(num_of_individual,1); average_S21=zeros(num_of_individual,1); root_mean_square=zeros(num_of_individual,1); for k=1:num_of_individual % x=30:88; % y=-0.0129.*x.^2+1.5187.*x-33; f1=2:0.1:6; y=abg2(f1); S21_all_cor(:,k)=S21_all(:,k)-y'; S21_passband_max(k)=max(S21_all(:,k)); %通带的最大插损 S21_passband_min(k)=min(S21_all(:,k)); VSWR1_max(k)=max(VSWR1(:,k)); VSWR2_max(k)=max(VSWR2(:,k)); average_S21(k)=sum(S21_all_cor(:,k))/length(S21_all_cor(:,k)); for f=1:num_of_point root_mean_square(k,1)=root_mean_square(k,1)+(S21_all_cor(f,k)-average_S21(k)).^2; end root_mean_square(k,1)=sqrt(root_mean_square(k,1)/length(S21_all_cor(:,k))); % f=1:num_of_point; % x=1-(f-1)./(num_of_point-1); ObjV(k,1)=ObjV(k,1)+sum((S21_all(:,k)-y').^2)+sum((VSWR1(:,k)-1).^2)+sum((VSWR2(:,k)-1).^2); % if S21_passband_max(k)>1.3 % ObjV(k,1)=S21_passband_max(k); % else % ObjV(k,1)=S21_passband_max(k)+log10(root_mean_square(k,1)); % end % ObjV(k,1)=S21_passband_max(k); % for f=1:num_of_point % ObjV(k,1)=ObjV(k,1)+(S21_all(f,k)-average_S21(k)).^2; % end % ObjV(k,1)=sqrt(ObjV(k,1)/length(S21_all(:,k))); % for f=1:num_of_point % ObjV(k,1)=ObjV(k,1)+(S21_all(f,k)-0.7).^2; % end % if S11_all(f,k)<25 % ObjV(k,1)=ObjV(k,1)+(S11_all(f,k)-25).^2; % else ObjV(k,1)=ObjV(k,1); % end % if polar_point(f,k)>-50 % ObjV(k,1)=ObjV(k,1)+polar_point(f,k); % else ObjV(k,1)=ObjV(k,1)-50; % end % for f=60:num_of_point % ObjV(k,1)=ObjV(k,1)+(S21_all(f,k)-60).^2; % end end end