社区导航

 

搜索
查看: 723|回复: 18

[原创] 【 ST NUCLEO-H743ZI测评】+ LIS25BA录音功能

[复制链接]

135

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2020-6-11 17:25 | 显示全部楼层 |阅读模式
本帖最后由 sylar^z 于 2020-6-11 17:25 编辑

 

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

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

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

 

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

WAVE格式说明.png

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

    ChunkID为固定数据RIEF;

    ChunkSize为文件总长度,即数据长度+44字节;

    Format为固定数据WAV;

    Subchunk1ID为固定数据fmt;

    Subchunk1IDSize为fmt段的长度,必须为0x10;

    AudioFormat为必须为0x01;

    NumChannels为声道数,单声道为1,双声道为2;

    SampleRate为采样频率,8k:8000,16k:16000,24k:24000等;

    ByteRate为码率,双声道,16k,16bit的话,为2*16000*16/8

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

    BitPerSample为采样位数,16bit,24bit等

    Subchunk2ID为固定数据data;

    Subchunk2IDSize为音频数据的总长度;

    Data即音频数据。

 

    程序部分继续在之前的工程上增加。

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

    WAVE格式文件头配置代码:

代码1-1.png

代码1-2.png

    在文件数据存储结束后,再将文件长度数据许如到文件头中。

 

    音频的数据通过DMA回调的类形,将数据分为前后两部分来处理。

代码3.png

代码2.png

 

    音频数据处理及写入文件

代码4.png

 

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

代码5.png 代码6.png

 

 

    连好硬件开始录音

全景图-1.jpg

录音文件:

录音-无声: 录音-无声.wav (861.79 KB, 下载次数: 2)


回复

使用道具 举报

7358

TA的帖子

19

TA的资源

版主

Rank: 6Rank: 6

发表于 2020-6-11 18:15 来自手机 | 显示全部楼层
噪音有些大 检查一下通信看看

回复

使用道具 举报

135

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2020-6-11 20:57 | 显示全部楼层
本帖最后由 sylar^z 于 2020-6-11 21:01 编辑

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

 

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

逻辑分析仪.png

回复

使用道具 举报

135

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2020-6-13 11:54 | 显示全部楼层

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

 

改1.8V电源后图片-1.jpg

 

点评

看看是不是生成音频文件时出了问题,直接往音频文件里写一段正弦信号看看效果。  详情 回复 发表于 2020-6-15 20:55

回复

使用道具 举报

7358

TA的帖子

19

TA的资源

版主

Rank: 6Rank: 6

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

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

点评

今天出差了,要待一段时间。等我回去了,写个正弦信号测试一下。  详情 回复 发表于 2020-6-15 22:13
虾扯蛋

回复

使用道具 举报

135

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2020-6-15 22:13 | 显示全部楼层
littleshrimp 发表于 2020-6-15 20:55 看看是不是生成音频文件时出了问题,直接往音频文件里写一段正弦信号看看效果。

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


回复

使用道具 举报

135

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2020-6-23 21:55 | 显示全部楼层

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

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

 

 

音频文件: WavFile_sin_test.wav (861.37 KB, 下载次数: 2)

点评

22K采样率两秒一个周期 是不是描述有误? 这相当于一个周期有44K个数据了  详情 回复 发表于 2020-6-23 22:17

回复

使用道具 举报

7358

TA的帖子

19

TA的资源

版主

Rank: 6Rank: 6

发表于 2020-6-23 22:13 来自手机 | 显示全部楼层
不是这种

回复

使用道具 举报

7358

TA的帖子

19

TA的资源

版主

Rank: 6Rank: 6

发表于 2020-6-23 22:17 | 显示全部楼层
sylar^z 发表于 2020-6-23 21:55 今天又测试了一下在文件中直接写入正弦波信号。 文件及音频参数都与之前LIS25BA的音频文件一致,采样周 ...

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

这相当于一个周期有44K个数据了

点评

是的,这个频率有点问题。 我改了一下,把频率设置成500Hz,其它不变。 声音还是比较纯净的,没有噪声。应该不是生成音频文件的问题。有可能是传感器端的原始信号就有异常。  详情 回复 发表于 2020-6-24 21:58
虾扯蛋

回复

使用道具 举报

135

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2020-6-24 21:58 | 显示全部楼层
本帖最后由 sylar^z 于 2020-6-24 21:59 编辑
littleshrimp 发表于 2020-6-23 22:17 22K采样率两秒一个周期 是不是描述有误? 这相当于一个周期有44K个数据了

是的,这个频率有点问题。

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

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

WavFile_sin_test-500Hz.wav (859.42 KB, 下载次数: 3)

点评

这是你的音频文件波形,还是存在问题的 [attachimg]485088[/attachimg]  详情 回复 发表于 2020-6-25 07:47

回复

使用道具 举报

7358

TA的帖子

19

TA的资源

版主

Rank: 6Rank: 6

发表于 2020-6-25 07:47 | 显示全部楼层
sylar^z 发表于 2020-6-24 21:58 littleshrimp 发表于 2020-6-23 22:17 22K采样率两秒一个周期 是不是描述有误? 这相当于一个周期有44K个 ...

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

image.png

点评

版主,这个是什么软件?我也下一个来看看  详情 回复 发表于 2020-6-25 22:00
虾扯蛋

回复

使用道具 举报

135

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2020-6-25 22:00 | 显示全部楼层
littleshrimp 发表于 2020-6-25 07:47 这是你的音频文件波形,还是存在问题的

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

点评

这个是软件是Audacity,类似Adobe Audition这样的音频编辑软件都可以查看  详情 回复 发表于 2020-6-26 09:32

回复

使用道具 举报

135

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2020-6-25 22:18 | 显示全部楼层
本帖最后由 sylar^z 于 2020-6-25 22:19 编辑

版主帮我看看这个文件。500Hz,10S。

 

写入正弦波信号到wav文件-3.png

 

写入正弦波信号到wav文件-4.png

WavFile_sin_test-500Hz-20200625.wav

859.42 KB, 下载次数: 0


回复

使用道具 举报

7358

TA的帖子

19

TA的资源

版主

Rank: 6Rank: 6

发表于 2020-6-26 09:32 | 显示全部楼层
sylar^z 发表于 2020-6-25 22:00 版主,这个是什么软件?我也下一个来看看

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

虾扯蛋

回复

使用道具 举报

7358

TA的帖子

19

TA的资源

版主

Rank: 6Rank: 6

发表于 2020-6-26 09:36 | 显示全部楼层
sylar^z 发表于 2020-6-25 22:18 版主帮我看看这个文件。500Hz,10S。    

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

STM32CubeFunctionPack_STBOX1_V1.3.0\Projects\STM32L4R9ZI-SensorTile.box\Applications\SDDataLogRToS

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

 

datalog_application.c (17.49 KB, 下载次数: 0)

点评

问题找到了,是正弦波数据的问题。 我下载了Audacity软件。对比音频文件分析了一下音频。发现一个正弦周期只有22个点(正确为44个点),所以问题应该出在正弦函数上。研究了一下arm_sin_q15()这个函数,发现是我  详情 回复 发表于 2020-6-28 20:37
    我的wave部分程序是从F769I-DISC例程里移植过来的,在F769I-DISC没有问题。在这里也该也没问题的。       我下载了Audacity软件。对比音频文件分析了一下音频。      详情 回复 发表于 2020-6-27 21:16
虾扯蛋

回复

使用道具 举报

135

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2020-6-27 21:16 | 显示全部楼层
本帖最后由 sylar^z 于 2020-6-27 21:57 编辑
littleshrimp 发表于 2020-6-26 09:36 ST的很多软件包都有创建音频的全程,比如下边这个例程里就有录音的代码可以参考 STM32CubeFunctionPac ...

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


回复

使用道具 举报

135

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2020-6-28 20:37 | 显示全部楼层
littleshrimp 发表于 2020-6-26 09:36 ST的很多软件包都有创建音频的全程,比如下边这个例程里就有录音的代码可以参考 STM32CubeFunctionPac ...

问题找到了,是正弦波数据的问题。

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

修改程序后

写入正弦波信号到wav文件-8.png

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

点评

问题找到就好  详情 回复 发表于 2020-6-28 20:39

回复

使用道具 举报

7358

TA的帖子

19

TA的资源

版主

Rank: 6Rank: 6

发表于 2020-6-28 20:39 | 显示全部楼层
sylar^z 发表于 2020-6-28 20:37 问题找到了,是正弦波数据的问题。 我下载了Audacity软件。对比音频文件分析了一下音频。发现一个正弦 ...

问题找到就好

虾扯蛋

回复

使用道具 举报

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

关闭

站长推荐上一条 1/8 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

词云| Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2020-7-10 19:55 , Processed in 0.540947 second(s), 38 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表