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

    function [S21_Difference] = bandpassS21_test5(Chrom,num_integer,num_parameter,gen)
%UNTITLED3 此处显示有关此函数的摘要
%   此处显示详细说明

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,~]=size(Chrom);                       %提取出种群的个体数目和变量数

%frequency_1GHz=[1.9 1.92 1.94 1.96 1.98 2 2.02 2.04 2.06 2.08 2.1 ...
%0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 ...
%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];   %设置需要计算的频率点
frequency_10GHz=0.1.*[1.80 1.82 1.84 1.86 1.88 1.90 1.92 1.94 1.96 1.98 2.00 2.02 2.04 2.06 2.08 2.10 ...
3.30 3.32 3.34 3.36 3.38 3.40 3.42 3.44 3.46 3.48 3.50 3.52 3.54 3.56 3.58 3.60 ...
5.45 5.50 5.55 5.60 5.65 5.70 5.75 5.80 5.85 5.90 5.95 ...
0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 ...
2.40 2.45 2.50 2.55 2.60 2.65 2.70 2.75 2.80 2.85 2.90 2.95 3.00 ...
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 ...
6.3 6.4 6.5 6.6 6.7 6.8 6.9 7.0 7.1];
expectations_of_S21=crtbase([43 50],[0 60])';

num_of_point=length(frequency_10GHz);               %用于计算的频率点的数目
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矩阵分配内存空间,共包括num_integer个单元结构
    for m=1:num_integer
      increment=(m-1)*num_parameter;
      Z01=Chrom(k,column_of_compoment(1+increment));
      electrical_length1=Chrom(k,column_of_compoment(2+increment))/360*2*pi*frequency_10GHz(f);
      Z02=Chrom(k,column_of_compoment(3+increment));
      electrical_length2=Chrom(k,column_of_compoment(4+increment))/360*2*pi*frequency_10GHz(f);
      w=(Chrom(k,column_of_compoment(1+increment))-32)/(147-32)*(4-0.2)+0.2;
      s=(Chrom(k,column_of_compoment(3+increment))-32)/(147-32)*(2-0.2)+0.2;
      couple_electrical_length=electrical_length1;
      switch Chrom(k,num_structure(m))         %判断单元电路的结构
        case 0                     %0代表空单元
          A=1;
          B=0;
          C=0;
          D=1;     
        case 1                     %1代表传输线
          A=cos(electrical_length1);
          B=1i*Z01*sin(electrical_length1);
          C=1i*sin(electrical_length1)/Z01;
          D=cos(electrical_length1);
        case 2                     %2代表开路并联传输线
          A=1;
          B=0;
          C=1i*tan(electrical_length1)/Z01;
          D=1;          
        case 3                     %3代表短路并联传输线
          A=1;
          B=0;
          C=1/(1i*Z01*tan(electrical_length1));
          D=1; 
        case 4                     %4代表两段的开路并联传输线
          A=1;
          B=0;
          C=1i*(Z02*tan(electrical_length1)+Z01*tan(electrical_length2))/(Z02*(Z01-Z02*tan(electrical_length1)*tan(electrical_length2)));
          D=1; 
        case 5                    %5代表两段的短路并联传输线
          A=1;
          B=0;
          C=(Z02-Z01*tan(electrical_length1)*tan(electrical_length2))/(1i*Z02*(Z01*tan(electrical_length1)+Z02*tan(electrical_length2)));
          D=1; 
        case 6                    %6代表
          x=[w;s];
          y=Odd_even_mode_impedance_calculation(x);
          Z0e=y(1);
          Z0o=y(2);
          Z11=-1i*(Z0e+Z0o)/2*cot(couple_electrical_length);
          Z12=-1i*(Z0e-Z0o)/2*csc(couple_electrical_length);
          Z21=Z12;
          Z22=Z11;
          ZZ=Z11*Z22-Z12*Z21;
          A=Z11/Z21;
          B=ZZ/Z21;
          C=1/Z21;
          D=Z22/Z21; 
        case 7                    %7代表
          x=[w;s];
          y=Odd_even_mode_impedance_calculation(x);
          Z0e=y(1);
          Z0o=y(2);
          Z11=-1i*(Z0e+Z0o)/2*cot(couple_electrical_length);
          Z12=-1i*(Z0e-Z0o)/2*cot(couple_electrical_length);
          Z21=Z12;
          Z22=Z11;
          ZZ=Z11*Z22-Z12*Z21;
          A=Z11/Z21;
          B=ZZ/Z21;
          C=1/Z21;
          D=Z22/Z21;
        case 8                     %8代表传输线
          A1=cos(electrical_length1);
          B1=1i*Z01*sin(electrical_length1);
          C1=1i*sin(electrical_length1)/Z01;
          D1=cos(electrical_length1);
          A2=cos(electrical_length2);
          B2=1i*Z02*sin(electrical_length2);
          C2=1i*sin(electrical_length2)/Z02;
          D2=cos(electrical_length2);
          ABCD1=[A1 B1;C1 D1];
          ABCD2=[A2 B2;C2 D2];
          ABCD_=ABCD1*ABCD2*ABCD1;
          A=ABCD_(1,1);
          B=ABCD_(1,2);
          C=ABCD_(2,1);
          D=ABCD_(2,2);
          Y11=D/B;
          Y12=(B*C-A*D)/B;
          Y21=-1/B;
          Y22=A/B;
          Y11=2*Y11;
          Y12=2*Y12;
          Y21=2*Y21;
          Y22=2*Y22;
          A=-Y22/Y21;
          B=-1/Y21;
          C=-(Y11*Y22-Y12*Y21)/Y21;
          D=-Y11/Y21;
      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);
polar_point=zeros(num_of_point,num_of_individual);
zero_point=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
if f<44
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
if (f==58)||(f==59)||(f==71)||(f==72)||(f==84)||(f==85)
    zero_point(f,:)=40*log10(abs(squeeze(ABCD(1,1,:,f)).*squeeze(ABCD(2,2,:,f))-squeeze(ABCD(1,2,:,f)).*squeeze(ABCD(2,1,:,f))));
end
end
S21_Difference=zeros(num_of_individual,1);
S21_passband=zeros(1,num_of_individual);
S21_stopband=zeros(1,num_of_individual);
for k=1:num_of_individual
S21_passband(k)=max(S21_all(1:43,k));       %通带的最大插损
S21_stopband(k)=min(S21_all(44:num_of_point,k));    %阻带的最小抑制
m=0.8;
S21_Difference(k,1)=S21_passband(k)-S21_stopband(k);
%S21_Difference(k,1)=S21_passband(k)-S21_stopband(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:11,k)-expectations_of_S21(1:11)).^2)+0.1*sum((S21_all(12:num_of_point,k)-expectations_of_S21(12:num_of_point)).^2);%+sum((S21_all(27:28,k)-expectations_of_S21(27:28)).^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);
%if (gen>99)&&(rem(gen,10)==0)
%    if S21_passband(k)>3
%          m=m+0.1;
%    else  if  S21_stopband(k)<30
%                 m=m-0.1;
%          end
%    end
%end

%     for f=1:43
%          if  S21_all(f,k)>3
%                S21_Difference(k,1)=S21_Difference(k,1)+15*m*(S21_all(f,k)-expectations_of_S21(f)).^2;
%          else  S21_Difference(k,1)=S21_Difference(k,1)+m*(S21_all(f,k)-expectations_of_S21(f)).^2;
%          end
%          if (f==4)||(f==7)||(f==10)||(f==13)||(f==20)||(f==23)||(f==26)||(f==29)||(f==35)||(f==38)||(f==41)||(f==4)
%          if  S11_all(f,k)<20
%              S21_Difference(k,1)=S21_Difference(k,1)+5*m*(S11_all(f,k)-20).^2;
%          else S21_Difference(k,1)=S21_Difference(k,1);
%          end
%          if polar_point(f,k)>-50
%              S21_Difference(k,1)=S21_Difference(k,1)+polar_point(f,k);
%          else S21_Difference(k,1)=S21_Difference(k,1)-50;
%          end
%          else if S11_all(f,k)<15
%                  S21_Difference(k,1)=S21_Difference(k,1)+5*m*(S11_all(f,k)-15).^2;
%              else S21_Difference(k,1)=S21_Difference(k,1);
%              end
%          end
%     end

%     for f=44: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
 %         if zero_point(f,k)<-500
 %             S21_Difference(k,1)=S21_Difference(k,1)-500;
 %         else S21_Difference(k,1)=S21_Difference(k,1)+zero_point(f,k);
 %         end

 %    end
 %    for f=[58 59 71 72 84 85]
 %        S21_Difference(k,1)=S21_Difference(k,1)-S21_all(f,k)^2;
 %    end
end
end