⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 transform.m

📁 数字信号处理_matlab实现程序,上面有全套的实验代码
💻 M
字号:
% 《数字信号处理教程——MATLAB释义与实现》第八章模拟滤波器频带变换演示程序的子程序
% 电子工业出版社出版  陈怀琛编著 2004年9月
% 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 + -