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