全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

SU03T语音模块工作原理

发布时间:2023-11-22 17:34:22
发布人:xqq

一、硬件设计

SU03T语音模块是一个集成了语音控制的声音识别模块。它采用专用的音频处理芯片VAG6810和一颗STM32F103芯片配合使用。

这个模块主要由麦克风、按键外设、几个芯片以及连接线组成。其中麦克风负责收集用户的语音指令,外设负责读取按键开关状态,音频处理芯片负责对声音进行处理,STM32F103芯片负责控制模块的运行和对外部天线的控制。

下面是连接线的具体接口:


GND     -   地线
VCC     -   电源正极
TXD     -   数据输出
RXD     -   数据接收
ADC     -   麦克风输入管脚
KEY     -   按键输入管脚
SP+-   -   喇叭输出管脚
ANT     -   外接天线控制管脚

二、语音指令匹配

SU03T模块支持18种语音指令的控制。当用户说出语音指令时,模块会将指令与预定义的指令进行匹配。如果匹配成功,模块就会执行相应的操作,例如开启或关闭设备。

语音指令匹配过程如下:

用户说出语音指令,麦克风收集声音信号。 模块将麦克风收集到的声音信号转化为数字信号,即语音指令。 模块用快速傅里叶变换(FFT)对语音指令进行处理得到一个频谱图。 将频谱图与预定义的模板进行比较,找到最佳匹配。 根据最佳匹配确定语音指令的类型,执行相应的操作。

下面是匹配指令的部分代码:


#define CMD_NUM     18
#define CMD_BUF_LEN 100

//定义18种语音指令
static char* cmdBuf[CMD_NUM] = {
    "KZMSLW", "GBMSLW", "KJMJT", "GSMJT", "KJPZMT", "GSPZMT",
    "BZFX", "GGFX", "ZCFS", "CQWJ", "TCWJ", "CYKZ", "GFJX", "SZCZ",
    "TCTK", "CTTK", "SJTK", "AKTK"
};

//匹配语音指令
void matchCmd(char* cmd)
{
    char buf[CMD_BUF_LEN];
    memcpy(buf, cmd, strlen(cmd));
    buf[strlen(cmd)] = '\0';
    for(int i = 0; i < CMD_NUM; i++)
    {
        if(strcmp(buf, cmdBuf[i]) == 0)
        {
            //执行相应操作
            executeCmd(i);
            break;
        }
    }
}

三、语音识别率控制

由于语音指令的识别受到外部环境的干扰,因此在设计SU03T模块时需要考虑控制语音识别率的问题。

为了提高语音识别率,可以采取以下措施:

在开发过程中,需要对模块进行多场景的测试,收集不同环境下的语音信号。 通过调整麦克风的位置和方向来获取更清晰的语音指令。 对预定的语音模板进行优化和更新,提高匹配的准确度。

四、语音合成

SU03T模块还具有语音合成功能。当用户需要模块回应时,模块可以自动生成语音并输出到外部喇叭。

语音合成过程如下:

选择合成所需语音的文字内容。 将选定的文字转化为对应的音素序列。 利用差分重构技术生成语音波形。 将合成的语音波形输入到输出缓冲区并输出到外部喇叭。

下面是合成语音的部分代码:


//输入的文本信息,最多60个字
#define INPUT_TEXT_LEN 60
static char inputText[INPUT_TEXT_LEN] = "欢迎您使用SU03T语音模块!";

//TTS合成
void TTS(void)
{
    uint16_t i;
    char *inputVocoderString = inputText;
    
    //将文字转换成语音波形数据
    VOCODER_ProcessString(&inputVocoderString, outputBuffer);
    
    //写入音频数据到DA输出
    for(i = 0; i < ((VOCODER_BUFFER_SIZE)/2); i++)
    {
        DAC->DHR12R1 = (unsigned int)outputBuffer[i];
        while(!DAC_GetFlagStatus(DAC_FLAG_DMAUDR1)){};
        DAC_ClearFlag(DAC_FLAG_DMAUDR1);
    }
}

su03t语音模块工作原理

相关文章

深入了解 ng-style

深入了解 ng-style

2023-11-22
reverse()函数详解

reverse()函数详解

2023-11-22
linux中nfs的搭建,linux下nfs配置

linux中nfs的搭建,linux下nfs配置

2023-11-22
Latex微分符号用法介绍

Latex微分符号用法介绍

2023-11-22

最新文章

武汉新媒体行业公司排名

武汉新媒体行业公司排名

2023-11-01
武汉新媒体就业现状好吗

武汉新媒体就业现状好吗

2023-11-01
武汉全媒体行业发展现状及趋势

武汉全媒体行业发展现状及趋势

2023-10-31
武汉全媒体现状

武汉全媒体现状

2023-10-31
在线咨询 免费试学 教程领取