当前位置: 首页 > news >正文

递推算法计算信号特征

在线算法(在线计算或递推计算)能够在不存储全部数据的情况下逐步更新信号的特征信息,非常适合资源受限的单片机应用场景。
用途:单片机边采集ADC边计算,最终将采集的信号特征计算结果。平台通过长期监控信号特征来确定采集的设备工作正常。用途机台长期监控。

以下是几种常见的信号特征信息计算及其对应的在线算法:

1. 均值(Mean)

递推均值公式
mean n = ( n − 1 ) ⋅ mean n − 1 + x n n \text{mean}_n = \frac{(n-1) \cdot \text{mean}_{n-1} + x_n}{n} meann=n(n1)meann1+xn
其中,( n ) 是当前采样点的数量,( x_n ) 是第 ( n ) 个采样值,( \text{mean}_{n-1} ) 是前 ( n-1 ) 个采样值的均值。

2. 均方根(RMS, Root Mean Square)

递推 RMS 公式:
RMS n = ( n − 1 ) ⋅ ( RMS n − 1 ) 2 + x n 2 n \text{RMS}_n = \sqrt{\frac{(n-1) \cdot (\text{RMS}_{n-1})^2 + x_n^2}{n}} RMSn=n(n1)(RMSn1)2+xn2

3. 方差(Variance)

递推方差公式:
var n = ( n − 1 ) ⋅ var n − 1 + ( x n − mean n ) ( x n − mean n − 1 ) n \text{var}_n = \frac{(n-1) \cdot \text{var}_{n-1} + (x_n - \text{mean}_n)(x_n - \text{mean}_{n-1})}{n} varn=n(n1)varn1+(xnmeann)(xnmeann1)

4. 标准差(Standard Deviation)

标准差是方差的平方根:
stddev n = var n \text{stddev}_n = \sqrt{\text{var}_n} stddevn=varn

5. 峰峰值(Peak-to-Peak Value)

更新最大值和最小值:

if (x_n > max) max = x_n;
if (x_n < min) min = x_n;

峰峰值计算公式:
peak-to-peak = max − min \text{peak-to-peak} = \text{max} - \text{min} peak-to-peak=maxmin

6. 平均绝对偏差(Mean Absolute Deviation, MAD)

递推平均绝对偏差公式:
MAD n = ( n − 1 ) ⋅ MAD n − 1 + ∣ x n − mean n ∣ n \text{MAD}_n = \frac{(n-1) \cdot \text{MAD}_{n-1} + |x_n - \text{mean}_n|}{n} MADn=n(n1)MADn1+xnmeann

7. 信号功率(Power)

递推信号功率公式:
power n = ( n − 1 ) ⋅ power n − 1 + x n 2 n \text{power}_n = \frac{(n-1) \cdot \text{power}_{n-1} + x_n^2}{n} powern=n(n1)powern1+xn2

8. 信号能量(Energy)

信号能量是所有样本平方的累加和:
energy n = energy n − 1 + x n 2 \text{energy}_n = \text{energy}_{n-1} + x_n^2 energyn=energyn1+xn2

示例代码更新

以下是使用递推算法计算上述信号特征信息的示例代码:

#include "stm32f0xx_hal.h"
#include <math.h>// 全局变量
volatile uint32_t count = 0;
volatile float mean = 0;
volatile float variance = 0;
volatile float stddev = 0;
volatile float max = -FLT_MAX;
volatile float min = FLT_MAX;
volatile float mad = 0;
volatile float power = 0;
volatile float energy = 0;
volatile uint8_t trigger_active = 0;// ADC 和定时器句柄
ADC_HandleTypeDef hadc;
TIM_HandleTypeDef htim;// 初始化 ADC
void ADC_Init(void) {__HAL_RCC_ADC1_CLK_ENABLE();hadc.Instance = ADC1;hadc.Init.Resolution = ADC_RESOLUTION_12B;hadc.Init.ScanConvMode = DISABLE;hadc.Init.ContinuousConvMode = DISABLE;hadc.Init.DiscontinuousConvMode = DISABLE;hadc.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T1_TRGO;hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;hadc.Init.NbrOfConversion = 1;HAL_ADC_Init(&hadc);// 配置 ADC 通道ADC_ChannelConfTypeDef sConfig = {0};sConfig.Channel = ADC_CHANNEL_0;sConfig.Rank = ADC_RANK_CHANNEL_NUMBER;HAL_ADC_ConfigChannel(&hadc, &sConfig);
}// 初始化定时器
void TIM_Init(void) {__HAL_RCC_TIM1_CLK_ENABLE();htim.Instance = TIM1;htim.Init.Prescaler = 8000 - 1;  // 1 MHz 时钟,1 kHz 采样率htim.Init.CounterMode = TIM_COUNTERMODE_UP;htim.Init.Period = 1000 - 1;     // 1 kHzhtim.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;HAL_TIM_Base_Init(&htim);// 配置定时器触发 ADCTIM_MasterConfigTypeDef sMasterConfig = {0};sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;HAL_TIMEx_MasterConfigSynchronization(&htim, &sMasterConfig);
}// ADC 转换完成中断服务函数
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) {if (trigger_active) {uint32_t adc_value = HAL_ADC_GetValue(hadc);float x_n = (float)adc_value;// 更新样本计数count++;// 计算均值float old_mean = mean;mean = ((count - 1) * mean + x_n) / count;// 计算方差variance = ((count - 1) * variance + (x_n - mean) * (x_n - old_mean)) / count;stddev = sqrt(variance);// 更新最大值和最小值if (x_n > max) max = x_n;if (x_n < min) min = x_n;// 计算平均绝对偏差mad = ((count - 1) * mad + fabs(x_n - mean)) / count;// 计算信号功率power = ((count - 1) * power + x_n * x_n) / count;// 计算信号能量energy += x_n * x_n;}
}// 触发信号检测函数
void check_trigger_signal(void) {if (/* 检测到触发信号 */) {trigger_active = 1;HAL_ADC_Start_IT(&hadc);HAL_TIM_Base_Start(&htim);} else {trigger_active = 0;HAL_ADC_Stop_IT(&hadc);HAL_TIM_Base_Stop(&htim);}
}// 主函数
int main(void) {HAL_Init();ADC_Init();TIM_Init();while (1) {check_trigger_signal();// 其他处理}
}

在这个示例代码中,我们展示了如何使用递推算法来计算多个信号特征信息,包括均值、方差、标准差、最大值、最小值、平均绝对偏差、信号功率和能量。这些算法在每次新的采样点到达时更新,无需存储所有数据,适用于单片机环境。

相关文章:

递推算法计算信号特征

在线算法&#xff08;在线计算或递推计算&#xff09;能够在不存储全部数据的情况下逐步更新信号的特征信息&#xff0c;非常适合资源受限的单片机应用场景。 用途&#xff1a;单片机边采集&#xff21;&#xff24;&#xff23;边计算&#xff0c;最终将采集的信号特征计算结果…...

spring-boot-configuration-processor注释处理器

开源项目SDK&#xff1a;https://github.com/mingyang66/spring-parent 个人文档&#xff1a;https://mingyang66.github.io/raccoon-docs/#/ spring-boot-configuration-processor是springboot提供的一个注释处理器&#xff08;annotation processor&#xff09;,它用于在编译…...

Python和MATLAB粘性力接触力动态模型半隐式欧拉算法

&#x1f3af;要点 &#x1f3af;运动力模型计算制作过程&#xff1a;&#x1f58a;相机捕捉网球运动图&#xff0c;制定运动数学模型&#xff0c;数值微分运动方程 | &#x1f58a;计算运动&#xff0c;欧拉算法离散积分运动&#xff0c;欧拉-克罗默算法微分运动方程 &#…...

webstorm无法识别tsconfig.json引用项目配置文件中的路径别名

问题 vite项目模板中&#xff0c;应用的ts配置内容写在tsconfig.app.json文件中&#xff0c;并在tsconfig.json通过项目引用的方式导入 {"files": [],"references": [{"path": "./tsconfig.app.json"},{"path": "./t…...

qiankun微前端:qiankun+vite+vue3+ts(未完待续..)

目录 什么是微前端 目前现有的微前端 好处 使用 子应用的页面在主应用里显示 什么是微前端 微前端是一种多个团队通过独立发布功能的方式来共同构建现代化 web 应用的技术手段及方法策略。 我的理解就是将一个大型的前端应用拆分成多个模块&#xff0c;每个微前端模块可以由…...

001:开源交易系统开发实战开篇

本专栏采用融入【主力思维】的方法学&#xff0c;包含数据抓取、特征模型开发、历史验证回归测试、每日动态风险评估管理等技术&#xff0c;较大的增强股票投资胜率&#xff0c;让IT开发者拥有一套属于自己思路的专用交易软件。 先简要介绍系统成功和项目&#xff0c;后续持续…...

Pytorch实战(一):LeNet神经网络

文章目录 一、模型实现1.1数据集的下载1.2加载数据集1.3模型训练1.4模型预测 LeNet神经网络是第一个卷积神经网络&#xff08;CNN&#xff09;&#xff0c;首次采用了卷积层、池化层这两个全新的神经网络组件&#xff0c;接收灰度图像&#xff0c;并输出其中包含的手写数字&…...

RabbitMq的基础及springAmqp的使用

RabbitMq 官网:RabbitMQ: One broker to queue them all | RabbitMQ 什么是MQ&#xff1f; mq就是消息队列&#xff0c;消息队列遵循这先入先出原则。一般用来解决应用解耦&#xff0c;异步消息&#xff0c;流量削峰等问题&#xff0c;实现高性能&#xff0c;高可用&#xf…...

uniapp uniCloud云开发

uniCloud概述 uniCloud 是 DCloud 联合阿里云、腾讯云、支付宝云&#xff0c;为开发者提供的基于 serverless 模式和 js 编程的云开发平台。 uniCloud 的 web控制台地址&#xff1a;https://unicloud.dcloud.net.cn 文档&#xff1a;https://doc.dcloud.net.cn/uniCloud/ un…...

智能扫地机,让生活电器更加便民-NV040D扫地机语音方案

一、语音扫地机开发背景&#xff1a; 随着人工智能和物联网技术的飞速发展&#xff0c;智能家居设备已成为现代家庭不可或缺的一部分。其中&#xff0c;扫地机作为家庭清洁的重要工具&#xff0c;更是得到了广泛的关注和应用。 然而&#xff0c;传统的扫地机在功能和使用上仍存…...

【后端面试题】【中间件】【NoSQL】ElasticSearch索引机制和高性能的面试思路

Elasticsearch的索引机制 Elasticsearch使用的是倒排索引&#xff0c;所谓的倒排索引是相对于正排索引而言的。 在一般的文件系统中&#xff0c;索引是文档映射到关键字&#xff0c;而倒排索引则相反&#xff0c;是从关键字映射到文档。 如果没有倒排索引的话&#xff0c;想找…...

【漏洞复现】时空智友ERP updater.uploadStudioFile接口处存在任意文件上传

0x01 产品简介 时空智友ERP是一款基于云计算和大数据技术的企业资源计划管理系统。该系统旨在帮助企业实现数字化转型&#xff0c;提高运营效率、降低成本、增强决策能力和竞争力&#xff0c;时空智友ERP系统涵盖了企业的各个业务领域&#xff0c;包括财务管理、供应链管理、生…...

[leetcode hot 150]第五百三十题,二叉搜索树的最小绝对差

题目&#xff1a; 给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数&#xff0c;其数值等于两值之差的绝对值。 解析&#xff1a; minDiffInBST 方法是主要方法。创建一个 ArrayList 来存储树的节点值。inorderTrave…...

【Docker】可视化平台Portainer

文章目录 Portainer的特点Portainer的安装步骤注意事项 Docker的可视化工具Portainer是一个轻量级的容器管理平台&#xff0c;它为用户提供了一个直观的图形界面来管理Docker环境。以下是关于Portainer的详细介绍和安装步骤&#xff1a; Portainer的特点 轻量级&#xff1a;P…...

MySQL高级-MVCC-原理分析(RR级别)

文章目录 1、RR隔离级别下&#xff0c;仅在事务中第一次执行快照读时生成ReadView&#xff0c;后续复用该ReadView2、总结 1、RR隔离级别下&#xff0c;仅在事务中第一次执行快照读时生成ReadView&#xff0c;后续复用该ReadView 而RR 是可重复读&#xff0c;在一个事务中&…...

压力测试Monkey命令参数和报告分析

目录 常用参数 -p <测试的包名列表> -v 显示日志详细程度 -s 伪随机数生成器的种子值 --throttle < 毫秒> --ignore-crashes 忽略崩溃 --ignore-timeouts 忽略超时 --monitor-native-crashes 监视本地崩溃代码 --ignore-security-exceptions 忽略安全异常 …...

C# Benchmark

创建控制台项目&#xff08;或修改现有项目的Main方法代码&#xff09;&#xff0c;Nget导入Benchmark0.13.12&#xff0c;创建测试类&#xff1a; public class StringBenchMark{int[] numbers;public StringBenchMark() {numbers Enumerable.Range(1, 20000).ToArray();}[Be…...

算法金 | 协方差、方差、标准差、协方差矩阵

大侠幸会&#xff0c;在下全网同名「算法金」 0 基础转 AI 上岸&#xff0c;多个算法赛 Top 「日更万日&#xff0c;让更多人享受智能乐趣」 抱个拳&#xff0c;送个礼 1. 方差 方差是统计学中用来度量一组数据分散程度的重要指标。它反映了数据点与其均值之间的偏离程度。在…...

FastAPI教程II

本文参考FastAPI教程https://fastapi.tiangolo.com/zh/tutorial Cookie参数 定义Cookie参数与定义Query和Path参数一样。 具体步骤如下&#xff1a; 导入Cookie&#xff1a;from fastapi import Cookie声明Cookie参数&#xff0c;声明Cookie参数的方式与声明Query和Path参数…...

Facebook的投流技巧有哪些?

相信大家都知道Facebook拥有着巨大的用户群体和高转化率&#xff0c;在国外社交推广中的影响不言而喻。但随着Facebook广告的竞争越来越激烈&#xff0c;在Facebook广告上获得高投资回报率也变得越来越困难。IPIDEA代理IP今天就教大家如何在Facebook上投放广告的技巧&#xff0…...

告别激活弹窗:KMS_VL_ALL_AIO智能激活工具完全指南

告别激活弹窗&#xff1a;KMS_VL_ALL_AIO智能激活工具完全指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活烦恼吗&#xff1f;每次开机都看到"需要激活"的提…...

Netgear路由器急救指南:nmrpflash如何让变砖设备重获新生

Netgear路由器急救指南&#xff1a;nmrpflash如何让变砖设备重获新生 【免费下载链接】nmrpflash Netgear Unbrick Utility 项目地址: https://gitcode.com/gh_mirrors/nmr/nmrpflash 当你心爱的Netgear路由器因为固件升级失败、意外断电或其他原因变成一块"砖头&q…...

FanControl终极指南:免费开源的风扇控制神器,轻松解决Windows散热与噪音问题

FanControl终极指南&#xff1a;免费开源的风扇控制神器&#xff0c;轻松解决Windows散热与噪音问题 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https:…...

恶劣环境下LED发光服饰的可靠系统构建:从设计到工艺的工程实践

1. 项目概述与核心挑战如果你曾经尝试过制作一件会发光的服装&#xff0c;无论是为了音乐节、万圣节还是水下表演&#xff0c;你大概都体会过那种“亮一次&#xff0c;修三次”的挫败感。LED灯带在工作室的桌面上测试时完美无瑕&#xff0c;一旦穿到身上&#xff0c;开始活动、…...

深度解析:Performance-Fish如何通过四级缓存架构实现《环世界》400%性能优化

深度解析&#xff1a;Performance-Fish如何通过四级缓存架构实现《环世界》400%性能优化 【免费下载链接】Performance-Fish Performance Mod for RimWorld 项目地址: https://gitcode.com/gh_mirrors/pe/Performance-Fish Performance-Fish是《环世界》&#xff08;Rim…...

终极指南:如何在Mac上免费备份和导出微信聊天记录

终极指南&#xff1a;如何在Mac上免费备份和导出微信聊天记录 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否曾因误删重要微信聊天记录而懊恼&#xff1f;或是需要…...

终极指南:3步实现PotPlayer实时字幕翻译,外语视频无障碍观看

终极指南&#xff1a;3步实现PotPlayer实时字幕翻译&#xff0c;外语视频无障碍观看 【免费下载链接】PotPlayer_Subtitle_Translate_Baidu PotPlayer 字幕在线翻译插件 - 百度平台 项目地址: https://gitcode.com/gh_mirrors/po/PotPlayer_Subtitle_Translate_Baidu 还…...

合宙Air153C看门狗芯片:嵌入式系统可靠性的硬件守护方案

1. 项目概述&#xff1a;一颗“小而美”的国产看门狗芯片最近在做一个低功耗的户外监测设备项目&#xff0c;主控用的就是合宙的Air系列MCU。在调试过程中&#xff0c;最让我头疼的就是系统偶尔的“死机”问题。设备部署在野外&#xff0c;不可能每次都跑过去手动重启。正当我琢…...

AI智能体操作安卓设备:基于agent-droid-bridge的自动化实践

1. 项目概述&#xff1a;连接AI与安卓设备的桥梁 最近在折腾AI智能体&#xff08;Agent&#xff09;和自动化流程时&#xff0c;遇到了一个挺有意思的需求&#xff1a;如何让运行在服务器上的AI程序&#xff0c;直接去操作一台真实的安卓手机或模拟器&#xff0c;完成一些复杂的…...

OpenClaw量化回测性能调优指南:从数据加载到并行计算的实战优化

1. 项目概述&#xff1a;从开源工具到性能调优的艺术最近在跟几个做量化交易的朋友聊天&#xff0c;他们都在为一个问题头疼&#xff1a;策略回测和实盘执行的速度。动辄几十个G的历史数据&#xff0c;复杂的因子计算&#xff0c;加上高频的模拟交易&#xff0c;一套流程跑下来…...