www.gusucode.com > matlab编程遗传算法计算匹配电路源码程序 > code1/code/MATLAB源代码/bandpassS21_test4.m

    function S21_Difference = bandpassS21_test4(Chrom,num_integer,num_parameter)
%UNTITLED3 此处显示有关此函数的摘要
%   此处显示详细说明
ChromCopy=Chrom;
column_of_compoment=num_integer+1:num_integer+num_integer*num_parameter;                             %代表元件值的基因所在列的列标号
%column_of_compoment=[6 7 8 9 10 11 12 13 14 15];                             %代表元件值的基因所在列的列标号
num_of_component=length(column_of_compoment);             %元件的个数
num_structure=1:num_integer;                        %单元结构的标号
%num_structure=[1 2 3 4 5];                        %单元结构的标号
[num_of_individual,num_of_variable]=size(ChromCopy);                       %提取出种群的个体数目和变量数
%frequency_10MHz=[45 46 47 48 49 50 51 52 53 54 55 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80];   %设置需要计算的频率点
%frequency_10MHz=[44 45 46 47 48 49 50 51 52 53 54 55 56 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100];   %设置需要计算的频率点
frequency_10MHz=1e7.*[45 46 47 48 49 50 51 52 53 54 55 ...
    75 76 77 78 79 80 81 82 83 84 85 ...
    2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 ...
    60 60.5 61 61.5 62 62.5 63 63.5 64 64.5 65 65.5 66 66.5 67 67.5 68 68.5 69 69.5 70 ...
    90 92 94 96 98 100 102 104 106 108 110 112 114 116 118 120 122 124 126 128 130];   %设置需要计算的频率点
expectations_of_S21=crtbase([22 62],[0 60])';
%expectations_of_S21=[0 0 0 0 0 0 0 0 0 0 0 0 0 239 209 191 178 169 161 154 148 142 138 133 129 125 121 117 114 111 108 105 102 99 96 93 90 87 84 81 78 75 72 69 95 92 59 55 43 45 48 50 52 54 56 58 59 61 62 64 65 66 68 69 70 71.5 72.6 73.7 74.7 75.8 76.8 77.7 78.7 79.6 80.5 81.4 82.2 83 83.9 84.6 85.4 86.2 86.9 87.6]';
%expectations_of_S21=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 150 147 144 141 138 135 132 129 126 123 120 117 114 111 108 105 102 99 96 93 90 87 84 81 78 75 72 69 66 63 60 57 54 51 48 45 42 39 36 33 33 38 43 48 53 48 53 48 43 38 33 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156]';
%expectations_of_S11=[20 20 20 20 20 20 20 20 20 20 20]';
%num_of_point=size(frequency_10MHz,2);
num_of_point=length(frequency_10MHz);               %用于计算的频率点的数目
ABCD=zeros(2,2,num_of_individual,num_of_point);    %预先给ABCD矩阵分配内存空间
for f=1:num_of_point              %频率点循环
  for k=1:num_of_individual       %个体循环
    ABCD(:,:,k,f)=eye(2);
    structure=zeros(2,2,num_integer);       %预先给structure矩阵分配内存空间,共包括5个单元结构
%    num_structure=[1 2 3 4 5 6 7 8 9 10];                        %单元结构的标号
    for m=1:num_integer
      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;
      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*2*pi*frequency_10MHz(f)*L;
          C=0;
          D=1;
        case 2                     %2代表串联C
          A=1;
          B=1/(1i*2*pi*frequency_10MHz(f)*C);
          C=0;
          D=1;
        case 3                     %3代表并联L
          A=1;
          B=0;
          C=1/(1i*2*pi*frequency_10MHz(f)*L);
          D=1;
        case 4                     %4代表并联C
          A=1;
          B=0;
          C=1i*2*pi*frequency_10MHz(f)*C;
          D=1;
        case 5                    %5代表串联的串联LC
          A=1;
          B=1i*2*pi*frequency_10MHz(f)*L+1/(1i*2*pi*frequency_10MHz(f)*C);
          C=0;
          D=1;
        case 6                    %6代表串联的并联LC
          A=1;
          B=1/(1/(1i*2*pi*frequency_10MHz(f)*L)+1i*2*pi*frequency_10MHz(f)*C);
          C=0;
          D=1;
        case 7                    %7代表并联的串联LC
          A=1;
          B=0;
          C=1/(1/(1i*2*pi*frequency_10MHz(f)*C)+1i*2*pi*frequency_10MHz(f)*L);
          D=1;
        case 8                    %8代表并联的并联LC
          A=1;
          B=0;
          C=1i*2*pi*frequency_10MHz(f)*C+1/(1i*2*pi*frequency_10MHz(f)*L);
          D=1;
 %       case 9                   %9代表变压器
 %         structure(:,:,(i+1)/2)=[ChromCopy(k,column_of_compoment(i)) 0;0 1/(ChromCopy(k,column_of_compoment(i)))];
      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);
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)))));
end
S21_Difference=zeros(num_of_individual,1);
for k=1:num_of_individual
%S21_passband(k)=max(S21_all(1:11,k));       %第1到第11个频率点代表通带,通带的最大插损
%S21_stopband(k)=min(S21_all(12:num_of_point,k));    %阻带的最小抑制
%S21_Difference(k,1)=10*sum((S21_all(1:13,k)-expectations_of_S21(1:13)).^2)+0.1*sum((S21_all(14:num_of_point,k)-expectations_of_S21(14:num_of_point)).^2)+10*sum((S21_all(48:49,k)-expectations_of_S21(48:49)).^2);%+10*(S21_passband(k)-S21_stopband(k));
%S21_Difference(k,1)=sum((S21_all(1:26,k)-expectations_of_S21(1:26)).^2)+0.01*sum((S21_all(27:num_of_point,k)-expectations_of_S21(27:num_of_point)).^2)+sum((S21_all(66:67,k)-expectations_of_S21(66:67)).^2)+sum((S21_all(77:78,k)-expectations_of_S21(77:78)).^2);
%S21_Difference(k,1)=10*sum((S11_all(1:11,k)-expectations_of_S11(1:11)).^2)+0.1*sum((S21_all(12:num_of_point,k)-expectations_of_S21(12:num_of_point)).^2)+10*sum((S21_all(46:47,k)-expectations_of_S21(46:47)).^2);
     for f=1:22
          if  S21_all(f,k)>3
                S21_Difference(k,1)=S21_Difference(k,1)+10*(S21_all(f,k)-expectations_of_S21(f))^2;
          else  S21_Difference(k,1)=S21_Difference(k,1)+(S21_all(f,k)-expectations_of_S21(f))^2;
          end
     end
     for f=1:22
          if  S11_all(f,k)<15
                S21_Difference(k,1)=S21_Difference(k,1)+5*(S11_all(f,k)-10)^2;
          else  S21_Difference(k,1)=S21_Difference(k,1);
          end
     end
     for f=23:num_of_point
          if  S21_all(f,k)>60
                S21_Difference(k,1)=S21_Difference(k,1);
          else  if  S21_all(f,k)<30
                        S21_Difference(k,1)=S21_Difference(k,1)+(S21_all(f,k)-expectations_of_S21(f))^2;
                else    S21_Difference(k,1)=S21_Difference(k,1)+0.1*(S21_all(f,k)-expectations_of_S21(f))^2;
                end
          end
     end

end
end