自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(67)
  • 收藏
  • 关注

原创 借助DS用python帮你编写脚本(辅助开发测试)

在Windows和macOS上,soundfile通常会自带预编译的库。{"freq": 10000, "start": 10.0, "end": 12.0, "label": "高频(10kHz)"},{"freq": 250, "start": 2.0, "end": 4.0, "label": "低频(250Hz)"},上述是DS的回答,但上述的生成的完整脚本,因为带有中文注解,在WINDOS执行脚本,会执行出错,需要多一个提问,即可生成完整可执行的脚本。

2025-05-30 17:36:51 715

原创 同属结构体类型,不同变量实例的用法

* 自定义温度查询响应 */{"+TEMP:", UMA503_AT_RESULT_SUCCESS}, // 成功带温度数据{0}

2025-05-22 11:27:15 689

原创 指针数组表示不定长字符串列表的用法

内存占用更高效(指针大小固定,通常为4或8字节,字符串本身共享常量区)。"UMA503", // 指针指向常量字符串。(如 "UMA503" 和 "YM310" 长度不同)。"" // 空字符串作为结束标志。RT_NULL // 哨兵值(空指针)内存连续存储,可能浪费空间(短字符串填充空白字符)。"" // 结束标志(空字符串)字符串存储在只读区,不可修改(符合设计预期)。// 需要指定每行长度(按最长字符串定义)需额外处理结束标志(如空字符串)。

2025-05-16 15:20:49 713

原创 嵌入式系统分层设计和函数表抽象硬件差异应用

/ 扫描Wi-Fi。// 获取ICCID。

2025-05-16 14:12:56 862

原创 结构体函数指针实现模块化、解耦、接口统一

的作用:定义获取IMEI的接口规范,由具体硬件驱动实现。的意义实现硬件操作的抽象与解耦。提供统一、可扩展、安全的接口管理机制。支持动态切换实现和多硬件兼容,是嵌入式系统中常见的设计模式(类似面向对象的“多态”)。

2025-05-16 11:04:19 779

原创 智能穿戴设备疾病预警能力分析

智能穿戴设备(如智能手表、手环、健康监测贴片等)在疾病检测和预警方面的能力正在快速发展,目前已经能够部分实现某些疾病的早期预警和健康风险提示,但受限于技术成熟度、数据精度和医疗法规,仍存在一定的局限性。:无创血糖监测技术(如基于PPG或射频传感器)尚在实验阶段,但部分设备(如三星Galaxy Watch)可结合微创传感器(需外接贴片)辅助糖尿病患者管理血糖。:通过光学心率传感器(PPG)和单导联心电图(ECG)检测心率异常(如房颤、心动过速/过缓)。实时数据同步至医院平台,供医生远程评估(如慢性病管理)。

2025-05-15 15:52:05 323

原创 华为Watch的ECG功能技术分析

华为Watch的ECG(心电图)功能通过硬件传感器、算法优化和医疗认证的结合,实现了对心脏电活动的监测和房颤(AFib)等心律失常的预警。采用医疗级ECG模拟前端芯片(AFE),如TI(德州仪器)的ADS1292R等,支持低噪声、高采样率(通常≥200Hz)。结合PPG(光学心率)数据交叉验证,提高检测可靠性(如ECG和PPG心率不一致时触发警告)。通过RR间期变异性判断心律是否规则,识别房颤(AFib)的典型特征(如不规则不规则心律)。结合加速度计数据,识别手臂运动导致的信号失真,动态调整算法参数。

2025-05-15 15:47:06 1154

原创 智能可穿戴设备检测呼吸频率技术分析

呼吸时胸腹部的周期性起伏会产生微小的身体运动,设备内置的加速度传感器可通过分析这些振动信号推算呼吸频率。呼吸会调节自主神经系统,导致心跳间隔的周期性变化(例如吸氣时心率稍快,呼气时稍慢)。呼吸会影响血管的节律性收缩和血容量,PPG信号中的低频成分可能反映呼吸频率。通过微弱电流测量皮肤阻抗变化,呼吸引起的胸腔扩张会改变阻抗值,从而直接检测呼吸节律。消费级设备的呼吸频率数据通常为估算值,不可替代医疗级设备(如医院用的呼吸监测仪)。长期追踪呼吸频率变化,辅助发现异常(如焦虑、睡眠呼吸暂停等)。

2025-05-15 15:38:30 326

原创 如何利用PPG实现呼吸频率检测

在睡眠状态下,利用光电容积描记法(PPG)检测呼吸频率的核心原理是:呼吸活动会通过胸腔压力变化和自主神经调节,对血流产生周期性调制作用。这种调制效应会体现在PPG信号的幅度、频率或相位变化中。以下是具体实现方法和技术细节:胸内压变化: 吸气时胸腔扩张 → 胸内压降低 → 静脉回流增加 → 外周血容量短暂上升 → PPG信号幅度增强。 呼气时胸腔收缩 → 胸内压升高 → 静脉回流减少 → PPG信号幅度减弱。自主神经调节: 呼吸节律通过迷走神经影响心率变异性(HRV),导致PPG脉冲间隔的周期性波动(呼

2025-05-14 16:32:13 511

原创 ESP32 ADC 麦克风采集应用和应用场景

ESP32开发板(支持ADC1/ADC2)模拟麦克风(如驻极体麦克风)前置放大电路(可选,用于提升麦克风信号电压)麦克风信号输出端 → ESP32的ADC引脚(如GPIO36,对应麦克风偏置电压需通过电阻分压或运放电路提供(确保信号在0~3.3V范围内)。// 配置参数#define SAMPLE_RATE 8000 // 采样率8kHz#define BUFFER_SIZE 1024 // 采样缓冲区// 初始化ADC// 12位分辨率。

2025-05-08 10:52:31 968

原创 ESP32 DAC音频应用示例与场景

ESP32的DAC适用于对音质要求不高的场景,通过简单的C代码即可实现基础音频功能。:生成一个周期为1000Hz的正弦波样本数组,范围为0-255(8位DAC)。// 生成正弦波样本数组(8-bit DAC,值范围0-255):生成方波或正弦波信号,通过DAC输出不同频率的声音。:将预录的语音转换为PCM数据,通过DAC播放。

2025-05-08 10:48:22 932

原创 ESP32 PWM音频应用及场景说明

ESP32的PWM音频适用于对音质要求不高、成本敏感的场景,如报警提示、简单音乐播放和教学实验。若需高保真音频,建议结合I2S接口和外部DAC实现。

2025-05-08 10:45:07 837

原创 C语言回调函数初始化与触发方法

/ 直接赋值函数指针。// 传入事件类型参数。// 将会打印 ---alarm:1----// 将会打印 ---alarm:2----if (detector && detector->callback) { // 安全检查。// 当检测到事件时(示例:事件类型 1)// 注册回调函数(关键步骤)// 通过函数指针调用回调函数。// 触发回调函数(通常在检测到事件时调用)// 另一个事件示例(事件类型 2)

2025-05-07 14:50:10 283

原创 嵌入式MCU语音识别算法及实现方案

在嵌入式MCU(微控制器单元)中实现语音识别,由于资源限制(如处理能力、内存、功耗等),通常需要轻量级算法和优化技术。根据具体需求(词汇量、精度、功耗),开发者可结合传统算法与轻量化深度学习模型,并利用嵌入式优化技术实现高效语音识别。:端到端轻量化模型(如Wave2Vec Tiny)、MCU与云端协同(边缘计算)。:利用卷积层提取语音频谱图(如MFCC、Mel-Spectrogram)特征。模型量化(8位整型量化)、剪枝(Pruning)降低计算量。:提供端到端语音识别开发工具链(数据采集、训练、部署)。

2025-05-06 17:47:06 1122

原创 声纹匹配完整实现代码

ESP32实现实时音频频谱分析。当用户说出预设关键词时,系统进行声纹特征匹配。配置I2S来读取音频数据,然后进行FFT处理。音频采样率通常需要至少8kHz,对于语音识别来说可能足够。但FFT的大小会影响频率分辨率。比如,用256点的FFT,采样率8kHz的话,每个频段大概是31.25Hz的分辨率。实时处理的话,需要定时读取音频缓冲区,进行FFT计算,然后得到频谱数据。关键词检测。这里需要一个简单的语音识别算法,或者使用更高级的声纹匹配。声纹特征通常包括频谱特征、MFCC等。

2025-05-06 16:42:59 500

原创 ESP32-S3开发板麦克风录音到SD卡存储测试

format_if_mount_failed = true, //若挂载不成功是否需要格式化SD卡。//SDMMC插槽配置。//设置为1线SD模式。

2025-04-23 17:06:02 683

原创 ESP32音频识别(FFT)实测调整(ESP-IDF 5.4)

/ 归一化到[-1,1]//dynamic_threshold = MAX(dynamic_threshold, 30.0f);if(abs(i - center_bin) > exclude_range) // 排除目标区域。#define MIN_DURATION 5 // 最小持续帧数(50ms/帧)// 100ms周期。

2025-04-22 16:09:32 746

原创 音频识别优化(FFT)

整合多频段检测、动态阈值调整和持续时长验证的完整代码实现,包含详细注释:/*======= 系统配置 =======*/#define FFT_SIZE 1024 // FFT点数#define SAMPLE_RATE 16000 // 采样率#define NOISE_BINS 50 // 噪声基底计算区间。

2025-04-17 15:11:27 775

原创 ESP32开发板PDM录音到FFT分析,声音频率识别实例

PDM麦克风实时采集音频信号,然后对采集到的信号进行FFT分析,识别是否存在特定的频率,比如预设的某个频率音调。用于声音触发或者频率检测应用,比如检测特定音调的门铃或者警报声。需要识别特定频率,比如检测某个频率成分是否存在超过阈值。首先,需要考虑实时处理数据流,实时处理每个数据块。每次从I2S读取一定数量的样本(比如SAMPLE_SIZE),然后对这个数据块进行FFT分析。需要注意的问题包括:实时处理的延迟、FFT计算的开销、如何高效处理数据流,以及如何从时域的PDM数据转换到频域进行分析。

2025-04-17 14:54:40 926 1

原创 ESP-DSP库(点积、FFT、DCT、FIR、IIR、Kalman)说明

计算两个一维数组的点积,支持整型(int16)和浮点型(float)数据。:扩展至二维图像处理,支持不同数据类型的图像(如int8、uint16等)。// 浮点型向量点积(ANSI C通用实现)// 图像点积(支持偏移和步长)src1src2:输入数组或图像描述符。dest:结果存储指针(注意:函数为累加操作,需先初始化*dest=0len:数组长度或图像采样范围。shift:结果右移位数(用于定点数防止溢出)。step1step2:数组元素的步长(稀疏数据处理)。

2025-04-17 11:20:34 888

原创 MCU控制4G模组(标准AT命令),CatM的最大速率?

比如,发送一个1KB的数据包,需要发送AT+QISEND命令,等待模块响应,然后发送数据,再等待确认。假设每个数据包需要100毫秒的处理时间,那么每秒最多发送10个数据包,每个1KB的话,大约是10 KB/s,即80 kbps。考虑使用AT命令时的开销。每次发送数据都需要通过AT命令,比如AT+QISEND,会引入额外的处理时间和串口通信延迟。如果不用透传,每个数据包都需要封装成AT命令,这会增加时间,从而降低有效速率。但实际中,由于协议开销(起始位、停止位等),有效数据速率可能只有约11.5 KB/s。

2025-04-10 17:22:53 1000

原创 FlashDB 在嵌入式系统中占用硬件资源

可运行在。

2025-04-09 17:25:10 863

原创 实时操作系统(RTOS)中,任务间通信机制

/ FreeRTOS 示例(阻塞式获取,超时时间设为 portMAX_DELAY 表示无限等待) xSemaphoreTake(xSemaphoreHandle, pdMS_TO_TICKS(100));:当H尝试获取L持有的互斥量时,L的优先级被临时提升至H的优先级,使其尽快释放资源,避免M任务抢占导致H长期阻塞。是一种关键的同步和互斥机制,用于协调多任务对共享资源的访问或实现任务间的同步。:低优先级任务(L)持有资源 → 中优先级任务(M)抢占CPU → 高优先级任务(H)等待资源被阻塞。

2025-04-07 16:14:38 585

原创 RT-Thread 和 FreeRTOS 嵌入式实时操作系统对比

RT-Thread来自中国,功能比较全面,有丰富的中间件和组件,比如文件系统、网络协议栈,可能适合需要复杂功能的项目。FreeRTOS是MIT许可证,修改和闭源比较自由,而RT-Thread有Apache和商业许可,可能更适合需要商业支持的公司。内核架构方面,RT-Thread可能更模块化,支持动态加载模块,而FreeRTOS更静态,配置灵活但可能需要手动调整。功耗管理方面,RT-Thread可能有更细致的电源管理策略,适合电池供电的设备,而FreeRTOS需要自己实现或依赖第三方库。

2025-04-03 12:13:56 676

原创 串口中断接收与环形缓冲实例(apollo3 blue plus)

if(cnt == 1)//UTC(Coordinated Universal Time)时间,hhmmss(时分秒。else if(cnt == 9)//UTC日期,ddmmyy(日月年)格式。else if(cnt == 7)//地面速率。else if(cnt == 8)//地面航向。else if(cnt == 5)//经度。else if(cnt == 3)//纬度。

2025-03-31 16:36:28 790

原创 在中断服务程序(ISR)中直接调用阻塞式 xQueueSend()导致系统崩溃,解决方法

/ 优先级数值需大于 configMAX_SYSCALL_INTERRUPT_PRIORITY。通过以上方法,可以在中断中安全地使用队列,确保系统的实时性和稳定性。// 3. 触发任务切换(如果有更高优先级任务就绪)// 处理队列满的情况(如记录错误)// 2. 发送数据到队列(中断安全方式)// 队列已满,记录错误或采取恢复措施。// 原错误代码(在中断中使用阻塞式API)// 正确代码(使用中断安全API)// 处理队列创建失败。// FreeRTOS 队列句柄。// 1. 清除中断标志。

2025-03-28 15:16:44 873

原创 Apollo3的GPIO中断回调函数中直接调用FreeRTOS的 xTimerStart() 会导致系统崩溃解决方法

的作用:在中断上下文中安全触发任务切换,确保高优先级任务及时执行。关键原则在中断中必须使用FromISR后缀的 API。始终检查并传递到。确保中断优先级配置正确,避免破坏 FreeRTOS 内核。

2025-03-28 14:49:58 698

原创 xQueueSendFromISR() 和 xQueueSend()应用对比

在 FreeRTOS 中,和是用于向队列发送数据的两个关键函数,但它们的用途、行为和使用场景有显著差异。

2025-03-26 11:13:38 929

原创 ambiq apollo3 ADC实例程序注释

include "am_mcu_apollo.h" // Apollo MCU 外设寄存器定义和HAL库#include "am_bsp.h" // 板级支持包(引脚定义、LED函数等)#include "am_util.h" // 通用工具函数(如printf重定向)//// 全局变量//// ADC设备句柄,用于操作ADC实例// ADC采样计数信号量(ISR与主程序同步)

2025-03-25 16:56:52 801

原创 参考apollo3 FLASH样例改写实际应用的接口函数(带磨损均衡处理)

define WEAR_LEVELING_END_ADDR (START_PAGE_ADDRESS + WEAR_LEVELING_PAGE_NUM * FLASH_PAGE_SIZE - 1) // 结束地址。#define FLASH_PAGE_SIZE AM_HAL_FLASH_PAGE_SIZE //每页大小为8K字节,

2025-03-25 15:10:26 693

原创 结构体变量与指针变量相异处

可变性方面,结构体变量的大小和内容可以改变,而指针变量本身的大小固定,但指向的内容可以变。比如指针可以重新指向其他内存,而结构体变量本身的大小由其成员决定,可能需要动态调整,但通常结构体大小是固定的。结构体变量是存储结构体类型数据的变量,而指针变量则是存储内存地址的变量。内存分配方面,结构体变量通常在栈上自动分配,除非动态申请,而指针变量本身在栈上,但指向的内存可能在堆上。首先,存储内容方面,结构体变量直接保存结构体的数据成员,而指针变量保存的是地址。函数传递的时候,结构体变量传的是副本,指针传的是地址。

2025-03-24 12:17:33 585

原创 ambiq apollo3 Flash实例程序注释

include "am_mcu_apollo.h" // Apollo3芯片的硬件抽象层头文件//!Flash操作函数表(BootROM函数跳转表)// 各成员为BootROM中预置的Flash操作函数地址(通过逆向工程或厂商提供)((int (*)(uint32_t, uint32_t))0x0800004d), // flash_mass_erase: 整片擦除。

2025-03-20 17:40:43 585

原创 一个基于 Apollo3 芯片 和 FreeRTOS 的软件定时器应用实例

pdMS_TO_TICKS:将毫秒转换为 FreeRTOS Tick 数,需确保 configTICK_RATE_HZ 在 FreeRTOSConfig.h 中正确定义(例如 1000Hz 对应 1ms/Tick)。使用 am_hal_sysctrl_sleep(AM_HAL_SYSCTRL_SLEEP_DEEP);pdMS_TO_TICKS(TEMP_READ_PERIOD_MS), // 转换为Tick数。

2025-03-19 14:25:35 972

原创 BLE(低功耗蓝牙)通信从发送到手机成功接收需要的时间

在BLE(低功耗蓝牙)通信中,MTU=247字节的场景下,如果MCU向手机发送一包200字节的音频数据,数据包总长度 = 3B(头) + 200B(数据) + 3B(CRC) = 206B。:BLE主从机通信的时间间隔(默认7.5ms~4s,典型值为20ms~100ms)。:BLE 5.0支持2M PHY(速率2Mbps)或1M PHY(速率1Mbps)。ACK包长度=14B(固定),传输时间 = (14 × 8) / 2M ≈。BLE数据包包含协议头(3B)、有效载荷(≤244B)和CRC(3B)。

2025-03-19 11:34:27 524

原创 apollo3 blue plus调试函数接口打印uint64_t数据问题

//*****************************************************************************//! @file am_util_stdio.c//!//! @brief A few printf-style functions for use with Ambiq products// This is part of revision release_sdk_3_2_0-dd5f40c14b of the AmbiqSuite Dev

2025-03-18 17:57:27 858

原创 typedef uint8_t bdAddr_t[6]; 和结构体 dmAdvCb_t结合的妙用

含义定义一个名为bdAddr_t的新类型,它是一个包含 6 个uint8_t元素的数组。等价于uint8_t[6],但通过typedef提高了代码可读性。用途通常用于表示6字节的固定长度二进制数据蓝牙 MAC 地址(BLE 设备唯一标识符)以太网 MAC 地址其他需要 6 字节地址的通信协议。示例// 声明并初始化bdAddr_t:通过typedef定义 6 字节数组类型,提高代码可读性,专用于 MAC 地址等场景。dmAdvCb_t。

2025-03-18 16:20:24 745

原创 apollo3蓝牙MAC地址出处

///!//!//!/////*!*/else/*!*/else/*!*//*!*/pMsg++;pMsg++;break;break;break;break;

2025-03-18 16:09:35 520

原创 .gitignore 文件用于 Git 应忽略的文件夹的格式

gitignore文件用于指定 Git 应忽略的文件或文件夹的匹配规则。:每个忽略规则单独占一行。空行会被忽略。以开头的行是注释(除非用\#转义)。:匹配任意字符(除了路径分隔符**:匹配多级目录(如a/**/b匹配a/ba/x/ba/x/y/b?:匹配单个字符。开头:仅匹配项目根目录下的文件(如/build仅忽略根目录下的build文件)。结尾:仅匹配目录(如logs/会忽略logs目录,但不会忽略名为logs的文件)。!开头:排除已忽略的文件(优先级高于忽略规则)。

2025-03-14 11:24:43 447

原创 Windows 系统中安装 make 命令工具

MSYS2 是一个集成了 GNU 工具链的 Windows 开发环境,支持。MinGW-w64 是 Windows 下的 GNU 工具链,包含。下载安装程序并运行,按照提示安装(默认路径为。如果提示关闭终端,重新打开后再次运行。在 Windows 系统中安装。目录添加到系统环境变量。下载 MinGW-w64。下载并安装 MSYS2。若直接下载,选择包含。进入 MinGW 的。

2025-03-13 10:55:03 1936

原创 博客摘录「 sscanf函数使用详解」2023年6月5日

输出结果:converted=3, year=2019, month=11, day=03"%04d%02d%02d"是用来解析字符串的格式,%表示格式转换的开始,d表示转换为一个整数,04作为d的修饰,表示这是一个长度为4位的整数,不足4位时以0补齐。

2025-03-12 18:23:22 335

BIN文件生成工具winhex

BIN文件生成工具winhex

2025-03-12

ambiq电脑版蓝牙测试工具

ambiq电脑版蓝牙测试工具

2025-03-12

ambiq SDK程序代码

ambiq SDK程序代码

2025-02-12

Apollo3-Blue OTA中文说明

Apollo3-Blue OTA中文说明

2025-02-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除