www.gusucode.com > matlab编程遗传算法计算匹配电路源码程序 > code1/code/MATLAB源代码/matlab_match/helu.m
function [ObjV,S21_passband_delta,VSWR1_max,VSWR2_max] = helu(Chrom,num_integer,num_parameter) %UNTITLED3 此处显示有关此函数的摘要 % 此处显示详细说明 %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(Chrom); %提取出种群的个体数目和变量数 %frequency_1MHz=1e6.*[30.0 30.1 30.2 30.3 30.4 30.5 30.6 30.7 30.8 30.9 ... % 31.0 31.1 31.2 31.3 31.4 31.5 31.6 31.7 31.8 31.9 ... % 32.0 32.1 32.2 32.3 32.4 32.5 32.6 32.7 32.8 32.9 ... % 33.0 33.1 33.2 33.3 33.4]; %frequency_1MHz=1e6.*[33.4 33.5 33.6 33.7 33.8 33.9 ... % 34.0 34.1 34.2 34.3 34.4 34.5 34.6 34.7 34.8 34.9 ... % 35.0 35.1 35.2 35.3 35.4 35.5 35.6 35.7 35.8 35.9 ... % 36.0 36.1 36.2 36.3 36.4 36.5 36.6 36.7 36.8 36.9 ... % 37.0 37.1 37.2]; %frequency_1MHz=1e6.*[37.2 37.3 37.4 37.5 37.6 37.7 37.8 37.9 ... % 38.0 38.1 38.2 38.3 38.4 38.5 38.6 38.7 38.8 38.9 ... % 39.0 39.1 39.2 39.3 39.4 39.5 39.6 39.7 39.8 39.9 ... % 40.0 40.1 40.2 40.3 40.4 40.5 40.6 40.7 40.8 40.9 ... % 41.0 41.1 41.2 41.3 41.4]; %frequency_1MHz=1e6.*[41.4 41.5 41.6 41.7 41.8 41.9 ... % 42.0 42.1 42.2 42.3 42.4 42.5 42.6 42.7 42.8 42.9 ... % 43.0 43.1 43.2 43.3 43.4 43.5 43.6 43.7 43.8 43.9 ... % 44.0 44.1 44.2 44.3 44.4 44.5 44.6 44.7 44.8 44.9 ... % 45.0 45.1 45.2 45.3 45.4 45.5 45.6 45.7 45.8 45.9 ... % 46.0 46.1]; frequency_1MHz=1e6.*[46.1 46.2 46.3 46.4 46.5 46.6 46.7 46.8 46.9 ... 47.0 47.1 47.2 47.3 47.4 47.5 47.6 47.7 47.8 47.9 ... 48.0 48.1 48.2 48.3 48.4 48.5 48.6 48.7 48.8 48.9 ... 49.0 49.1 49.2 49.3 49.4 49.5 49.6 49.7 49.8 49.9 ... 50.0 50.1 50.2 50.3 50.4 50.5 50.6 50.7 50.8 50.9 ... 51.0 51.1 51.2 51.3 51.4]; %frequency_1MHz=1e6.*[51.4 51.5 51.6 51.7 51.8 51.9 ... % 52.0 52.1 52.2 52.3 52.4 52.5 52.6 52.7 52.8 52.9 ... % 53.0 53.1 53.2 53.3 53.4 53.5 53.6 53.7 53.8 53.9 ... % 54.0 54.1 54.2 54.3 54.4 54.5 54.6 54.7 54.8 54.9 ... % 55.0 55.1 55.2 55.3 55.4 55.5 55.6 55.7 55.8 55.9 ... % 56.0 56.1 56.2 56.3 56.4 56.5 56.6 56.7 56.8 56.9 ... % 57.0 57.1 57.2]; %frequency_1MHz=1e6.*[71.0 71.1 71.2 71.3 71.4 71.5 71.6 71.7 71.8 71.9 ... % 72.0 72.1 72.2 72.3 72.4 72.5 72.6 72.7 72.8 72.9 ... % 73.0 73.1 73.2 73.3 73.4 73.5 73.6 73.7 73.8 73.9 ... % 74.0 74.1 74.2 74.3 74.4 74.5 74.6 74.7 74.8 74.9 ... % 75.0 75.1 75.2 75.3 75.4 75.5 75.6 75.7 75.8 75.9 ... % 76.0 76.1 76.2 76.3 76.4 76.5 76.6 76.7 76.8 76.9 ... % 77.0 77.1 77.2 77.3 77.4 77.5 77.6 77.7 77.8 77.9 ... % 78.0 78.1 78.2 78.3 78.4 78.5 78.6 78.7 78.8 78.9 ... % 79.0]; num_of_point=length(frequency_1MHz); %用于计算的频率点的数目 %num_basic_element=repmat(Chrom(:,1),1,num_of_point); %w=2*pi*frequency_1MHz(1:num_of_point); %A=zeros(num_of_individual,num_integer-1); %B=zeros(num_of_individual,num_integer-1); %C=zeros(num_of_individual,num_integer-1); %D=zeros(num_of_individual,num_integer-1); [A_1,B_1,C_1,D_1]=ABCD_5_1(); [A_2,B_2,C_2,D_2]=ABCD_5_2(); ABCD=zeros(2,2,num_of_individual,num_of_point); %预先给ABCD矩阵分配内存空间 parfor f=1:num_of_point %频率点循环 w=2*pi*frequency_1MHz(f); % ABCD(:,:,:,f)=reshape(repmat([1 0;0 1],1,num_of_individual),2,2,num_of_individual); ChromCopy=Chrom; num_structure=1:num_integer; %单元结构的标号 column_of_compoment=num_integer+1:num_integer+(num_integer-1)*num_parameter; %代表元件值的基因所在列的列标号 在parfor内赋值,是临时变量,可提高parfor的通信速度 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]; ABCD(:,:,k,f)=[A_1(f) B_1(f);C_1(f) D_1(f)]; for m=2:ChromCopy(k,1)+1 increment=(m-2)*num_parameter; QL=100; QL1=50 QC=2000; L1=ChromCopy(k,column_of_compoment(1+increment))*1e-9; ESR_L1=w*L1/QL1; C1=ChromCopy(k,column_of_compoment(2+increment))*1e-12; ESR_C1=1/(w*C1*QC); L2=ChromCopy(k,column_of_compoment(3+increment))*1e-9; ESR_L2=w*L2/QL; C2=ChromCopy(k,column_of_compoment(4+increment))*1e-12; ESR_C2=1/(w*C2*QC); L3=ChromCopy(k,column_of_compoment(5+increment))*1e-9; ESR_L3=w*L3/QL; C3=ChromCopy(k,column_of_compoment(6+increment))*1e-12; ESR_C3=1/(w*C3*QC); L4=ChromCopy(k,column_of_compoment(7+increment))*1e-9; ESR_L4=w*L4/QL; C4=ChromCopy(k,column_of_compoment(8+increment))*1e-12; ESR_C4=1/(w*C4*QC); L5=ChromCopy(k,column_of_compoment(9+increment))*1e-9; ESR_L5=w*L5/QL; C5=ChromCopy(k,column_of_compoment(10+increment))*1e-12; ESR_C5=1/(w*C5*QC); L6=ChromCopy(k,column_of_compoment(11+increment))*1e-9; ESR_L6=w*L6/QL; C6=ChromCopy(k,column_of_compoment(12+increment))*1e-12; ESR_C6=1/(w*C6*QC); L7=ChromCopy(k,column_of_compoment(13+increment))*1e-9; ESR_L7=w*L7/QL; C7=ChromCopy(k,column_of_compoment(14+increment))*1e-12; ESR_C7=1/(w*C7*QC); R=ChromCopy(k,column_of_compoment(15+increment)); switch Chrom(k,num_structure(m)) %判断单元电路的结构 case 1 %1代表串联L A=1; B=1i*w*L1+ESR_L1; C=0; D=1; case 2 %2代表串联C A=1; B=1/(1i*w*C1)+ESR_C1; C=0; D=1; case 3 %3代表并联的L A=1; B=0; C=1/(1i*w*L1+ESR_L1); D=1; case 4 %4代表并联的C A=1; B=0; C=1/(1/(1i*w*C1)+ESR_C1); D=1; % case 5 %5代表串联的串联LC % A=1; % B=1i*w*L1+ESR_L1+1/(1i*w*C1)+ESR_C1; % C=0; % D=1; % case 6 %6代表串联的并联LC % A=1; % B=1/(1i*w*L1+ESR_L1)+1/(1/(1i*w*C1)+ESR_C1)); % C=0; % D=1; % case 7 %7代表并联的串联LC % A=1; % B=0; % C=1/(1i*w*L1+ESR_L1+1/(1i*w*C1)+ESR_C1); % D=1; % case 8 %8代表并联的并联LC % A=1; % B=0; % C=1/(1i*w*L1+ESR_L1)+1/(1/(1i*w*C1)+ESR_C1); % D=1; % case 5 % ABCD1=[1 R;0 1]*(([1 1i*w*L1+ESR_L1;0 1]*[1 0;1/(1/(1i*w*C1)+ESR_C1) 1])^n1)*(([1 1i*w*L2+ESR_L2;0 1]*[1 0;1/(1/(1i*w*C2)+ESR_C2) 1])^n2); % Zin=ABCD1(1,1)/ABCD1(2,1); % A=1; % B=0; % C=1/Zin; % D=1; % case 6 % ABCD1=[1 R;0 1]*(([1 1i*w*L1+ESR_L1;0 1]*[1 0;1/(1/(1i*w*C1)+ESR_C1) 1])^n1)*(([1 1i*w*L2+ESR_L2;0 1]*[1 0;1/(1/(1i*w*C2)+ESR_C2) 1])^n2)*(([1 1i*w*L3+ESR_L3;0 1]*[1 0;1/(1/(1i*w*C3)+ESR_C3) 1])^n3); % Zin=ABCD1(1,1)/ABCD1(2,1); % A=1; % B=0; % C=1/Zin; % D=1; % case 7 % ABCD1=[1 R;0 1]*(([1 1i*w*L1+ESR_L1;0 1]*[1 0;1/(1/(1i*w*C1)+ESR_C1) 1])^n1)*(([1 1i*w*L2+ESR_L2;0 1]*[1 0;1/(1/(1i*w*C2)+ESR_C2) 1])^n2)*(([1 1i*w*L3+ESR_L3;0 1]*[1 0;1/(1/(1i*w*C3)+ESR_C3) 1])^n3)*(([1 1i*w*L4+ESR_L4;0 1]*[1 0;1/(1/(1i*w*C4)+ESR_C4) 1])^n4); % Zin=ABCD1(1,1)/ABCD1(2,1); % A=1; % B=0; % C=1/Zin; % D=1; case 5 ABCD1=[1 R;0 1]*(([1 1i*w*L2+ESR_L2;0 1]*[1 0;1/(1/(1i*w*C2)+ESR_C2) 1]))*(([1 1i*w*L3+ESR_L3;0 1]*[1 0;1/(1/(1i*w*C3)+ESR_C3) 1]))*(([1 1i*w*L4+ESR_L4;0 1]*[1 0;1/(1/(1i*w*C4)+ESR_C4) 1])); Zin=ABCD1(1,1)/ABCD1(2,1); A=1; B=0; C=1/Zin; D=1; case 6 ABCD1=[1 R;0 1]*(([1 1i*w*L2+ESR_L2;0 1]*[1 0;1/(1/(1i*w*C2)+ESR_C2) 1]))*(([1 1i*w*L3+ESR_L3;0 1]*[1 0;1/(1/(1i*w*C3)+ESR_C3) 1]))*(([1 1i*w*L4+ESR_L4;0 1]*[1 0;1/(1/(1i*w*C4)+ESR_C4) 1]))*(([1 1i*w*L5+ESR_L5;0 1]*[1 0;1/(1/(1i*w*C5)+ESR_C5) 1])); Zin=ABCD1(1,1)/ABCD1(2,1); A=1; B=0; C=1/Zin; D=1; case 7 ABCD1=[1 R;0 1]*(([1 1i*w*L2+ESR_L2;0 1]*[1 0;1/(1/(1i*w*C2)+ESR_C2) 1]))*(([1 1i*w*L3+ESR_L3;0 1]*[1 0;1/(1/(1i*w*C3)+ESR_C3) 1]))*(([1 1i*w*L4+ESR_L4;0 1]*[1 0;1/(1/(1i*w*C4)+ESR_C4) 1]))*(([1 1i*w*L5+ESR_L5;0 1]*[1 0;1/(1/(1i*w*C5)+ESR_C5) 1]))*(([1 1i*w*L6+ESR_L6;0 1]*[1 0;1/(1/(1i*w*C6)+ESR_C6) 1])); Zin=ABCD1(1,1)/ABCD1(2,1); A=1; B=0; C=1/Zin; D=1; case 8 ABCD1=[1 R;0 1]*(([1 1i*w*L2+ESR_L2;0 1]*[1 0;1/(1/(1i*w*C2)+ESR_C2) 1]))*(([1 1i*w*L3+ESR_L3;0 1]*[1 0;1/(1/(1i*w*C3)+ESR_C3) 1]))*(([1 1i*w*L4+ESR_L4;0 1]*[1 0;1/(1/(1i*w*C4)+ESR_C4) 1]))*(([1 1i*w*L5+ESR_L5;0 1]*[1 0;1/(1/(1i*w*C5)+ESR_C5) 1]))*(([1 1i*w*L6+ESR_L6;0 1]*[1 0;1/(1/(1i*w*C6)+ESR_C6) 1]))*(([1 1i*w*L7+ESR_L7;0 1]*[1 0;1/(1/(1i*w*C7)+ESR_C7) 1])); Zin=ABCD1(1,1)/ABCD1(2,1); A=1; B=0; C=1/Zin; D=1; end ABCD(:,:,k,f)=ABCD(:,:,k,f)*[A B;C D]; end ABCD(:,:,k,f)=ABCD(:,:,k,f)*[A_2(f) B_2(f);C_2(f) D_2(f)]; 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); RS=50; XS=0; RL=50; XL=0; ZS=RS+1i*XS; ZL=RL+1i*XL; for f=1:num_of_point 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); S21_passband_delta=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 % y=-[-5.65000000000000;-3.79200000000000;-2.87100000000000;-2.20100000000000;-1.75400000000000;-1.52700000000000;-1.38000000000000;-1.31900000000000;-1.25900000000000;-1.20000000000000;-1.13300000000000;-1.07500000000000;-1.02700000000000;-0.985000000000000;-0.951000000000000;-0.913000000000000;-0.885000000000000;-0.871000000000000;-0.848000000000000;-0.850000000000000;-0.859000000000000;-0.872000000000000;-0.902000000000000;-0.914000000000000;-0.909000000000000;-0.917000000000000;-0.899000000000000;-0.900000000000000;-0.885000000000000;-0.905000000000000;-0.929000000000000;-1.00300000000000;-1.05900000000000;-1.12700000000000;-1.21500000000000;-1.35400000000000;-1.66500000000000;-2.45300000000000;-4.41400000000000]; % y=max(y)-y+1; % S21_all_cor(:,k)=S21_all(:,k)-y; % S21_passband_max(k)=max(S21_all(:,k)); %通带的最大插损 % S21_passband_min(k)=min(S21_all(:,k)); S21_passband_delta(k)=max(S21_all(:,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); % max_difference_S21=max(abs(S21_all_cor(:,k))); % max_difference_VSWR=VSWR1_max(k)-1+VSWR2_max(k)-1; % ObjV(k,1)=max_difference_S21+max_difference_VSWR; % ObjV(k,1)=ObjV(k,1)+sum((S21_all(:,k)-9).^2)+sum((VSWR1(:,k)-1).^2)+sum((VSWR2(:,k)-1).^2); if max(S21_all(:,k))>28 S21_delta=abs(max(S21_all(:,k))-24)+abs(24-min(S21_all(:,k))); else S21_delta=max(S21_all(:,k))-min(S21_all(:,k)); end max_VSWR1=max(VSWR1(:,k)); ObjV(k,1)=S21_delta+max_VSWR1;%+abs((min(S21_all(:,k))+max(S21_all(:,k)))/2-23); if (S21_delta>6.5)||(max_VSWR1>2) ObjV(k,1)=ObjV(k,1)+70; else if (S21_delta>6)||(max_VSWR1>2) ObjV(k,1)=ObjV(k,1)+60; else if (S21_delta>5.5)||(max_VSWR1>1.9) ObjV(k,1)=ObjV(k,1)+50; else if (S21_delta>5)||(max_VSWR1>1.9) ObjV(k,1)=ObjV(k,1)+40; else if (S21_delta>4.5)||(max_VSWR1>1.8) ObjV(k,1)=ObjV(k,1)+30; else if (S21_delta>4.0)||(max_VSWR1>1.8) ObjV(k,1)=ObjV(k,1)+20; else if (S21_delta>3.5)||(max_VSWR1>1.7) ObjV(k,1)=ObjV(k,1)+10; end end end end end end end % if ObjV(k,1)<20 % ObjV(k,1)=max(abs(S21_all(:,k)-y))+sum((VSWR1(:,k)-1).^2)+sum((VSWR2(:,k)-1).^2); % end % 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); end end