一种基于ARM的多通道声音信号采集系统的制作方法

文档序号:12550287阅读:610来源:国知局
一种基于ARM的多通道声音信号采集系统的制作方法与工艺

本发明属于信号处理技术领域,具体涉及一种基于ARM的多通道声音信号采集系统。



背景技术:

信号处理是对各种类型的电信号,按各种预期目的和要求进行加工过程的统称。信号有模拟信号和和数字信号之分,对模拟信号的处理称为模拟信号处理,对数字信号的处理称为数字信号处理。信号采集属于信号处理的第一环节,信号只有先经过采集才能进行下一步的处理。换而言之,信号处理的对象只能通过信号采集得到。因此,信号采集对于后期信号的处理有着至关重要的影响。当代计算机由于其强大的计算能力,是目前信号处理的主要工具,由于计算机只能接受数字信号,因此模拟信号需通过AD(模数转换)转化为数字信号才能被计算机处理。

声音信号是自然界常见的模拟信号,声音信号处理是信号处理领域的一个分支。同理,在声音信号处理之前,需进行声音信号的采集,此处的“采集”指的是将属于模拟信号的声音信号转化为数字信号,以供计算机系统处理。目前市场上常见的声音信号采集系统,主要由AD模块和DSP或FPGA组成。此类声音信号采集系统往往具备采样速率高、多通道采样、AD精度高、实时性好等优点,甚至有些采集系统还集成了简单信号处理的功能,可直接输出处理之后的数据。但此类系统往往价格昂贵,尤其是高精度高速度的采集系统。且此类系统内部含有DSP或FPGA等模块,往往需要对其进行编程,系统硬件复杂度和软件复杂度均较高。这些因素导致了此类声音信号采集系统不利于大范围推广。



技术实现要素:

本发明针对现有技术的不足,提供一种基于ARM的多通道声音信号采集系统。本发明能有效解决上述缺陷,不仅能对声音信号进行多通道高速采集、实时采集,还能将采集的数据进行存储或实时处理。且本发明降低了硬件、软件的复杂度,降低了系统成本。本发明可以应用在多种涉及到声音信号采集的场合,例如环境噪声源的识别定位系统、地下管线防破坏监测系统等场合。

为实现上述目的,本发明采用如下技术方案:

一种基于ARM的多通道声音信号采集系统,核心部分包括ARM平台、AD模块、声音信号传感器模块,另外包括前端调理电路、SDRAM模块、NandFlash模块、SD卡模块、以太网接口、串口接口。

声音信号传感器模块包含4个声音传感器探头,将4路声音信号转化为模拟信号,然后输出至前端调理电路,在前端调理电路中将传感器输出的模拟信号进行调理;前端调理电路位于声音信号传感器模块和AD模块之间,前端调理电路将调理后的模拟信号输入到AD模块的4个输入通道;AD模块分别将4路模拟信号进行AD转换得到对应的数字信号,并将4路数字信号按照特定的顺序通过SPI总线传输至ARM平台,ARM平台将接收的数据存储至SD卡模块或直接进行处理;ARM平台同时与SDRAM模块、NandFlash模块、SD卡模块相连接,其中SD卡模块用于存储ARM平台接收到的声音信号数据,NandFlash模块和SDRAM模块分别用于程序数据的存储和程序的运行;同时ARM平台通过串口接口和以太网接口与外界进行通信,进行信息交互。

本发明的核心技术在于AD模块和ARM平台以及两者的协同工作。下面详细介绍AD模块和ARM平台以及两者之间如何协同工作。

AD模块的核心是TI公司的ADS1278芯片。该芯片是24位8通道AD芯片,可同时对8路模拟信号进行转换,采样率可调且最高采样率可达144KHz。该芯片有AIN[8:1]共8组模拟量输入引脚,本发明用到了前四组模拟量输入引脚AIN[4:1],将前四组模拟量输入引脚AIN[4:1]与前端调理电路输出端相连。根据采样率、采样精度、功耗的不同,该芯片有四种工作模式可选:Hight-Speed模式、Hight-Resolution模式、Low-Power模式和Low-Speed模式。且四种工作模式的选择,完全通过芯片的MODE0引脚(34号引脚)和MODE1引脚(33号引脚)来控制,无需配置任何寄存器。本发明采用的工作模式是Low-Power模式,即该芯片需要将MODE0引脚接低电平,MODE1引脚接高电平。该芯片转换后的数据通过芯片的串行接口输出,数据输出支持两种串行接口协议:SPI协议或Frame-Sync协议,且支持多种数据输出格式。数据输出的串行接口协议和数据输出格式的选择完全通过FORMAT[2:0](30~32号引脚)三个引脚来控制。本发明将FORMAT[2:0]三个引脚接低电平,选择SPI协议输出数据,输出数据格式为TDM格式。此配置下,该芯片上与数据输出相关引脚有SCLK引脚(28号引脚)、DOUT1引脚(20号引脚)和DRDY/FSYNC引脚(29号引脚)。其中SCLK引脚为SPI协议的时钟引脚,本发明中该芯片作为SPI从机,ARM平台作为SPI主机,故SPI时钟由ARM平台输出至SCLK引脚(28号引脚)。DOUT1引脚为转换后数据输出引脚,此配置下,每次采样,各个通道的转换数据将按照一定的顺序输出到SPI总线上,通过DOUT1引脚即可读取SPI总线上的数据。本发明使用了通道1~4共4个通道,故每次采样,DOUT1按照通道1、通道2、通道3、通道4的顺序依次输出这四个通道的转换结果。DRDY/FSYNC引脚的信号为数据输出就绪状态标识,当DRDY/FSYNC引脚为高电平时,数据不可读;当为低电平时,数据可读。即DRDY/FSYNC引脚的下降沿信号标志着数据可读,此时各通道的转换数据随着SPI时钟按顺序输出到DOUT1引脚,ARM平台从DOUT1引脚即可读取转换后的数据。此配置下,只要ADS1278的SCLK引脚有时钟信号输入,AD模块就会工作,将各通道的采样数据依次输出至SPI总线,从DOUT1引脚即可读取数据。

ADS1278芯片最多能支持8通道同时采样,当所用通道数低于8个时,可通过PWDN[8:1]引脚(35~42号引脚)将不需要用的通道关闭。PWDN[8:1]引脚与8个通道一一对应,当某个PWDN引脚接低电平时,对应的通道则关闭。本发明用到了前4个通道,需将后四个通道关闭,故将PWDN[8:5]四个引脚接低电平,PWDN[4:1]四个引脚接高电平。另外,本发明用外接10MHz的晶振作为该芯片的时钟源,将CLKDIV引脚(10号引脚)接高电平,根据芯片手册计算公式,可算出采样频率为10MHz/512≈19531Hz。该芯片其他配置可参考TI公司官方的ADS1278芯片手册。

ARM平台采用集成了EDMA功能模块的ARM架构CPU。由于AD模块采样率较高,AD模块将产生大量数据,而ARM平台要将数据进行存储或处理就必然涉及到数据的拷贝工作。因此本发明使用ARM平台的EDMA功能来完成数据的拷贝工作,以使数据拷贝工作尽可能少占用CPU资源,将CPU资源尽可能的分配给系统其它任务。

本发明采用TI公司的AM335x系列处理器作为ARM平台,具体芯片型号推荐使用AM3354。AM335x系列处理器采用ARM Cortex A8内核,最高主频可达720MHz,集成有2个工业用千兆以太网MAC以及UART、McSPI和EDMA等常用外设模块。ARM平台负责从AD模块读取数据,并对数据进行存储或处理,及与外界进行通信等工作。ARM平台上移植了强大的嵌入式Linux操作系统,整个系统的软件复杂功能和硬件资源管理都在Linux系统上实现。

本发明中,AD模块输出的声音信号数据使用了SPI协议,涉及AM335x的McSPI功能模块和EDMA功能模块。SPI是串行外设接口,是一种高速的、全双工同步通信总线,且在芯片管脚上只占用4根信号线。SPI以主从模式工作,通常有一个主设备和一个或多个从设备,通信时用到4根信号线(实际上当单向通信时使用3根信号线也可以)。这四根信号线分别是时钟信号SCLK、主入从出数据线MISO、主出从入数据线MOSI和从设备片选信号线CS。其中,SCLK信号线只由主设备控制,通信的时钟信号SCLK由主设备提供。根据时钟信号相位(PHA)和时钟极性(POL)的不同组合,SPI有模式0~3共4中工作模式,分别对应4种不同数据传输时序。McSPI是AM335x内部集成的多通道SPI功能模块,可作为主设备外接从设备,也可作为从设备工作于从机模式。AM335x共集成有两个多通道SPI(SPI0和SPI1),支持时钟频率可调,SPI字长可调,且有4个数据传输通道(通道0~3)可选,有数据收发缓存。通过配置AM335x的相关寄存器,可对时钟频率、工作模式、SPI字长等进行设置。

本发明使用了AM335x的McSPI功能模块,具体用到引脚为SPI1_CLK引脚(52号引脚)、SPI1_MISO引脚(53号引脚)、SPI1_CS0引脚(33号引脚)。且AM335x的SPI1_CLK引脚与ADS1278的SCLK相连,SPI1_MISO引脚与ADS1278的DOUT1相连,SPI1_CS0引脚与ADS1278的DRDY/FSYNC引脚相连。在本发明中,AM335x作为SPI通信的主机,AD模块作为从机,配置相关寄存器使AM335x工作在主机只接收模式(Master Receive-Only mode),此时时钟信号由AM335x提供,且只要ADS1278的SCLK引脚有时钟信号输入,AD模块就会开始工作,将各通道的采样数据依次输出至SPI总线,从DOUT1引脚即可读取数据。AM335x只负责从ADS1278读数据而不给它发送数据,故AM335x的SPI1_MOSI引脚(54号引脚)并未用到。由于整个系统只有一台从设备,本发明中AM335x的SPI1_CS0引脚的信号并非从设备片选信号,而是EDMA数据传输的触发信号;另外,本发明需使能SPI1的通道0作为数据传输通道,配置POL=0和PHA=0,使SPI工作在模式0,由于ADS1278的精度是24位,故配置SPI字长为24位,且使用SPI1自带的长度为64字节的FIFO作为数据接收缓存。

本发明中,ARM平台首先将AD模块的数据读取至SPI1的FIFO中,还需要将FIFO中的数据拷贝至内存,以供AM335x处理。由于采样率较高,数据量较大,若数据的拷贝工作由CPU来完成,则会占用大量的CPU资源,严重降低效率,不符合实际应用需求。故本发明利用AM335x自带的EDMA模块来完成数据拷贝工作,无需CPU干预,最大限度的减少CPU资源的占用,使系统分配更多CPU资源给其它任务。

AM335x的EDMA有多达64个DMA通道,用于数据传输,且这些通道支持多种触发方式:外部事件触发,通过写相应寄存器来手动触发和链式触发。具有多达256个参数项(PaRAM entry),这些参数项有自己的地址,其内容包含各种字段,这些字段描述了数据传输的具体细节,如数据的源地址、目的地址、数据在源地址目的地址的排列方式等。且这些参数项支持链接机制(Linking mechanism),该机制能让参数项自动更新,可利用该机制实现ping-pong缓存。可通过配置AM335x相关寄存器将EDMA的通道与参数项进行绑定。AM335x的EDMA支持三维数据传输,以ACNT个字节的数据作为一个组(Array),BCNT个组作为一帧(Frame),CCNT个帧为一个块(Block),因此一个数据块共有ACNT×BCNT×CCNT个字节的数据。无论是源地址处还是目的地址处,数据块中的数据不一定相邻,可能是分散的,组(Array)之间的偏移由SRCBIDX/DSTBIDX参数决定,帧(Frame)之间的偏移由SRCCIDX/DSTCIDX参数决定。以上参数均属于参数项的字段,可通过编程设置。EDMA的数据传输有两种模式可选:A同步传输(A-Synchronized Transfers)和AB同步传输(AB-Synchronized Transfers),前者每次传输一组数据(即ACNT字节数据),共需要BCNT×CCNT次传输才能完成一个数据块的传输;后者每次传输一帧数据(即ACNT×BCNT字节数据),共需要CCNT次传输才能完成一个数据块的传输。

本发明利用EDMA功能模块中参数项的链接机制,使用两个参数项来实现ping-pong缓存,以解决数据传输与CPU处理速度不匹配问题。具体做法是,在内存中申请一块ping缓存和一块相同大小的pong缓存,申请EDMA的两个参数项,分别记为参数项A和参数项B,参数项A、B的数据源地址相同,均设置为SPI1的FIFO地址,参数项A、B的目的地址分别为ping缓存地址和pong缓存地址,参数项A的LINK字段设为参数项B的地址,参数项B的LINK字段设为参数项A的地址,两参数项其它内容相同。如此,每次传输任务的完成,数据传输的目的地址会自动在ping缓存和pong缓存之间切换,当下一次传输任务开始时,数据的目的地址就已经切换完成。因此,本次将数据传输至ping缓存,下次则会将数据传输至pong缓存,再下次又会将数据传输至ping缓存。当数据传输到ping缓存时,CPU能够处理pong缓存的数据,当数据传输到pong缓存时,CPU能够处理ping缓存的数据。这种工作状态不停切换,就能实现数据的边采集边处理,两者同步进行。

由于本发明中,AD模块的精度是24位,且每次采样4个AD通道的数据均从ADS1278的DOUT1引脚输出,为配合AD模块,设置EDMA数据传输为AB同步模式,且设置ACNT=3,BCNT=4,即每个通道的数据为一组(Array),每次采样的数据为一帧(Frame)。至于CCNT的设置,则依据实际希望CPU每次处理多少数据以及实际的采样频率(FS)而定。例如希望每次采集K秒的数据给CPU处理,则CCNT=FS×K。随着ACNT、BCNT、CCNT的确定,则需申请的ping缓存和pong缓存的大小也就确定了,其大小等于ACNT×BCNT×CCNT个字节。本发明需要使用外部事件来触发EDMA传输数据,具体使用的是AM335x的SPI1_CS0引脚信号作为触发信号,即ADS1278的DRDY/FSYNC引脚下降沿信号来触发EDMA数据传输,即每次ADS1278采样,EDMA传输一次数据。以上配置涉及的寄存器,均可查询TI公司官方的AM335x芯片手册,限于篇幅,本说明书对此部分内容不再赘述。

本发明有益效果如下:

本发明使用ARM平台作为系统的处理器,不同于市场上常见的使用DSP+FPGA的方案,减少了系统成本,且降低了软硬件复杂度。本发明不仅可以将声音数据采集存储至SD卡,且由于ping-pong缓存技术的使用,大大降低了数据采集对ARM平台中CPU的占用,在以极小的资源实现采集任务的同时,为后续对数据的进一步的实时处理预留了大量的时间和资源。本发明预留有丰富的通信接口,方便系统与外界进行信息交互。本发明在ARM平台上移植了嵌入式Linux系统,系统的所有软件功能和硬件资源分配均在Linux系统上实现,提高了系统资源管理的效率,同时降低了后续功能拓展或定制的难度,便于该系统的进一步推广使用。

附图说明

图1为本发明的系统硬件架构图;

图2位本发明的系统功能流程图。

具体实施方式

下面结合附图和实施例对本发明做进一步说明。

一种基于ARM的多通道声音信号采集系统,需要实现的基本功能是:

1)利用AD模块将4路声音信号进行采集并转换成数字信号,并通过SPI协议,将转换得到的数字信号输入到ARM平台;

2)在ARM平台上,利用自带的EDMA功能,实现ping-pong缓存,将来自AD模块的数据存入ping-pong缓存;

3)在ARM平台上,将ping-pong缓存中的数据存入SD卡模块,或直接对数据进行处理,实现对声音信号的边采集边处理;

4)系统预留出串口接口、以太网接口等通信接口,方便系统与外部的信息交互。

本发明硬件功能和软件功能的具体划分如下:

硬件功能具体如下:

1)声音信号传感器模块将外界的4路声音信号转化成电信号,并输入到前端调理电路,此过程的信号为模拟信号;

2)前端调理电路完成对模拟信号的调理,并将调理后的信号输入到AD模块,此过程的信号仍是模拟信号;

3)AD模块完成对前端调理电路输出的模拟信号的采集并将其转换成数字信号,输入到ARM平台,此过程的信号为数字信号。

4)留出串口接口、以太网接口等硬件接口,方便系统与外界通信。

软件功能具体如下:

1)在ARM平台上,对McSPI模块进行配置。使用SPI通信协议,读取AD模块传来的数字信号至SPI1的FIFO中;

2)在ARM平台上,对EDMA模块进行配置。利用EDMA功能,实现ping-pong缓存,将SPI1的FIFO中的数据存入ping-pong缓存;

3)在ARM平台上,ping-pong缓存中的数据存入SD卡模块,或对ping-pong缓存中的数据进行实时处理;

4)ARM平台移植有嵌入式Linux操作系统,完成系统资源和任务的统一分配管理。

本发明硬件的具体实施方式如下:

本发明的系统硬件架构图如图1所示,为了使整个结构看起来清晰简洁,图中表示出了系统的核心硬件架构,一些结构细节并未在图中表示出来。本发明硬件架构核心部分包括ARM平台、AD模块、声音信号传感器模块,另外包括前端调理电路、SDRAM模块、NandFlash模块、SD卡模块、以太网接口、串口接口。声音信号传感器模块包含4个声音传感器探头,产生4路声音信号,此时的信号为模拟信号。前端调理电路位于声音信号传感器和AD模块之间,主要功能是将传感器输出的4路模拟信号进行调理,并将调理后的模拟信号输入到AD模块的4个输入通道。AD模块分别将4路模拟信号进行AD转换得到对应的数字信号,并将4路数字信号按照特定的顺序通过SPI总线传输至ARM平台。ARM平台负责接收AD模块传输过来的数据,将这些数据存储至SD卡模块或直接进行处理。SD卡模块可用于存储系统采集到的声音信号数据。串口接口和以太网接口为系统与外界进行通信的接口,系统可通过串口或以太网来跟外界进行信息交互。例如通过串口,系统可以将声音信号处理的结果输出至外界。NandFlash模块和SDRAM模块分别用于程序数据的存储和程序的运行。本发明的AD模块采用TI公司的ADS1278芯片。本发明的ARM平台使用TI公司的AM335x系列处理器,具体型号推荐使用AM3354。

本发明需对AD模块进行配置,主要设置ADS1278的相关引脚。本发明用到了ADS1278的前四组模拟量输入引脚AIN[4:1],需将它们与前端调理电路输出端相连;将ADS1278的MODE0接低电平,MODE1引脚接高电平,使之处于Low-Power工作模式;本发明将FORMAT[2:0]三个引脚接低电平,选择SPI协议输出数据,数据格式为TDM格式;本发明将PWDN[8:5]四个引脚接低电平,PWDN[4:1]四个引脚接高电平,只使用前4个通道;本发明用外接10MHz的晶振作为ADS1278的时钟源,CLKDIV引脚接高电平,此时采样频率为19531Hz;本发明将ADS1278的SCLK引脚、DOUT1引脚和DRDY/FSYNC引脚分别与AM335x的SPI1_CLK引脚、SPI1_MISO引脚和SPI1_CS0引脚相连。另需注意的是,由于DRDY/FSYNC引脚的下降沿表示数据可读,而AM335x的SPI1_CS0引脚是上升沿触发EDMA传输,故在DRDY/FSYNC引脚和AM335x的SPI1_CS0引脚间需接一个反相器。

本发明软件功能的具体实施方式如下:

本发明的系统功能流程图如图2所示。本发明的AD模块通过SPI协议,将AD转换得到的声音信号数据传输给ARM平台SPI1的FIFO中。ARM平台通过EDMA将SPI1的FIFO的数据传输至ping-pong缓存,并将ping-pong缓存中的数据存储至SD卡或进行实时处理。本发明软件的核心部分是AM335x的SPI1模块和EDMA模块的配置,以及利用EDMA模块实现ping-pong缓存,使之配合AD模块进行数据采集。在本发明中,数字信号的传输使用SPI协议,AM335x作为SPI通信的主机,AD模块作为从机。故配置AM335x的相关寄存器使之工作在主机只接收模式(Master Receive-Only mode),将SPI时钟配置为5MHz,此时时钟信号由AM335x提供。本发明需配置相关寄存器使能SPI1的通道0作为数据传输通道,配置POL=0和PHA=0,使SPI工作在模式0。由于本发明的AD模块的精度是24位,故配置SPI字长为24位,且使用SPI1自带的长度为64Byte的FIFO作为数据接收缓存。

本发明需要通过配置AM335x的相关寄存器来设置EDMA模块。配置相关寄存器,设置EDMA数据传输为AB同步模式,使能EDMA的通道20作为数据传输通道,并设置触发方式为外部事件触发,将通道20与SPI1_CS0引脚的上升沿信号触发事件绑定。本发明利用EDMA的参数项的链接机制,使用EDMA的两个参数项来实现ping-pong缓存。具体做法是,在内存中申请一块ping缓存和一块相同大小的pong缓存(分配的内存类型为int型,即每个存储单位为32位),申请两个参数项(假定为参数项A和参数项B)。参数项A、B的数据源地址相同,均设置为SPI1的FIFO地址,参数项A、B的目的地址分别为ping缓存地址和pong缓存地址,参数项A的LINK字段设为参数项B的地址,参数项B的LINK字段设为参数项A的地址,两参数项其它内容相同。本发明需对EDMA的三维数据传输中的相关参数进行设置,设置ACNT=3,BCNT=4,即每个通道的数据位一组(Array),每次采样的数据为一帧(Frame)。至于CCNT的设置,则可以依据实际希望CPU每此处理多少数据以及实际的采样频率(FS)而定,例如希望每次采集K秒的数据给CPU处理,则CCNT=FS×K。若ACNT、BCNT、CCNT确定了,则待申请的ping/pong缓存的大小也随之确定,其大小等于ACNT×BCNT×CCNT个字节。以K=0.2为例,且已知FS=19531Hz,则CCNT=19531×0.2≈3906。此时申请的ping-pong缓存大小等于3×4×3906=46872字节。以上配置涉及的寄存器,均可查询TI公司官方的AM335x芯片手册,限于篇幅,本说明书对此部分内容不再赘述。

本发明软件功能的具体实施有以下4点需注意:

1)本发明建议将数据采集相关的程序专门写成内核驱动模块,将数据存入SD卡模块和将数据进行实时处理这两部分相关的程序写成应用程序,这样系统软件结构层次会更清晰明朗;

2)上述将EDMA的通道20和SPI1_CS0引脚的上升沿信号绑定,作为EDMA的触发信号,需要配置AM335x中与EDMA模块的Crossbar相关的寄存器;

3)由于SPI字长设置为24位(3字节),因此存入ping-pong缓存的每个AD值长度为3字节。而AM335x的字长为32位(4字节),又申请的ping-pong缓存的最小存储单元是4字节。所以每个AD值存储在了ping-pong缓存存储单元中的低3字节,高字节内容未知。

故需要根据每个AD值的符号位,先将ping-pong缓存中的数据进行处理,将存储在低3字节的数据转换成32位格式数据,然后才能使用ping-pong缓存中的数据;

4)上述将ping-pong缓存的数据存储至SD卡或者进行实时处理,具体涉及到的程序需根据实际情况而定。如可以将ping-pong缓存的数据以wav文件格式存储至SD卡,或者直接对ping-pong缓存的数据进行滤波处理。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1