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