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

📄 temp.m

📁 信号实验常用的simulink模型和mfile,可直接在matlan下运行。
💻 M
📖 第 1 页 / 共 2 页
字号:
%===========================
% STEP 5
if li_ftype==1,
   ls_text=['==================================' char(10)];
   ls_text=[ls_text ' 滤波器设计向导第五步:原型变换' char(10)];
   ls_text=[ls_text '==================================' char(10)];
   if li_step==4,
      ParamStrs=get(hedit,'string');
   end;
   set(haxes,'Visible','off');
   set(hfrm,'Visible','off');
   set(hstr,'Visible','off');
   set(hrb,'Visible','off');
   set(htxt1,'Visible','off')
   set(hedit,'Visible','off')
   set(htxt2,'Visible','off')
   if li_passband==1,                   % 低通滤波器的特征参数
      Wp=str2num(char(ParamStrs(1))); % 通带截止频率 Hz
      Rp=str2num(char(ParamStrs(2))); % 通带最大衰减 dB
      Ws=str2num(char(ParamStrs(3))); % 阻带最低频率 Hz
      Rs=str2num(char(ParamStrs(4))); % 阻带最小衰减 dB
      Normal_Ws=Ws/Wp;
      ls_text=[ls_text '  归一化低通原型结果为' char(10) ' 截止频率:1Hz;' char(10) ' 阻带最低频率:' num2str(Normal_Ws) 'Hz。'];
   elseif li_passband==2,               % 带通滤波器的特征参数
      W0=str2num(char(ParamStrs(1))); % 通带中心频率 Hz
      Bp=str2num(char(ParamStrs(2))); % 通带带宽     Hz
      Rp=str2num(char(ParamStrs(3))); % 通带最大衰减 dB
      Bs=str2num(char(ParamStrs(4))); % 阻带最小偏移 Hz
      Rs=str2num(char(ParamStrs(5))); % 阻带最小衰减 dB
      Ws_LP=((W0+Bs)/W0-1/((W0+Bs)/W0))/(Bp/W0);
      Normal_Ws=Ws_LP;
      ls_text=[ls_text '  首先以带通滤波器的中心频率为单位频率,进行参数归一化:'];
      ls_text=[ls_text '则归一化带通滤波器的中心频率为1Hz,带宽为' num2str(Bp/W0) 'Hz,'];
      ls_text=[ls_text '阻带最小偏移为' num2str(Bs/W0) 'Hz。' char(10)];
      ls_text=[ls_text '由频率变换公式 Ω=(β-1/β)/α,得到此带通滤波器的归一化低通原型为:'];
      ls_text=[ls_text '截止频率 1Hz,通带最大衰减 ' num2str(Rp) 'dB,'];
      ls_text=[ls_text '阻带最低频率 ' num2str(Ws_LP) 'Hz,阻带最小衰减 ' num2str(Rs) 'dB。'];
   elseif li_passband==3,               % 高通滤波器的特征参数
      Wp=str2num(char(ParamStrs(1))); % 通带截止频率 Hz
      Rp=str2num(char(ParamStrs(2))); % 通带最大衰减 dB
      Ws=str2num(char(ParamStrs(3))); % 阻带最高频率 Hz
      Rs=str2num(char(ParamStrs(4))); % 阻带最小衰减 dB
      Normal_Ws=Ws/Wp;
      ls_text=[ls_text '  对高通滤波器的特征参数进行归一化:将通带截至频率归一化为1Hz,则阻带最高频率相应为' num2str(Normal_Ws) 'Hz。'];
      ls_text=[ls_text char(10) '再利用频率变换公式 Ω=1/β,得到此归一化高通滤波器的低通原型:'];
      ls_text=[ls_text '通带截止频率 1Hz;通带最大衰减 ' char(ParamStrs(2)) 'dB;'];
      ls_text=[ls_text '阻带最低频率 ' num2str(1/Normal_Ws) 'Hz;阻带最小衰减 ' char(ParamStrs(4)) 'dB。'];
      Normal_Ws=1/Normal_Ws;
   end;
   set(haxes,'visible','on');
   semilogy([0:0.2:1 1:0.2:Normal_Ws Normal_Ws:0.2:2*Normal_Ws],[logspace(0,-Rp,1/0.2+1) logspace(-Rp,-Rs,(Normal_Ws-1)/0.2+1) logspace(-Rs,-(Rs+2),Normal_Ws/0.2+1)]);
   set(hinfo,'String',ls_text)
end;
li_step=5;

%===========================
% STEP 6
plot(0)
if li_ftype==1,
   ls_text=['==================================' char(10)];
   ls_text=[ls_text ' 滤波器设计向导第六步:原型设计' char(10)];
   ls_text=[ls_text '==================================' char(10)];
   set(haxes,'Visible','on');
   set(hfrm,'Visible','off');
   set(hstr,'Visible','off');
   set(hrb,'Visible','off');
   set(htxt1,'Visible','off')
   set(hedit,'Visible','off')
   set(htxt2,'Visible','off')
   switch li_model
   case 1,
      ls_flt='巴特沃斯';
      [n,Wn]=buttord(2*pi,2*pi*Normal_Ws,Rp,Rs,'s');
      [B,A]=butter(n,Wn,'s');
   case 2,
      ls_flt='切比雪夫Ⅰ型';
      [n,Wn]=cheb1ord(2*pi,2*pi*Normal_Ws,Rp,Rs,'s');
      [B,A]=cheby1(n,Rp,Wn,'s');
   case 3,
      ls_flt='切比雪夫Ⅱ型';
      [n,Wn]=cheb2ord(2*pi,2*pi*Normal_Ws,Rp,Rs,'s');
      [B,A]=cheby2(n,Rs,Wn,'s');
   end;
   ls_text=[ls_text '  根据上述要求,计算得' char(10) '  “' ls_flt '”原型(归一化)低通滤波器的阶数为 ' num2str(n) '阶,'];
   ls_text=[ls_text '3dB频率点为 ' num2str(Wn/(2*pi)) 'Hz。'];
   ls_text=[ls_text char(10) '其频率响应如上图所示。'];
   freqss(B,A);
   set(hinfo,'String',ls_text)
end;
li_step=6;

%===========================
% STEP 7
if li_ftype==1,
   ls_text=['==================================' char(10)];
   ls_text=[ls_text ' 滤波器设计向导第七步:逆向变换' char(10)];
   ls_text=[ls_text '==================================' char(10)];
   set(haxes,'Visible','on');
   set(hfrm,'Visible','off');
   set(hstr,'Visible','off');
   set(hrb,'Visible','off');
   set(htxt1,'Visible','off')
   set(hedit,'Visible','off')
   set(htxt2,'Visible','off')
   if li_passband==1,                   % 低通滤波器
      switch li_model,
      case 1,
         [B,A]=butter(n,Wn*Wp,'s');
      case 2,
         [B,A]=cheby1(n,Rp,Wn*Wp,'s');
      case 3,
         [B,A]=cheby2(n,Rs,Wn*Wp,'s');
      end;
      ls_text=[ls_text '  最后,进行参数反归一化,便可得到欲设计的“' ls_flt '”低通滤波器'];
      ls_text=[ls_text char(10) '  逼近阶数:' num2str(n) '阶'];
      ls_text=[ls_text char(10) '  3dB频率点:' num2str(Wn*Wp/(2*pi)) 'Hz'];
      ls_text=[ls_text char(10) '其频率响应如上图所示。'];
      freqss(B,A);
   elseif li_passband==2,               % 带通滤波器
      Bp1=(Bp/2)/W0;
      Bs1=Bs/W0;
      Wp=2*pi*[1-Bp1 1+Bp1];
      Ws=2*pi*[1-Bs1 1+Bs1];
      switch li_model,
      case 1,
         [n,Wn]=buttord(Wp,Ws,Rp,Rs,'s');
         [B,A]=butter(n,Wn,'s');
      case 2,
         [n,Wn]=cheb1ord(Wp,Ws,Rp,Rs,'s');
         [B,A]=cheby1(n,Rp,Wn,'s');
      case 3,
         [n,Wn]=cheb2ord(Wp,Ws,Rp,Rs,'s');
         [B,A]=cheby2(n,Rs,Wn,'s');
      end;      
      ls_text=[ls_text '  接着,应用频率反变换公式 β=sqrt(1+(αΩ/2)^2)±(αΩ/2),'];
      ls_text=[ls_text '即可得到归一化的“' ls_flt '”带通滤波器的参数'];
      ls_text=[ls_text char(10) '  逼近阶数:' num2str(n) '阶'];
      ls_text=[ls_text char(10) '  3dB频率点:' num2str(Wn(1)/(2*pi)) 'Hz,' num2str(Wn(2)/(2*pi)) 'Hz'];
      ls_text=[ls_text char(10) '此归一化带通滤波器的频率响应如上图所示。'];
      freqss(B,A);
   elseif li_passband==3,               % 高通滤波器
      switch li_model,
      case 1,
         [n,Wn]=buttord(2*pi,2*pi*(1/Normal_Ws),Rp,Rs,'s');
         [B,A]=butter(n,Wn,'high','s');
      case 2,
         [n,Wn]=cheb1ord(2*pi,2*pi*(1/Normal_Ws),Rp,Rs,'s');
         [B,A]=cheby1(n,Rp,Wn,'high','s');
      case 3,
         [n,Wn]=cheb2ord(2*pi,2*pi*(1/Normal_Ws),Rp,Rs,'s');
         [B,A]=cheby2(n,Rs,Wn,'high','s');
      end;
      ls_text=[ls_text '  接着,应用频率反变换公式 β=1/Ω,即可得到归一化的“' ls_flt '”高通滤波器的参数'];
      ls_text=[ls_text char(10) '  逼近阶数:' num2str(n) '阶'];
      ls_text=[ls_text char(10) '  3dB频率点:' num2str(Wn/(2*pi)) 'Hz'];
      ls_text=[ls_text char(10) '此归一化高通滤波器的频率响应如上图所示。'];
      freqss(B,A);
   end;
   set(hinfo,'String',ls_text)
end;
li_step=7;

%===========================
% STEP 8
if li_ftype==1,
   ls_text=['==================================' char(10)];
   ls_text=[ls_text ' 滤波器设计向导第八步:最终结果' char(10)];
   ls_text=[ls_text '==================================' char(10)];
   set(haxes,'Visible','on');
   set(hfrm,'Visible','off');
   set(hstr,'Visible','off');
   set(hrb,'Visible','off');
   set(htxt1,'Visible','off')
   set(hedit,'Visible','off')
   set(htxt2,'Visible','off')
   if li_passband==1,                   % 低通滤波器
      ls_text=[ls_text '  “' ls_flt '”低通滤波器设计完毕。'];
   elseif li_passband==2,               % 带通滤波器
      Wp=2*pi*[W0-Bp/2 W0+Bp/2];
      Ws=2*pi*[W0-Bs W0+Bs];
      switch li_model,
      case 1,
         [n,Wn]=buttord(Wp,Ws,Rp,Rs,'s');
         [B,A]=butter(n,Wn,'s');
      case 2,
         [n,Wn]=cheb1ord(Wp,Ws,Rp,Rs,'s');
         [B,A]=cheby1(n,Rp,Wn,'s');
      case 3,
         [n,Wn]=cheb2ord(Wp,Ws,Rp,Rs,'s');
         [B,A]=cheby2(n,Rs,Wn,'s');
      end;      
      ls_text=[ls_text '  最后,进行参数反归一化,便可得到欲设计的“' ls_flt '”带通滤波器'];
      ls_text=[ls_text char(10) '  逼近阶数:' num2str(n) '阶'];
      ls_text=[ls_text char(10) '  3dB频率点:' num2str(Wn(1)/(2*pi)) 'Hz,' num2str(Wn(2)/(2*pi)) 'Hz'];
      ls_text=[ls_text char(10) '其频率响应如上图所示。' char(10) '设计完毕。'];
      freqss(B,A);
   elseif li_passband==3,               % 高通滤波器
      switch li_model,
      case 1,
         [n,Wn]=buttord(2*pi*Wp,2*pi*Ws,Rp,Rs,'s');
         [B,A]=butter(n,Wn,'high','s');
      case 2,
         [n,Wn]=cheb1ord(2*pi*Wp,2*pi*Ws,Rp,Rs,'s');
         [B,A]=cheby1(n,Rp,Wn,'high','s');
      case 3,
         [n,Wn]=cheb2ord(2*pi*Wp,2*pi*Ws,Rp,Rs,'s');
         [B,A]=cheby2(n,Rs,Wn,'high','s');
      end;
      ls_text=[ls_text '  最后,进行参数反归一化,便可得到欲设计的“' ls_flt '”高通滤波器'];
      ls_text=[ls_text char(10) '  逼近阶数:' num2str(n) '阶'];
      ls_text=[ls_text char(10) '  3dB频率点:' num2str(Wn/(2*pi)) 'Hz'];
      ls_text=[ls_text char(10) '其频率响应如上图所示。' char(10) '设计完毕。'];
      freqss(B,A);
   end;
   set(hinfo,'String',ls_text)
end;
li_step=8;

⌨️ 快捷键说明

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