wp=0.2*pi;
ws=0.3*pi;
Rp=1;
As=15;
T=1; %采样周期
%性能指标
Rip=10^(-Rp/20);
Atn=10^(-As/20);
OmgP=wp*T;
OmgS=ws*T;
[N,OmgC]=buttord(OmgP,OmgS,Rp,As,'s'); %选取模拟滤波器的阶数
[cs,ds]=butter(N,OmgC,'s'); %设计出所需的模拟低通滤波器[b,a]=impinvar(cs,ds,T); %应用脉冲响应不变法进行转换
[db,mag,pha,grd,w]=freqz_m(b,a); %求得相对,绝对频响及相位、群延迟响应
%绘制各条曲线
subplot(2,2,1);
plot(w/pi,mag);
title('幅频特性');
xlabel('w(/pi)');
ylabel('|H(jw)|');
axis([0,1,0,1.1]);
set(gca,'XTickMode','manual','XTick',[0 0.2 0.3 0.5 1]);
set(gca,'YTickMode','manual','YTick',[0 Atn Rip 1]);
grid
subplot(2,2,2);
plot(w/pi,db);
title('幅频特性(dB)');
xlabel('w(/pi)');
ylabel('dB');
axis([0,1,-40,5]);
set(gca,'XTickMode','manual','XTick',[0 0.2 0.3 0.5 1]);
set(gca,'YTickMode','manual','YTick',[-40 -As -Rp 0]);
grid
subplot(2,2,3);
plot(w/pi,pha/pi);
title('相频特性');
xlabel('w(/pi)');
ylabel('pha(/pi)');
axis([0,1,-1,1]);
set(gca,'XTickMode','manual','XTick',[0 0.2 0.3 0.5 1]);
grid
subplot(2,2,4);
plot(w/pi,grd);
title('群延迟');
xlabel('w(/pi)');
ylabel('Sample');
axis([0,1,0,12]);
set(gca,'XTickMode','manual','XTick',[0 0.2 0.3 0.5 1]);
grid
%本设计用到的M文件函数
function [db,mag,pha,grd,w]=freqz_m(b,a)
%滤波器幅值响应(绝对、相对)、相位响应及群延迟
%Usage:[db,mag,pha,grd,w]=freqz_m(b,a) %500点对应[0,pi]
%db 相对幅值响应; mag 绝对幅值响应; pha 相位响应; grd 群延迟响应;
%w 采样频率; b 系统函数H(z)的分子项
%a 系统函数H(z)的分母项
[H,w]=freqz(b,a,500); %500点的幅频响应
mag=abs(H);
db=20*log10(mag/max(mag));
pha=angle(H);
grd=grpdelay(b,a,w);
在7.0中不能运行,显示错误在倒数第10行(function [db,mag,pha,grd,w]=freqz_m(b,a))
??? Error: File: E:\matlab\work\c1.m Line: 50 Column: 1
Function definitions are not permitted at the prompt or in scripts.
本人新学不久,希望各位能帮助解决下。谢谢了 请把改后的答案写出来
这个程序是冲激响应不变法设计相应的数字低通滤波器
[本帖最后由 mooni 于 2009-5-27 14:27 编辑]