CSR8670项目实战:BlueHeartSound2电子心音计

为了让CSR867x的开发更容易,现与思度科技联合推出CSR867x学习板【思度科技CSR开发板】。

技术交流QQ群号:743434463
开发板会员QQ群号:725398389(凭订单号入群,赠PPT、项目源码、视频教程)
——————————正文分割线———————————–

1. 引言

在BlueHeartSound蓝牙听诊器的基础上,增加了OLED显示屏、android APP实时录音、电池供电、软件滤波等功能。

2. 主要功能

  • 支持心音采集,通过耳机输出
  • 支持音量控制
  • 支持android APP实时心音录制
  • 支持OLED显示信息(电池电量、配对信息、滤波模式、当前心率)

系统框图如下:
CSR8670项目实战:BlueHeartSound2电子心音计_第1张图片

3. 项目难点

项目的难点主要有两个。第一点是打通传感器输入到安卓手机的音频链路,第二点是滤波器的设计。

3.1 打通音频链路

先谈第一个难点。常规的思路是在手机和CSR8670之间建立SPP连接,传感器信号在压缩编码后通过SPP链路传送到手机端,在手机端将压缩后的数据解码成PCM格式并显示:
CSR8670项目实战:BlueHeartSound2电子心音计_第2张图片
ADK4.3中新增的voice assistant功能提供了一个可复用的框架,示意图如下:
CSR8670项目实战:BlueHeartSound2电子心音计_第3张图片
传感器的采集的数据首先经过sbc编码将码率压缩1/4,然后通过管道类型的流将数据搬运到VM层,再通过基于RFCOMM管道的GAIA协议将数据通过蓝牙连接发送给手机端的GAIA协议。

3.2. 滤波器设计

客户的需求是能够让传感器数据通过一组带通滤波器再由耳机输出。同时客户可以方便地修改滤波器的通带和阻带的截止频率,且阻带衰减大于12dB。

这里我们使用窗函数FIR滤波器来生成滤波器系数,matlab代码如下:

    % 生成滤波器系数,16k采样频率,20Hz~500Hz带通,默认hamming窗,600阶
    % [20 500] 16k 0.0025 = 20/8000, 0.0625 = 500/8000
    command1 = 'b = fir1(600,[0.0025 0.0625]);';
    eval(command1);
    freqz(b,1);

生成的滤波器响应如下:
CSR8670项目实战:BlueHeartSound2电子心音计_第4张图片
然后我们将fir滤波器系数保存成文件并include到CSR8670的kalimba DSP中编译。

  • matlab生成dat文件:
    % create data file for use in kalimba code
    fid=fopen('fir_coefs_1.dat','w');
    fprintf(fid,'// filter coefficients for use in my_second_dsp_app\n');
    fprintf(fid,'// created in matlab using : %s\n',command1);
    for i = 1:length(b-1)
        fprintf(fid,'%12.9f',b(i));
        if (i ~= length(b))
            fprintf(fid,',\n');
        else
            fprintf(fid,'\n');
        end
    end
    fclose(fid);
  • 在dsp工程中编译:
   .VAR/DMCIRC $user_code.fir_filter.filter_coefs_1[$FILTER_LENGTH] = 
                                                                    #include "fir_coefs_1.dat"
                                                                    ;

为了能在android APP和本地耳机端同时听到心音,需要修改dsp中的音频链路,示意图如下:
CSR8670项目实战:BlueHeartSound2电子心音计_第5张图片
传感器的输入在经过FIR滤波后复制两份输出给2个Gain模块,这两个Gain模块可分别控制输出给耳机和手机APP的信号幅度。

4. 总结

后续改善的方向可以是降低sensor input的采样率,使得FIR的滤波器阶数可以减小一半。节省出的dsp资源可用来增强传感器输入信号的降噪处理以抑制噪声,同时增加本地心率检测功能。

你可能感兴趣的:(蓝牙方案,CSR8670蓝牙芯片软件开发)