matlab程序=========? Error using ==> times Matrix dimensions must agree错误====求大神===谢谢==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
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/08 08:54:48
matlab程序=========? Error using ==> times Matrix dimensions must agree错误====求大神===谢谢==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
matlab程序=========? Error using ==> times Matrix dimensions must agree错误====求大神===谢谢==
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);
matlab程序=========? Error using ==> times Matrix dimensions must agree错误====求大神===谢谢==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
帮你调试过了,问题出在这里:
hd=ideal_lp(Wc,N); %理想低通滤波器的单位冲激响应
w_ham=(hamming(N)); %海明窗
h=hd.*w_ham; %截取得到实际的单位脉冲响应
这里hd是一个1×34的向量,w_ham是一个34×1的向量,二者的规模不一样!所以报错!
修改:
在海明窗那一句之前加一行,将hd转置,让两者的尺寸一样就可以了:
hd=ideal_lp(Wc,N); %理想低通滤波器的单位冲激响应
hd = hd.'; % 增加的!
w_ham=(hamming(N)); %海明窗
h=hd.*w_ham; %截取得到实际的单位脉冲响应