APP下载

一种低成本声源定位系统的设计

2021-06-17杨远文张子煜李劲柯刘会衡通讯作者

电子制作 2021年11期
关键词:声源外设麦克风

杨远文,张子煜,李劲柯,刘会衡(通讯作者)

(湖北文理学院物理与电子工程学院,湖北襄阳,441053)

0 引言

在日常生活中,对于声源的利用已经十分普遍,在某些专业领域已有了十分广泛的应用。例如,“吃鸡”游戏通过游玩者对敌方脚步声音的判断来识别敌方所位于的方向以及距离;唐朝著名诗人贺知章笔下脍炙人口的诗句:“少小离家老大回,乡音无改鬓毛衰。”这些都是人们对声源信号信息的相关利用。如今,利用带有声源定位系统的电子设备以及相关的声音采集装置,可以增强目标源的声源质量,削减非目标源以及环境噪声,可以达到传统滤波法难以达到的滤波效果,可以实现高保真语音通讯。目前,市面上的成熟的关于声源定位的解决方案主要依靠于十分复杂的算法和高性能的CPU或是昂贵的DSP实现的,对于精度要求相对较低,成本限制的解决方案寥寥无几。基于此,设计了一款低成本的声源定位系统。

1 声源定位系统的设计方案

系统的整体结构框图如图1所示,该系统以基于Cotex-m4内核的STM32F4系列单片机为核心控制单元,连接着输入,显示,输出等各个模块。利用STM32F4单片机16bit高精度ADC实时采集目标源的原始声源信号,再利用内部高速DMA通道传输 ,开启FPU后计算目标声源的方位以及距离,得到的结果实时的显示在彩色屏幕上让用户对当前方位一目了然,同时配合特定的通讯协议,可以实现仪器与PC机或是其他一些单片机或处理器进行有效通讯。

2 硬件设计

■2.1 核心处理器电路

核心处理器电路如图2所示,它由STM32F4及其外围电路组成。STM32F4单片机有以下优点:

图1 系统框图

(1)主频高达168MHz,能够很容易且快速的计算出结果;

(2)拥有大容量存储空间,能够存储丰富的数据量;

(3)拥有丰富的外设资源如IIC总线,DMA,16bit高精度ADC等;

(4)成本低廉,相对于CPU和DSP成本极为低廉;

(5)I/O丰富,支持拓展许多外设模块。

选择使用STM32F4系列单片机,在不仅价格上十分低廉,有利于将该模块应用到对成本敏感的产品上。而且,片上集成的Cotex-m4内核和FPU高精度计算单元对数据的处理及时且有效。所以,本系统使用STM32F4单片机的性价比是非常高的,既能够满足数据采集的需求,又可以对信号进行高速处理,对于控制成本是十分有利的。

图2 核心处理器电路

■2.2 麦克风模块

麦克风模块如图3所示,选用的是MAX9814芯片。MAX9814包含低噪声放大器、输出放大器、麦克风偏置电压发生器和自动增益控制(AGC)等内部电路。麦克风放大器的总增益可选择40dB、50dB或60dB而无压缩。MAX9814利用压缩/限幅电路将麦克风输出限制为设定电压。

图3 麦克风模块

该模块具有以下特点:

(1)自动增益控制(AGC);

(2)3种增益设置(40dB、50dB、60dB);

(3)低THD:0.04% (典型值可编程动作和释放时间比;

(4)2.7V至5.5V电源电压范围;

(5)低输入噪声密度30nV/。

使用MAX9814相比于常规的晶体管放大电路而言,在价格上并没有优势,但是其带来的性能提升是常规晶体管放大电路无法比拟的,对于微弱且不稳定的声源信号,采用包含低噪声放大器、输出放大器、麦克风偏置电压发生器和自动增益控制的IC是十分有必要的。

■2.3 显示模块

显示模块电路如图4所示,本设计使用中景园所生产的0.96寸160×80分辨率TFT彩屏,该显示屏颜色丰富细腻,分辨率高,显示字体清晰,价格低廉。

图4 显示模块

3 软件设计

系统软件设计流程如图5所示。程序执行的流程主要分为三部分,第一部分是单片机片上外设的初始化,第二部分是对采集的信号的数字信号处理,第三部分是结果显示以及数值的输出。

图5 程序流程图

主要工作流程如下:初始化单片机ADC外设,使其以固定的速率采集声源信号;开启初始化单片机DMA外设,使其工作在循环模式;初始化单片机SPI外设,使其工作在主机模式,初始化TFT彩屏模块,显示初始化界面;ADC启动采集信号样本通过高速DMA搬运至待处理区,处理器接收到DMA完成标志后,启动声源信号处理函数对声源信号进行处理,完成后在屏幕上显示并将结果发送至上位机。

其中,单片机片上外设初始化代码部分如下:

ADC_HandleTypeDef hadc1;

ADC_HandleTypeDef hadc2;

DMA_HandleTypeDef hdma_adc1;

SPI_HandleTypeDef hspi1;

extern float voice[522];

void SystemClock_Config(void);

GPIO_InitTypeDef GPIO_InitStruct = {0};

ADC_ChannelConfTypeDef sConfig = {0};

HAL_Init();//hal库初始化

SystemClock_Config();

//系统时钟初始化168M

//多通道ADC初始化

hadc1.Instance = ADC1;

hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;

hadc1.Init.Resolution = ADC_RESOLUTION_12B;

hadc1.Init.ScanConvMode = DISABLE;

hadc1.Init.ContinuousConvMode = DISABLE;

hadc1.Init.DiscontinuousConvMode = DISABLE;

hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;

hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;

hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;

hadc1.Init.NbrOfConversion = 1;

hadc1.Init.DMAContinuousRequests = DISABLE;

hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;

HAL_ADC_Init(&hadc1);//设置DMA通道

Config.Channel = ADC_CHANNEL_0;

sConfig.Rank = 1;

sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;

HAL_ADC_ConfigChannel(&hadc1, &sConfig);

__HAL_RCC_DMA2_CLK_ENABLE();

HAL_NVIC_SetPriority(DMA2_Stream0_IRQn, 0, 0);

4 结束语

通过本声源定位系统,能够以较低成本完成声源方位的确认。用户使用操作简单,效果明显。配合相关协议,用户可以轻松的集成到相关项目中,具有很好的兼容性和二次开发性。本设计改变了传统定位系统复杂昂贵的现状,将会有很大的市场前景。

猜你喜欢

声源外设麦克风
虚拟声源定位的等效源近场声全息算法
一种基于麦克风阵列用于分离单极子和偶极子声源的方法
基于TDOA和AOA算法的声源定位模型的研究
室内声音导航系统
麦克风的艺术
讯飞输入法也能离线语音输入
让重力控制麦克风
麦克风
外设天地行情
外设天地行情