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

    function S21_Difference = bandpassS21_test1(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];                             %代表元件值的基因所在列的列标号
num_of_component=length(column_of_compoment);             %元件的个数
num_structure=[1 2 3 4 5 6 7 8 9 10];                        %单元结构的标号
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];   %设置需要计算的频率点
%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)-0.1*S21_stopband(k);
end

end