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