【问题标题】:Problems with Octave impz function, in the moment I plot resultsOctave impz 函数的问题,在我绘制结果的那一刻
【发布时间】:2017-04-01 07:09:06
【问题描述】:

我对 Matlab 和 Octave“世界”非常陌生。为了运行一个简单的脚本,我已经苦苦挣扎了几个小时。问题是,我的老师在 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)');

错误是:

错误:stem:X 和 Y 的大小不一致错误:调用自 stem>check_stem_arg 在第 276 行第 11 列 词干在第 37 行第 40 列 词干在第 127 行第 8 列 questao6_lab2 在第 4 行第 1 列

我知道这是因为轴的差异。不过,我不明白为什么 octave 只为 h 提供一个值。函数 Impz 应该描述一条沿着 n 值的曲线,但我没有。

谢谢

【问题讨论】:

    标签: matlab octave


    【解决方案1】:

    问题来自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 函数的来源,现在自己修复它。

    【讨论】:

    • 非常感谢carandraug,它成功了!正如我所说,我对此很陌生,所以我现在不想纠结于 impz.m 文件。我会等待更新。返回行向量而不是列有什么问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多