我是Matlab和Octave" World"的新手。我已经痛苦了几个小时才能制作一个简单的脚本。问题是,我的老师在Matlab上写了这篇文章,但是我无法找到一种方法让它在Octave上运行。脚本找到系统的脉冲答案并绘制曲线。这是:
b = [1]; a = [1, -1, 0.9]; n = [0:100];
h = impz(b,a,n);
stem(n,h);
subplot(1,1,1);
title('Impulse Response'); xlabel('n'); ylabel('h(n)');
错误是:
错误:词干:X和Y错误的大小不一致:从中调用 stem > check_stem_arg在第276行第11行 第37栏第40栏词干 第127栏第8栏 questao6_lab2在第4行第1列
据我所知,这是因为轴差异。虽然,我不明白为什么octave只给h一个值。函数Impz应该描述n的所有值的曲线,但我不会。
由于
答案 0 :(得分:0)
问题来自impz
在这种情况下返回标量
octave-gui:26> h = impz (1, [1, -1, 0.9], 0:100)
h = 1
当你期望一个包含100个元素的向量时(这就是Matlab所做的)。在Matlab中,第三个参数(N
)可以是标量,表示脉冲响应的样本数,或者是指定计算脉冲响应的值的向量。在Octave中,您只能指定多个样本。所以这样做:
h = impz (1, [1, -1, 0.9], 101);
此外,似乎Octave返回行向量而不是列向量,所以这样做:
h = impz (1, [1, -1, 0.9], 101)(:);
我使用(:)
代替.'
(转置)的原因是它继续在this will be fixed的信号包的下一版本中工作。或者,运行which impz
以找到Octave impz
函数的来源,并立即自行修复。