登 录
註 冊
论坛
微波仿真网
注册
登录论坛可查看更多信息
微波仿真论坛
>
Matlab学习组
>
Matlab代码:N+2阶耦合矩阵的综合与分析
发帖
回复
1
2
8571
阅读
13
回复
Matlab代码:N+2阶耦合矩阵的综合与分析
离线
yellowbook
UID :125906
注册:
2017-12-28
登录:
2019-09-03
发帖:
29
等级:
仿真新人
0楼
发表于: 2019-08-30 11:53:16
关键词:
综合
分析
-1R~3j1_
%广义切比雪夫滤波器N+2阶耦合矩阵综合计算程序
-1R~3j1_
%2019/08/30/@No One
-1R~3j1_
%参考文献:
-1R~3j1_
%1.Microwave Filters for Communication Systems Fundamentals, Design, and Applications 2nd
-1R~3j1_
%2.General coupling matrix synthesis methods for Chebyshev filtering functions
-1R~3j1_
%3.Advanced Coupling Matrix Synthesis Techniques for Microwave Filters
-1R~3j1_
%4.Adaptive Synthesis and Design of Resonator Filters With Source/Load-Multiresonator Coupling
-1R~3j1_
%!!!含有耦合矩阵Floder结构及全规范结构,小于三阶的全规范滤波函数综合时会出错,阶数过高(大于20)也可能会出错
-1R~3j1_
%有耗会导致回波损耗升高?2019/06/06,群时延计算错误
-1R~3j1_
clc;
-1R~3j1_
clear all;
-1R~3j1_
-1R~3j1_
% eg1:
-1R~3j1_
% n=4;
-1R~3j1_
% S=[-3.7431j,-1.8051j,1.5699j,6.1910j];
-1R~3j1_
% RL=22;
-1R~3j1_
-1R~3j1_
% eg2:
-1R~3j1_
% n=4;
-1R~3j1_
% S=[1.3217j,1.8082j];
-1R~3j1_
% RL=22;
-1R~3j1_
-1R~3j1_
% eg3:
-1R~3j1_
% n=7;
-1R~3j1_
% S=[1.3958j,-1.3958j,1.0749,-1.0749];
-1R~3j1_
% RL=23;
-1R~3j1_
-1R~3j1_
% n=input('输入滤波器阶数\nn=') %滤波器的阶数
-1R~3j1_
% S=input('输入有限位置传输零点\nTz=') %有限位置传输零点位置,以向量形式输入归一化低通原型频率对应的传输零点,eg:S=[2j,-2j]
-1R~3j1_
% RL=input('输入带内回波损耗\nRL=') %带内回波损耗的最小值,与波纹系数有关
-1R~3j1_
% Start=input('起始频率\nStart Freq=') %MHz
-1R~3j1_
% Stop=input('终止频率\nStop Freq=') %MHz
-1R~3j1_
% Q=input('谐振器无载Q值\nQu=')
-1R~3j1_
% Fstr=input('输入显示起始频率\nFstr=') %MHz
-1R~3j1_
% Fsto=input('输入显示截至频率\nFsto=') %MHz
-1R~3j1_
-1R~3j1_
n=4;
-1R~3j1_
S=[];
-1R~3j1_
RL=20;
-1R~3j1_
Start=3400;
-1R~3j1_
Stop=3600;
-1R~3j1_
Q=800;
-1R~3j1_
-1R~3j1_
Fstr=3000;
-1R~3j1_
Fsto=4000;
-1R~3j1_
-1R~3j1_
BW=Stop-Start;
-1R~3j1_
CF=sqrt(Start*Stop);
-1R~3j1_
FBW=BW/CF;
-1R~3j1_
-1R~3j1_
w=S*-1i;%复频率转化至实频率
-1R~3j1_
-1R~3j1_
%第一步:广义切比雪夫函数综合
-1R~3j1_
%根据有限位置传输零点确定特征多项式P(s)/P(w)
-1R~3j1_
P=1;
-1R~3j1_
for k=1:length(w)
-1R~3j1_
P=conv(P,[1,-w(1,k)]);
-1R~3j1_
end
-1R~3j1_
P1=P.*1i.^[0:1:length(w)];
-1R~3j1_
if mod((n-length(w)),2)==0
-1R~3j1_
P1=P1.*1i;
-1R~3j1_
end
-1R~3j1_
%P(s)/P(w)综合结束
-1R~3j1_
-1R~3j1_
%根据广义切比雪夫滤波函数以及P确定特征多项式F(s)/F(w)
-1R~3j1_
w=[w,inf(1,n-length(w))];
-1R~3j1_
U1=[1,-1/w(1,1)];
-1R~3j1_
V1=[sqrt(1-1/(w(1,1)*w(1,1)))];
-1R~3j1_
U2=U1;
-1R~3j1_
V2=V1;
-1R~3j1_
for k=2:n
-1R~3j1_
U2=conv(U1,[1,-1/w(1,k)])+conv([1,0,-1],V1.*sqrt(1-1/(w(1,k)*w(1,k))));
-1R~3j1_
V2=conv(V1,[1,-1/w(1,k)])+U1.*sqrt(1-1/(w(1,k)*w(1,k)));
-1R~3j1_
U1=U2;
-1R~3j1_
V1=V2;
-1R~3j1_
end
-1R~3j1_
F=U1./(U1(1,1));
-1R~3j1_
V=V1./(V1(1,1));
-1R~3j1_
V1=V.*1i.^[0:1:length(V)-1];
-1R~3j1_
F1=F.*1i.^[0:1:n];
X#o:-FKf
%F(s)/F(w)综合结束
X#o:-FKf
X#o:-FKf
%根据能量守恒公式以及P、F确定特征多项式E(s)/E(w)
X#o:-FKf
P2=conv(P,P);
X#o:-FKf
F2=conv(F,F);
X#o:-FKf
P2=[zeros(1,length(F2)-length(P2)),P2];
X#o:-FKf
ep=1/sqrt(10^(RL/10)-1)*abs(polyval(P,1)/polyval(F,1));
X#o:-FKf
X#o:-FKf
if length(S)==n
X#o:-FKf
epr=ep/sqrt(ep*ep-1);
X#o:-FKf
else
X#o:-FKf
epr=1;
X#o:-FKf
end
X#o:-FKf
E2=P2./(ep*ep)+F2./(epr*epr);
X#o:-FKf
RootE=roots(E2);
X#o:-FKf
leftRootE=find(imag(RootE)>0);
X#o:-FKf
RootE=RootE(leftRootE);
X#o:-FKf
E=poly(RootE);
X#o:-FKf
E1=E.*1i.^[0:1:n];
X#o:-FKf
%E(s)/E(w)综合结束
X#o:-FKf
X#o:-FKf
for k=1:1000
X#o:-FKf
d(k)=-8+16/1000*k;
X#o:-FKf
r(k)=polyval(F,d(k))/polyval(E,d(k))/epr;
X#o:-FKf
t(k)=polyval(P,d(k))/polyval(E,d(k))/ep;
X#o:-FKf
end
X#o:-FKf
X#o:-FKf
figure('name','无耗综合结果');
X#o:-FKf
subplot(2,3,1);
X#o:-FKf
I=-20*log10(abs(t));
X#o:-FKf
R=-20*log10(abs(r));
X#o:-FKf
plot(d,I,'b',d,R,'r','LineWidth',1.5);
X#o:-FKf
set(gca,'YDir','reverse');
X#o:-FKf
set(gca,'FontSize',12);
X#o:-FKf
set(gca,'linewidth',1.2);
X#o:-FKf
xlabel('归一化频率(rad/s)');
X#o:-FKf
ylabel('抑制/回波损耗(dB)');
X#o:-FKf
ylim([-2, 50]);
X#o:-FKf
xlim([-8, 8]);
X#o:-FKf
grid on;
X#o:-FKf
title('低通原型幅度响应','fontsize',14);
X#o:-FKf
X#o:-FKf
%F3:反射零点,E3:反射/传输极点,P3:有限位置传输零点,V3:带内反射极大值
X#o:-FKf
F3=roots(F1);
X#o:-FKf
E3=roots(E1);
X#o:-FKf
P3=roots(P1);
X#o:-FKf
V3=roots(V1);
X#o:-FKf
realF=real(F3);
X#o:-FKf
realE=real(E3);
X#o:-FKf
realP=real(P3);
X#o:-FKf
realV=real(V3);
X#o:-FKf
imagF=imag(F3);
X#o:-FKf
imagE=imag(E3);
X#o:-FKf
imagP=imag(P3);
X#o:-FKf
imagV=imag(V3);
X#o:-FKf
subplot(2,3,2);
X#o:-FKf
plot(realF,imagF,'o',realP,imagP,'^','LineWidth',1.5);
X#o:-FKf
axis([-2,2,-8,8]);
X#o:-FKf
xlabel('实部');
X#o:-FKf
ylabel('虚部');
X#o:-FKf
set(gca,'FontSize',12);
X#o:-FKf
set(gca,'linewidth',1.2);
X#o:-FKf
title('反射零点与传输零点','fontsize',14);
X#o:-FKf
grid on;
X#o:-FKf
subplot(2,3,3);
X#o:-FKf
plot(realE,imagE,'s',realV,imagV,'v','LineWidth',1.5);
X#o:-FKf
axis([-2,2,-1.5,1.5]);
X#o:-FKf
xlabel('实部');
X#o:-FKf
ylabel('虚部');
X#o:-FKf
set(gca,'FontSize',12);
X#o:-FKf
set(gca,'linewidth',1.2);
X#o:-FKf
title('传输/反射极点与带内反射极大值点','fontsize',14);
X#o:-FKf
grid on;
X#o:-FKf
X#o:-FKf
%第二步:N+2阶耦合矩阵综合
X#o:-FKf
%由S参数计算导纳多项式
X#o:-FKf
M1=zeros(1,n);
X#o:-FKf
N1=zeros(1,n);
X#o:-FKf
if mod(n,2)==0
X#o:-FKf
for k=n+1:-2:1
X#o:-FKf
M1(1,k)=real(E1(1,k)+F1(1,k));
X#o:-FKf
N1(1,k)=1i*imag(E1(1,k)+F1(1,k));
ke0W?
end
ke0W?
for k=n:-2:2
ke0W?
M1(1,k)=1i*imag(E1(1,k)+F1(1,k));
ke0W?
N1(1,k)=real(E1(1,k)+F1(1,k));
ke0W?
end
ke0W?
lambdaK=roots(M1);
ke0W?
else
ke0W?
for k=n+1:-2:2
ke0W?
M1(1,k)=real(E1(1,k)+F1(1,k));
ke0W?
N1(1,k)=1i*imag(E1(1,k)+F1(1,k));
ke0W?
end
ke0W?
for k=n:-2:1
ke0W?
M1(1,k)=1i*imag(E1(1,k)+F1(1,k));
ke0W?
N1(1,k)=real(E1(1,k)+F1(1,k));
ke0W?
end
ke0W?
lambdaK=roots(N1);
ke0W?
T1=N1;
ke0W?
N1=M1;
ke0W?
M1=T1;
ke0W?
end
ke0W?
ke0W?
%计算MSL
ke0W?
Msl=sqrt((epr-1)/(epr+1));
ke0W?
if Msl==0
ke0W?
MP=P1/ep;
ke0W?
else
ke0W?
MP=P1/ep-1i*Msl*M1;
ke0W?
end
ke0W?
ke0W?
%根据特征值计算留数
ke0W?
for k=1:length(lambdaK)
ke0W?
r22(k)=polyval(N1,lambdaK(k))/polyval(polyder(M1),lambdaK(k));
ke0W?
r21(k)=polyval(MP,lambdaK(k))/polyval(polyder(M1),lambdaK(k));
ke0W?
end
ke0W?
ke0W?
%根据特征值与留数计算N+2阶耦合矩阵
ke0W?
M=zeros(n+2,n+2);
ke0W?
for k=1:n
ke0W?
M(k+1,1)=sqrt(r22(k));
ke0W?
M(1,k+1)=M(k+1,1);
ke0W?
M(k+1,n+2)=r21(k)/M(k+1,1);
ke0W?
M(n+2,k+1)=M(k+1,n+2);
ke0W?
M(k+1,k+1)=lambdaK(k)*1i;
ke0W?
end
ke0W?
M(1,n+2)=Msl;
ke0W?
M(n+2,1)=Msl;
ke0W?
display(real(M));
ke0W?
%N+2阶未化简耦合矩阵计算结束
ke0W?
ke0W?
%第三步:由耦合矩阵计算带通滤波器S参数(N+2阶耦合矩阵的直接分析)
ke0W?
R=zeros(n+2,n+2);
ke0W?
R(1,1)=1;
ke0W?
R(n+2,n+2)=1;
ke0W?
W=eye(n+2,n+2);
ke0W?
W(1,1)=0;
ke0W?
W(n+2,n+2)=0;
ke0W?
for k=1:1000
ke0W?
wp(k)=((Fstr+(Fsto-Fstr)*k/1000)/CF-CF/(Fstr+(Fsto-Fstr)*k/1000))/FBW;
ke0W?
Bd(k)=Fstr+(Fsto-Fstr)*k/1000;
ke0W?
A=R.*(-1i)+W.*wp(k)+real(M);
ke0W?
AP=inv(A);
ke0W?
S21(k)=-2*1i*AP(n+2,1);
ke0W?
S11(k)=1+2*1i*AP(1,1);
ke0W?
end
ke0W?
ke0W?
%画出带通滤波器的图
ke0W?
subplot(2,3,4);
ke0W?
dBS21=-20*log10(abs(S21));
ke0W?
dBS11=-20*log10(abs(S11));
ke0W?
plot(Bd,dBS21,'b',Bd,dBS11,'r','LineWidth',1.5);
ke0W?
set(gca,'YDir','reverse');
ke0W?
set(gca,'FontSize',12);
ke0W?
set(gca,'linewidth',1.2);
ke0W?
xlabel('频率(MHz)');
ke0W?
ylabel('抑制/回波损耗(dB)');
ke0W?
ylim([-2, 50]);
ke0W?
grid on;
ke0W?
title('带通幅度响应','fontsize',14);
ke0W?
subplot(2,3,5);
ke0W?
PS21=angle(S21).*180/pi;
ke0W?
PS11=angle(S11).*180/pi;
ke0W?
plot(Bd,PS21,'b',Bd,PS11,'r','LineWidth',1.5);
ke0W?
set(gca,'FontSize',12);
RCXSz
set(gca,'linewidth',1.2);
RCXSz
ylim([-180,180]);
RCXSz
grid on;
RCXSz
xlabel('频率(MHz)');
RCXSz
ylabel('相位(°)');
RCXSz
title('带通相位响应','fontsize',14);
RCXSz
RCXSz
%滤波器群时延
RCXSz
tao21=-1*diff(PS21)/(1000/2000);%%%%%%
RCXSz
tao21=[tao21,0];
RCXSz
subplot(2,3,6);
RCXSz
plot(Bd,tao21,'.b','LineWidth',1.5);
RCXSz
set(gca,'FontSize',12);
RCXSz
set(gca,'linewidth',1.2);
RCXSz
ylim([-0.5,12]);
RCXSz
grid on;
RCXSz
xlabel('频率(MHz)');
RCXSz
ylabel('群时延(ns)');
RCXSz
title('带通滤波器群时延','fontsize',14);
RCXSz
cursorMode=datacursormode(gcf);
RCXSz
set(cursorMode,'enable','on');
RCXSz
RCXSz
%包含损耗的计算
RCXSz
figure('name','低损耗综合结果');
RCXSz
subplot(1,3,1);
RCXSz
for k=1:1000
RCXSz
wpp(k)=((Fstr+(Fsto-Fstr)*k/1000)/CF-CF/(Fstr+(Fsto-Fstr)*k/1000))/FBW-1i*1/Q/FBW;
RCXSz
Bd(k)=Fstr+(Fsto-Fstr)*k/1000;
RCXSz
Ap=R.*(-1i)+W.*wpp(k)+real(M);
RCXSz
APp=inv(Ap);
RCXSz
S21p(k)=-2*1i*APp(n+2,1);
RCXSz
S11p(k)=1+2*1i*APp(1,1);
RCXSz
end
RCXSz
dBS21p=-20*log10(abs(S21p));
RCXSz
dBS11p=-20*log10(abs(S11p));
RCXSz
plot(Bd,dBS21p,'b',Bd,dBS11p,'r','LineWidth',1.5);
RCXSz
set(gca,'YDir','reverse');
RCXSz
set(gca,'FontSize',12);
RCXSz
set(gca,'linewidth',1.2);
RCXSz
xlabel('频率(MHz)');
RCXSz
ylabel('抑制/回波损耗(dB)');
RCXSz
ylim([-2, 50]);
RCXSz
grid on;
RCXSz
title('带损耗带通幅度响应','fontsize',14);
RCXSz
subplot(1,3,2);
RCXSz
plot(Bd,dBS21,'b',Bd,dBS21p,'r','LineWidth',1.5);
RCXSz
set(gca,'YDir','reverse');
RCXSz
set(gca,'FontSize',12);
RCXSz
set(gca,'linewidth',1.2);
RCXSz
xlabel('频率(MHz)');
RCXSz
ylabel('抑制/回波损耗(dB)');
RCXSz
ylim([0, 1]);
RCXSz
grid on;
RCXSz
title('有/无损耗带通幅度响应对比(窄带)','fontsize',14);
RCXSz
RCXSz
subplot(1,3,3);
RCXSz
plot(Bd,dBS21,'b--',Bd,dBS21p,'r','LineWidth',1.5);
RCXSz
set(gca,'YDir','reverse');
RCXSz
set(gca,'FontSize',12);
RCXSz
set(gca,'linewidth',1.2);
RCXSz
xlabel('频率(MHz)');
RCXSz
ylabel('抑制/回波损耗(dB)');
RCXSz
axis([3000,4000,-2,50]);
RCXSz
grid on;
RCXSz
title('有/无损耗带通幅度响应对比(宽带)','fontsize',14);
RCXSz
cursorMode=datacursormode(gcf);
RCXSz
set(cursorMode,'enable','on');
RCXSz
RCXSz
[NN,N]=size(M);
RCXSz
RCXSz
for i=1:N-3 %有几个数相加
RCXSz
if mod(i,2)==1
RCXSz
c=-1;
RCXSz
for j=1:N-3+1-i
RCXSz
l=N-(i+1)/2-j+1;
RCXSz
n=l-1;
RCXSz
k=(i+1)/2;
RCXSz
m=k;
RCXSz
theta=atan(c*M(k,l)/M(m,n));
RCXSz
R=eye(N);
RCXSz
R(n,n)=cos(theta);
RCXSz
R(l,l)=R(n,n);
RCXSz
R(n,l)=-sin(theta);
RCXSz
R(l,n)=-R(n,l);
RCXSz
& ..
RCXSz
K[LVT]3 n
未注册仅能浏览
部分内容
,查看
全部内容及附件
请先
登录
或
注册
共
条评分
离线
yellowbook
UID :125906
注册:
2017-12-28
登录:
2019-09-03
发帖:
29
等级:
仿真新人
1楼
发表于: 2019-08-30 11:53:55
如有错误,欢迎大家指正,大家相互讨论
共
条评分
离线
yellowbook
UID :125906
注册:
2017-12-28
登录:
2019-09-03
发帖:
29
等级:
仿真新人
2楼
发表于: 2019-08-30 21:58:01
Re:Matlab代码:N+2阶耦合矩阵的综合与分析
标题说明:所谓综合是由响应推得电路结构的过程;所谓分析是由电路结构推得响应的过程。现代滤波器大都使用广义切比雪夫函数为特征函数,也就是我们只需要根据客户所给出的指标,确定滤波器的阶数(反射零点个数)以及有限位置传输零点个数与位置就可以确定唯一滤波器的响应(指S参数)。所谓耦合矩阵的综合就是通过滤波器阶数与有限位置传输零点的信息确定耦合矩阵(CM)的过程,此处利用的是解析的方法,可得到精确解。所谓耦合矩阵的分析就是由耦合矩阵确定其对应的滤波器原型电路结构的响应的过程。
H{j~ihq7
共
条评分
离线
yellowbook
UID :125906
注册:
2017-12-28
登录:
2019-09-03
发帖:
29
等级:
仿真新人
3楼
发表于: 2019-08-30 22:09:19
有关耦合矩阵的拓扑:对N阶耦合矩阵直接综合,首先得出的初始耦合矩阵几乎所有元素都非零(全耦合形式);对于N+2阶耦合矩阵直接综合,首先得出的初始耦合矩阵为全规范形式(横向拓扑)。这些耦合矩阵无法使用物理结构实现,必须将其化简为可实现形式,基站同轴滤波器或介质波导滤波器大都使用CT(三元组)、CQ(四元组)、嵌套结构。由于在对耦合矩阵进行相似变换前后,电路的响应不变,故我们一般使用Givens变化(旋转)对耦合矩阵进行化简,此过程较为复杂,本处仅给出了两种规范拓扑形式的耦合矩阵(横向形式与折叠形式)。
共
条评分
离线
shaka
UID :75349
注册:
2011-04-10
登录:
2023-05-17
发帖:
2899
等级:
八级仿真大师
4楼
发表于: 2019-08-31 12:11:30
mark, thanks for sharing it
共
条评分
离线
tzj2013
UID :133412
注册:
2019-09-02
登录:
2020-01-03
发帖:
5
等级:
旁观者
5楼
发表于: 2019-09-02 14:43:36
好久没用matlab了,看看
共
条评分
离线
慕蓉楚川
UID :97508
注册:
2012-07-28
登录:
2021-01-12
发帖:
152
等级:
仿真二级
6楼
发表于: 2019-10-14 09:26:48
感谢楼主的干货。
共
条评分
离线
zshleee
UID :44937
注册:
2009-10-25
登录:
2021-10-18
发帖:
236
等级:
仿真三级
7楼
发表于: 2020-07-01 22:06:05
很不错,学习!!!
共
条评分
离线
cockwuxh
UID :101656
注册:
2012-11-15
登录:
2020-07-21
发帖:
6
等级:
旁观者
8楼
发表于: 2020-07-21 20:31:19
太有帮助了,感谢
共
条评分
离线
一只独行的1
UID :124920
注册:
2017-08-07
登录:
2022-06-04
发帖:
121
等级:
仿真二级
9楼
发表于: 2020-08-27 10:29:19
共
条评分
发帖
回复