原创 音频信号分析仪

2010-3-26 13:49 4199 5 8 分类: FPGA/CPLD

项目开发时间:2009年8月2日~8月6日,用时4天完成全部硬件、软件设计和制做。


摘要:本作品在基于FPGANIOS软核上使用快速傅里叶变换的方法对输入的音频信号进行频域分析,分析频率范围从20Hz10kHz,最小频率分辨力为10Hz,分析时间小于5s。同时,利用变换得到的FFT序列,本作品可以对输入正弦信号进行失真度分析和周期性分析,同时测出输入信号的周期。另外,本作品使用程控放大器进一步提高输入信号的动态范围,可测信号的峰峰值从1mV8V。本作品界面友好,使用方便,达到了设计的要求。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


关键词 快速傅里叶变换,FPGA,音频信号分析


一、方案论证和系统设计


1.1、方案比较与选择


1)总体方案比较与选择


方案一:扫频超外差法


超外差频谱仪实质上是一种具有扫频和窄带宽滤波功能的超外差接收机,与其他超处差接收机原理相似,只是用扫频振荡器作为本机振荡器,中频电路有频带很窄的滤波器,按外差方式选择所需频率分量.这样,当扫频振荡器的频率在一定范围扫动时,与输入信号中的各个频率分量在混频器中产生差频(中频),使输入信号的各个频率分量依次落入窄带滤波器的通带内,被滤波器选出并经检波器加到示波器的垂直偏转系统,即光点的垂直偏转正比于该频率分量的幅值.由于示波器的水平扫描电压就是调制扫频振荡器的调制电压(由扫描发生器产生),所以水平轴已变成频率轴,这时屏幕上将显示出输入信号的频谱图.这种方案对硬件要就很高,需要很宽频率的扫频信号范围,而且只适合测量稳态信号的频谱。


方案二:傅里叶分析方法


离散傅里叶变换是连续傅里叶变换在时域和频域上都离散的形式,将时域信号的采样变换为在离散时间傅里叶变换(DTFT)频域的采样。在形式上,变换两端(时域和频域上)的序列是有限长的,而实际上这两组序列都应当被认为是离散周期信号的主值序列。即使对有限长的离散信号作DFT,也应当将其看作经过周期延拓成为周期信号再作变换。在实际应用中通常采用快速傅里叶变换以高效计算DFT。使用高精度模数转换器对输入信号进行采样,通过傅里叶变换算法得到被测信号的频谱。方案实现简单,虽然受控制器资源和ADC采样速率的影响,测量频带有限,但是输入信号只有20Hz10kHz,频带较窄,基本上可以满足要求,因此采用方案二。


2)傅里叶变换方案与选择


方案一:使用DSP处理器。DSP处理器是一类有专用的乘法器、专门用于数字信号处理的威处理器,其在数字信号处理方面具有处理方便、迅速等特点,特别适合大量数据的处理。TICCS开发环境具有灵活和充分的FFT库,开发十分方便。但是总体来说,DSP产品成本较高,只适合于高端产品的应用。


方案二:使用普通MCU实现。该方案成本低,但是MCU处理速度慢,并且片上存储资源有限,造成整个数字处理系统性能的降低。


方案三:使用FPGA实现。当代的FPGA器件发展迅速,已经达到了较高的性价比。多个公司的FPGA器件具有低成本和低功耗的特点,并且FPGA内部集成了大量的硬件乘法器和锁相环资源,可同时进行多个乘法运算,完成绝大部分DSP处理器可以完成的计算任务。同时,FPGA可实现大容量数据的吞吐,在内部加入嵌入式软核之后可以实现友好的用户界面及精确的控制。


结合以上的分析,在系统的运算和控制核心上我们选择配置了嵌入式软核的FPGA器件,如Altera公司配置了NIOS软核的EP<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2C8芯片。


1.2、方案整体描述


本作品以EP2C8FPGA芯片为核心,使用NIOS软核处理器构建了一个高速和高精度的片上系统,用以完成20Hz10kHz频率范围内的音频分析。


作品系统框图如图一所示,输入信号经前级程控放大后经ADC采样量化,读入系统的高速存储设备,使用软件进行快速傅里叶变换运算,得到分析结果,在液晶显示器上进行显示和更新。



因为FFT运算涉及较多数量的乘法和加法运算,耗费系统较多的时钟周期,于是使用NIOS快速型内核,其在50M时钟频率下可以达到20MIPS以上的指令执行速度,实现极高的处理能力。


为了提高系统分析的精度,本作品使用Maxim公司16位高精度模数转换器MAX195进行AD转换。该期间具有高速串行接口,输入范围达到正负五伏,最高采样率可以达到85ksps,具有极高的性能。


系统程控放大部分使用集成芯片实现。较之使用通用运放和模拟开关或者继电器,这种方案集成度高,控制方便和精确,不容易出现干扰。本作品使用ADI公司的高性能程控放大器AD526实现多级程控放大,与处理器之间只有4个数字信号接口,可以实现精确的多级放大。


系统的显示使用一款小尺寸的128*64的液晶显示器,可以进一步提高性价比,并且编程方便。该种显示器自带GUI和汉字字库,与处理器之间为高速串行接口。在本作品中,我们编写了基于该液晶显示器的两级菜单,每3秒钟更新一次显示数据。


系统软件完成自动增益转换,ADC数据读取以及FFT运算的过程,同时完成菜单实现和时序控制。NIOS处理器外部扩展容量为8MBSDRAM2MBFLASH存储器提高了软件运行的速度和可靠性。


二、理论分析与计算


2.1、放大器设计


为满足信号频率范围20Hz10kHz,扩大输入信号动态范围,提高灵敏度的要求,放大器采用程控放大器。


方案一:多路选择程控放大器。采用低失调运放和继电器实现,通过继电器的切换到不同的放大通路实现程控放大的目的,思路简单,但是继电器控制会引入干扰,对于小信号的放大不利。


方案二:采用压控放大器。通过DAC控制输出电压,通过压控运放控制放大器放大倍数。与方案一相比此种方案较简单,但是压控放大器失调电压较大,有谐波成分出现。


方案三:采用可编程放大器。采用精确仪表程控放大器AD526,其放大倍数的精度和带内增益的平坦性可以满足作品要求,同时控制简单,相对陈本不高,是三种方案中最好的方案。


2.2、采用率与采样点数设定


根据所要分析信号的频率范围和题目对频率分辨力的要求,可以确定采样频率和取样点数。题目要求本系统能够分析最高频率fc=10kHz的信号,根据奈奎斯特采样定理,采样频率应至少为fc的两倍,即取样频率要达到20kHz以上。再根据题目扩展部分要求,FFT运算的频率分辨力F=fc/N需要达到10Hz,于是要求FFT的点数足够多,再结合所使用的FPGA的资源数量,本作品的取样频率设定为20.48kHz,取样点数为N=2048FFT变换点数为L=2048。从而根据频率分辨力和采样频率的关系F频率分辨力最小为10Hz,能分析的最高频率为10.24kHz。取样点数的增加对系统的存储器要求较高,取样频率的提高则对系统AD转换器和时钟有较高要求。综合考虑,以上的分析和对取样频率和计算点数的设计已满足要求,是合理且经济的。


2.3FFT算法分析


离散傅里叶分析是对取样信号进行频域分析最重要的方法。现代的数字信号处理系统一般以强大的Matlab系统工具为算法模板,进行算法级的设计与仿真,再根据具体实现的硬件平台进行程序的改写和移植。FFT算法是对DFT算法的改进,能极大地减少DFT算法乘法和加法的计算量。其基本原理是利用旋转因子的周期性和对称性将采样得到的个数为2的幂次的离散序列转换为多个蝶型的基本运算单元,再通过循环完成计算。


本作品选用基于RISC架构NIOS软核为控制和计算核心,而Matlab实现的FFT算法是基于双精度浮点数的,并不适用于各种嵌入式系统。为了加快计算速度,我们使用16位定点FFT算法实现整个计算过程。并且提前将各个旋转因子存放到系统的高速存储器中,在运算的过程中进行直接查找。


本作品使用时间抽取基二FFT算法,即输入信号乱序,输出信号正序,示意图如下所示:



算法实现的流程图见图:



为了防止定点数计算溢出,每个计算循环结束后对计算结果都向右移一位。经过多项措施的处理和算法的优化,最终本作品FFT计算过程所消耗时钟周期极少,时间控制在1秒中之内,充分实现了FFT算法的快捷性和准确性。


2.4、功率谱测量方法


功率谱表示单位频带内信号功率随频率的变化情况,它反映了信号功率在频域的分布情况。对于功率谱的测量采用的是周期图法。FFT运算得到关于离散采样序列的实部和虚部,再根据公式<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />



就可得到信号的幅度谱,而功率谱即为幅度谱的平方。根据公式



即可以得到序列的功率谱。求取序列的幅度谱



后,就使用LCD将求得的前五个频率及其功率值进行显示和刷新。所分析信号的总功率即将所有频率分量的功率相加得到。


2.6、失真度测量


计算出了各频率分量上的功率大小,那么根据失真度的定义


即信号中全部谐波分量的能量与基波能量之比的平方根值,正弦信号的失真度可以很方便得求出。设X(1)X(2)X(3)X(4)...为傅立叶变换得出的幅度谱。本设计在获取FFT运算得到的频谱序列时,只保留了10个最大值,当进行正弦波失真度的测量时,根据下面的公式进行失真度的计算:


三、电路与程序设计


3.1、程控放大器设计


程控放大器AD526可实现124816等倍数的放大,在放大16倍时,带宽可达到100KHz。作品通过两个AD526级联,实现116256倍三个档位的放大,实现了从1mV~10V信号的测量。



3.2、数模转换电路设计


在测控系统中,模数转换(ADC)是非常重要的环节,尤其在以单片机或计算机为核心的系统中更是不可缺少。常用的模数转换器有两种:串行模数转换器和并行模数转换器,并行模数转换器虽然传输速率可以很高,但它的引脚多、体积大、占用单片机的口线多,常常需要对单片机的I/O口进行扩展;而串行模数转换器随着科技的发展其传输速率也可以做得很高,加上它体积小、占用单片机的口线少,因此串行模数转换器的应用越来越广泛。


本作品选用MAX195作为数模转换器件,该器件为16位串行ADC,最大转换速率为85Ksps,转换时间9.4us,信噪比达到90dB,内置采样保持电路,能够满足作品要求,同时该器件为正负5V供电,可以直接输入双极性的信号,简化了外围电路的设计。MAX195适用于便携式仪器、音频信号处理、工业控制与自动化装置、数据信号处理、振动分析、多路转换测量和各类模拟信号的采集等。其典型应用电路图如图所示:



该电路图配置的器件为异步传输方式,即ADC的取样时钟和处理器的读数据采用不同的时钟,处理器使用7根控制线对器件进行操作。上电后该器件还可以进行自校准,校准周期为reset信号拉高后的14000个时钟周期,对于提高系统的精度有很大的作用。由于配置为双极性输入,采样得到的数据总共分为正负各32768个等级。这些数据直接送入FFT计算单元进行处理。


4.2、测试方案与结果分析


1)输入频率范围及总功率测试


测试方法:输入峰峰值4V,频率范围为20Hz~10KHz的正弦波信号,数据如下所示:




频率(Hz


功率理论值


测量信号总功率值


测量信号基频功率值


测量失真度


20


1960mW


1949mW


1949mW


0.02%


40


1960mW


1931mW


1929mW


0.22%


100


1960mW


1960mW


1960mW


0.24%


200


1960mW


1964mW


1958mW


0.14%


1000


1960mW


1962mW


1956mW


0.24%


2000


1960mW


1959mW


1952mW


0.24%


6030


1960mW


1952mW


1946mW


0.24%


8000


1960mW


1958mW


1935mW


0.24%


10000


1960mW


1951mW


1915mW


0.20%


表三       输入频率范围测试数据


结果分析:输入信号的总功率误差小于1%,第一频率可以准确的对应输入频率,满足设计的频率范围和频率分辨力的要求。


2)输入信号动态范围测试


测试方法:频率为1KHz,幅度变化范围为10mV~10V的正弦信号,数据如下所示:




输入信号Vp-p


输入信号功率理论值


测量信号功率值


8V


7672mW


7587mW


1V


128mW


125mW


100mV


1436uW


1019uW


50mV


196uW


187uW


8mV


8uW


6uW


表四       输入信号动态范围测试数据


结果分析:输入信号动态范围远远超过要求的100mV~5V的动态范围,信号幅值测量准确,符合作品要求。


五、总结与分析


测试结果达到了题目要求的指标,在采样率与信号频率不是成整数倍关系时功率会有些泄漏,但这是由于离散频谱分析本身所决定的。系统的误差受A/D转换的量化误差、有限字长效应和实际算法的影响。定点FFT运算可以大大加快运算速度,但是也增大了这些效应的影响。


由实验调试结果及测试数据可知,本系统达到题目的指标要求,还进一步提高了频率分辨力,充分提高了资源利用率。


 


 


参考文献:


[1]周立功.SOPC嵌入式系统基础编程(2006)北京航空航天大学出版社,2006.


[2]罗杰.VerilogHDL与数字ASIC设计基础(2007)华中科技大学出版社,2008.


[3]王松武,蒋志坚.电子测量仪器原理及应用.哈尔滨工程大学出版社,2003.


[4]周博,邱卫东,陈燕 .基于NIOSSOPC设计与实践.清华大学出版社,2004.


[5]内山明治 村野 .运算放大器电路. 科学出版社,2009.


[6]黑田 著,何中庸 .电子元器件应用技术.科学出版社,2005.


[7]姚天任 江太辉 . 数字信号处理.华中科技大学出版社,2007.


 

PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

egaiai.1989_868445655 2011-7-1 18:32

博主没有讲结果的测试条件和测试方法么?

egaiai.1989_868445655 2011-7-1 18:31

博主能不能讲解下音频分析的过程?

shenzhenghao1984_379129130 2010-8-21 20:18

图都看不见
相关推荐阅读
用户1510090 2010-11-07 14:55
遗传算法程序----欢迎下载!
C语言遗传算法的程序。求取函数f(x)=x*sin(10*pi*x)+1在[-1,2]上的最大值,包含复制、交叉、变异等操作,修改后可用于其他程序。采用Visual Studio开发,基于控制台。是您...
用户1510090 2010-08-18 22:18
电子系统抗干扰设计漫谈
 一、从电源讲起    设计电源时的主要问题有:电源发热、电源噪声、电源去耦、电源地线设计以及线性电源与开关电源的选择等  问题。最大的干扰来自50Hz的工频及其谐波干扰。下面说一些设计经验与实际中常...
用户1510090 2010-04-23 19:16
程控滤波器的故事
       程控滤波器是2007年全国电赛的D题,一个很经典的模拟题目。很自然的,这道题成为了我们参加2009年竞赛的必做训练题目。记得做这个题的那一周还正好碰上了本世纪最精彩的一次日全食,挺令人唏...
用户1510090 2010-03-30 21:20
管道输运粉体的质量
项目日期:2008年11月气固两相流广泛的存在于自然界和工业生产过程中,应用管道气力输送工艺来传送煤粉、水泥、矿石、盐类以及面粉等都是属于典型的气固两相流流动。由于气固两相流本身性质的复杂性和测量当中...
用户1510090 2010-03-27 21:01
JAVA中数组使用要点
一、一维数组      在声明数组时不能指定其长度,如语句int  score[6];是不对的。应该使用new关键字来为定义的数组分配内存。如:int[]score=new int[6];二、多维数组...
用户1510090 2010-03-26 13:58
用于NIOS软核处理器的FFT程序
NIOS软核处理器,时钟100MHz ,字长32位,外扩8MRAM/*********************文件fft.c********************/#include "fft.h"e...
EE直播间
更多
我要评论
3
5
关闭 站长推荐上一条 /3 下一条