gpt4 book ai didi

c# - C#中的简单信号处理

转载 作者:行者123 更新时间:2023-11-30 13:29:24 25 4
gpt4 key购买 nike

我正在对真实世界的传感器进行采样,我需要显示其过滤后的值。信号以 10 赫兹的速率采样,在此期间它可能上升到最大范围的 80%。

之前我使用均方根作为过滤器并将其应用于我记录的最后五个值。对于这个应用程序,这不是很好,因为我不存储未更改的值。换句话说,我需要在我的过滤器中考虑时间......

我在 DSP Guide 阅读过,但我并没有从中得到太多。是否有专门针对程序员的教程,而不是 Mathcad工程师?是否有一些简单的代码片段可以提供帮助?

更新:经过多次电子表格测试后,我决定记录所有样本,并应用 Butterworth filter .

最佳答案

你总是需要存储一些值(但不一定所有输入值)。滤波器的电流输出取决于输入值的数量,可能还有一些过去的输出值。

最简单的滤波器是一阶巴特沃斯低通滤波器筛选。这只需要您存储一个过去的输出值(value)。过滤器的(当前)输出 y(n) 是:

y(n) = x(n) - a1 * y(n-1)

其中x(n)是当前输入,y(n-1)是前一个滤波器的输出。 a1 取决于截止频率和采样频率。截止频率频率必须小于 5 Hz(采样频率的一半),足够低以滤除噪音,但不是那么低输出将相对于输入延迟。和的当然不能低到真正的信号被滤掉!

在代码中(主要是 C#):

double a1 = 0.57; //0.57 is just an example value.
double lastY = 0.0;
while (true)
{
double x = <get an input value>;

double y = x - a1 * lastY;

<Use y somehow>

lastY = y;
}

一阶滤波器是否足够取决于你的输入信号的要求和特性(一更高阶的滤波器可能能够抑制更多的以输出信号的更高延迟为代价的噪声)。

对于更高阶的过滤器,必须存储更多的值并且代码变得有点复杂。通常这些值需要在数组中向下移动;在数组中过去的 y 值和过去的 x 值的数组。

关于c# - C#中的简单信号处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1351689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com