📄 transform.m
字号:
%transform.m 坐标的变换,低通到高通,带通,带阻
function [out]=transform(pl1,f0,omegac,string)
sq=f0^2;
pb=[-fliplr(pl1),pl1(2:length(pl1))];
%omegac=2;%低通滤波器变换到低通滤波器时的扩张系数
if(string == 'lp2lp')
plp1=omegac*pb;
out=plp1;
elseif(string=='lp2hp')
%低通到高通时坐标的对应关系!
for i=1:length(pb)
if i==length(pl1); %在这里当低通滤波器的坐标为零时
a=100; %把高通的坐标作为一个比较大的数处理,如:100
php1(i)=a;
else
a=1/pb(i);
php1(i)=a;
end
end
%php1=fliplr(php1); %这里将从低通对应过来的坐标进行排序
%php1=[php1(length(pl1)+1:length(pb)),php1(1:length(pl1))]; %坐标方向为:从大到小。考虑到绘图时的点点对应,可以注释掉!
out=php1; %对于输出都取正半部分的坐标
%低通到带通时的对应关系!
elseif(string=='lp2bp')
for i=1:length(pb);
a=roots([1,-pb(i),-sq]);
if (i<length(pl1))
pbp1(i)=a(2);
pbp2(i)=a(1);
else
pbp1(i)=a(1);
pbp2(i)=a(2);
end
end
out=pbp1; %对于输出都取正半部分的坐标
%低通到带阻时坐标的对应关系!
else
for i=1:length(pb)
b=roots([pb(i),-1,-sq*pb(i)]);
if(i<length(pl1))
pbs1(i)=b(2);
pbs2(i)=b(1);
elseif (i==length(pl1)) % 当低通滤波器的坐标为零时,
pbs1(i)=b(1); %方程只有一个根
pbs2(i)=b(1);
else
pbs1(i)=b(1);
pbs2(i)=b(2);
end
end
%pbs1=fliplr(pbs1);pbs2=fliplr(pbs2);
%pbs1=[pbs1(length(pl1):length(pb)),pbs1(1:length(pl1)-1)]; %这里进行变换的原因是由于低通滤波器的负半部分对应于上带阻的下部分
%pbs2=[pbs2(length(pl1)+1:length(pb)),pbs2(1:length(pl1))]; %而正半部分对应于上部分,坐标方向为:从大到小。考虑到绘图时的点点对应,可以注释掉!!
out=fliplr(pbs1); %对于输出都取正半部分的坐标
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -