📄 temp.m
字号:
%===========================
% 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 + -