马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
这是一个褶积滤波的程序
输入信号为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)
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('卷积结果')
红色部分为我在参考书看到的修改后的卷积代码 说是可以实现两个不是从零开始的数列的卷积并且画图
但是每次运行都会提示画图时的x轴与y轴长度不匹配 请问是哪里出了问题? 是不是这段代码本身有问题?
还有就是如果把最后画图的部分改为X轴自动匹配y轴 即 改为subplot(3,1,3),stem(yn); 那么就可以正常画图 画出的图如下
请帮我看看这个图是对的吗? 总感觉不大对~~~
最后 我也试过不用书上的代码而直接把x与y进行卷积 即把原代码中的红色部分改为
yn=conv(x,h); %卷积完毕
subplot(3,1,3),stem(yn); %产生y(n)的图像
xlabel('n');ylabel('y(t)');title('卷积结果')
运行产生的图像如下:
这和上图的结果完全不一样 不知道哪个是对的啊????
[ 本帖最后由 eight 于 2007-12-12 15:16 编辑 ] |