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

    function S21_Difference = bandpassS21_test3(Chrom)
%UNTITLED3 此处显示有关此函数的摘要
%   此处显示详细说明
ChromCopy=Chrom+1;    %复制矩阵

%column_of_compoment=[11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30];                             %代表元件值的基因所在列的列标号
column_of_compoment=[6 7 8 9 10 11 12 13 14 15];                             %代表元件值的基因所在列的列标号
num_of_component=length(column_of_compoment);             %元件的个数
%num_structure=[1 2 3 4 5 6 7 8 9 10];                        %单元结构的标号
num_structure=[1 2 3 4 5];                        %单元结构的标号
ChromCopy(:,column_of_compoment)=ChromCopy(:,column_of_compoment)/10;      %元件值范围为【0.1 250】,精度为0.1
[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=[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 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100];   %设置需要计算的频率点
%expectations_of_S21=crtbase([11 71],[0 30])';
expectations_of_S21=[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]';
%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       %个体循环
    structure=zeros(2,2,num_of_component/2);       %预先给structure矩阵分配内存空间,共包括5个单元结构
%    num_structure=[1 2 3 4 5 6 7 8 9 10];                        %单元结构的标号
    for i=1:2:num_of_component
      switch ChromCopy(k,num_structure((i+1)/2))         %判断单元电路的结构
        case 1                     %1代表空单元
          structure(:,:,(i+1)/2)=[1 0;0 1];    
        case 2                     %2代表串联L
          structure(:,:,(i+1)/2)=[1 2*pi*frequency_10MHz(f)*1e7*ChromCopy(k,column_of_compoment(i))*1e-9*1i;0 1];
        case 3                     %3代表串联C
          structure(:,:,(i+1)/2)=[1 1/(2*pi*frequency_10MHz(f)*1e7*ChromCopy(k,column_of_compoment(i))*1e-12*1i);0 1];
        case 4                     %4代表并联L
          structure(:,:,(i+1)/2)=[1 0;1/(2*pi*frequency_10MHz(f)*1e7*ChromCopy(k,column_of_compoment(i))*1e-9*1i) 1];
        case 5                     %5代表并联C
          structure(:,:,(i+1)/2)=[1 0;2*pi*frequency_10MHz(f)*1e7*ChromCopy(k,column_of_compoment(i))*1e-12*1i 1];
        case 6                    %6代表串联的串联LC
          structure(:,:,(i+1)/2)=[1 2*pi*frequency_10MHz(f)*1e7*ChromCopy(k,column_of_compoment(i))*1e-9*1i+1/(2*pi*frequency_10MHz(f)*1e7*ChromCopy(k,column_of_compoment(i+1))*1e-12*1i);0 1];
        case 7                    %7代表串联的并联LC
          structure(:,:,(i+1)/2)=[1 1/(2*pi*frequency_10MHz(f)*1e7*ChromCopy(k,column_of_compoment(i+1))*1e-12*1i+1/(2*pi*frequency_10MHz(f)*1e7*ChromCopy(k,column_of_compoment(i))*1e-9*1i));0 1];
        case 8                    %8代表并联的串联LC
          structure(:,:,(i+1)/2)=[1 0;1/(2*pi*frequency_10MHz(f)*1e7*ChromCopy(k,column_of_compoment(i))*1e-9*1i+1/(2*pi*frequency_10MHz(f)*1e7*ChromCopy(k,column_of_compoment(i+1))*1e-12*1i)) 1];
        case 9                    %9代表并联的并联LC
          structure(:,:,(i+1)/2)=[1 0;2*pi*frequency_10MHz(f)*1e7*ChromCopy(k,column_of_compoment(i+1))*1e-12*1i+1/(2*pi*frequency_10MHz(f)*1e7*ChromCopy(k,column_of_compoment(i))*1e-9*1i) 1];
 %       case 10                   %10代表变压器
 %         structure(:,:,(i+1)/2)=[ChromCopy(k,column_of_compoment(i)) 0;0 1/(ChromCopy(k,column_of_compoment(i)))];
      end
    end
    ABCD(:,:,k,f)=structure(:,:,1)*structure(:,:,2)*structure(:,:,3)*structure(:,:,4)*structure(:,:,5);%*structure(:,:,6)*structure(:,:,7)*structure(:,:,8)*structure(:,:,9)*structure(:,:,10);
  end
end
S21_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
end
S21_passband=zeros(num_of_individual,1);
S21_stopband=zeros(num_of_individual,1);
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));
%    if S21_passband(k)>=1                     %惩罚措施
%        S21_passband(k)=S21_passband(k)*10;
%    end
%    if S21_stopband(k)<=15                     %惩罚措施
%       S21_stopband(k)=S21_stopband(k)/10;
%    end
%    S21_Difference(k)=S21_passband(k)-S21_stopband(k);
%end

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)=sum((S21_all(1:11,k)-expectations_of_S21(1:11)).^2)+10*(S21_passband(k)-S21_stopband(k));
end
end