使用指数调整信号的平均值

信息处理 离散信号 信号分析 统计数据
2022-02-23 13:49:33

我有离散信号,其值在 0 和 1 之间。

我希望对这样的信号进行后处理,使其值的平均值等于 0.5,同时保持最大值和最小值 0/1 不变。直觉上,我认为“逐元素”指数将是正确的方法,但我似乎无法想出确定适当指数值的方法。

虚构的matlab示例来说明:

>> s=[0.2 0.7 1 0.5 0.4 0.2 0 0.3];
>> mu=mean(s)
mu =  0.41250
>> s_adjusted=s.^0.69998;
>> mu_adjusted=mean(s_adjusted)
mu_adjusted =  0.50000

确定 0.69998 指数的最佳方法是什么?

1个回答

您需要以数字方式进行,因为相关的玩具问题似乎没有符号解决方案。二分法(二分搜索)可能是最容易实现的求解器:2a+3a=4

minexponent = 0;
maxexponent = 2;
targetsum = 10;
precision = 32;
loop precision times {
  exponent = (minexponent + maxexponent)*0.5;
  if (sum(s.^exponent) < targetsum) {
    maxexponent = exponent;
  } else {
    minexponent = exponent;
  }
}
return exponent;

对于您的问题,可能的最小指数值为 0。如果您不确定最大可能的指数值,您可以在上述代码之前测试易于检查的指数 1、2、4、8、16 等(在总和低于目标之前尽可能多),通过将每个元素与自身相乘来对辅助数组求幂。

请注意,如果所有元素都为零,或者如果所有元素都为 1,那么除了取幂之外,您无法获得任何其他平均值。


下图显示了算法的 1000 次运行,以及exponent每次迭代的值。

算法的 1000 次应用图