试图写一个信号“不平滑”的算法

信息处理 信号分析 算法
2022-01-24 10:37:24

预先说明:我只是一个业余爱好者,我对信号处理的了解为零;我正在尝试编写一个简单的(?) javascript 算法,并希望我不需要 DSP 博士学位来取得进展。

我有一个输入信号,通常只显示最大值和最小值之间的最小差异。我试图找出一种方法来转换值,使最大值按比例远大于最小值,两者之间有一条陡峭的曲线。我已经尝试了所有我能想到的指数和对数,甚至只是从曲线的其余部分中减去最小值,但似乎没有任何效果。如下图所示,部分问题在于信号强度变化很大。我不知道该怎么解释。此外,有时信号已经非常刺耳,我也不知道如何解释。

我用谷歌四处寻找,但我真的不知道要问什么问题。我不确定是否有一类算法可以做这种事情。我试过“信号不平滑”,没有运气,我不知道还能叫什么。

一些手绘图表,占位符,而我尝试学习如何在 stackexchange 上绘制曲线。左边的两个显示了我经常得到的信号类型:不同的强度,但最大值略大于最小值。右边是我想要得到的:中间有一个大尖峰,陡峭的曲线下降到最小值。

是否有一类算法的名称可以做这种事情?有没有更好的方法来制定我的问题,以便我可以更有效地使用谷歌搜索?有没有一种可笑的微不足道的方法来做到这一点?

画得不好的图表

如果有帮助,我的最终目标是:我正在模拟蚊子的运动。我正在努力让它们接近猎物的气味,同时考虑到空气中的毒素或高温等负面因素,以及避免被压扁的紧张动作。它进展顺利,除了我有输入信号太平而无法进行有意义比较的长期问题。

1个回答

您正在尝试做的是对比度增强。对比度是最大值与最小值的比率。

让我们考虑一下,您的信号强度范围为 30 到 40,但您需要具有良好对比度的 0 到 255 范围。

  1. 让我们将您的一维信号视为 I(x)。首先找到信号的最小值并从整个曲线中减去最小值。在我们的例子中,30 是最小值。所以从整个曲线中减去 30。信号现在将在 0 到 10 之间。

J(x) = I(x) - 最小值(I(x))

  1. 但是我们希望信号的强度从 0 到 255。所以找到允许的最大值(在我们的例子中为 255)与信号最大值之间的比率(我们的信号最大值现在为 10)并将整个曲线乘以该因子。现在我们的信号强度将在 0 到 255 之间。

K(x) = J(x)*(Max_value_allowed/Max(J(x))

  1. 此时,您应该已经获得了所需的尖峰曲线。但是如果你觉得曲线不够尖,可以通过对直方图前半部分的强度应用负斜率(在我们的例子中为 0 到 127)和直方图后半部分的强度(在我们的案例中为 128 到 255)应用正斜率来增加对比度。情况下)这将使低强度低得多,高强度高得多。祝你好运。希望这对你有帮助。

补充:除了上面的第3步,你也可以这样做,

L(x) = 功率(K(x),n)/功率(Max(K(x)),n-1)

n 应该大于 1。随着 n 的增加,尖刺也会增加。在您的情况下,我猜选择大约 2 或 3 应该就足够了。