麦克思维
文章平均质量分 67
根基于声学,专注于听力保护,实践于蓝牙耳机专用平台方案。
MicMind
麦克思维
展开
-
络达开发---LED指示灯的自定义
图2 中的每一行都代表系统的一个状态,且每个状态下LED的行为都可以通过图3中的对话框进行配置。图2 中的这些默认配置都存储在工程的xml文件中,因此如何想把定制化的配置集成到SDK中,而不是每次编译成目标固件再重新配置的话,就需要把定制的LED模式更新的工程对应的xml文件中;如下代码所示,定义和图3中每个参数的意义,图3中的名称和代码结构体中的名称可以比较直观的对应起来,从注释中来获知其含义。代码的名称中可以比较直观 的看出状态的含义,此处不再一一讲述。3.配置工具中索引号的定义。原创 2024-02-20 15:50:31 · 937 阅读 · 0 评论 -
络达开发---- AB1562x左右两侧同一按钮不同功能
SDK支持MSync通信,即左右两个耳机之前的直接数据同步,比如对于音量+/-来说,默认情况下,按左侧和按右侧都会实现同样的动作,即音量+或者-,这是因为系统采用MCsync会自动同步一侧的动作到另一个。说明:AB1562X支持TWS,左右两个的耳机的按钮在硬件上是芯片的同一个IO口;即左右两侧同一按钮的动作对应不同的功能;在代码中可以知道是不被MCSync同步支持的,因此左右两侧可以判断自己所在的哪一侧来执行相应的动作。通过上面分析可以知道,如果左右想实现不同的事件,可以在。SDK版本:V1.5.2。原创 2023-04-27 14:37:58 · 705 阅读 · 0 评论 -
络达开发----如何开启DMIC
5、编译完成后,用ATK工具还需要选配一下语音MIC为数字MIC1,最终的配置如图4中红线圈起来的内容所示,注意:图2中提到采用的BIAS0,因此图4中的红圈4处选择BIAS0 enable;1、评估板上GPIO15/16支持两种模式的复用,是通过跳线冒来选择,因此需要把跳线冒选跳到数字MIC的电路通道上,如图3所示,把J1015和J1016的2和3号脚短接。因此,可以得知,在评估板上,只能使用GPIO15和GPIO16来充当数字MIC,那如何使用呢?4、修改完代码后,先clear一下工程,然后重新编译;原创 2023-01-12 14:59:33 · 1072 阅读 · 0 评论 -
络达开发----如何开启AGC功能
AGC是一个动态增益自动调节的功能,它可以依据设定好的规则,对外部或者输入音源进行动态增益的调整,然后再把结果输出到speaker上。SDK v2.11.0默认是不开启AGC功能的。原创 2022-08-31 09:44:19 · 565 阅读 · 0 评论 -
络达开发----如何手工实时调整ANC和PassThrough的增益
ANC和PassThrough支持动态调整其增益,比如ANC的消噪强度,或者PassThourgh的透传比例;PassThourgh其实就是在FF的ANC类型的基础上实现的,与ANC的消噪模式所不同的是滤波器的实现不同。Airoha官止提供的APP端,提供有接口可以调整这两类开增益,APP上显示的调整值的范围为[-20~0],如图1所示,那么本文讲解如何用物理按钮来实现该操作。......原创 2022-08-30 09:38:59 · 1012 阅读 · 0 评论 -
络达开发---UI定义+自定义按钮事件
络达的SDK中有默认的参考工程,其中包含默认的按钮的事件定义。这些定义是基于官方的评估板进行设计的。通常用户在开发自己的产品时,都是需要对其进行修改和定制。>,这两个为笔者添加的事件类型,原SDK中没有该定义,其目的是实现通过按钮来实时调整ANC的增益。对于TWS工程,还有左右两侧独立定义的区别。对于headset来说,只有单侧的按钮。笔者在此以Headset类型的工程为例来进行说明。至此,自定义按钮事件和UI的关联已经完成建立。中就是用来声名事件的类型。即为处理各按钮事件的函数;可以看到,代码中的事件..原创 2022-08-02 16:14:34 · 1513 阅读 · 0 评论 -
络达开发---串口日志&日志过滤
SDK默认是从UART0口输出日志的,板子上有物理UART0接口,并且默认的波特率是3Mbps,而普通的USB转串口设备是支持不了这么高的波特率的,这样的话就会导致日志出来有丢失和错误。因此,如果手上没有支持这么高波特率的设备的话,可以通过降低SDK中的波特率来实现。连接的波特率设置如下图所示,并且设置好并且连接到设备(设备需要开机),就会得到LogModuleFilter表中所示的内容,可以在这里来打开和关闭不需要的日志输出,这样在wareshark中就不会再显示那些被关闭的日志了。.........原创 2022-07-29 20:00:05 · 2923 阅读 · 0 评论 -
络达开发---自定义BLE服务(二):功能实现
本文讲解如何在该SDK中添加用户自居定义的BLE服务。该服务的源码可以存放在自己希望的位置,但为符合工程目录的合理性,建议放在工程所在的目录下面,假设我们的工程名称为注意添加的行需要在APP_PATH定义的后面,否则会module.mk中所使用的变量APP_PATH会为空值导至找不到源码文件;......原创 2022-07-28 14:34:49 · 1320 阅读 · 0 评论 -
络达开发---自定义Timer的实现
络达开发;蓝牙平台;声学原理;蓝牙耳机;原创 2022-07-27 09:46:58 · 337 阅读 · 0 评论 -
络达开发---自定义BLE服务(一):相关数据结构讲解
通常,对于一个服务下面的不同属性,可以共享同一个CCCD对象,而不必为每个属性都定义一个CCCD,通过在CCCD的回调函数中以不同的句柄来区分用户操作的是哪个属性。所以这里也解释了上面的GHP_RX_CHAR_VALUE_HANDLE的值为什么是0xA403,因为ble_ghp_rx_char属性对应的值的描述对象的句柄的值也为0xA403。val_name为字符的值。从该宏的定义是看不出来其与主服务的关系,这个关系是通过一个bt_gatts_service_rec_t的结构来实现关联的。.........原创 2022-07-21 13:07:08 · 1274 阅读 · 0 评论 -
络达开发--SideTone配置的來龍去脈
基中DTM()为FreeRTOS的一个任务,软件在启动后该任务便会一直运行,并且维护一个名为dtm_queue的本地队列,所有和SideTone相关的操作命令都会被先发送到该队列,然后由该Task来把命令从队列中提取并做相应的执行,其工作逻辑如图2所示。这些系统,是提前预置在代码中的,当然也可以编程手段来动态修改这些参数,比如从BL导入并存储在指定位置等,SDK中,此系数的位置如图1和图3所示,最终这些系数被写入了寄存器“AFE_SIDETONE_CON0”中。那么这个系数的写入又是如何存储的呢?...原创 2022-07-15 15:39:30 · 662 阅读 · 0 评论 -
络达开发-音频流处理-AAC/loopbackTest为例
那么,另一个问题,下面的这些接口所获取的存储取的是如何定义的,即第1个inoutbuffer,第1个inputbuffer指向的buffer是哪里,谁会往这个buffer里放数据呢?这两个指定的初始化,是在文件dsp_callback.c->DSP_Callback_ParaSetup(DSP_STREAMING_PARA_PTR)中完成,如下代码所示。参数input_buf为输入的音频数据,来自去蓝牙通道,比如从手机传过来的声音流;中被使用,并且是在解码的时候使用,因为可以猜出,AAC就是服务于A。...原创 2022-07-15 15:26:24 · 617 阅读 · 0 评论 -
络达开发-MCU中添加用户自定义功能模块
该示例把用户自定义的功能模块放在目录:mcu\middleware\third_party\wuYinTec下面;文件结构如下:该示例把用户自定义的功能模块放在目录:mcu\middleware\third_party\wuYinTec下面;文件结构如下:WuYinTec ----- module.mk ----- inc/ ----- wuYinTec.h ------ wuYinTec.cwuYinTec.h内容如下:#ifndef WUYIN_TEC_H#defi原创 2022-03-03 11:27:15 · 470 阅读 · 2 评论 -
络达开发-GPIO按键的定义
硬件回路针对AB1565的开发板的Headset工程来讲,KEY2的事件是不能使用的,原因是AB1565芯片的GPIO2是一个功能复用脚,可以用来实现USB接口下载固件,在芯片spec的第23页,如下图所示:因此,在开发板上,电路上默认接了个下拉电阻,如下图所示,默认装的是R1303而在SDK中,用于的GPIO中断口需要配置为上拉状态(DVDD_IO_0,约为1.8VDC),因此这样就会导致MCU内置的上拉电阻无去把电平拉高,从而无法完成事件的有效触发。下图为KEY2对应的电路部分,从原理原创 2022-03-03 11:25:47 · 1874 阅读 · 0 评论 -
络达开发-如何在工程中修改参数
原生SDK编译后,很多参数全部是默认的配置,比如经典蓝牙设备的名称,BLE设备的名称,ANC默认使能与否等。那么,如何在工程中把这些默认的参数配置成期望的值呢?SDK默认这些参数的配置位置为:bta_sdk\mcu\project\ab1565_ab1568_evk\apps\XXXXX\config_bin\XXXX\nvkey.xml比如经典蓝牙设备的名称:<!-- Default device name --><NVKey KeyID="0xF202">原创 2022-03-03 11:24:17 · 509 阅读 · 0 评论 -
络达开发-Wireshark消息过滤
在用wireshark查看实时打印的日志时候,默认是全部都显示的,消息量很大,在此讲述如果对这些消息进行过滤,只显示感觉的内容。如下图所示,比如我们只关注下图中红圈的消息:[M:uishell C:info F: L:]: ui_shell_send_event: 0x2.....那么点击A处按键,调出过滤器,进行如下图的配置:然后点击下图的B片按键 ,列表就只显示跟 输入关键字相关的内容了。.........原创 2022-03-03 11:22:37 · 1509 阅读 · 0 评论 -
络达开发-工程编译失败原因的查看方法
在控制台上,编译出错后是不会显示错误的具体原因的,只是报错并退出,如下图所示:那么,如何查看到底是哪个文件的哪个代码引起的错误呢,针对MCU和DSP有两个日志文件用来反应这些错误详情,分别是:Dsp: bta_sdk\dsp\out\ab1565_ab1568_evk\dsp0_headset_ref_design\feature_65_evb\log\err.logMCU:bta_sdk\mcu\out\ab1565_ab1568_evk\headset_wuYin\feature_6原创 2022-03-03 11:21:00 · 769 阅读 · 0 评论 -
络达开发-AB15XX实时查看Log方法
源自:络达开发-AB15XX实时查看Log方法 - 知乎络达开发板为例。 开发过程中,难免要查看系统运行的实时输出的日志,在此表述如何查看。 1.需要的工具:USB转RS232-TTL,如下图所示: 2.络达开发板中UART0为日志的输出接口,且为TTL类型的接口,因此用上述工具…https://zhuanlan.zhihu.com/p/439226514络达开发板为例。开发过程中,难免要查看系统运行的实时输出的日志,在此表述如何查看。1.需要的工具:USB转RS232-TTL,如下图所示:原创 2022-03-03 11:20:02 · 570 阅读 · 0 评论 -
RC低通滤波器
转自:RC低通滤波器 - 知乎RC low pass filter,或者叫直流滤波器(DC Filter), 其作用是采用软件的方式,把一输入交流信号中的直流成分滤除掉。其传递函数为:其中K为加权因子,值域为 [0 ~ 1],值越小由收敛越快,但信号的强度也会被大打折扣。通常该取接近于1的值,经常值为0.999。下图为一组测试实例,图中黑色曲线为4组不同频率及振幅的正弦波的叠加,绿色曲线为经过直流滤波后的效果,其因子K=0.999;可以看到原始数据中的直波成分逐渐被过滤掉了。原创 2022-03-03 11:18:20 · 4246 阅读 · 0 评论 -
电路系统中麦克风灵敏度标定方法
给定一个已知的声音信号,输入给麦克风: 通常是:250Hz/94dBSPL或者250Hz/114dBSPL;麦克风采集到信号后依次经过如下滤波器:直流滤波器 -> IIR高通滤波器(中心频率=100Hz) –> 指数滑动平均滤波器(此时值为Vrms,单位为voltage);采集一组平均滤波器数据,判断该组数据的均方差是否超过阀值(通常为0.01),若没超过,则该组数据的平均值即有有效的Vrms;此处的指数滑动平均滤波器的传递函数为:计算Vrms...原创 2021-01-10 20:34:53 · 4178 阅读 · 3 评论 -
指数滑动平均(EMA:exponential moving average)[转]
摘自:https://www.cnblogs.com/wuliytTaotao/p/9479958.html参考:https://www.investopedia.com/terms/e/ema.asphttps://www.investopedia.com/terms/s/sma.asp1. 用滑动平均估计局部均值 滑动平均(exponential moving average),或者叫做指数加权平均(exponentially weighted moving average..转载 2021-01-10 13:59:12 · 2546 阅读 · 0 评论 -
直流滤波器
该滤波器又叫直流滤波器(DC Filter), 其采用软件的方式,把一输入交流信号中的直流成分滤除掉。其传递函数为:Yi=Xi- Xi-1+K* Yi-1其中K为加权因子,值域为 [0 ~ 1],值越小由收敛越快,但信号的强度也会被大打折扣。通常该取接近于1的值,经常值为0.999。下图为一组测试实例,图中黑色曲线为4组不同频率及振幅的正弦波的叠加,绿色曲线为经过直流滤波后的效果,其因子K=0.999;可以看到原始数据中的直波成分逐渐被过滤掉了。...原创 2021-01-10 13:57:07 · 4654 阅读 · 0 评论 -
电声-分贝-电压-功率
贝尔 与分贝贝尔是以美国发明家亚历山大·格雷厄姆·贝尔命名的,他因发明电话而闻名于世。贝尔(Bel):当以10为对数的底时的一种级的单位。分(deci):英语的含义就是十分之一,比如10分米=1米。分贝(deciBel):1dB=1/10 Bel因为贝尔的单位太粗略而不能充分用来描述我们对声音的感觉,因此前面加了“分”字,代表十分之一,一贝尔等于十分贝。也就是说,分贝是一个用1/10对数的方式来描述两个信号的功率倍数关系。请注意这里描述的是功率,而不是电压。Bel=lg(P...原创 2021-01-06 14:54:12 · 1822 阅读 · 0 评论 -
基于NRF5340-(P)DK 的第一个BLE例程
首先下载SDK刚开始建议用nRF Connect中的Toolchain Manager来下载,这样更适合新手,只是速度可能会比较慢。如下图是笔者下载后的效果:A处显示的表示已经下载成功,可以打开开发工具来开始编程;B处可以在下载前设置下载的路径,如下图为笔者设置的自定义路径,因为默认路径在C盘的用户目录下名为ncs目录下,用起来不是太方便。Nrf5340介绍Nrf5340为双核芯片,其中一个为netcore用于网络管理,一个用于application;如果用户的工程需要使用网络.原创 2021-01-01 18:21:32 · 3122 阅读 · 3 评论 -
QCC300x --OTA步骤
在sink工程目录下创建一个目录,用来存放公钥和密钥,假设目录名称为<oem_for_ota>;在该目录下创建两个python脚本,和自动生成ota文件,这里写成脚本文件,方便每次生成OTA生级包。gen_key.py,用来自动生成密钥,内容如下:Gen_ota.py,用来生成ota文件,内容如下:import os, sys,timeos.chdir(os.path.abspath(os.path.dirname(sys.argv[0])))SRC_DIR =.原创 2020-12-28 09:22:38 · 421 阅读 · 1 评论 -
高通 xIDE编译错误汇总
错误1: 下载时报告如下错误: The application image on chip does not match the application on disk。解决办法:擦除芯片; 重新编译工程 烧写,此时会出现上面错误,没关系,继续下面步骤; 用PSTool merge sink工程中configurations目录下面的qcc300x.psr,依据自己芯片型号来决定是merge qcc3004.psr 还是qcc3007.psr等。 再次编译(非重编译); 重新下载...原创 2020-12-28 09:20:57 · 395 阅读 · 0 评论 -
Git 问题汇总
GIT无法Clone仓库到本地错误信息:error: RPC failed; HTTP 302 curl 22 The requested URL returned error: 302 fatal: the remote end hung up unexpectedly问题的原因的: http.followRedirects 不能自动跳造成的。解决办法: 打开git bash输入如下内容: git config --global http.https:/原创 2020-12-14 11:36:58 · 2076 阅读 · 0 评论 -
audio_curation分析及系统消息的定义方式
基于adk_r00201.1版本。相关源文件为 audio_curation.c 和 audio_curation.h,所在目录是adk\src\services\audio_curation。audio_curation关注的为两个目标,一个是AEC(即leakthrough,高通的声音透传功能),另一个是ANC(高能的主动降噪方案)。相关的动作有打开/关闭,和打开与关闭间的轮流切换,模式包含:anc打开和关闭,aec打开和关闭,anc tuning模式。该部分源码就是围绕着这几个功能的状态来工作。原创 2020-12-10 13:00:16 · 287 阅读 · 0 评论 -
Python制作任意音频文件
本文件示例了如何用python脚本来生成任意波形的Wav音频文件,用来做为声音源帮助听力产品的测试。python中需要安装wave、nump、scipy库;下面为一生成无声音的脚本:import waveimport numpy as npimport scipy.signal as signal# sample frequency, unit = hzframeRate = 16000time = 60 # unit = secondvolumn = 0 # 30000,音原创 2020-12-10 08:57:08 · 3587 阅读 · 0 评论 -
QCC304x/QCC514x: 如何修改蓝牙MAC地址及名称
用MDE编译出的固件只能包含一个MAC地址,所以左右耳烧录好固件后,其MAC地址是一样,需要把其中一个的MAC地址修改一下,或者连设备名称,晶振频率修正值、License等也修改。在bluesuit3.3.5之前的3.x版本中,还没有一个可视化的修改工具,用户需要自己使用控制台或者用提供的库开发一个可视化可具来实现上述参数的修改。但在bluesui 3.3.5开始,安装包提供了一个ConfigApp的可视化工具。使用方法:连接耳机的调试口到电脑,打开ConfigApp,它首先会让你选择hydra原创 2020-12-09 19:27:34 · 2788 阅读 · 0 评论 -
QCC304X/QCC514X DFU/OTA升级精讲
本例适用与芯片:QCC304X QCC514X,其它系列原理应该相似; 首先获得工程源码 安装MDE工具及ADK,笔者安装的版本如下图。 一定要注意,ADK的版本不要安装太新的,因为太新的安装 包里的工具可能不完整,比如版本:ADK_Toolkit.WIN.1.1 Installer_1.1.2.40,里面就没有生成dfu的脚本文件,笔者就中过招。安装bluesuit,笔者安装的版本为BlueSuite.WIN.3.3 Installer_3.3.5.817 解锁USB口调试,解锁办法为: 创原创 2020-11-25 15:23:06 · 1750 阅读 · 0 评论 -
QCC304x/QCC514x Pydbg在线调试
准备工作调试前,需要先编译出左右两侧的固件,并分别烧录进去。然后重新上电,可以在充电状态测试,也者非充电状态;耳机重烧录后,首次会进行相互配对,配对成功后会有语音提示,可以从耳机中听到。编写控制台下的调试脚本,可以采用USB接口调试,也可以采用TRBI200进行调试,两个脚本略有不同。将该脚本类型设为bat文件,并放置在工程所在目录下,笔者采用的是QCC3040,所以bat文件存放路径为:DevCode\earbud\workspace\QCC3040-AA_DEV-BRD-R2-AA\ pydbg_原创 2020-11-25 15:20:29 · 1388 阅读 · 0 评论 -
QCC304x/QCC514X 左右MAC地址的配置及关系
左右两侧的MAC地址不能一样SDAK规定MAC地址的最后一个字节值为偶数时表示右侧的耳机,属于A侧;数值为奇数时为左侧,历属B侧;A和B是在用pydbg调试时用来表示右和左侧,A表示右侧,B表示左侧;MAC地址可以在该设备名称可以在工程目录下面的filesystems/subsys1_ocnfig2.htf中修改,笔者对其进行了注释,如下图所示,因为文件中是按小端格式存储,所以图Right Side的MAC地址为: 00-02-5B-00-FF-00,Left Side的为00-02-5B-00-FF-原创 2020-11-25 15:18:47 · 1098 阅读 · 0 评论 -
QCC304x/QCC514x USB接口调试方法
安装BlueSuite 3.3.x 创建一个密钥文本文件并存放在指定位置,密钥为:00000000000000000000000000000000 3 通过USB连接耳机到电脑 ,并打开cmd,并切换到BlueSuit安装的目录,执行其下面的工具:TransportUnlock.exe writeunlockkey 密钥文件.txt然后重新插拔一下USB线,就可以在设备列表中看到如下内容,则表示安装成功。注意:请确保耳机的USB信号已经引到了USB接口;...原创 2020-11-25 15:18:06 · 1186 阅读 · 0 评论 -
QCC304x/QCC514X 蓝牙默认设备名称修改
Qcc系列的earbud要求左右耳机的设备名称必须相同,该设备名称可以在工程目录下面的filesystems/subsys7_ocnfig5.htf中修改,如下图所示为默认名称:原创 2020-11-25 15:16:07 · 921 阅读 · 0 评论 -
QCC304x/QCC514x官方开发板电池没电后如何恢复
原创 2020-11-25 15:15:24 · 338 阅读 · 0 评论 -
QACT 调试leakthrough永久生效办法
高通QCC304X及QCC514x的Leakthrough是声音透传功能,也就是Sidetone;可以通过配置一个按键来开启和关闭该功能。目前官方SDK中支持开启和关闭,不支持动态调整增益级别。该功能通常涉及以下几个方面:如何使能该功能 如何用按钮打开和关闭; 如何调整增益; 如何调整透传声音的品质,也即EQ。解决办法:如何使使能Leakthrough打开MDE工程,在工程的配置属性中通过添加定义ENABLE_AEC_LEAKTHROUGH 及INCLUDE_KYMERA_..原创 2020-11-25 15:13:46 · 1028 阅读 · 0 评论 -
QCC304x/QCC514x LED引脚 配置
MDK工程的配置中,有三个宏定义和LED配置相关,如下图A-1所示;其中CHIP_LED_BASE_PIO=74指定了LED引脚 在芯片中是从哪个口开始的,因为芯片的LED接口已经被 指定到了6个IO上,且引脚 号是连续的。图A-1如图A-2所示,从74号脚开始定义的连续6个IO口可以被 用来驱动 LED灯;图A-2在源码的earbud_led.h文件中,有对该宏的使用,如图A-3所示, CHIP_NUM_LEDS定义了芯片所支持的LED数量,最大为6个;因为源码中对LE..原创 2020-11-25 15:05:26 · 938 阅读 · 2 评论