帮我看一下这段matlab程序为什么有错误,运行不出图像?

问题描述:

帮我看一下这段matlab程序为什么有错误,运行不出图像?
海明窗设计数字低通滤波器
设计一个FIR低通滤波器,要求Wp=0.2π,Ws=0.4π,Ap=0.25dB,As=50dB
输入程序:
>> clear all;
Wp=0.2*pi;
Ws=0.4*pi;
tr_width=Ws-Wp; %过渡带宽度
N=ceil(6.6*pi/tr_width)+1 %滤波器长度
n=0:1:N-1;
Wc=(Ws+Wp)/2; %理想低通滤波器的截至频率
hd=ideal_lp(Wc,N); %理想低通滤波器的单位冲激响应
w_ham=(hamming(N)); %海明窗
h=hd.*w_ham; %截取得到实际的单位脉冲响应
[db,mag,pha,w]=freqz_m4(h,[1]); %计算实际滤波器的幅度响应
delta_w=2*pi/1000;
Ap=-(min(db(1:1:Wp/delta_w+1))) %实际通带纹波
As=-round(max(db(Ws/delta_w+1:1:501))) %实际阻带纹波
subplot(221)
stem(n,hd) %火柴棍图
title('理想单位脉冲响应hd(n)')
subplot(222)
stem(n,w_ham)
title('海明窗w(n)')
subplot(223)
stem(n,h)
title('实际单位脉冲响应h(n)')
subplot(224)
plot(w/pi,db)
title('幅度响应(dB)')
axis([0,1,-100,10])
%本程序用到的自定义函数
function hd=ideal_lp(Wc,N)
alpha= (N-1)/2;
n=0:1:N-1;
m=n-alpha+eps;
hd=sin (Wc*m)./(pi*m);
function[db,mag,pha,w]=freqz_m4(b,a)
[H,w]=freqz(b,a,1000,'whole');
H=(H(1:1:501));
w=(w(1:1:501));
mag=abs(H);
db=20*log10((mag+eps)/max(mag));
pha=angle(H);
运行出来的结果是:
N =
34
Undefined function or method 'ideal_lp' for input arguments of type 'double'.
1个回答 分类:综合 2014-11-03

问题解答:

我来补答
ideal_lp这个函数有没有和主函数放到同一个文件夹下
再问: 怎么放呢?给我详细讲一下吧 。谢谢啦。
再答: 在matlab左上方的current directory-xx:\matlab\work下,新建2个文件,命名为main.m和ideal_lp.m,打开main.m,里面输入clear all; Wp=0.2*pi; Ws=0.4*pi; tr_width=Ws-Wp; %过渡带宽度 N=ceil(6.6*pi/tr_width)+1 %滤波器长度 n=0:1:N-1; Wc=(Ws+Wp)/2; %理想低通滤波器的截至频率 hd=ideal_lp(Wc,N); %理想低通滤波器的单位冲激响应 w_ham=(hamming(N)); %海明窗 h=hd.*w_ham; %截取得到实际的单位脉冲响应 [db,mag,pha,w]=freqz_m4(h,[1]); %计算实际滤波器的幅度响应 delta_w=2*pi/1000; Ap=-(min(db(1:1:Wp/delta_w+1))) %实际通带纹波 As=-round(max(db(Ws/delta_w+1:1:501))) %实际阻带纹波 subplot(221) stem(n,hd) %火柴棍图 title('理想单位脉冲响应hd(n)') subplot(222) stem(n,w_ham) title('海明窗w(n)') subplot(223) stem(n,h) title('实际单位脉冲响应h(n)') subplot(224) plot(w/pi,db) title('幅度响应(dB)') axis([0,1,-100,10]) 保存 然后打开ideal_lp.m,输入 function hd=ideal_lp(Wc,N) alpha= (N-1)/2; n=0:1:N-1; m=n-alpha+eps; hd=sin (Wc*m)./(pi*m); function[db,mag,pha,w]=freqz_m4(b,a) [H,w]=freqz(b,a,1000,'whole'); H=(H(1:1:501)); w=(w(1:1:501)); mag=abs(H); db=20*log10((mag+eps)/max(mag)); pha=angle(H); 保存后,运行main.m就行了
再问: 谢谢,我按你说的方法做了好像还是不行,出现运行结果为 N = 34 ??? Error using ==> times Matrix dimensions must agree. Error in ==> main at 10 h=hd.*w_ham; %截取得到实际的单位脉冲响应 是什么原因呢?
再答: 刚才没看清楚,在刚才那个地方再新建一个文件,命名为freqz_m4.m 把ideal_lp.m里面的这段剪切过来 function[db,mag,pha,w]=freqz_m4(b,a) [H,w]=freqz(b,a,1000,'whole'); H=(H(1:1:501)); w=(w(1:1:501)); mag=abs(H); db=20*log10((mag+eps)/max(mag)); pha=angle(H);
再问: 谢谢你了,这次我也照做了,出现的结果和之前上一个结果一样,你看是不是有其他错误啊?
再答: 到百度hi说吧。。
 
 
展开全文阅读
剩余:2000
上一页:一道物理提题