为什么我无法获得带有复数的intdump的结果

时间:2019-02-22 01:56:40

标签: matlab signal-processing

我需要在这样的间隔内获取列的积分,但结果很奇怪。

我使用功能intdump。例如,假设我有一个16行1列的列,我需要对4进行积分和转储intdump,这意味着结果将是4行1列,但是结果很奇怪

例如,我有数据:

h = [
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.7071 + 0.7071i
  -0.7071 + 0.7071i
  -0.7071 + 0.7071i
   0.7071 + 0.7071i]; 

当我使用命令Y = intdump(h,4);时,得到以下结果:

Y =
       0.0000 + 0.0000i
       0.0000 + 0.0000i
       0.0000 + 0.0000i
       0.0000 + 0.7071i

但是,预期结果必须如下所示:

Y =
       0.0000 + 0.0000i
       0.0000 + 0.0000i
       0.0000 + 0.0000i
       0.7071 + 0.7071i

请问,任何人都可以在该问题上给予支持?

1 个答案:

答案 0 :(得分:0)

也许您不了解intdumb的工作以及预期的结果。

当您询问Y = intdump(h,4);时,您需要对4个样本的每个周期进行平均积分。换句话说,您将数据按4个样本重新组合,求和,然后将结果除以4。

0.0000 + 0.0000i
0.0000 + 0.0000i
0.0000 + 0.0000i
0.0000 + 0.0000i
----------------
(0.0000 + 0.0000i) / 4 = 0.0000 + 0.0000i

0.0000 + 0.0000i
0.0000 + 0.0000i
0.0000 + 0.0000i
0.0000 + 0.0000i
----------------
(0.0000 + 0.0000i) / 4 = 0.0000 + 0.0000i

0.0000 + 0.0000i
0.0000 + 0.0000i
0.0000 + 0.0000i
0.0000 + 0.0000i
----------------
(0.0000 + 0.0000i) / 4 = 0.0000 + 0.0000i

0.7071 + 0.7071i
-0.7071 + 0.7071i
-0.7071 + 0.7071i
0.7071 + 0.7071i
----------------
(0.0000 + 2.8284i) / 4 = 0.0000 + 0.7071i

因此Matlab返回完美结果。我不解释为什么您期望得到不同的结果,但是intdump不会返回这些结果。


另一种计算方法是使用积分算子线性的适当性。确实,您有:

积分(A + iB)=积分(A)+ i *积分(B)

因此,根据您的情况,您可以将h

的实部和虚部分开
Y_temp = intdump([real(h) imag(h)],4);
Y = Y_temp(:,1)+i*Y_temp(:,2)