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

📄 uf_lp_norm.m

📁 信号实验常用的simulink模型和mfile,可直接在matlan下运行。
💻 M
字号:
function [infostr,paraData]=uf_lp_norm(paraHandle);
% UF_LP_NORM 滤波器设计面向低通原型进行参数归一化
%            输入参数:均为uicontrol对象,分别指向
%              paraHandle(1) - 设计模型(BUTTER/CHEBY)
%              paraHandle(1) - 通带形式(LP/HP/BP/BS)
%              paraHandle(3:8) - 滤波器各项参数
%            输出参量:
%              infostr - 说明信息
%              paraData - 归一化结果
%                  对于BUTTER型,输出3dB带宽、……
%
%                  对于CHEBY型,带宽、……
%
%            axz 1999-11-05

fltModel=get(paraHandle(1),'Value');
fltBtype=get(paraHandle(2),'Value');

infostr = '' ;
order = 0 ;
B = 0;

switch fltBtype,
case 1,         % LP
   fp=str2num(get(paraHandle(3),'String'));   % 通带截止频率
   Ap=str2num(get(paraHandle(4),'String'));   % 通带最大衰减
   fr=str2num(get(paraHandle(5),'String'));   % 阻带最低频率
   Ar=str2num(get(paraHandle(6),'String'));   % 阻带最小衰减
   Ro=str2num(get(paraHandle(7),'String'));   % 基准电阻值
   if fltModel==1 & Ap~=3,
      % 得到满足条件的巴特沃斯低通原型滤波器的最小阶数
      order = ceil( log10( (10 .^ (0.1*abs(Ar)) - 1)./ ...
         (10 .^ (0.1*abs(Ap)) - 1) ) / (2*log10(fr/fp)) );
      % 计算 3dB 频率带宽
      fp = fp / ( (10^(0.1*abs(Ap)) - 1)^(1/(2*order)) );
      Ap = 3;
      infostr=['注:该巴特沃斯低通滤波器的通带技术指标不是3dB带宽,经过换算可得其3dB带宽为' num2str(fp) 'Hz。' char(10)];
   end
   flr_n = fr / fp;
   infostr = [infostr ...
         ' ⑴      _' char(10) ...
         '  根据公式 Ωr=Ωr/Ωc,可得归一化阻带频率为 ' num2str(flr_n) '。' char(10)];
   ls_xh = ' ⑵ ';
   fc = fp;
   ls_omega = '';
case 2,         % HP
   fp=str2num(get(paraHandle(3),'String'));   % 通带截止频率
   Ap=str2num(get(paraHandle(4),'String'));   % 通带最大衰减
   fr=str2num(get(paraHandle(5),'String'));   % 阻带最高频率
   Ar=str2num(get(paraHandle(6),'String'));   % 阻带最小衰减
   Ro=str2num(get(paraHandle(7),'String'));   % 基准电阻值
   if fltModel==1 & Ap~=3,
      Ap = 3;
      infostr=['注:这里,巴特沃斯高通滤波器的通带技术指标限定为3dB带宽。' char(10)];
      set(paraHandle(4),'String','3');
   end;
   fhr_n = fr / fp;
   flr_n = 1 / fhr_n;
   infostr=[infostr ' ⑴ 对高通滤波器技术指标进行频率归一化,以通带截止频率为归一化因子有:' char(10)];
   infostr=[infostr '  _       _' char(10)];
   infostr=[infostr '  Ωhp = 1;Ωhr = ' num2str(fhr_n) char(10)];
   infostr=[infostr ' ⑵ 将高通的技术指标转换成低通原型的技术指标,根据公式 Ωl=1/Ωh,' ...
         '可得相应低通原型的归一化截止频率为' char(10)];
   infostr=[infostr '  _     _     _     _' char(10)];
   infostr=[infostr '  Ωlp=1/Ωhp=1;Ωlr=1/Ωhr=' num2str(flr_n) char(10)];
   ls_xh = ' ⑶ ';
   fc = fp;
   ls_omega = '';
case 3,         % BP
   fpo=str2num(get(paraHandle(3),'String'));   % 通带中心频率
   fpw=str2num(get(paraHandle(4),'String'));   % 通带带宽
   Ap =str2num(get(paraHandle(5),'String'));   % 通带最大衰减
   frb=str2num(get(paraHandle(6),'String'));   % 阻带最小偏移
   Ar =str2num(get(paraHandle(7),'String'));   % 阻带最小衰减
   Ro =str2num(get(paraHandle(8),'String'));   % 基准电阻值
   if fltModel==1 & Ap~=3,
      Ap = 3;
      infostr=['注:这里,巴特沃斯带通滤波器的通带技术指标限定为3dB带宽。' char(10)];
      set(paraHandle(5),'String','3');
   end;
   fp2 = ( fpw + sqrt(fpw^2 + 4*fpo^2) ) / 2;    % 上通带截止频率
   fp1 = ( - fpw + sqrt(fpw^2 + 4*fpo^2) ) / 2;  % 下通带截止频率
   flp_n = (fp2^2 - fpo^2) / (fpw * fp2);
   flr_n = ((fpo+frb)^2 - fpo^2) / (fpw * (fpo+frb));
   infostr=[infostr ' ⑴ 计算带通滤波器的技术指标,根据公式 Ωo=sqrt(Ω1*Ω2);B=Ω2-Ω1,' ...
         '可以得到该带通滤波器的上、下通带截止频率分别为' char(10) ...
         '   Ω2=2π*' num2str(fp2) 'rad/s;Ω1=2π*' num2str(fp1) 'rad/s' char(10)];
   infostr=[infostr ' ⑵ 将带通滤波器的技术指标转换成低通原型的技术指标' char(10) ...
         '  根据公式 Ωl = (Ωb^2 - Ωo^2) / (B * Ωb),' char(10) ...
         '  将上通带截止频率转换为低通原型的通带截止频率,上阻带截止频率转换为低通原型的阻带截止频率:' char(10) ...
         '   Ωlp=' num2str(flp_n) ';Ωlr=' num2str(flr_n) char(10)];
   ls_xh = ' ⑶ ';
   fc = fpo; B = fpw;
   ls_omega = '=Ωo';
case 4,         % BS
   fro=str2num(get(paraHandle(3),'String'));   % 阻带中心频率
   frw=str2num(get(paraHandle(4),'String'));   % 阻带带宽
   Ap =str2num(get(paraHandle(5),'String'));   % 通带最大衰减
   frb=str2num(get(paraHandle(6),'String'));   % 规定阻带偏移
   Ar =str2num(get(paraHandle(7),'String'));   % 对应阻带衰减
   Ro =str2num(get(paraHandle(8),'String'));   % 基准电阻值
   if fltModel==1 & Ap~=3,
      Ap = 3;
      infostr=['注:这里,巴特沃斯带阻滤波器的通带技术指标限定为3dB。' char(10)];
      set(paraHandle(5),'String','3');
   end;
   fr2 = ( frw + sqrt(frw^2 + 4*fro^2) ) / 2;    % 上阻带截止频率
   fr1 = ( - frw + sqrt(frw^2 + 4*fro^2) ) / 2;  % 下阻带截止频率
   flp_n = (frw * fr1) / (fro^2 - fr1^2) ;
   flr_n = (frw * (fro-frb)) / (fro^2 - (fro-frb)^2) ;
   infostr=[infostr ' ⑴ 计算带阻滤波器的技术指标,根据公式 Ωo=sqrt(Ω1*Ω2);B=Ω2-Ω1,' ...
         '可以得到该带阻滤波器的上、下阻带截止频率分别为' char(10) ...
         '   Ω2=2π*' num2str(fr2) 'rad/s;Ω1=2π*' num2str(fr1) 'rad/s' char(10)];
   infostr=[infostr ' ⑵ 将带阻滤波器的技术指标转换成低通原型的技术指标' char(10) ...
         '  根据公式 Ωl = B * Ωr / (Ωo^2 - Ωr^2),' char(10) ...
         '  将阻带下截止频率转换为低通原型的通带截止频率,所规定的阻带下偏移频率转换为低通原型的阻带截止频率:' char(10) ...
         '   Ωlp=' num2str(flp_n) ';Ωlr=' num2str(flr_n) char(10)];
   ls_xh = ' ⑶ ';
   fc = fro; B = frw;
   ls_omega = '=Ωo';
end;

Kl = Ro/(2*pi*fc);
Kc = 1 /(Ro*2*pi*fc);
infostr=[infostr ls_xh '阻抗归一化转换系数,这里 Ωc' ls_omega '=2π*' num2str(fc) 'rad/s' char(10) ...
      '  根据公式 Kl=Ro/Ωc, 得电感转换系数为 ' num2str(Kl) char(10) ...
      '  根据公式 Kc=1/ΩcRo,得电容转换系数为 ' num2str(Kc)];

% index : 5  6     7  8     9  10 11  12 13
paraData=[fc;flr_n;Ar;order;Kl;Kc;-Ap;Ro;B];
   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -