精华内容
下载资源
问答
  • AliOS Things声源定位应用演示

    千次阅读 2018-10-09 14:59:08
    利用麦克风阵列进行声源定位在智能降噪、语音增强、语音识别等领域有广泛应用和研究前景。本文介绍基于AliOS Things + STM32F413H Discovery开发板实现声源定位算法集成和功能演示。 声源定位算法 本案例集成了...

    1. 概述

    利用麦克风阵列进行声源定位在智能降噪、语音增强、语音识别等领域有广泛应用和研究前景。本文介绍基于AliOS Things + STM32F413H Discovery开发板实现声源定位算法集成和功能演示。

    • 声源定位算法
      本案例集成了STMicroelectronics的Acoustic_SL声源定位算法。Acoustic_SL是STMicroelectronics开发的声源定位算法,支持XCORR、GCC-PHAT、BMPH三种不同算法类型。本案例使用GCC-PHAT算法类型,算法基于到达时间差(TDOA)原理实现,通过测量声音信号达到不同麦克风的时间差计算声源方向。GCC-PHAT算法作为应用最为广泛的声位算法,数据计算量和资源消耗较小,并且具有一定的抗噪和抗混响能力。

    2. 环境搭建

    开发板:STM32F413H Discovery(附带麦克风阵列板)
    手势传感器:Seeed Grove PAJ7620
    温湿度传感器:HTS221
    LED数码管:Seeed Grove LED Bar

    硬件说明:
    使用STM32F413H作为主控芯片,提供音频输入接口、I2C接口、GPIO控制接口、显示控制接口等。
    STM32F413H内置的DFSDM模块可以支持最多同时5路PDM数字麦克数据录入,并经过硬件滤波将PDM数据转换成PCM数据,降低了音频软件的复杂度和资源消耗。

    硬件连接:

     

    3. 软件编译

    软件:AliOS Things
    下载AliOS Things后,切换到developer分支。

    执行如下命令编译Application:
    aos make sensordemo@stm32f413h-discovery

    编译成功后,使用下面命令烧录镜像:
    aos upload sensordemo@stm32f413h-discovery

    4. 软件介绍

    • AliOS Things

    AliOS Things是面向IOT领域的轻量级物联网嵌入式操作系统。AliOS Things启动过程中,依次完成内核初始化、硬件资源初始化、功能组件初始化、外设驱动初始化。系统就绪后,通过用户定义的application_start()函数进入应用程序。

    • 创建声位和音量显示界面

    在application_start()函数中调用display_init()创建LCD刷新任务、显存刷新任务、定义显示界面。

    声位显示界面:

    切换到该界面时,声位识别算法开始运行,屏幕上指示当前声音方位。测试时建议距离mic阵列水平距离30cm,高度和mic阵列尽量接近,可以获得最佳效果。

    音量显示界面:

    切换到该界面时,计算mic信号的大小并转换成音量在屏上显示音量指示条,即提供声音强度检测功能。

    • 运行声位算法

    <1> 在application_start()函数中创建声源定位task,在该task中继续调用acoustic_sl_start()执行声源定位功能。

    <2> 在acoustic_sl_start()函数中调用DFSDM_Init()和HAL_DFSDM_FilterRegularStart_DMA()初始化并启动DFSDM录音程序。打开4路DFSDM滤波通道,获取4个麦克风的PDM数据,经过内部处理转换成PCM后通过DMA传输到缓存中。

    <3> 调用acoustic_sl_init()库函数初始化Acoustic_SL算法。这一步需要设置算法参数,例如配置算法类型、channel number、麦克风阵列间距以及识别角度最小单位、声音检测门限。

    <4> DFSDM录音程序每次分别从4个mic录入512个采样点的PDM数据数据,经过内部处理转换成PCM后通过DMA传输到缓存中。

    <5> 缓存数据到达后,对PCM数据进行简单的High Pass滤波算法处理,然后调用AcousticSL_Data_Input()以每次16samples的大小送入算法后,触发外部中断,在中断函数中再调用AcousticSL_Process()进行算法处理和声位计算,得到代表声音方位的角度信息。

    <6> 根据角度的范围可以确定麦克的位置,然后在显示任务fb_refresh_task中根据麦克位置更新显示界面。

    麦克阵列采用2x2矩阵形式,通过这种布局方式可以实现360度声音方位的识别。

    另外,AcousticSL算法提供声音检测门限和识别角度最小单位两个调试参数。可以根据需要修改参数,适应不同的环境条件和应用需求。

    • 音量计算

    通过手势切换到该界面后,首先对DFSDM输出的512个采样点的pcm数据先计算均值,再进行对数计算,得到对应pcm数据的音量信息,同时根据音量信息在显示任务fb_refresh_task刷新界面音量进度条。

    5. 应用演示

    视频观看:AliOS-Things声源定位应用演示

    6. 更多

    参考AliOS Things手势识别应用演示


    原文链接
    本文为云栖社区原创内容,未经允许不得转载。

    展开全文
  • 利用麦克风阵列进行声源定位在智能降噪、语音增强、语音识别等领域有广泛应用和研究前景。本文介绍基于AliOS Things + STM32F413H Discovery开发板实现声源定位算法集成和功能演示。 声源定位算法 本案例集成了...

    1. 概述

    利用麦克风阵列进行声源定位在智能降噪、语音增强、语音识别等领域有广泛应用和研究前景。本文介绍基于AliOS Things + STM32F413H Discovery开发板实现声源定位算法集成和功能演示。

    • 声源定位算法
      本案例集成了STMicroelectronics的Acoustic_SL声源定位算法。Acoustic_SL是STMicroelectronics开发的声源定位算法,支持XCORR、GCC-PHAT、BMPH三种不同算法类型。本案例使用GCC-PHAT算法类型,算法基于到达时间差(TDOA)原理实现,通过测量声音信号达到不同麦克风的时间差计算声源方向。GCC-PHAT算法作为应用最为广泛的声位算法,数据计算量和资源消耗较小,并且具有一定的抗噪和抗混响能力。

    2. 环境搭建

    开发板:STM32F413H Discovery(附带麦克风阵列板)
    手势传感器:Seeed Grove PAJ7620
    温湿度传感器:HTS221
    LED数码管:Seeed Grove LED Bar

    硬件说明:
    使用STM32F413H作为主控芯片,提供音频输入接口、I2C接口、GPIO控制接口、显示控制接口等。
    STM32F413H内置的DFSDM模块可以支持最多同时5路PDM数字麦克数据录入,并经过硬件滤波将PDM数据转换成PCM数据,降低了音频软件的复杂度和资源消耗。

    硬件连接:

    p01

    3. 软件编译

    软件:AliOS Things
    下载AliOS Things后,切换到developer分支。

    执行如下命令编译Application:
    aos make sensordemo@stm32f413h-discovery

    编译成功后,使用下面命令烧录镜像:
    aos upload sensordemo@stm32f413h-discovery

    4. 软件介绍

    • AliOS Things

    AliOS Things是面向IOT领域的轻量级物联网嵌入式操作系统。AliOS Things启动过程中,依次完成内核初始化、硬件资源初始化、功能组件初始化、外设驱动初始化。系统就绪后,通过用户定义的application_start()函数进入应用程序。

    • 创建声位和音量显示界面

    在application_start()函数中调用display_init()创建LCD刷新任务、显存刷新任务、定义显示界面。

    声位显示界面:
    IMG_20180927_114914

    切换到该界面时,声位识别算法开始运行,屏幕上指示当前声音方位。测试时建议距离mic阵列水平距离30cm,高度和mic阵列尽量接近,可以获得最佳效果。

    音量显示界面:
    IMG_20180927_114925

    切换到该界面时,计算mic信号的大小并转换成音量在屏上显示音量指示条,即提供声音强度检测功能。

    • 运行声位算法

    <1> 在application_start()函数中创建声源定位task,在该task中继续调用acoustic_sl_start()执行声源定位功能。

    <2> 在acoustic_sl_start()函数中调用DFSDM_Init()和HAL_DFSDM_FilterRegularStart_DMA()初始化并启动DFSDM录音程序。打开4路DFSDM滤波通道,获取4个麦克风的PDM数据,经过内部处理转换成PCM后通过DMA传输到缓存中。

    <3> 调用acoustic_sl_init()库函数初始化Acoustic_SL算法。这一步需要设置算法参数,例如配置算法类型、channel number、麦克风阵列间距以及识别角度最小单位、声音检测门限。

    <4> DFSDM录音程序每次分别从4个mic录入512个采样点的PDM数据数据,经过内部处理转换成PCM后通过DMA传输到缓存中。

    <5> 缓存数据到达后,对PCM数据进行简单的High Pass滤波算法处理,然后调用AcousticSL_Data_Input()以每次16samples的大小送入算法后,触发外部中断,在中断函数中再调用AcousticSL_Process()进行算法处理和声位计算,得到代表声音方位的角度信息。

    <6> 根据角度的范围可以确定麦克的位置,然后在显示任务fb_refresh_task中根据麦克位置更新显示界面。

    麦克阵列采用2x2矩阵形式,通过这种布局方式可以实现360度声音方位的识别。

    另外,AcousticSL算法提供声音检测门限和识别角度最小单位两个调试参数。可以根据需要修改参数,适应不同的环境条件和应用需求。

    • 音量计算

    通过手势切换到该界面后,首先对DFSDM输出的512个采样点的pcm数据先计算均值,再进行对数计算,得到对应pcm数据的音量信息,同时根据音量信息在显示任务fb_refresh_task刷新界面音量进度条。

    5. 应用演示

    视频观看:AliOS-Things声源定位应用演示

    6. 更多

    参考AliOS Things手势识别应用演示

    展开全文
  • 概述 利用麦克风阵列进行声源定位在智能降噪、语音增强、语音识别等领域有广泛应用和研究前景。本文介绍基于AliOS Things + STM32F413H Discovery开发板实现声源定位算法集成和功能演示。 概述 利用麦克风阵列进行...

    摘要: 1. 概述 利用麦克风阵列进行声源定位在智能降噪、语音增强、语音识别等领域有广泛应用和研究前景。本文介绍基于AliOS Things + STM32F413H Discovery开发板实现声源定位算法集成和功能演示。

    1. 概述

    利用麦克风阵列进行声源定位在智能降噪、语音增强、语音识别等领域有广泛应用和研究前景。本文介绍基于AliOS Things + STM32F413H Discovery开发板实现声源定位算法集成和功能演示。

    声源定位算法
    本案例集成了STMicroelectronics的Acoustic_SL声源定位算法。Acoustic_SL是STMicroelectronics开发的声源定位算法,支持XCORR、GCC-PHAT、BMPH三种不同算法类型。本案例使用GCC-PHAT算法类型,算法基于到达时间差(TDOA)原理实现,通过测量声音信号达到不同麦克风的时间差计算声源方向。GCC-PHAT算法作为应用最为广泛的声位算法,数据计算量和资源消耗较小,并且具有一定的抗噪和抗混响能力。

    1. 环境搭建

    开发板:STM32F413H Discovery(附带麦克风阵列板)
    手势传感器:Seeed Grove PAJ7620
    温湿度传感器:HTS221
    LED数码管:Seeed Grove LED Bar

    硬件说明:
    使用STM32F413H作为主控芯片,提供音频输入接口、I2C接口、GPIO控制接口、显示控制接口等。
    STM32F413H内置的DFSDM模块可以支持最多同时5路PDM数字麦克数据录入,并经过硬件滤波将PDM数据转换成PCM数据,降低了音频软件的复杂度和资源消耗。

    硬件连接:

    图片描述

    1. 软件编译

    软件:AliOS Things
    下载AliOS Things后,切换到developer分支。

    执行如下命令编译Application:
    aos make sensordemo@stm32f413h-discovery

    编译成功后,使用下面命令烧录镜像:
    aos upload sensordemo@stm32f413h-discovery

    1. 软件介绍

    AliOS Things
    AliOS Things是面向IOT领域的轻量级物联网嵌入式操作系统。AliOS Things启动过程中,依次完成内核初始化、硬件资源初始化、功能组件初始化、外设驱动初始化。系统就绪后,通过用户定义的application_start()函数进入应用程序。

    创建声位和音量显示界面
    在application_start()函数中调用display_init()创建LCD刷新任务、显存刷新任务、定义显示界面。

    切换到该界面时,声位识别算法开始运行,屏幕上指示当前声音方位。测试时建议距离mic阵列水平距离30cm,高度和mic阵列尽量接近,可以获得最佳效果。

    切换到该界面时,计算mic信号的大小并转换成音量在屏上显示音量指示条,即提供声音强度检测功能。

    运行声位算法
    <1> 在application_start()函数中创建声源定位task,在该task中继续调用acoustic_sl_start()执行声源定位功能。

    <2> 在acoustic_sl_start()函数中调用DFSDM_Init()和HAL_DFSDM_FilterRegularStart_DMA()初始化并启动DFSDM录音程序。打开4路DFSDM滤波通道,获取4个麦克风的PDM数据,经过内部处理转换成PCM后通过DMA传输到缓存中。

    <3> 调用acoustic_sl_init()库函数初始化Acoustic_SL算法。这一步需要设置算法参数,例如配置算法类型、channel number、麦克风阵列间距以及识别角度最小单位、声音检测门限。

    <4> DFSDM录音程序每次分别从4个mic录入512个采样点的PDM数据数据,经过内部处理转换成PCM后通过DMA传输到缓存中。

    <5> 缓存数据到达后,对PCM数据进行简单的High Pass滤波算法处理,然后调用AcousticSL_Data_Input()以每次16samples的大小送入算法后,触发外部中断,在中断函数中再调用AcousticSL_Process()进行算法处理和声位计算,得到代表声音方位的角度信息。

    <6> 根据角度的范围可以确定麦克的位置,然后在显示任务fb_refresh_task中根据麦克位置更新显示界面。

    麦克阵列采用2x2矩阵形式,通过这种布局方式可以实现360度声音方位的识别。

    另外,AcousticSL算法提供声音检测门限和识别角度最小单位两个调试参数。可以根据需要修改参数,适应不同的环境条件和应用需求。

    音量计算
    通过手势切换到该界面后,首先对DFSDM输出的512个采样点的pcm数据先计算均值,再进行对数计算,得到对应pcm数据的音量信息,同时根据音量信息在显示任务fb_refresh_task刷新界面音量进度条。

    1. 应用演示

    视频观看:AliOS-Things声源定位应用演示

    1. 更多

    参考AliOS Things手势识别应用演示

    展开全文
  • 声源定位

    千次阅读 多人点赞 2019-11-06 13:08:35
    声源定位 一.简介 声音定位是人们感知周围事物的一个重要部分。即使看不到那里有什么,我们也可以根据声音大致判断出我们周围有什么。尝试在电子设备中复制相同的系统可以证明是一种有价值的方式来感知机器人、...

    声源定位
    一.简介
    声音定位是人们感知周围事物的一个重要部分。即使看不到那里有什么,我们也可以根据声音大致判断出我们周围有什么。尝试在电子设备中复制相同的系统可以证明是一种有价值的方式来感知机器人、安全和一系列其他应用的环境。我们构造了一个三角形排列的麦克风来定位任意声音的方向。通过记录来自三个麦克风的输入,我们可以将记录相互关联,以识别音频记录之间的时间延迟。因为三个麦克风的物理位置是已知的,所以可以使用麦克风之间的时间延迟来估计声音的方向。估计方向后,我们在液晶显示器上用箭头显示方向。
    二.整体设计思路
    在这里插入图片描述
    2.1 数学原理
    在采样帧中,两个麦克风之间的近似最大时间延迟是使用以下三个参数计算得出的:1.室温下干燥空气中的声速,2.每个麦克风之间的距离,3.采样速率。
    最大时间延迟=采样速率/(声速距离)= 25 kHz / (343 m/s 0.50 m)
    本项目中用于计算两个信号之间时间延迟的主要数学技术是互相关,它通过沿另一个信号滑动一个信号来测量两个信号的相似性。公式如下:
    在这里插入图片描述
    2.2 硬件框图
    下图说明了本项目中使用的所有外设。PIC32利用10位模数转换器(ADC)读取模拟输入,利用串行外设接口(SPI)通道写入薄膜晶体管显示器,利用另一个串行外设接口通道写入数模转换器(DAC)进行模拟输出。
    在这里插入图片描述
    2.3 硬件/软件权衡
    在硬件和软件之间进行选择是实现容易的平衡,同时倾向于在微控制器中运行系统,以增加微控制器提供的灵活性。由于我们希望能够比较声音和可能的时间延迟,大多数音频处理都是在PIC32微控制器中完成的。虽然某些项目中提到使用硬件脉冲检测器来确定到达时间,但我们选择用软件来确定,因为这样可以让我们检测非脉冲的声音。一些放大和信号控制是在硬件滤波器和放大器中完成的,因为这对ADC正确读取输入信号和消除混叠是必要的。在PIC32内部,我们决定让微控制器使用直接存储器存取通道将数据传输到缓冲器,而不是让处理器高速中断来采样ADC。这允许微控制器在采样过程中进行其他处理。
    三.硬件
    3.1 概观
    该项目的硬件包括3个麦克风电路、一个电压调节器、一个按钮、一个薄膜晶体管显示器和一个开关组成的原型板。3个麦克风电路中的每一个都包括驻极体麦克风、一组滤波器和放大器。麦克风电路的每个输出都被反馈入PIC32上的模数转换器通道。单独的线性电压调节器用于为麦克风电路供电。原型板的3.3v电源轨未被使用,因为我们发现微控制器的噪声可以进入电源轨并被放大器拾取。此外,9v电池用于提供整体电源。我们还发现5v插入式壁装电源往往会产生不必要的噪声(可能来自某些开关频率)。该按钮用于开始采样,并简单地作为上拉连接。配置了微控制器的内部下拉。薄膜晶体管显示器用于显示调试信息并指向声音的方向。麦克风电路和电压调节器焊接在焊接板上。最后,使用一个双通道12位数模转换器进行调试。这用于回放录音和输出相关波形。这些可以在示波器上看到。
    3.2 麦克风电路
    麦克风电路由三部分组成。首先是麦克风本身。第二是高通滤波器,用于在向放大器馈电之前去除麦克风中的任何DC值。最后是放大器,它是一个运算放大器,被配置为充当带通滤波器。麦克风电路示意图如下所示:
    在这里插入图片描述
    MCP6242是用于放大器的运算放大器。这是一款3.3V兼容轨对轨运算放大器。初始高通滤波器的截止频率约为160Hz。带通放大器上的高通滤波器被选择为与初始高通滤波器的截止值大致匹配。至于运算放大器的低通滤波器,选择该滤波器的截止频率约为725Hz。选择这些较低频率的选择是因为我们能够用原始方法获得原始采样率。使用的增益是1000:1。这将证明是一个问题,这将在后面的进一步改进部分看到。麦克风电路的每个输出都连接到一个具有模拟功能的输入/输出引脚。使用的引脚是RA0、RA1和RB3,它们对应于AN0、AN1和AN5。这些被组装成焊接板,如下所示:
    在这里插入图片描述
    3.3 按钮
    按钮电路相对简单。这只是一个与330欧姆电阻串联的按钮开关。开关电路的一端是3.3V轨,另一端是PIC32的数字输入/输出引脚。PIC32配置为提供弱下拉,因此当开关打开时,输入/输出引脚读数为0,当闭合时,输入/输出引脚读数为1。开关最初连接到原板,但这最终会导致问题,因为单击开关会导致组件抖动。为了解决这个问题,将一个不同的开关焊接到一段绞合的24awg(截面积大概为0.2平方毫米)电线上,然后连接起来代替车载开关。这允许系统可以进行短距离触发。按钮开关连接到RB7,如下图所示。
    在这里插入图片描述
    3.4 薄膜晶体管显示器
    薄膜晶体管显示器用于显示调试信息并指向声源方向。我们使用的器件是Adafruit,它提供薄膜晶体管显示器、薄膜晶体管显示器驱动器和SD卡读卡器(本项目未使用)。其代码是一个库,该库改编自Adafruit提供的库,用于运行带有Arduino的薄膜晶体管。薄膜晶体管分支使用了一个SPI通道和其他几个数字输入/输出引脚。薄膜晶体管显示器的引脚排列与赛ABB开发板中的配置相同。具体如下:RB0 ->D/C、RB1->ECS、RB2->reset、RB11->EMOSI和RB14->CLK。
    在这里插入图片描述
    3.5 数字模拟转换器
    使用的数模转换器是MCP4822。这是我们常用的12位双通道数模转换器。数模转换器仅用于调试系统,不用于项目本身。通过以1kHz的速率向数模转换器发送波形,我们可以查看系统的输出情况。数模转换器采用标准配置,如下所示:RB4->CS,RB5->MOSI,RB15->CLK。
    3.6 进一步改进
    对于硬件而言,进一步的改进将包括对放大器进行返工,去掉按钮电路,让音频电路触发采样。首先,选择放大器带通滤波器的频率范围是因为原始系统具有低采样频率。由于当前系统可以在25kHz下采样而没有问题,并且经过一些调整后可以增加到40kHz,因此我们可以改变低通滤波器的截止频率。比几千赫高得多。然而,一个问题是增益带宽积大约为550kHz。当增益为1000:1时,结果将系统频率限制在550kHz。但是我们应该注意,增益带宽积的特性不太好,因此芯片之间可能会有很大差异。添加高通滤波器会造成相位偏移,因为每个运算放大器可能不同,这意味着每个麦克风的相位偏移也不同。由于互相关依赖于检查输入信号的相位,这意味着峰值的位置取决于麦克风听到的声音的频率。
    四.软件
    4.1 概述
    为了最大化系统的采样率,我们修改了时钟预分频器,使时钟频率达到60 MHz。然而,为了开始声音定位检测,需要按下按钮来激活程序,并且使用去抖状态机(有限状态机)来保持按钮的状态。首先,为了定位声音的方向,系统首先需要记录来自每个麦克风通道的读数,这是使用直接存储器访问来最小化处理器使用的,并且记录的麦克风数据存储在阵列中。第二,每个通道的记录与下一个通道互相关,并且用相应的相对定时识别互相关值的峰值点。第三,每对声道之间的相对定时将被用于通过使用定时差的相对方向和麦克风放置的物理关系的知识来计算声源的方向,以导出三个方向上的声源。最后,在薄膜晶体管显示屏上画出相应的箭头来提示结果。下一节将详细讨论软件的每个组件,还包括调试功能、实验方法和进一步的建议。
    4.2 直接存储器存取和模数转换器
    三个麦克风通道的模拟输入连接到三个模数转换器通道,即通道0、1和5。模数转换器配置为自动采样模式,在上一次转换完成时,将连续采样下一个数据,采样大小为三个通道,并转换为16位有符号整数。麦克风的录音是使用直接存储器存取完成的,特别是三个麦克风通道的三个直接存储器存取通道。对于每个通道,DMA最初被配置为从麦克风数据从模数转换器缓冲器传输到记录阵列,并且每次传输的整个块大小是记录阵列的大小,其被设置为采样速率乘以十分之一秒。一旦功能调用使能了直接存储器存取通道,直接存储器存取将以定时器2中断设置的速率传输16位大小的单元,该中断被配置为系统时钟/采样频率=2400个时钟周期。当整个数据块被传输时,码分多址信道将提升码分多址_电动车辆_夏令时_满标志,以表示传输完成。此外,计算线程检查所有三个DMA通道的完成标志,以开始声音定位的计算。
    4.3 按钮
    按钮线程持续读取按钮的输入,并使用按钮去抖状态机FSM来更新按钮的当前状态。FSM被用来适当地捕捉按钮的全部按下。按钮按下切换就绪标志,向计算线程发出信号,以直接内存分配传输开始计算。下图具体说明了FSM。
    在这里插入图片描述
    4.4 互相关
    一旦麦克风数据完全记录在阵列中,将对每对麦克风记录计算互相关。互相关是在信道0和信道1、信道1和信道2、信道2和信道0上计算的。在互相关计算中,每个通道的记录值加上每个麦克风通道的恒定DC偏置,这是为每个通道独立测量的。无论如何,通过沿着第二记录完全滑动第一记录的中间部分来计算每个互相关,并且计算完全重叠的记录的点积之和,并且得到的互相关值并存储在记录大小的数组中。滑动窗口的大小是在用多个窗口大小进行实验之后选择的,并且该大小允许使用大量的记录值来寻找两个通道之间的相关性,以及足够的互相关数据来适应麦克风的物理距离在记录约束之间的最大时移量。当互相关值被计算时,三对中每一对的峰值及其索引值将被识别和记录,以计算源声音的方向。
    4.5 计算方向
    声源的方向是使用互相关计算期间检测到的三个峰值指数来计算的。使用3位编码来确定方向。编码的每个比特对应于峰值指数是正还是负,当指数是正时,这意味着第一次记录发生在第二次记录之前,因此第一次记录的麦克风比第二次记录的麦克风更靠近声源。编码由以下赋值构成。
    在这里插入图片描述
    接下来,使用以下逻辑使用3位编码来确定声音的方向,该逻辑将方向确定为在其他两个麦克风通道之前接收信号的麦克风通道。
    在这里插入图片描述
    通过画一个指向三个麦克风之一的箭头,结果方向将显示在薄膜晶体管显示屏上。
    4.6 数模转换器(用于调试)
    为了调试系统,配置了两个数模转换器通道。数模转换器配置为通过串行接口输出互相关数据,串行接口以定时器3中断设置的速率输出数据,定时器3中断配置为60kHz。输出引脚连接到示波器,以便观察和分析互相关信号,这些信号从最新的计算互相关阵列中反复流出。
    4.7 尝试了另一种方法
    我们尝试的第一种声音定位计算方法是连续计算每个麦克风通道与预先录制的录音的互相关。因此,由于实时计算的需求非常紧张,采样率受到很大限制。我们达到的最高采样速率在微处理器运行时为60 MHz,它太低,无法合理分辨麦克风通道之间的时序延迟。从这种方法获得的结果不能识别出符合理论直觉的一致相关性。
    4.8 代码片段
    下面是每个函数和线程的代码,仅供参考。

    //定时器3中断服务例程
    void __ISR(_TIMER_3_VECTOR, ipl2) Timer3Handler(void) {   
    mT3ClearIntFlag();    
    transfer_to_DAC_Channel_A();    
    transfer_to_DAC_Channel_B();
    }
    //计算源声音的方向
    //在薄膜晶体管显示器上绘制结果
    void compute_direction() {    
    // assigned encoding   
     encoding = (peak_index[0] > 0) << 2 | (peak_index[1] > 0) << 1 | (peak_index[2] > 0);
     direction = check_cases_identified _direction(encoding);
     draw_TFT(direction);}
     //交叉关联每对麦克风录音
     void cross_correlate() {    
        for (each channel) {        
           for (shift range) {           
              for (index range) {         
              correlate_value += mic(channel) + biase * mic(next channel) + biase;
                             }            
                             Update_new_peak_value(); 
                     }   
                 }
    }
    //线程等待按钮按下来记录和调用
    //交叉关联和计算方向
    static PT_THREAD(protothread_computation(struct pt * pt)) {    
    PT_BEGIN(pt);   
    while (1) {        
    wait_until_button_pushed();        
    Reset_button;        
    Star_DMA_transfer(All_3_channels);        
    wait_until_all_DMA_complete();        
    //cross_correlation the new recordings        
    cross_correlation();        
    //compute and display direction        
    compute_direction();    
    }    
    PT_END(pt);
    }
    //这个线程更新并维护按钮的状态
    static PT_THREAD(protothread_button(struct pt * pt)) {    
    PT_BEGIN(pt);   
    while (1) {        
    button = Read_Button_input();        
    // FSM for the button press debouncing        
    transition_case_for_button_state();   
     }    
     PT_END(pt);
     }
     //主要功能。配置和初始化定时器、数模转换器、模数转换器、直接存储器、薄膜晶体管、引脚、线程。
    void main(void) {    
    // Configure timer3 interrupt    
    Config_Timer3(sys_clock / 1000);     
    // Configure timer 2 interrupt    
    Config_Timer2(sys_clock / sampling_rate);    
    /// SPI setup for DAC    
    Configure_SPI_for_DAC();     
    //Configure and enable the ADC    
    Enable_ADC_for_3_Channels();     
    // DMA Configure for 3 channels  
    Enable_3_DMA_Channels_on_Timer2_and_Raise_DONE_flag();     
    // set up i/o port pin    
    set_digital_input_and _pulldown(push_button_input_pin);     
    // config threads    
    PT_setup();    
     // setup system wide interrupts    
     INTEnableSystemMultiVectoredInt();     
     // init the threads   
      initialize_threads();     
      // config and init the display    
      tft_config();     
      // round-robin scheduler for threads    
      while (1) {        
      PT_SCHEDULE(protothread_button( & pt_button));   
      PT_SCHEDULE(protothread_computation( & pt_computation));    
         }
     }

    五.结果
    声音定位效果很好,计算延迟很小。当系统能够捕捉麦克风电路带通范围内的正弦扫描有效部分时,该器件工作最佳,因此可以完全捕捉录音的频率特性进行比较。这意味着系统的精度取决于点击按钮的用户的精度,也取决于系统使用的运算放大器,因为这将决定上限的位置。测试设备时捕获了以下图像。
    在这里插入图片描述
    在这里插入图片描述
    两条上迹线显示来自其中一个麦克风的记录信号,下迹线显示来自两个麦克风通道的互相关结果。互相关迹线使用高电平信号来显示数据何时开始和结束。这使我们能够看到互相关的起点和终点以及峰值的位置。在第一幅图像中,峰值明显向左移动,表明一个记录领先于另一个记录,而在另一幅图像中,峰值居中,表明两个记录大致在同一时间。虽然该系统通常是正确的,但存在一致性问题。项目范围缩小到检测与每个麦克风对齐的方向的原因是读数不一致,即使读数一致也不完全正确。这可能是麦克风电路的问题。运算放大器的增益带宽积引起的低通滤波可能会导致麦克风在输入信号上看到不同的相移。我们相信情况是这样的,因为互相关的峰值会像上面描述的那样以干净的波形返回,但是峰值会位于错误的部分。这表明麦克风电路或采样有问题。由于中央处理器时钟工作在60兆赫,模数转换器的采样频率也在兆赫范围内,所以我们通常不关心模数转换器采样之间的延迟,也不关心直接存储器将数据顺序复制到缓冲器中。这只会使麦克风电路在输入信号中产生一些不希望的相移。更糟糕的是,由于相移差可能与频率有关,并且测试信号是频率的线性扫描,这意味着采样和互相关的结果将取决于用户在频率扫描中在正确时间按下按钮的能力。这是不可靠的,因为大多数人不能捕捉到精确到不到十分之一秒的正确时间,所以如果系统也能自己触发采样会更好,因为这样会更一致。
    另一方面,这个项目实际上没有任何安全问题。由于该设备只需记录音频信号并在显示器上返回方向,因此它没有任何移动部件,也不发射/辐射任何电磁波、任何声波或任何可能对周围环境和生物特别有害或干扰的能量输出。就可用性而言,该设备需要相当多的工作。首先,移除按钮将是一个关键的改变,这将提高设备的可用性,因为目前,它需要一个正确定时的按钮,这将要求用户是准确的。第二,扩展带通电路的频率范围,以允许设备检测更宽范围的声音信号。最后,使用更多麦克风通道可能会提高声音方向的检测分辨率。因此,为了充分利用该设备,需要进一步开发该设备的许多方面。
    六.结论
    最终设计和原始设计没有达到最初为项目设定的预期。因此,项目范围缩小到指向最近的麦克风。我们遇到的主要问题是,系统没有从每对麦克风通道之间的相对时间延迟中给出特别一致的结果。在很大程度上,系统会分辨出正确的麦克风,但是不一致意味着它多次指向错误的方向。最初,我们希望能够以高得多的分辨率,十度,分辨出一个方向。互相关代码和代码中峰值的索引似乎给出了正确的结果。互相关波形看起来像理论上的预期,但偶尔会在错误的位置出现峰值。返回峰值索引的代码似乎也会根据观察到的波形峰值给出正确的索引。因此,误导性不一致性的来源很可能不是来自计算,而是麦克风电路。如结果部分所述,麦克风电路中滤波器所选择的截止频率不是我们希望系统运行的声音范围的正确频率。此外,运算放大器增益带宽积的低通也可能导致电路对音频施加不同的相移。如果我们要重做这个项目,我们可能会降低增益,选择增益带宽积更高的运算放大器。这可能会减少或消除我们得到的相关峰值的变化。此外,我们为低通滤波器选择了不同的截止频率,这将使我们的项目能够在更高的频率范围内工作。让系统自己触发采样也可能有助于减少我们看到的不一致性。该系统没有任何重大的安全问题。该项目只需读取音频读数,并尝试确定音频的来源方向。唯一的输出显示在薄膜晶体管显示器上。薄膜晶体管显示屏不够亮,不会损害人们的视力。关于隐私,音频记录的持续时间被限制在十分之一秒,一旦采集下一个样本,它们就会被丢弃。虽然理论上可以从用于调试的数模转换器通道中提取音频,但最终版本会删除该调试功能。
    七.物料清单
    项目 数量
    PIC32MX250F128B芯片 1
    大硬纸板19V电池 1
    薄膜晶体管液晶显示器 1
    麦克风 3
    小型焊接板 3
    运算放大器MCP6241 3
    跨接电缆 10
    扬声器 2
    SIP或插头插座/插头 20
    电压调节器MCP1702 1

    更多创意方案,长按识别下图中二维码,敬请关注本人的微信公众号“小科谈”,愿天下没有难做的电子产品。
    在这里插入图片描述

    展开全文
  • C++声源定位.zip

    2020-08-26 10:19:44
    而在一些特殊应用场合,如具有声源定位功能的助听器或高精度微小型声呐中,需要麦克风传感器在定位声源位置的同时兼具小型化的特征。此外,目前声源定位技术一般都需要一个传声器来获取该位置的声音信
  • 使用TDOA进行声源定位

    千次阅读 2020-09-19 17:36:08
    根据现有的研究成果来看,声源定位(Sound Source Localization, SSL)存在以下几种方法:基于最大输出功率的可控波束成形的定位方法、基于高分辨谱估计的定位方法和基于到达时延差(Time Difference of Arrival,TDOA)...
  • 本文以基于声源定位的自主摄像系统为依托,主要是讲解声源定位的基础知识,以及如何实现声源定位。如果感兴趣以及对其中不懂的可以添加博主QQ:2859340499进行咨询 1. 硬件搭建——麦克风阵列设计: 一维直线型...
  • 声源定位技术定位出外界声源相对于机器人的方向和位置,机器人听觉声源定位系统可以极大地提高机器人与外界交互的能力。总结和分析面向机器人听觉的声源...最后总结了机器人听觉声源定位系统的应用,并分析了存在的问题和
  • 基于NOIZEUS数据库的实验结果表明,该方法能够通过训练适应不同的声学环境,与其他基于学习的室内声源定位算法相比,其在高混响与低信噪比环境下仍具有较好的定位性能与鲁棒性,具有较大的研究和应用价值。
  • 声源定位原理与实现.pdf
  • 基于卷积神经网络的双耳声源定位
  • 针对当前声源定位精度不理想、实时性不佳等问题,提出了一种正四棱锥麦克风阵列声源定位结构。...实验结果证明了该结构及定位算法在提高系统定位精度和实时性能方面的有效性,能满足机器人应用中对声源定位的需求。
  • WSNs中节点协同声源定位协议研究,夏娜,赵娟,声源定位是无线传感器网络重要的应用领域之一。由于实际环境中的声源大部分是运动的,因此设计一种快速准确的声源定位协议是关键
  • 这个程序是本人写的一个基于BP神经网络算法解决室内声源定位问题模拟程序,程序的原理在我的一篇博客当中有详细叙述,博客的链接为https://blog.csdn.net/ahhhhhh520/article/details/106126759
  • 基于双麦克风声源定位的视频跟踪

    千次阅读 2018-10-11 17:52:14
    声源定位跟踪技术在当今社会有着越来越广泛的应用。在此使用两个高灵敏度麦克风作为传感器,配以音频信号处理芯片,接收音频信号并进行模数转换,使用FPGA器件作为核心控制器,结合TDOA算法和ILD算法,实现在室内...
  • 2.2.3 基于最大输出功率的可控波束形成技术该方法对麦克风所接收到的声源信号滤波并加权求和来形成波束,进而通过搜索声源可能的位置来引导波束,修改权值使传声器阵列的输出信号功率达到最大,波束输出功率最大的点...
  • 介绍了一种协助移动机器人平台搜寻目标方向的声源定位系统 .这种听觉系统的最终目标是服务于移动机器人 ,它所提供的听觉信息再匹配视觉信息 ,将指导...实验表明 ,本文中提出的声源定位系统可有效应用于移动机器人平
  • 1.声源定位 麦克风阵列拾取(通过麦克风阵列获取声源信号)→ 一系列处理 → 声源定位算法(得到声源的位置) 2.在声源定位技术上设计止鼾系统(软硬件结合) (1)利用声源定位技术确定鼾声的位置(鼾声也是一种...
  • 声源定位是一个应用非常广泛的研究课题。针对阵列定位精度不高的问题,提出一种基于压缩感知的声源定位算法。通过构建冗余字典,该算法将网络中的多个未知源节点的位置作为一个系数向量,然后采用稀疏贝叶斯学习算法...
  • 基于BP神经网络的室内声源定位算法(附有程序)

    千次阅读 多人点赞 2020-05-18 21:45:38
    基于BP神经网络的室内声源定位算法的实现(附有程序) 问题描述 现在有一个安静的房子,有一个人在房间里走动,我要利用屋里的麦克风接收这个人的脚步声,然后对这个人进行定位。 问题的意义 声源定位,这个问题的...
  • 基于麦克风阵列模拟人耳进行三维空间的声源定位,有着广泛应用前景,可应用于大型机械产品的故障检测以及新生婴儿先天性心脏病检测筛查等领域,这些应用要求定位精度高,空间定位分辨能力强,而声源的定位精度与声音...
  • 通过球麦克风阵列采集高阶声场的声压信息,采用球谐函数分解声场并建立信号模型,应用MUSIC算法提取出声源的方位。由于MUSIC算法在信号源相干性比较高,特别是声源比较接近时,其分辨率会严重下降,提出了一种基于空间...
  • 二、声源定位算法简介 1 引言 声源识别定位系统技术广泛应用于军用和民用领域,在民用领域中主要用于环保、无损检测和交通运输行业。近年来,在麦克风阵列基础上衍生的定位技术成为研究热点。其基本原理比较简单,...
  • 麦克风阵列声源定位 SRP-PHAT

    万次阅读 多人点赞 2018-08-11 14:35:59
     声源定位方法一般可分为两大类,一种是基于TDOA的两步算法(two-stage algorithm),一种是基于空间谱估计的一步算法,也就是这里要介绍的可控波束响应(steered-response power) steered-response power  可控...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,028
精华内容 411
关键字:

声源定位应用