www.gusucode.com > matlab编程遗传算法计算匹配电路源码程序 > code1/code/MATLAB源代码/match1.m
function [ObjV,S21_passband] = match1(Chrom,num_integer,num_parameter) %UNTITLED3 此处显示有关此函数的摘要 % 此处显示详细说明 ChromCopy=Chrom; column_of_compoment=num_integer+1:num_integer+num_integer*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]; % 1 2 3 4 5 6 7 8 9 10 11 ... % 98 99 100 101 102 103 104 105 106 107 108 109 110]; %设置需要计算的频率点 num_of_point=length(frequency_1MHz); %用于计算的频率点的数目 C0=90*1e-12; LO=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*LO)+1i*w*C0 1]; ABCD(:,:,k,f)=[1 0;0 1]; structure=zeros(2,2,num_integer); %预先给structure矩阵分配内存空间,共包括num_integer个单元结构 for m=1:num_integer if m==1 ChromCopy(k,num_structure(1))=8; L=ChromCopy(k,column_of_compoment(1))*1e-9/5; C=(ChromCopy(k,column_of_compoment(2))/500*(500-90)+90)*1e-12; else increment=(m-1)*num_parameter; L=ChromCopy(k,column_of_compoment(1+increment))*1e-9; C=ChromCopy(k,column_of_compoment(2+increment))*1e-12; R=ChromCopy(k,column_of_compoment(3+increment)); end 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; C=0; D=1; case 2 %2代表串联C A=1; B=1/(1i*w*C); C=0; D=1; case 3 %3代表并联L A=1; B=0; C=1/(1i*w*L); D=1; case 4 %4代表并联C A=1; B=0; C=1i*w*C; D=1; case 5 %5代表串联的串联LC A=1; B=1i*w*L+1/(1i*w*C); C=0; D=1; case 6 %6代表串联的并联LC A=1; B=1/(1/(1i*w*L)+1i*w*C); C=0; D=1; case 7 %7代表并联的串联LC A=1; B=0; C=1/(1/(1i*w*C)+1i*w*L); D=1; case 8 %8代表并联的并联LC A=1; B=0; C=1i*w*C+1/(1i*w*L); D=1; case 9 %9代表变压器电阻 A=1; B=R; C=0; D=1; case 10 %10代表串联电阻 A=1; B=0; C=1/R; D=1; case 11 %11代表 A=1; B=R/(1+1i*w*R*C); C=0; D=1; case 12 %12代表 A=1; B=0; C=1/R+1i*w*C; D=1; case 13 %13代表 A=1; B=1/(1/R+1/(1i*w*L)); C=0; D=1; case 14 %14代表 A=1; B=0; C=1/R+1/(1i*w*L); D=1; case 15 %15代表 A=1; B=1/(1/R+1/(1i*w*L)+1i*w*C); C=0; D=1; case 16 %16代表 A=1; B=0; C=1/R+1/(1i*w*L)+1i*w*C; D=1; case 17 %17代表 A=1; B=R+1i*w*L; C=0; D=1; case 18 %18代表 A=1; B=R+1/(1i*w*C); C=0; D=1; case 19 %19代表 A=1; B=R+1i*w*L+1/(1i*w*C); C=0; D=1; case 20 %20代表 A=1; B=0; C=1/(R+1i*w*L); D=1; case 21 %21代表 A=1; B=0; C=1/(R+1/(1i*w*C)); D=1; case 22 %22代表 A=1; B=0; C=1/(R+1i*w*L+1/(1i*w*C)); D=1; end structure(:,:,m)=[A B;C D]; ABCD(:,:,k,f)=ABCD(:,:,k,f)*structure(:,:,m); end end end S21_all=zeros(num_of_point,num_of_individual); S11_all=zeros(num_of_point,num_of_individual); polar_point=zeros(num_of_point,num_of_individual); for f=1:num_of_point S21_all(f,:)=-20*log10(abs(2./(squeeze(ABCD(1,1,:,f))+squeeze(ABCD(1,2,:,f))/50+squeeze(ABCD(2,1,:,f))*50+squeeze(ABCD(2,2,:,f))))); %由ABCD矩阵计算S21 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_passband=zeros(num_of_individual,1); for k=1:num_of_individual S21_passband(k)=max(S21_all(1:59,k)); %通带的最大插损 for f=1:59 if S21_all(f,k)>1 ObjV(k,1)=ObjV(k,1)+10*(S21_all(f,k)-0).^2; else ObjV(k,1)=ObjV(k,1)+(S21_all(f,k)-0).^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 end % for f=60:num_of_point % ObjV(k,1)=ObjV(k,1)+(S21_all(f,k)-60).^2; % end end end