基于Matlab的信号误差计算

基于Matlab的信号误差计算,matlab,signal-processing,Matlab,Signal Processing,我试图在Matlab中编写一个脚本来创建3个信号,这些信号必须在同一个图形中显示(使用plot)。在这一刻,我的代码是 n = 0:80; s = 2*n*(0.9).^n; %signal 1 (can be a real or an imaginary signal) r = rand(1, 81) - 0.5; %signal 2 (can be a real or an imaginary signal) x = s + r;

我试图在Matlab中编写一个脚本来创建3个信号,这些信号必须在同一个图形中显示(使用plot)。在这一刻,我的代码是

    n = 0:80;

    s = 2*n*(0.9).^n;      %signal 1 (can be a real or an imaginary signal)
    r = rand(1, 81) - 0.5; %signal 2 (can be a real or an imaginary signal)

    x = s + r;             %signal 3: it is supposed to be the sum of the other 2 signals
    xr = real(x);
    xi = imag(x);
    x = xe + xi;

   ER = XXX_A_B(x, s);

   plot(n, s, n, r, n, x, n, ER); %plot
   title('s[n], r[n], x[n], ER) %ER: Error related to the approximation of x to s
   legend('s[n]', 'r[n]','x[n]', 'ER')
我已经做了一个计算ER的函数,所以我现在用它来计算。功能是

   function [ER] = XXX_A_B(x1, x2)
      x = abs(x2-x1);
      L2 = norm(x, 2);
      L2_1 = norm(x1, 2);
      ER = L2/L2_1;
   end

碰巧在第一行中,出现了一个错误(没有说明是哪种错误),在x=s+r上出现了另一个错误。我不明白这些错误的原因。谢谢。

一个问题是矩阵尺寸会导致错误。根据您预期的函数矩阵乘法,采用转置或元素乘法可能会解决第一个问题。另一个问题是
xe
在用作上述注释之前未定义

n = 0:80; %1 by 81 array%

    Part_Of_Equation = (0.9).^n; %1 by 81 array%   
    
    %Taking transpose of n -> n.' (matrix multiplication)%
    s = 2*n.'*Part_Of_Equation;   
    
    %Or multipling element-wise%
    s = 2*n.*Part_Of_Equation; 

使用MATLAB版本:R2019b

检查所有内容的
大小。我怀疑
s
不是您期望的形状。而且,
xe
是未定义的。您的意思是将其设置为
x=xr+xi
?在这种情况下,这一行毫无意义
x
已经等于
xr+xi
。最后,我发现Matlab不告诉您错误是什么有点难以置信。你确定有什么东西不能抑制错误吗?尝试在Matlab控制台中运行有问题的行,看看您得到了什么错误hanks@PranavHosangadi。当我运行前两行时,出现的只是“相关文档”太棒了!专业提示:在编写任何类型的程序时,这是一项至关重要的技能。这篇文章也很有启发性,它是第二个案例。我得到了它!谢谢@MichaelTr7