声音定位系统
声音定位系统

声音定位系统一、介绍声音定位系统是利用声音传播特性进行定位的一种技术系统。
通过分析声波传播的特点和声源的信号,可以确定声源的位置和方位。
声音定位系统在各个领域广泛应用,包括工业领域、医疗领域、安防领域等。
本文将介绍声音定位系统的原理、应用和未来发展趋势。
二、原理声音定位系统的原理基于声波在介质中的传播速度和传播特性。
声波在空气中传播速度约为343米/秒,声波在介质中的传播速度与介质的密度和弹性有关。
当声源发出声波信号后,声波会在空气或其他介质中传播,当声波到达接收器时,根据声波信号的延迟和幅度差异,可以计算出声源的位置和方位。
常见的声音定位系统主要有两种原理:TOA (Time of Arrival) 和TDOA (Time Difference of Arrival)。
1. TOA 原理:TOA 原理是通过计算声波信号从声源到接收器的传播时间差来确定声源的位置。
当声源发出信号后,通过计算声音从声源传播到接收器的时间差,可以确定声源的位置。
TOA 原理适用于较小范围内的声音定位,例如室内定位。
2. TDOA 原理:TDOA 原理是通过计算声波信号在多个接收器上的到达时间差来确定声源的位置。
通过多个接收器上声音到达的时间差,可以利用三角定位法计算出声源的位置。
TDOA 原理适用于大范围的声音定位,例如室外定位。
三、应用声音定位系统在各个领域都有广泛的应用。
1. 工业领域:声音定位系统在工业领域中可用于故障检测和定位。
通过分析机器产生的声音信号,可以判断设备的运行状态和故障位置。
例如,在汽车制造过程中,利用声音定位系统可以检测发动机噪声,并定位可能存在的故障。
2. 医疗领域:声音定位系统在医疗领域中可用于病人监测和定位。
例如,在手术室中使用声音定位系统可以监测患者呼吸声和心跳声,并及时发现异常情况。
此外,声音定位系统还可用于定位医疗设备和患者位置,提高医疗操作的准确性。
3. 安防领域:声音定位系统在安防领域中可用于入侵检测和定位。
基于STM32的声音定位系统

基于STM32的声音定位系统【摘要】本文介绍了基于STM32的声音定位系统。
在引言部分中,我们简要介绍了该系统的概念及STM32在声音定位系统中的应用。
随后,通过详细阐述系统设计、信号处理、定位算法、实验结果和系统优化,展示了基于STM32的声音定位系统的设计与性能优势。
实验结果验证了系统的有效性,同时系统优化部分说明了STM32在声音定位领域的潜在应用。
结论部分总结了基于STM32的声音定位系统的有效性,并探讨了STM32在未来声音定位领域的发展前景。
该系统具有很高的实用价值,能够为声音定位领域带来更多创新和应用。
【关键词】STM32, 声音定位系统, 硬件设计, 信号处理, 定位算法, 实验结果, 系统优化, 性能优化, 有效性, 潜在应用.1. 引言1.1 引言1: 基于STM32的声音定位系统简介声音定位技术是一种通过分析声音信号来确定声源位置的技术。
随着科技的不断进步,声音定位系统的应用领域越来越广泛,涵盖了安防监控、智能家居等多个领域。
在现代化智能系统中,基于STM32的声音定位系统正逐渐成为研究的热点之一。
本文将重点介绍基于STM32的声音定位系统的硬件设计、信号处理、定位算法、实验结果和系统优化等方面内容,旨在探讨STM32在声音定位系统中的应用及潜在优势。
通过实验验证和性能优化,我们将评估基于STM32的声音定位系统的有效性,为未来的声音定位技术发展提供更多的思路和借鉴。
1.2 引言2: STM32在声音定位系统中的应用STM32可以通过内置的ADC模块实现对声音信号的快速高精度采集,保证了声音信号的准确性和可靠性。
其丰富的通信接口如SPI、I2C、UART等,可以方便地与传感器、存储器、通信模块等外部设备进行数据交换,实现声音定位系统的多功能扩展。
STM32在声音信号处理方面也具有独特优势。
其内置的DSP指令集和丰富的算法库,可以高效地实现声音信号的滤波、特征提取和匹配等处理操作,为声音定位系统的性能提升提供了有力支持。
基于STM32的声音定位系统

基于STM32的声音定位系统引言声音定位技术是近年来备受关注的一项技术,它可以通过声音信号的接收和处理,确定声源的位置。
这项技术在军事、安防、医疗等领域均有着广泛的应用,而随着技术的发展,声音定位系统也逐渐向普通民用领域渗透。
为了满足市场对于声音定位系统的需求,一些厂家推出了基于STM32的声音定位系统。
本文将介绍基于STM32的声音定位系统的设计及实现方法。
一、声音定位系统的工作原理声音定位系统是通过多个麦克风阵列收集声音信号,并利用算法处理声音信号,从而确定声源的位置。
通常,声音定位系统包括声音采集模块、数字信号处理模块和控制模块。
声音采集模块:声音采集模块采用多个麦克风构成的麦克风阵列,用于接收来自不同方向的声音信号。
多个麦克风可以接收到同一声源的声音信号,并通过麦克风之间的时间差或声音强度差来确定声源的位置。
数字信号处理模块:声音信号采集后,需要进行数字信号处理,一般包括信号滤波、时域分析、频域分析、噪声抑制等处理步骤。
处理后的声音信号可以更准确地确定声源的位置。
控制模块:控制模块通常采用微处理器或嵌入式系统,用于控制声音采集模块和数字信号处理模块的工作,并根据处理结果确定声源的位置。
二、基于STM32的声音定位系统的设计与实现基于STM32的声音定位系统通常包括硬件设计和软件设计两部分。
硬件设计:声音定位系统的硬件设计主要包括声音采集模块、数字信号处理模块和控制模块。
声音采集模块一般采用麦克风阵列,通过多个麦克风接收声音信号。
数字信号处理模块一般采用DSP或FPGA芯片,用于对采集到的声音信号进行处理。
控制模块一般采用STM32系列的单片机,用于控制声音采集模块和数字信号处理模块的工作,并进行数据处理和结果输出。
软件设计:声音定位系统的软件设计主要包括嵌入式软件和PC端软件。
嵌入式软件主要运行在STM32单片机上,用于控制硬件模块的工作,并进行声音信号的处理。
PC端软件一般用于与声音定位系统进行通信,接收处理结果并进行显示、记录等操作。
声音定位系统演示PPT

中断子程序流程图:
THE END!
THANKS!!!!!
(五)显示数据模块 方案一:使用传统的数码管显示。但显示的信息量 较小且占用的端口资源也较多,功耗比较大。 方案二:使用液晶显示屏显示。液晶显示屏(LCD) 具有轻薄短小、低耗电量、无辐射危险,画面效果 好,分辨率高,抗干扰能力强等特点。
三、硬件电路设计
(一)发声电路模块
发声电路模块由AT89C51单片机产生500HZ的方波,频率比较稳定,然后经过三极管放大,驱动蜂 鸣器发声。电路原理图如下图所示:
2014年重庆市“TI”杯电子设计竞赛
声音定位系统 (控制类)
参赛队员:胡少怡、彭明闯、郑涛
摘要
本声音定位系统由声响模块,信号接收模块和信 息处理模块组成,系统采用TI公司高性能低功耗 MSP430单片机作为控制器,声响模块由AT89C51单片 机,三极管、蜂鸣器组成,接收模块声音信号通过 驻极体话筒转化成微弱电压信号,经放大,滤波, 整形为500HZ方波信号,主机接收方波信号,采用时 间差法,分别计算三个驻极体话筒位置,第四个作 为校正,主控器将声响模块位置信息用液晶显示其 坐标。
(四)声音接收模块
方案一:采用压电式声敏传感器。压电声敏传感器 是利用压电晶体的压电效应制成一种能实现声-电转 换器件。但压电声敏传感器较为少见,价格较贵。 方案二:采用电容式驻极体话筒(俗称咪头)。该 元件能将一般的声音信号转化为电信号。加上后续 的放大滤波电路构成声音接收模块,实现简单,价 格便宜。 。
(二)声源模块
方案一:采用扬声器作为发声模块。但是使用时频 率要求较高,一般还需要功率放大,结构复杂,且 功耗大。 方案二:采用蜂鸣器作为发声模块。蜂鸣器结构简 单,使用简便,不需要功率放大,且使用频率要求 较低,功耗很低,价格便宜。
[声音定位系统]声音定位系统设计
![[声音定位系统]声音定位系统设计](https://img.taocdn.com/s3/m/0775c7d2ba4cf7ec4afe04a1b0717fd5360cb20c.png)
[声音定位系统]声音定位系统设计篇一: 声音定位系统设计I声音定位系统设计摘要从GPS到手机定位,定位系统在我们的日常生活中越来越重要。
[]声音定位,即确定声源在空间中的位置,其在地质勘探、人员搜救、目标跟踪等方面有着广泛的应用。
现在已将声音定位应用在可视电话、视频会议等系统中。
本系统由两部分组成。
声源模块是用单片机产生一个音频信号,该信号用三极管进行放大后输入到扬声器作为声源;接收模块使用麦克风进行接收,然后对接收的信号经过放大,接着经过带通滤波,去除周围环境的噪声,滤波后的信号正好是扬声器发出的声音信号。
声源定位是通过对四个拾音器接收到信号的时间先后进行处理,经过一套比较完善的算法可得声源的坐标,即可进行声源定位,最后将声源的具体坐标显示在液晶屏上。
设计完成后,进行了整体测试,基本能够达到设计要求。
关键词:定位,时间差,滤波,设计IIDesign of Sound Positioning SystemABSTRACTFrom the GPS to the phone positioning, positioning system in our daily life plays an increasingly important role. Sound localization, that determines sound source position in space, and its geological exploration, search and rescue personnel, target tracking, and so has a wide range of applications. Now sound positioning has been applying in video telephony, video conferencing systems.This system is to use MCU produce a audio signal, which is amplified by the transistor input to the speaker as the sound source. Receiving section for receiving the microphone, the first of the received signal after amplification and then through a band-pass filter, remove ambient noise, the filtered signal just beep emitted sound signal. Sound source localization is achieved by the four pickups have received the signal processing time, through a more perfect sound source algorithm can be obtained coordinates to the sound source localization. Finally, the sound source the specific coordinates displayed on the LCD screen.After the completion of the design, has carried on the overall test, basic can meet the requirements.KEY WORDS: positioning, time gap, filtering, designIII目录摘要................................................................................................................ .. (I)ABSTRACT ................................................................................................ . (II)1 绪论................................................................................................................ (1)1.1 课题研究背景及意义 (1)1.2 国内外研究现状 (1)1.3 设计任务................................................................................................................ (2)2 定位分类及原理................................................................................................................ . (4)2.1 定位系统的概述 (4)2.2 常用定位技术介绍 (5)2.2.1 GPS定位系统 (5)2.2.2 TDOA技术 (5)2.2.3 时差定位技术的优势 (9)2.3 本章小结................................................................................................................ (9)3 总体设计方案................................................................................................................ (10)3.1 系统方案论证............................................................................................................103.1.1 信源模块 (10)3.1.2 声音接收模块 (10)3.1.3 滤波模块 (11)3.1.4 信号处理模块 (11)3.1.5 数据显示模块 (11)3.2 系统总体设计............................................................................................................113.3 本章小结................................................................................................................ . (12)4 硬件设计................................................................................................................ .. (13)4.1 声响模块电路的设计 (13)4.2 声音接收放大电路设计 (13)4.2.1 LM358芯片资料 (13)4.2.2 信号接收与放大电路 (14)4.3 选频电路设计............................................................................................................144.3.1 LM567选频电路资料 (14)4.3.2 选频电路 (15)4.4 显示电路设计............................................................................................................164.4.1 1602 ............................................................................................................. (16)4.4.2 显示电路 (17)IV4.5 本章小结................................................................................................................ . (18)5 软件设计................................................................................................................ .. (19)5.1 声源模块软件设计 (19)5.1.1 声源模块软件流程图 (19)5.1.2 声源模块参数计算 (19)5.2 数据处理及控制显示 (21)5.2.1 1602的指令说明及时序 (21)5.2.2 数据获得与处理的原理 (23)5.2.3 软件流程图 (24)6 总结与展望................................................................................................................ . (26)6.1 设计总结................................................................................................................ . (26)6.2 设计展望................................................................................................................ .... 26 致谢........................................................................................................ 错误!未定义书签。
声音定位跟踪系统毕业设计论文

目录目录第1章绪论 (1)1.1课题研究的目的与意义 (1)1.2课题研究的内容与要求 (2)1.3国内外发展状况 (3)1.3.1 国内智能机器人发展概况 (3)1.3.2 国外智能机器人发展概况 (4)1.4智能移动机器人的广泛应用 (7)1.5智能移动机器人的发展趋势展望 (8)第2章系统方案论证和比较 (12)2.1系统整体方案比较与选择 (12)2.1.1 误差信号判断方式的比较与选择 (13)2.1.2 接收器分布方式的比较与选择 (13)2.1.3 移动体运动方式的比较与选择 (13)2.2系统各模块选择与论证 (14)2.2.1 车体方案的选择 (14)2.2.2 电源种类方案的选择 (15)2.2.3 供电方式方案的选择 (15)2.2.4 主控器芯片方案的选择 (16)2.2.5 电机驱动方案的选择 (16)2.2.6 电机模块方案的选择 (17)2.2.7 声源与声音传感器方案的选择 (17)2.2.8 声音调理期间的选择 (18)2.3制导系统方案的理论计算 (19)2.3.1 误差信号的产生 (19)2.3.2 滤波电路的理论计算 (20)2.3.3 声源定位原理 (20)2.4驱动系统方案的理论计算 (21)2.4.1 电机运行速度理论计算 (21)2.4.2 控制理论的简单计算 (22)第3章系统硬件设计 (23)i吉林工程技术师范学院本科毕业论文设计3.1系统总体框图设计 (23)3.2系统各模块硬件设计 (24)3.2.1 控制器子系统硬件设计 (24)3.2.2 声音接受子系统硬件设计 (27)3.2.3 电机驱动子系统硬件设计 (29)3.2.4 发声系统硬件设计 (30)第4章系统软件设计 (33)4.1系统主程序流程图 (33)4.2系统各模块子程序流程图 (34)4.2.1 声源位置计算子程序流程图设计 (34)4.2.2 电机驱动子程序流程图设计 (35)4.2.3 光标示子程序流程图设计 (36)4.2.4 PWM算法子程序 (36)4.2.5 控制接收器的子程序流程图设计 (36)第5章测试方案与测试结果 (38)5.1测试方案 (38)5.1.1 测试仪器 (38)5.1.2 测试数据 (39)5.2测试结果与误差分析 (40)5.2.1 测试结果分析 (40)5.2.2 误差分析 (40)附录 (41)致谢 (47)ii第1章绪论第1章绪论随着计算机技术和人工智能技术的飞速发展, 使机器人在功能和技术层次上有了很大的提高。
声音定位系统 (2)

声音定位系统介绍声音定位系统是一种基于声音信号的定位技术,在很多领域中都有广泛的应用。
该系统通过接收来自多个声音源的信号,并利用信号的时间差和频谱特性进行声音源的定位。
声音定位系统可以应用于智能家居、军事情报收集、音频会议系统等多个领域。
工作原理声音定位系统的工作原理通常包括三个步骤:信号采集、信号处理和定位计算。
首先,系统需要采集来自不同声音源的信号。
采集可以通过麦克风阵列、传感器等方式进行。
使用多个采集点可以提供多个观测点,从而提高定位的准确性。
接下来,通过对采集到的信号进行处理,可以得到每个声音源的时间差和频谱特性。
时间差是指声音从一个观测点到另一个观测点的传播时间差,而频谱特性则可以用来区分不同声音源的特点。
最后,根据所得到的时间差和频谱特性,可以使用三角定位、梯度法等算法计算出声音源的位置。
这些算法将信号的时差和频率信息转化为声音源的坐标信息,从而实现声音的定位。
应用场景声音定位系统可以应用于多个场景,以下是一些常见的应用场景。
智能家居在智能家居中,声音定位系统可以用于智能音箱的声源定位。
通过定位用户的位置,智能音箱可以向用户提供更加智能的服务。
例如,在用户离开某个房间时,智能音箱可以自动切换播放音乐的房间。
军事情报收集军事情报收集中的一个重要任务是定位敌方的声音源。
声音定位系统可以通过分析敌方的声音信号,计算出敌方的位置信息。
这样,军事人员可以根据敌方的位置信息做出相应的反应。
音频会议系统在音频会议系统中,声音定位系统可以用于确定参与会议的人员的位置。
根据每个人的位置信息,系统可以自动调整声音的放大和消除回声,以提高音频会议的质量。
优势与挑战声音定位系统具有一些优势和挑战。
优势•声音定位系统可以在不需要额外设备的情况下实现声源定位,只需要利用已有的声音信号即可。
•声音定位系统可以实现高精度的声源定位,通过使用多个观测点和复杂的算法,可以提高定位的准确性。
•声音定位系统可以应用于多个领域,满足不同场景的需求。
声音定位系统

声音定位系统介绍声音定位系统是一种通过声音的方向和距离来确定声源位置的技术。
声音定位系统在很多领域中都有广泛的应用,包括通信、安全监控、自动驾驶等。
本文将介绍声音定位系统的原理、应用以及未来发展趋势。
原理声音定位系统的原理基于声音在空气中传播的特性。
当声源发出声音时,声波会在空气中传播,并且以特定的速度以球面的形状扩散。
当声波到达接收器时,通过计算声波到达不同接收器的时间差(Time of Arrival,TOA),可以确定声源的方向。
另外,通过接收器之间的距离差异(Time Difference of Arrival,TDOA),可以确定声源的距离。
声音定位系统通常由多个麦克风阵列组成。
这些麦克风分布在不同的位置上,并通过算法来处理接收到的声音信号。
常用的算法包括交叉相关函数(Cross-Correlation Function,CCF)和迭代最小二乘(Iterative Least Squares,ILS)等。
这些算法可以通过比较接收到的声音信号的差异来确定声源位置。
应用声音定位系统在许多领域中都有广泛的应用。
通信声音定位系统可以用于改善通信质量。
通过确定对方的位置,系统可以自动调整音频的方向和音量,以提供更好的听觉体验。
此外,声音定位系统还可以用于实现多方通话,通过确定每个参与者的位置,系统可以将声音定向传输,从而减少干扰。
安全监控声音定位系统可以用于安全监控领域。
通过安装多个麦克风阵列,系统可以实时监测声音的方向和距离。
当系统检测到异常声音时,可以立即通知安全人员,以便采取相应的措施。
此外,声音定位系统还可以用于定位紧急呼叫或报警设备的位置,以便及时响应。
自动驾驶声音定位系统在自动驾驶领域也有重要的应用。
通过安装多个麦克风阵列和声音定位系统,车辆可以实时监测周围环境中的声音,并确定声源的位置。
这对于识别交通信号灯、行人或其他车辆的位置非常有帮助,从而提高自动驾驶车辆的安全性和可靠性。
未来发展趋势随着技术的不断进步,声音定位系统将会有更广泛的应用和更高的精度。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2014年重庆理工大学电子设计竞赛声音定位系统(C题)摘要:本系统使用STM32产生频率为500Hz的正弦波信号,该信号用LM386进行功率放大及驱动后输入到蜂鸣器作为声源。
接收部分使用拾音器进行接收,首先对接收的信号经过同相放大,使变化的电流信号转换为变化的电压信号。
然后经过由OP07组成的有源带通滤波器,该滤波器的中心频率为500Hz,带宽为100Hz,增益为1倍,去除周围环境的声波,滤波后的信号正好是蜂鸣器发出的声音信号。
再对滤波后的两路信号经过相移检测电路,可以把滤波后的正弦波转换为方波,以便单片机STM32对相位差信号进行捕获。
声源定位是通过对四个拾音器接收到相位差信号进行处理,经过一套比较完善的算法可得声源的坐标,即可进行声源定位。
关键词:500Hz 声音定位 STM32一、系统方案1.声音信号产生的选择方案一:采用NE555产生频率为500Hz的方波用来作为声音信号。
它的作用是用内部的定时器来构成时基电路。
外部通过简单的电路可获得所得的信号。
该电路搭建比较简单,原理易于理解,电路中元器件参数也比较好计算。
方案二:用单片机STM32来产生频率为500Hz的正弦波用来作为声音信号。
该正弦波信号的产生实质上是将正弦波转换的到的数组存入单片机,经DA转换输出正弦波。
方案比较:方案一中,用NE555产生信源不是很稳定,波形不太规范且信号的频率不固定,这样的信号对本系统不太合适。
方案二中,用软件来产生信号,该信号很稳定,是比较标准的频率为500Hz的正弦波信号,而且,产生波形比较灵活,从而为发挥部分做好准备。
因此选择方案二。
2.声源的选择方案一:采用低音扬声器作为声源。
扬声器是一种把电信号转变为声信号的换能器件。
将单片机产生的频率为500Hz的信号接在扬声器的接收端,扬声器能发出强度比较大的声音信号。
方案二:采用无源蜂鸣器作为声源。
无源蜂鸣器在提供一定频率的正弦波震荡源时,能够发出声音。
试验中用无源蜂鸣器发声时,声音比较清晰,但声音强度比扬声器稍弱。
方案比较:这里选择方案二。
3.滤波方案的选择方案一:用RC无源滤波器。
通过计算可以较方便的通过匹配电阻电容得出所需要的通频带。
该滤波电路抗干扰性较强,有较好的低频特性,并且选用标准的阻容元件易得。
方案二:用有源滤波器。
有源滤波器是利用可关断电力电子器件,产生与负荷电流中谐波分量大小相等、相位相反地电流来抵消谐波的滤波装置。
有源滤波器除了滤除谐波外,同时还可以动态补偿无功功率。
其优点是反映动作迅速,滤除谐波可达到95%以上,补偿无功细致。
方案比较:方案一中,谐波滤除率一般只有80%,对基波的无功补偿也是一定的,并且通频带比计算出的要宽,不太符合设计要求。
方案二中,电路比较复杂,但通过匹配后能较好的完成带通滤波,能达到预期的要求。
因此选择多路负反馈二阶有源带通滤波器,即方案二。
二、定位算法理论分析与计算根据题目要求,A,B,C,D 为声音接收模块,现对元坐标系进行坐标变换,以A 点为坐标原点,建立笛卡尔坐标系,动点P(x,y)至点A,B,C,D 的距离之差为一常数,建立数学模型:2211222=b C a C -∆-令,得:1231122332211...............................=C cos C sin C (C sin )..............t v t v t v t v x R t v y R t v R b b C θθθ=∆-=∆-=∆∆ = ∆= = ∆=+=- ①②③令原方程转化为: 2④22222223322112222(C cos ).............(C cos +sin ).............C +sin =C cos R a a C R a b a b C b b C a a C θθθθθ +=- +=+--+-2⑤2⑥④得:⑤211222112211=arctan arccos2(sin )C C ba ab b C R C b θθ∆-+∆∆+-=+三、电路与程序设计1. 声响模块电路设计声响模块是由STM32单片机输出频率为500Hz 的正弦波,然后从单片机引脚输出,输出的信号经过功率放大电路放大后,再接入到蜂鸣器,驱动发声。
2. 声音接收放大器电路设计接收部分是用拾音器接收声音信号。
由于拾音器接收到的信号在不经过放大时信号很小,不易检测,故后级利用放大电路将接收的信号进行处理。
图 1 放大电路3. 测量、数据处理电路设计根据要求只有当接收到的信号为500Hz 时,我们才能保证接收到的信号是由声源发出的。
而拾音器接收到的声音信号是任意频率的,故此 处要进行滤波处理。
滤波采用的是带通滤波器,通过电容电阻的匹配,最终滤波器的中心频率为500Hz,带宽为50Hz。
拾音器接收到的信号经过带通滤波器后,能够将声源发出的信号滤出,正符合本题要求。
图 2 二阶有源滤波电路滤波后的信号为正弦波,但该信号不便于用单片机进行处理,故在后级加入了相移检测电路。
其基本功能是对两路正弦波信号进行比较,并根据比较结果输出一路方波信号。
并由此来判断声音信号的位置差。
能够用单片机然后用单片机进行捕获处理,效果比较满意。
图 3 相移检测电路4.程序设计4.1该系统程序设计主要分为四部分:○1用STM32产生500hz正弦波;○2利用STM32的输入捕获捕获相移检测电路后的方波信号;○3利用定位算法,通过单片机对检测到的相位差信号进行处理,得到声源位置坐标;○4将得到的声源位置坐标送TFT屏显示,并将位置坐标存入数组中,实现连续显示声源位置轨迹的功能四、测试方案与测试结果1.测试方法与仪器声源定位测试方法:将声源放在坐标纸上的任意坐标,不让声源发声,记下坐标值(x0,y0)。
然后启动声源,让声源发出1s左右的声音信号,同时单片机接收信号后开始进行计算,计算出的坐标值(x1,y1)通过TFTLCD屏显示出来。
2.测试结果与分析该系统的软件部分设计经验证,实现了捕获、处理、定位功能,如图所示为当声源信号位于(200,100)mm位置时,通过单片机定位算法得到的位置坐标:图 4 捕获的到的高电平及单片机处理得到的位置信息该系统的缺陷为功率放大模块和滤波模块没有做好,滤波模块实际滤波中心频率约为460hz,带宽100hz。
效果不够理想。
五、思考与总结经过几天的努力,终于基本完成了声音定位系统的制作与程序设计,在此过程中,收益颇多,熟悉了功放、滤波、放大等模块的制作以及如何利用STM32单片机完成一个系统设计等。
在此过程中也认识到了许多不足,为以后的学习指明了方向。
六、参考文献(略)七、附录1、主程序#include "led.h"#include "delay.h"#include "key.h"#include "sys.h"#include "lcd.h"#include "usart.h"#include "timer.h"#include "math.h"//全局变量x,y为坐标,以坐标纸左下角为原点,单位mm s32 xx=0,yy=0;u8 xp=0,yp=0;u8 xp1=0,yp1=0;u16 cap_num1=0,cap_num2=0;u32 sum1=0,sum2=0;s16 t1=0,t2=0;u16 pointx[280];//定义点的位置数组u16 pointy[280];u8 DrawLine_flag=0;//定义画线标志位extern u8 TIM5CH1_CAPTURE_STA; //输入捕获状态extern u16 TIM5CH1_CAPTURE_VAL; //输入捕获值extern u8 TIM5CH2_CAPTURE_STA; //输入捕获状态extern u16 TIM5CH2_CAPTURE_VAL; //输入捕获值void Display_Change(void);//对声源信号进行处理,得到声源位置//当t1、t2情况为负值时,情况如何?void pxf(int t1,int t2){int a=500;int b=350;float v=340;float c1=t1*v/1000;float c2=t2*v/1000;float delta=(b*b-c1*c1)/(a*a-c2*c2);floatsita=atan2(b,delta*a)+acos((c2*delta-c1)/sqrt(delta*delta*a*a+b*b));float R=(b*b-c1*c1)/2/(c1+b*sin(sita));xx=-R*cos(sita);yy=R*sin(sita);}int main(void){u32 temp1=0,temp2=0;u16 i=0,j=0;Display_Change();//通过读取A3管脚IO口的状态选择打点还是画线delay_init(); //延时函数初始化NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级uart_init(9600); //串口初始化为9600LED_Init(); //LED端口初始化LCD_Init();TIM3_Int_Init(1999,719);//每5ms进一次定时器3中断,进行液晶屏显示TIM5_Cap_Init(0XFFFF,72-1); //以1Mhz的频率计数(每计数一次为1u 秒)POINT_COLOR=RED;LCD_Clear(YELLOW);//背景色为黄色LCD_ShowChar(10,210,'(',16,0);LCD_ShowChar(90,210,')',16,0);LCD_ShowChar(50,210,',',16,0);while(1){for(i=0;i<400;i++) //进行400次输入捕获,理论应该执行800ms,待验证{if(TIM5CH1_CAPTURE_STA&0X80)//成功完成一次捕获{cap_num1++;temp1=TIM5CH1_CAPTURE_STA&0X3F;temp1*=65536; //溢出时间总和temp1+=TIM5CH1_CAPTURE_VAL; //得到总的高电平时间sum1+=temp1;TIM5CH1_CAPTURE_STA=0; //开启下一次捕获}if(TIM5CH2_CAPTURE_STA&0X80)//成功完成一次捕获{cap_num2++;temp2=TIM5CH2_CAPTURE_STA&0X3F;temp2*=65536; //溢出时间总和temp2+=TIM5CH2_CAPTURE_VAL; //得到总的高电平时间sum2+=temp2;TIM5CH2_CAPTURE_STA=0; //开启下一次捕获}}t1=sum1/cap_num1;//求平均值,提高捕获精度printf("\r\n通道1High:%d us\r\n",t1);sum1=0;cap_num1=0;t2=sum2/cap_num2;printf("\r\n通道2High:%d us\r\n",t2);sum2=0;cap_num2=0;pxf(t1,t2);xp=xx/2.5;yp=140-yy/2.5;if(xp>10&&xp<210&&yp>10&&yp<150)//判断点的坐标是否在正常范围内{//把点存入数组if(xp!=xp1 | yp!=yp1){pointx[j]=xp;pointy[j]=yp;j++;if(j==280)//只存280个点的位置{j=0;}xp1=xp;//将上一次的位置值进行保存,与下一次进行比较,看是否有变化yp1=yp;}}}}2、定时器部分程序#include "timer.h"#include "led.h"#include "usart.h"#include "lcd.h"extern s32 xx,yy;extern u8 xp,yp;//注意:对变量声明时不可以同时进行赋值extern u8 xp1,yp1;extern u8 DrawLine_flag;//在定时器3中断中进行液晶显示void TIM3_Int_Init(u16 arr,u16 psc){TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能//定时器TIM3初始化TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断//中断优先级NVIC设置NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能NVIC_Init(&NVIC_InitStructure); //初始化NVIC寄存器TIM_Cmd(TIM3, ENABLE); //使能TIMx}//定时器3中断服务程序(声源位置显示)void TIM3_IRQHandler(void) //TIM3中断{if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否{TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx更新中断标志LCD_ShowNum(20,210,xx,3,16);//显示数字LCD_ShowNum(65,210,yy,3,16);LCD_DrawRectangle(10, 10, 210, 150);//画矩形LCD_DrawPoint(xp,yp);//画点if((xp!=xp1 | yp!=yp1)&&DrawLine_flag==1){LCD_DrawLine(xp1, yp1, xp, yp);ShowChinese(10,170);//显示汉字}}}//定时器5通道1和通道2输入捕获配置TIM_ICInitTypeDef TIM5_ICInitStructure;void TIM5_Cap_Init(u16 arr,u16 psc){GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE); //使能TIM5时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能GPIOA时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; //PA0 清除之前设置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0 下拉输入GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_ResetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1);//初始化定时器时基参数 TIM5TIM_TimeBaseStructure.TIM_Period = arr; //设定计数器自动重装值TIM_TimeBaseStructure.TIM_Prescaler =psc; //预分频器TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM 向上计数模式TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位//初始化TIM5输入捕获1参数TIM5_ICInitStructure.TIM_Channel = TIM_Channel_1; //CC1S=01 选择输入端 IC1映射到TI1上TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //上升沿捕获TIM5_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //映射到TI1上TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //配置输入分频,不分频TIM5_ICInitStructure.TIM_ICFilter = 0x00;//IC1F=0000 配置输入滤波器不滤波TIM_ICInit(TIM5, &TIM5_ICInitStructure);//初始化TIM5输入捕获2参数TIM5_ICInitStructure.TIM_Channel = TIM_Channel_2; //CC1S=01 选择输入端 IC1映射到TI1上TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //上升沿捕获TIM5_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //映射到TI1上TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //配置输入分频,不分频TIM5_ICInitStructure.TIM_ICFilter = 0x00;//IC1F=0000 配置输入滤波器不滤波TIM_ICInit(TIM5, &TIM5_ICInitStructure);//中断分组初始化NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn; //TIM5中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //先占优先级2级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //从优先级0级NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_CC1|TIM_IT_CC2,ENABLE);//允许更新中断 ,允许CC1IE捕获中断//TIM_IT_CC1:TIM捕获/比较1中断源TIM_Cmd(TIM5,ENABLE ); //使能定时器5}u8 TIM5CH1_CAPTURE_STA=0; //输入捕获状态u16 TIM5CH1_CAPTURE_VAL; //输入捕获值u8 TIM5CH2_CAPTURE_STA=0; //输入捕获状态u16 TIM5CH2_CAPTURE_VAL; //输入捕获值//定时器5中断服务程序void TIM5_IRQHandler(void){//通道1进行捕获if((TIM5CH1_CAPTURE_STA&0X80)==0)//表示还未成功完成捕获{if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET) //表示更新中断已经发生{if(TIM5CH1_CAPTURE_STA&0X40)//表示已经捕获到高电平了{if((TIM5CH1_CAPTURE_STA&0X3F)==0X3F)//判断高电平太长了{TIM5CH1_CAPTURE_STA|=0X80;//强制标记成功捕获了一次TIM5CH1_CAPTURE_VAL=0XFFFF;}else TIM5CH1_CAPTURE_STA++;}}if (TIM_GetITStatus(TIM5, TIM_IT_CC1) != RESET)//表示捕获1发生捕获事件{if(TIM5CH1_CAPTURE_STA&0X40) //表示捕获到一个下降沿{TIM5CH1_CAPTURE_STA|=0X80; //标记成功捕获了一次TIM5CH1_CAPTURE_VAL=TIM_GetCapture1(TIM5); //得到高电平的值TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Rising);//CC1P=0 设置为上升沿捕获}else //还未开始,第一次捕获上升沿{TIM5CH1_CAPTURE_STA=0; //清空TIM5CH1_CAPTURE_VAL=0;TIM_SetCounter(TIM5,0);TIM5CH1_CAPTURE_STA|=0X40; //标记捕获到了上升沿TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Falling);//CC1P=1 设置为下降沿捕获}}}//通道2进行捕获if((TIM5CH2_CAPTURE_STA&0X80)==0)//表示还未成功完成捕获{if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET) //表示更新中断已经发生{if(TIM5CH2_CAPTURE_STA&0X40)//表示已经捕获到高电平了{if((TIM5CH2_CAPTURE_STA&0X3F)==0X3F)//判断高电平太长了{TIM5CH2_CAPTURE_STA|=0X80;//强制标记成功捕获了一次TIM5CH2_CAPTURE_VAL=0XFFFF;}else TIM5CH2_CAPTURE_STA++;}}if (TIM_GetITStatus(TIM5, TIM_IT_CC2) != RESET)//表示捕获1发生捕获事件{if(TIM5CH2_CAPTURE_STA&0X40) //表示捕获到一个下降沿{TIM5CH2_CAPTURE_STA|=0X80; //标记成功捕获了一次TIM5CH2_CAPTURE_VAL=TIM_GetCapture2(TIM5); //得到高电平的值TIM_OC2PolarityConfig(TIM5,TIM_ICPolarity_Rising);//CC1P=0 设置为上升沿捕获}else //还未开始,第一次捕获上升沿{TIM5CH2_CAPTURE_STA=0; //清空TIM5CH2_CAPTURE_VAL=0;TIM_SetCounter(TIM5,0);TIM5CH2_CAPTURE_STA|=0X40; //标记捕获到了上升沿TIM_OC2PolarityConfig(TIM5,TIM_ICPolarity_Falling);//CC1P=1 设置为下降沿捕获}}}TIM_ClearITPendingBit(TIM5, TIM_IT_CC1|TIM_IT_CC2|TIM_IT_Update); //清除中断标志位}。