[PSOC™] 【英飞凌 CY8CKIT-062S2-AI评测】英飞凌PSOC6 AI评估套件的智能鼾声监测系统评测

[复制链接]
11|0
current-hu 发表于 2025-11-18 23:39 | 显示全部楼层 |阅读模式
[i=s] 本帖最后由 current-hu 于 2025-11-19 09:59 编辑 [/i]

【英飞凌 CY8CKIT-062S2-AI评测】英飞凌PSOC6 AI评估套件的智能鼾声监测系统评测

1. 项目概述

英飞凌PSOC™6人工智能评估套件是一款专为边缘AI应用设计的创新开发平台。该套件有着完整的AI开发生态,使用配套的DEEPCRAFT**™Studio平台,可以完成端到端的AI模型开发、优化和部署。当然硬件本身也是很抗打。双核MCU,兼顾高性能和低功耗需求。除此之外,接口丰富,可以对接多种传感器,原生支持数字麦克风、雷达、压力传感器等多种传感器,免去很多硬件配置的麻烦。最重要的是,有这么多功能,这款板子仍然小巧,实在是适合很多硬件AI产品的开发。此次拿到评估套件后,使用了鼾声检测模型来检测开发板的性能,接下来就是该项目的详细内容,一起来看看吧。

2. 硬件平台深度评测

2.1 开发板规格参数

参数类别 规格详情 测试结果
处理器 PSOC6 MCU (双核ARM Cortex-M4/M0+) 处理性能优秀,满足实时AI推理需求
存储容量 8MB QSPI Flash 足够存储复杂AI模型和运行数据
功耗表现 运行模式: 28.3mW低功耗模式: 6.7mW 续航表现优异,适合长时间监测
接口支持 I2S、PDM、I2C、SPI、UART 传感器兼容性良好
尺寸规格 35mm × 45mm 紧凑便携,易于集成

2.2 物料清单

  • PSOC6开发套件
  • 串口数据线
  • 电脑主机

3. 相关平台软件安装步骤和使用

3.1 安装开发环境

1. 下载ModusToolbox(英飞凌官方开发工具)

访问:https://www.infineon.com/modustoolbox

下载对应操作系统的版本(约2GB)

2. 安装过程

  • 双击安装包
  • 选择默认安装路径
  • 等待自动安装完成(约15分钟)

3.2 安装DEEPCRAFT**™**Studio

1. 注册英飞凌开发者账号

访问:https://www.infineon.com/deepcraft

点击"Sign Up"注册

2. 下载DEEPCRAFTStudio

登录后进入控制台,下载AI开发平台

3.使用DEEPCRAFTStudio创建项目

4.部署代码到硬件

  • 打开modustoolbox
  • 导入生成的项目:选择DEEPCRAFTStudio生成的项目文件夹
  • 配置硬件参数
  • 编译项目
  • 烧录到开发板

3连接开发板

  • 用USB-C线连接开发板和电脑
  • 等待电脑识别设备
  • 检查设备管理器,确认串口出现

3.2 软件架构设计

采用分层架构模块化设计,确保系统可维护性和扩展性:

  • 数据采集层:串口通信、数据解析
  • 业务逻辑层:鼾声检测算法、会话管理
  • GUI层:GUI界面、数据可视化
  • 服务层:数据持久化、报警管理

4. 软件系统实现

4.1 设计思路

  • 硬件负责音频输入和AI运算,能够检测是否有鼾声;
  • 数据通过串口上传给上位机软件;
  • 上位机软件记录鼾声次数和持续时间,超过特定时间进行鼾声报警;

4.2 软件架构设计

采用分层架构和模块化设计,确保系统可维护性和扩展性:

  • 数据采集层:串口通信、数据解析
  • 业务逻辑层:鼾声检测算法、会话管理
  • GUI层:GUI界面、数据可视化
  • 服务层:数据持久化、报警管理

4.2 界面布局

  • 开始停止功能
  • 鼾声次数记录
  • 持续鼾声报警功能
  • 鼾声活动检测图像

4.3 核心功能模块

4.3.1 单次鼾声信号处理

每次检测到"snore"信号就记录当前时间戳

更新最后鼾声时间,用于超时检测

调用鼾声检测算法判断是否构成持续打鼾

def process_snore_signal(self):
    """处理snore信号"""
    current_time = time.time()
    self.snore_timestamps.append(current_time)  # 记录时间戳
    self.last_snore_time = current_time         # 更新最后鼾声时间
    self.total_snore_signals += 1               # 总计数+1
  
    # 通知图表更新
    if self.chart_callback:
        self.chart_callback(current_time, 1.0)
  
    # 检测呼噜会话
    is_session, confidence, interval = self.detect_snore_session()
  
    if is_session and not self.is_snoring:
        # 开始新的呼噜会话
        self.is_snoring = True
        self.snore_session_start = current_time
        self.total_snore_sessions += 1
        print(f"检测到打鼾会话! 置信度: {confidence:.1f}%")
  
    elif self.is_snoring:
        # 更新正在进行的呼噜会话
        session_duration = current_time - self.snore_session_start
        print(f"持续打鼾中... 时长: {session_duration:.1f}秒")

4.3.2 鼾声持续检测

窗口大小:15秒

最小鼾声数:MIN_SNORES_FOR_SESSION(默认3次)

判断条件:在15秒窗口内至少有3次鼾声信号

def detect_snore_session(self):
    """检测呼噜持续"""
    if len(self.snore_timestamps) < self.MIN_SNORES_FOR_SESSION:
        return False, 0, 0

    current_time = time.time()
    time_window = 15.0  # 时间窗口大小

    # 获取时间窗口内的呼噜信号
    recent_snores = [t for t in self.snore_timestamps 
                    if current_time - t <= time_window]

    if len(recent_snores) >= self.MIN_SNORES_FOR_SESSION:
        # 简单置信度计算
        confidence = min(80 + (len(recent_snores) - self.MIN_SNORES_FOR_SESSION) * 10, 100)
  
        # 计算平均间隔
        intervals = []
        for i in range(1, len(recent_snores)):
            intervals.append(recent_snores[i] - recent_snores[i - 1])
        avg_interval = np.mean(intervals) if intervals else 0
  
        return True, confidence, avg_interval

    return False, 0, 0

4.3.3超时检测

最大间隔:MAX_SNORE_INTERVAL(默认5秒)

最小会话时长:MIN_SESSION_DURATION(默认10秒)

结束条件:超过5秒没有新的鼾声信号

def check_session_timeout(self):
    """检查会话超时"""
    if not self.is_snoring:
        return

    current_time = time.time()
    silence_duration = current_time - self.last_snore_time  # 静默时长

    if silence_duration > self.MAX_SNORE_INTERVAL:
        # 会话结束
        session_duration = current_time - self.snore_session_start
  
        if session_duration >= self.MIN_SESSION_DURATION and self.ui_callback:
            # 准备会话信息
            session_info = {
                'start_time': datetime.fromtimestamp(self.snore_session_start).isoformat(),
                'duration': session_duration,
                'snore_count': len([t for t in self.snore_timestamps
                                  if self.snore_session_start <= t <= current_time]),
                'end_time': datetime.fromtimestamp(current_time).isoformat(),
                'avg_interval': self.calculate_avg_interval()
            }
    
            # 回调UI触发报警
            self.ui_callback(session_info)
            print(f"呼噜会话结束: 持续{session_duration:.1f}秒")

        self.is_snoring = False

5.常见问题及解决方案

5.1 开发板无法连接

✅ 解决方案:

1. 检查USB线是否插好

2. 尝试不同的USB端口

3. 重启电脑

4. 检查设备管理器中的串口编号

5.2 AI模型不准确

解决方案:

1. 重新训练模型,使用更多数据

2. 调整模型参数

3. 收集真实的鼾声数据进行微调

4. 检查音频预处理步骤

6.实现结果和结论

最终效果:就是当检测到鼾声时会显示鼾声预警;当持续十秒检测到多于5次鼾声时会出现音频报警。

image.png

测试效果还算可以,不过由于我使用的的是已经训练好的模型,所以在测试的时候,使用了不同的鼾声数据来对比,发现模型在鼾声特殊频率时会有更高效的检测结果,而在鼾声呼气阶段时会无数据输出;并且模型有时会在持续鼾声下显示未检测到。

我猜测可能是两个原因:①鼾声检测可能主要以特殊频率为特征量数据,所以鼾声吸气时会比呼气易检测②设置的参数不是很好,需要多次调整来适应。不过就目前来看,这个检测率还是比较高的,可以配合适当的软件算法也可以有很好的效果

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部