【问题标题】:Plotting a system response imaginary part as a function of omega(w) in Matlab在 Matlab 中绘制系统响应虚部作为 omega(w) 的函数
【发布时间】:2019-06-29 22:26:53
【问题描述】:

我正在尝试绘制以下内容:

Im{X (e^jω)} = -a * sin(w) / (1 - 2*a*cos(w) + a^2) ,其中 -1

我试图将其绘制为 w 的函数。 但由于某种原因,我只得到沿 y 轴有 0 个点的线,没有任何有意义的图形。

使用 Matlab 绘制此函数的最佳方法是什么?

如果我的响应如下所示,如何正确绘制相位响应:

相位 (X (ejω)) = tan^-1(-asin(w)/ 1 - acos(w))。

当我使用 angle() 函数时,matlab 会抛出 X 必须与 Y 长度相同的错误。我想知道我是否必须使用诸如 imag() 和 angle() 之类的函数,或者只是在没有它的情况下停止它。 目前我的代码如下:

a = -0.2;
N = 10;
w = -2*pi:2*pi/N:2*pi;
x_imag = - a.* sin(w)./(1 - 2 * a*cos(w) + a^2);
stem(w, imag(x_imag), 'filled')
x_phase = inv(tan(-a.*sin(w)./(1- a.*cos(w))))
stem(w, angle(x_phase), 'filled')

我哪里出错了?

【问题讨论】:

    标签: matlab plot signals signal-processing


    【解决方案1】:

    自从

    Im{X (e^jω)} = -a * sin(w) / (1 - 2*a*cos(w) + a^2) , where -1 < a < 0.  
    

    是等式的虚部,x_imag = - a.* sin(w)./(1 - 2 * a*cos(w) + a^2); 没有任何虚部,即等式中没有ij。例如考虑复数:

    c = 2 + 2i
    % the imaginary part is 2 <- no i
    

    因此,当您尝试绘制 x_imagimag 时,您将得到全零,因为没有虚部。换句话说,只需按原样绘制x_imag

    stem(w, x_imag, 'filled')
    

    要获得数字的相位,您需要 tan^-1,它在 matlab 中是 atan(inv 是逆矩阵)。因此:

    x_phase = atan(-a.*sin(w)./(1- a.*cos(w)))
    stem(w, x_phase, 'filled')
    

    【讨论】:

    • 谢谢@StaticBeagle,你解决了我的疑惑,我现在明白了。此外,对于 tan 部分,我使用 1./tan 而不是 atan() 并得到了相同的答案。所以我想这两个选项都可以正常工作。
    • @ViniLL 很高兴我能提供帮助。不过有一件事,tan^-1 aka atan() 在数学上并不等同于 1/tan(Matlab 中的 cot()),对于某些数字组合,您可能会得到类似的结果,但请记住这一点
    • 是的,你是对的,实际上我没有注意到图表中的一个小变化,谢谢
    【解决方案2】:

    图中不需要imag 运算符。 x_imag 是虚部,并不复杂。所以imag(x_imag) 返回 0。更改

    stem(w, imag(x_imag), 'filled')
    

    stem(w, x_imag, 'filled')
    

    对于要使用atan 作为反正切的相位。 inv perofrms 矩阵逆。所以改变

    x_phase = inv(tan(-a.*sin(w)./(1- a.*cos(w))))
    

    x_phase = atan(-a.*sin(w)./(1- a.*cos(w))))
    

    【讨论】:

      猜你喜欢
      • 2015-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-22
      相关资源
      最近更新 更多