Octave impz 函数的问题,在我绘制结果的那一刻

Problems with Octave impz function, in the moment I plot results

我是 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)');

错误是:

error: stem: inconsistent sizes for X and Y error: called from stem>check_stem_arg at line 276 column 11 stem at line 37 column 40 stem at line 127 column 8 questao6_lab2 at line 4 column 1

我理解是因为轴的不同。虽然,我不明白为什么 octave 只给出 h 的单个值。函数 Impz 应该沿着你的 n 值描述一条曲线,但我没有。

谢谢

问题来自 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 returns 是行向量而不是列向量,所以这样做:

h = impz (1, [1, -1, 0.9], 101)(:);

我使用 (:) 而不是 .'(转置)的原因是它可以在 this will be fixed 的下一版本信号包中继续工作。或者,运行 which impz 找到 Octave 的 impz 函数的源代码在哪里,现在就自己修复它。