在设备监测领域,随着人工智能技术的发展,声纹监测技术近年来日益成熟,声纹监测就是对设备运行过程产生的声音(20Hz~20kHz)进行监测,通过分析软件判断设备运行工况。平头哥RVB2601开发板拥有双路麦克风、音频code芯片,可以完成声纹采集系统中最重要的音频采集任务。
本次使用的RVB2601开发板基于平头哥CH2601设计,板载JTAG调试器、WiFi芯片W800、音频采集ES7210、数字麦克风、12864 OLED显示屏、RGB三色灯和用户按键。通过麦克风采集音频经过ES7210读取到音频PCM数据,添加WAV文件头形成一定时长的wav文件存储到基于本地flash的文件系统,运行嵌入式web服务器便于通过浏览器访问播放音频,12864和按键、RGB三色灯用于人机交互。
RVB2601通过I2C接口控制ES7210,通过I2S接口读取PCM数据,通过SPI接口与WIFI芯片 W800通讯,通过SPI接口控制OLED屏幕,通过GPIO驱动按键和三色RGB灯。
音频采集代码参考例子ch2601_ft_demo:
void cmd_ft_mic_handler(uint32_t channel_status)
{
csi_error_t ret;
csi_codec_output_config_t output_config;
csi_codec_input_config_t input_config;
ret = csi_codec_init(&codec, 0);
if (ret != CSI_OK)
{
printf("csi_codec_init error\n");
return ;
}
codec_output_ch.ring_buf = &output_ring_buffer;
csi_codec_output_open(&codec, &codec_output_ch, 0);
/* output ch config */
csi_codec_output_attach_callback(&codec_output_ch, codec_output_event_cb_fun, NULL);
output_config.bit_width = 16;
output_config.sample_rate = 8000;
output_config.buffer = output_buf;
output_config.buffer_size = OUTPUT_BUF_SIZE;
output_config.period = 1024;
output_config.mode = CODEC_OUTPUT_SINGLE_ENDED;
csi_codec_output_config(&codec_output_ch, &output_config);
csi_codec_output_analog_gain(&codec_output_ch, 0xbf);
csi_codec_output_buffer_reset(&codec_output_ch);
csi_codec_output_link_dma(&codec_output_ch, &dma_ch_output_handle);
codec_input_ch.ring_buf = &input_ring_buffer;
csi_codec_input_open(&codec, &codec_input_ch, 0);
/* input ch config */
csi_codec_input_attach_callback(&codec_input_ch, codec_input_event_cb_fun, NULL);
input_config.bit_width = 16;
input_config.sample_rate = 8000;
input_config.buffer = input_buf;
input_config.buffer_size = INPUT_BUF_SIZE;
input_config.period = 1024;
input_config.mode = CODEC_INPUT_DIFFERENCE;
csi_codec_input_config(&codec_input_ch, &input_config);
csi_codec_input_analog_gain(&codec_input_ch, 0xbf);
csi_codec_input_link_dma(&codec_input_ch, &dma_ch_input_handle);
if (channel_status == 0)
{
es8156_all_data_left_channel(&es8156_dev);
}
else
{
es8156_all_data_right_channel(&es8156_dev);
}
printf("start repeater\n");
csi_codec_output_start(&codec_output_ch);
csi_codec_input_start(&codec_input_ch);
uint32_t times = 0U;
uint32_t read_size = 0U;
while (1)
{
while (new_data_flag < 48)
{
if (cb_input_transfer_flag)
{
read_size = csi_codec_input_read_async(&codec_input_ch, repeater_data_addr + (new_data_flag * 1024), 1024);
LOGD(TAG,"read size:%d",read_size);
cb_input_transfer_flag = 0U;
new_data_flag ++;
}
}
new_data_flag=0;
led_refresh_low();
led_refresh_high();
ft_led_refresh();
aos_msleep(100);
}
printf("stop repeater\n");
csi_codec_input_stop(&codec_input_ch);
csi_codec_output_stop(&codec_output_ch);
csi_codec_input_link_dma(&codec_input_ch, NULL);
csi_codec_output_link_dma(&codec_output_ch, NULL);
csi_codec_output_detach_callback(&codec_output_ch);
csi_codec_input_detach_callback(&codec_input_ch);
csi_codec_uninit(&codec);
return;
}
五、作品源码
ch2601_my_project.7z
(557.22 KB, 下载次数: 5)
六、视频演示(视频简介+链接)
七、项目总结(项目文字总结+帖子分享链接汇总)
非常感谢eeword和平头哥举办的活动,本次活动体验了平头哥的开发生态,aos是十分优秀的RTOS,CDK虽然使用感觉不是很流畅,但是功能十分强大,能够方便快捷的下载、管理软件组件。本来是计划将采集的音频PCM数据增加WAV文件头后存储到文件系统,然后运行一个嵌入式web服务器,这样通过浏览器能够访问采集的音频wav文件,但是折腾了一段时间,没有成功的将基于内部flash的文件系统调试成功,因此本次只能采集到PCM音频数据,预期的功能无法实现,等后续这方面的资料丰富起来再折腾看看。
八、其他
平头哥RVB2601活动作品提交.docx
(114.2 KB, 下载次数: 9)
|