这是一个褶积滤波的程序
输入信号为x(n)  滤波因子为h(n)  结果保存在yn当中

现在x(n)和h(n)的信号产生都没有问题  问题就处在卷积和画图上  
具体见代码   红色部分为出问题部分



N=0:199;    %产生x(n)信号
t1=N*0.004;
s=exp(-100*t1).*sin(2*pi*25*t1)+exp(-100*t1.*t1).*sin(2*pi*40*t1);
p=0.5*(sin(2*pi*5*t1)+cos(2*pi*80*t1));
x=s+p;        %x(n)信号产生玩完毕  长度为200

ff1=20;      %产生h(n)信号
ff2=45;
w1=2*pi*ff1;
w2=2*pi*ff2;
w0=(w1+w2)/2;
w3=(w2-w1)/2;
m1=-60:-1;
t2=m1*0.004;
h1=(2*cos(w0*t2).*sin(w3*t2))./(pi*t2);
h2=(2*w3)/pi;
m2=1:60;
t2=m2*0.004;
h3=(2*cos(w0*t2).*sin(w3*t2))./(pi*t2);
h=horzcat(h1,h2,h3);      %h(n)信号产生完毕 长度不足200

h4=zeros(1,79);      %产生全零数列 用于后面补零

M1=-60:60;
t2=M1*0.004;
subplot(3,1,1),stem(t1,x);    %产生x(n)的图像

xlabel('t');ylabel('x(t)');
subplot(3,1,2),stem(t2,h);    %产生h(n)的图像
xlabel('t');ylabel('h(t)');

h=horzcat(h1,h2,h3,h4);    %对h(n)补零 使其长度与x(n)相同(全部为200)

[color=FF0000]na=min(x)+min(h);   %卷积开始
nb=max(x)+max(h);
x1n=ones(1,length(x));
x2n=ones(1,length(h));
n=[na:nb];
yn=conv(x1n,x2n); %卷积完毕

subplot(3,1,3),stem(n,yn);  %产生y(n)的图像
xlabel('n');ylabel('y(t)');title('卷积结果')[/color]


红色部分为我在参考书看到的修改后的卷积代码   说是可以实现两个不是从零开始的数列的卷积并且画图
但是每次运行都会提示画图时的x轴与y轴长度不匹配  请问是哪里出了问题? 是不是这段代码本身有问题?

还有就是如果把最后画图的部分改为X轴自动匹配y轴 即 改为[color=FF0000]subplot(3,1,3),stem(yn);[/color]那么就可以正常画图 画出的图如下
[img]http://www.simwe.com/forum/attachments/day_071212/20071212_a0400d099d1dfd3b24f4vUdfIxfhhHnE.jpg.thumb.jpg[/img]


请帮我看看这个图是对的吗? 总感觉不大对~~~


最后  我也试过不用书上的代码而直接把x与y进行卷积  即把原代码中的红色部分改为

[color=FF0000]yn=conv(x,h); %卷积完毕
subplot(3,1,3),stem(yn);  %产生y(n)的图像
xlabel('n');ylabel('y(t)');title('卷积结果')[/color]
运行产生的图像如下:
[img]http://www.simwe.com/forum/attachments/day_071212/20071212_418af0ead514a6a75d520lJuHIMXl2Bt.jpg.thumb.jpg[/img]

这和上图的结果完全不一样 不知道哪个是对的啊????