sylar^z 发表于 2020-6-11 17:25

【 ST NUCLEO-H743ZI测评】+ LIS25BA录音功能

<div class='showpostmsg'> 本帖最后由 sylar^z 于 2020-6-11 17:25 编辑

<p>&nbsp;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;LIS25BA的录音功能主要包含部分。第一部分是LIS25BA的音频采集功能,之前已完成,参看<a href="https://bbs.eeworld.com.cn/thread-1124063-1-1.html">https://bbs.eeworld.com.cn/thread-1124063-1-1.html</a>。第二部分是将采集到的音频数据保存成音频文件,并存储到U盘上。</p>

<p>音频文件格式我选择了比较简单的WAVE格式,文件后缀为.wav。WAVE格式音频文件在确定文件头后,后面紧跟即是原始数据。</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;LIS25BA的录音功能主要包含部分。第一部分是LIS25BA的音频采集功能,之前已完成,参看<a href="https://bbs.eeworld.com.cn/thread-1124063-1-1.html">https://bbs.eeworld.com.cn/thread-1124063-1-1.html</a>。第二部分是将采集到的音频数据保存成音频文件,并存储到U盘上。</p>

<p>&nbsp;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;音频文件格式我选择了比较简单的WAVE格式,文件后缀为.wav。WAVE格式音频文件在确定文件头后,后面紧跟即是原始数据。</p>

<p></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;WAVE格式音频文件头格式如上图,总长44字节。格式中的ChunkID、Format相关的为字符串数据,都采用的大端格式。其它的都是数据格式,采用小端模式。下面来具体解析一下这个文件头。</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;ChunkID为固定数据RIEF;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;ChunkSize为文件总长度,即数据长度+44字节;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;Format为固定数据WAV;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;Subchunk1ID为固定数据fmt;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;Subchunk1IDSize为fmt段的长度,必须为0x10;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;AudioFormat为必须为0x01;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;NumChannels为声道数,单声道为1,双声道为2;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;SampleRate为采样频率,8k:8000,16k:16000,24k:24000等;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;ByteRate为码率,双声道,16k,16bit的话,为2*16000*16/8</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;BlockAlign为一组数据的字节数,双声道,16k即2*16/8;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;BitPerSample为采样位数,16bit,24bit等</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;Subchunk2ID为固定数据data;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;Subchunk2IDSize为音频数据的总长度;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;Data即音频数据。</p>

<p>&nbsp;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;程序部分继续在之前的工程上增加。</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;在检测到按键后新建音频文件,并开启录音功能。录音设置为24K,16bit,双声道音频,两个通道数据都采用了Z轴数据。</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;WAVE格式文件头配置代码:</p>

<p></p>

<p></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;在文件数据存储结束后,再将文件长度数据许如到文件头中。</p>

<p>&nbsp;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;音频的数据通过DMA回调的类形,将数据分为前后两部分来处理。</p>

<p></p>

<p></p>

<p>&nbsp;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;音频数据处理及写入文件</p>

<p></p>

<p>&nbsp;</p>

<p>设定录音时间,检测满足录音时长后结束录音,更新文件长度数据并关闭文件。这个时长我设置的是10秒,通过计算10秒的数据长度来控制。</p>

<p></p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;连好硬件开始录音</p>

<p></p>

<p>录音文件:</p>

<p>录音-无声:</p>

<p>录音-说话:</p>

<p>试了很多次,不知是否由于LIS25BA传感器和H743板子之间连线问题,还是LIS25BA传感器的问题。无声录音时有底噪,但是很小。说话录音时,噪声在说话的时候同时变大。</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

littleshrimp 发表于 2020-6-11 18:15

噪音有些大 检查一下通信看看

sylar^z 发表于 2020-6-11 20:57

本帖最后由 sylar^z 于 2020-6-11 21:01 编辑

<p>检查了连线,还用逻辑分析仪抓了一下,抓的是1.8V的那端。从信号来看,时序都正常,基本无干扰。</p>

<p>&nbsp;</p>

<p>晚点我换个1.8V的电源试试。看看是不是1.8V电源对LIS25BA有影响。</p>

sylar^z 发表于 2020-6-13 11:54

<p>通过手上的x-nucleo-iks01a3开发板生成1.8V电源,并且改了LIS25BA的固定方式。录音下来依然有噪音,应该也不是电源的问题。</p>

<p>&nbsp;</p>

<p></p>

<p>&nbsp;</p>

littleshrimp 发表于 2020-6-15 20:55

sylar^z 发表于 2020-6-13 11:54
通过手上的x-nucleo-iks01a3开发板生成1.8V电源,并且改了LIS25BA的固定方式。录音下来依然有噪音,应该也 ...

<p>看看是不是生成音频文件时出了问题,直接往音频文件里写一段正弦信号看看效果。</p>

sylar^z 发表于 2020-6-15 22:13

<div class="quote">
<blockquote><font size="2"><a href="forum.php?mod=redirect&amp;goto=findpost&amp;pid=2983503&amp;ptid=1127241" target="_blank"><font color="#999999">littleshrimp 发表于 2020-6-15 20:55</font></a></font> 看看是不是生成音频文件时出了问题,直接往音频文件里写一段正弦信号看看效果。</blockquote>
</div>

<p>我今天出差了,要待上一段时间。等我回去了,写个正弦信号测试一下。</p>

sylar^z 发表于 2020-6-23 21:55

<p>今天又测试了一下在文件中直接写入正弦波信号。</p>

<p>文件及音频参数都与之前LIS25BA的音频文件一致,采样周期是22.050K。程序设计为2S为一个正弦周期,总长10秒。</p>

<p>&nbsp;</p>

<p></p>

<p>&nbsp;</p>

<p>音频文件:</p>

<p>正弦信号是这个效果吗?@<a href="https://home.eeworld.com.cn/space-uid-303079.html" target="_blank">littleshrimp</a></p>

littleshrimp 发表于 2020-6-23 22:13

不是这种

littleshrimp 发表于 2020-6-23 22:17

sylar^z 发表于 2020-6-23 21:55
今天又测试了一下在文件中直接写入正弦波信号。

文件及音频参数都与之前LIS25BA的音频文件一致,采样周 ...

<p>22K采样率两秒一个周期 是不是描述有误?</p>

<p>这相当于一个周期有44K个数据了</p>

sylar^z 发表于 2020-6-24 21:58

本帖最后由 sylar^z 于 2020-6-24 21:59 编辑

<div class="quote">
<blockquote><font size="2"><a href="forum.php?mod=redirect&amp;goto=findpost&amp;pid=2986231&amp;ptid=1127241" target="_blank"><font color="#999999">littleshrimp 发表于 2020-6-23 22:17</font></a></font> 22K采样率两秒一个周期 是不是描述有误? 这相当于一个周期有44K个数据了</blockquote>
</div>

<p>是的,这个频率有点问题。</p>

<p>我改了一下,把频率设置成500Hz,总时长改成了5秒,其它不变。</p>

<p>声音还是比较纯净的,没有噪声。应该不是生成音频文件的问题。有可能是传感器端的原始信号就有异常。</p>

<p></p>

littleshrimp 发表于 2020-6-25 07:47

sylar^z 发表于 2020-6-24 21:58
littleshrimp 发表于 2020-6-23 22:17 22K采样率两秒一个周期 是不是描述有误? 这相当于一个周期有44K个 ...

<p>这是你的音频文件波形,还是存在问题的</p>

<p></p>

sylar^z 发表于 2020-6-25 22:00

littleshrimp 发表于 2020-6-25 07:47
这是你的音频文件波形,还是存在问题的

<p>版主,这个是什么软件?我也下一个来看看</p>

sylar^z 发表于 2020-6-25 22:18

本帖最后由 sylar^z 于 2020-6-25 22:19 编辑

<p>版主帮我看看这个文件。500Hz,10S。</p>

<p>&nbsp;</p>

<p></p>

<p>&nbsp;</p>

<p></p>

littleshrimp 发表于 2020-6-26 09:32

sylar^z 发表于 2020-6-25 22:00
版主,这个是什么软件?我也下一个来看看

<p>这个是软件是Audacity,类似Adobe Audition这样的音频编辑软件都可以查看</p>

littleshrimp 发表于 2020-6-26 09:36

sylar^z 发表于 2020-6-25 22:18
版主帮我看看这个文件。500Hz,10S。

&nbsp;



&nbsp;

<p>ST的很多软件包都有创建音频的全程,比如下边这个例程里就有录音的代码可以参考</p>

<p>STM32CubeFunctionPack_STBOX1_V1.3.0\Projects\STM32L4R9ZI-SensorTile.box\Applications\SDDataLogRToS</p>

<p><a href="https://www.st.com/content/st_com/en/products/embedded-software/mcu-mpu-embedded-software/stm32-embedded-software/stm32-ode-function-pack-sw/fp-sns-stbox1.html">https://www.st.com/content/st_com/en/products/embedded-software/mcu-mpu-embedded-software/stm32-embedded-software/stm32-ode-function-pack-sw/fp-sns-stbox1.html</a></p>

<p>&nbsp;</p>

<p></p>

<p></p>

sylar^z 发表于 2020-6-27 21:16

本帖最后由 sylar^z 于 2020-6-27 21:57 编辑

<div class="quote">
<blockquote><font size="2"><a href="forum.php?mod=redirect&amp;goto=findpost&amp;pid=2986732&amp;ptid=1127241" target="_blank"><font color="#999999">littleshrimp 发表于 2020-6-26 09:36</font></a></font> ST的很多软件包都有创建音频的全程,比如下边这个例程里就有录音的代码可以参考 STM32CubeFunctionPac ...</blockquote>
</div>

<p>&nbsp; &nbsp; 我的wave部分程序是从F769I-DISC例程里移植过来的,在F769I-DISC没有问题。我再研究下。</p>

sylar^z 发表于 2020-6-28 20:37

littleshrimp 发表于 2020-6-26 09:36
ST的很多软件包都有创建音频的全程,比如下边这个例程里就有录音的代码可以参考

STM32CubeFunctionPac ...

<p>问题找到了,是正弦波数据的问题。</p>

<p>我下载了Audacity软件。对比音频文件分析了一下音频。发现一个正弦周期只有22个点(正确为44个点),所以问题应该出在正弦函数上。研究了一下arm_sin_q15()这个函数,发现是我使用有误。函数的传入参数范围为[0,2^15),我传入的是[0,2^16)。所以导致半个周期,即22个点就完成了一个正弦波,在[2^15, 2^16)这个范围的后22个点则出现了异常值。</p>

<p>修改程序后</p>

<p></p>

<p>我的wave部分程序是从F769I-DISC例程里移植过来的,在F769I-DISC没有问题。在文件写入方面,我仔细对照了写入数据与函数产生的数据,完全一致。应该没有问题。</p>

littleshrimp 发表于 2020-6-28 20:39

sylar^z 发表于 2020-6-28 20:37
问题找到了,是正弦波数据的问题。

我下载了Audacity软件。对比音频文件分析了一下音频。发现一个正弦 ...

<p>问题找到就好</p>

SSIOU 发表于 2020-7-22 08:54

感谢楼主分享,请问是不是还要加入文件系统?

sylar^z 发表于 2020-7-22 22:32

SSIOU 发表于 2020-7-22 08:54
感谢楼主分享,请问是不是还要加入文件系统?

<p>是的,加入了FATFS文件系统。可以参看我之前的帖子<a href="https://bbs.eeworld.com.cn/thread-1123259-1-1.html">https://bbs.eeworld.com.cn/thread-1123259-1-1.html</a>,通过STM32CubeMX可以快速的集成FATFS文件系统</p>
页: [1] 2
查看完整版本: 【 ST NUCLEO-H743ZI测评】+ LIS25BA录音功能