如何在matlab中绘制具有脉冲响应的系统输出?

时间:2014-11-27 16:52:34

标签: matlab signals signal-processing

我是matlab的新手,需要绘制y1 [n] = x [n] + y1 [n - 1],其中x [n] = [1,2,4]和脉冲响应h [n ] = [1,1,1,1,1]并且不确定我是否以正确的方式进行了

到目前为止,我的代码是

x = [1,2,4];
h = [1,1,1,1,1];
y = [];

for n=1:length(x) 
if (n==1)      

    y(n) = x(n);  
else

    y(n) = (x(n)*h(n)) + (y(n-1)*h(n));  
    end
end
stem(y);

请注意,我无法使用conv()函数

2 个答案:

答案 0 :(得分:1)

我真的不知道为什么会这么复杂,

x = [1,2,4];
h = [1,1,1,1,1];
y = [];
lh = length(h);
lx = length(x);
t = -lh - lx : lh + lx;
x(end + 1 : end + lh + 1) = 0;
h(end + 1 : end + lx + 1) = 0;
x = padarray(x,[0 max(t)],'pre');
h = padarray(h,[0 max(t)],'pre');
xinv = x(end:-1:1);
for n = 1 : length(t)
     xinv = circshift(xinv,[0 1]);
     y(n) = sum(xinv .* h);
end
y = circshift(y,[0 find(t == 0)]);
subplot(311)
stem(t,x);
xlim([-10 10])
subplot(312)
stem(t,h);
xlim([-10 10])
subplot(313)
stem(t,y);
xlim([-10 10])

enter image description here

它工作正常,但我相信它可以用更简单的方式编码。

答案 1 :(得分:1)

您可以使用fft吗?

lx = numel(x);
lh = numel(h);
m = max(lx, lh);
y = ifft(fft([h zeros(1,max(lx-lh,0)+m)]) .* fft([x zeros(1,max(lh-lx,0)+m)]));
y = y(1:lx+lh-1);