加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#中的简单信号处理

发布时间:2020-12-15 23:52:58 所属栏目:百科 来源:网络整理
导读:我正在采样一个真实世界的传感器,我需要显示其过滤值.信号以10 Hz的速率采样,在此期间它可以上升到最大范围的80%. 之前我曾使用均方根作为过滤器,并将其应用于我记录的最后五个值.对于这个应用程序,这不会很好,因为我不存储未更改的值.换句话说,我需要在我
我正在采样一个真实世界的传感器,我需要显示其过滤值.信号以10 Hz的速率采样,在此期间它可以上升到最大范围的80%.

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

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

更新:经过多次电子表格测试后,我已采取行政决定记录所有样本,并申请Butterworth filter.

解决方法

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

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

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

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

在代码中(主要是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;
}

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读