1、电子设计大赛音频信号分析仪设计音频信号分析仪本系统基于Altera Cyclone II 系列FPGA嵌入高性能的嵌入式IP核(Nios)处理器软核,代替传统DSP芯片或高性能单片机,实现了基于FFT的音频信号分析。 音频信号分析仪 摘要:本系统基于Altera Cyclone II 系列FPGA嵌入高性能的嵌入式IP核(Nios)处理器软核,代替传统DSP芯片或高性能单片机,实现了基于FFT的音频信号分析。并在频域对信号的总功率,各频率分量功率,信号周期性以及失真度进行了计算。并在FPGA中嵌入了8阶IIR切比雪夫(Chebyshev)II型数字低通滤波器,代替传统有源模拟滤波器实现了性能优
2、异的音频滤波。配合12位A/D转换芯片AD1674,和前端自动增益放大电路,使在50mV到5V的测量范围下,单一频率功率及总功率测量误差均控制在1%以内。关键词:FPGA; IP核; FFT; IIR; 可控增益放大 Abstract: This system is based on IP core(Nios) soft-core processors embedded in the FPGA of Altera Cyclone II family. Instead of using DSP or microcontroller, we use Nios II to perform a low
3、-cost FFT-based analysis of the audio signal.And we caculated the power of the whole signal,the power of each frequence point that componented the signal.By the way,we anlysised its periodicity and distortion.We also embedded an 8-order Chebyshev II IIR digital low-pass filter to replace the traditi
4、onal analog Active Filter to perform an excellent audio filter. With 12bit A / D converter chip AD1674, and the front-end automatic gain amplifier, this systems single-frequency power and total power measurement error is below 1% in 50mV to 5V measurement range.Keyword: FPGA; IP core; FFT; IIR; auto
5、matic gain amplifier一、 方案选择与论证1、整体方案选择音频分析仪可分为模拟式与数字式两大类。方案一:以模拟滤波器为基础的模拟式频谱分析仪。有并行滤波法、扫描滤波法、小外差法等。因为受到模拟滤波器滤性能的限制,此种方法对我们来说实现起来非常困难。方案二:以FFT为基础的的数字式频谱分析仪。通过信号的频谱图可以很方便的得到输入信号的各种信息,如功率谱、频率分量以及周期性等。外围电路少,实现方便,精度高。所以我们选用方案二作为本音频分析仪的实现方式。2、FFT计算方式选择方案一:使用VHDL 硬件实现。FFT的VHDL程序编写难度大,短时内不易实现。方案二:在FPGA中嵌入Ni
6、os II处理器,通过软件实现。Nios II 支持C语言编程方式,普通的C语言版的FFT稍加改正即可应用到本方案中。四天之内我们不可能实现一个用硬件实现的FFT算法,因此我们选用方案二。3、采样电路与A/D芯片选择本设计中要求分析的信号峰峰值范围为100mVp-p5Vp-p,用8位A/D进行采样,不能满足题目的精度要求,采用12位的A/D芯片AD1674,其分辨率可达到1.2mV(相对于5Vp-p信号),满足了题目要求的5%误差范围。同时其100K的采样频率也满足本设计中的频率要求。4、信号调理方案AD1674信号输入满偏电压在双极性时为5V,即峰峰值10V。方案一:将输入信号放大2倍,以达
7、到AD1674的满偏输入,以提高A/D的精度。但若输入信号都比较小时,采样精度就会下降。方案二:将前端信号放大调理电路分为几个档,针对不同幅度的信号选择合适的通道进行放大,放大倍数以当前信号中的最大峰值为选择基准。这样在输入信号比较小时可以选择比较大的放大倍数,以提高A/D采样的精度。明显方案2优于方案1。5、采样及滤波方案选择方案一:按照奈奎斯特定律采样,以传统模拟方式滤波。传统模拟方式或有源滤波芯片难以实现很好的频带外衰减。从而使运算结果误差增大。方案二:在A/D前进行简单的抗混叠滤波,以比较高的速率采样,然后在FPGA中用数字滤波器进行精确滤波。滤波后进行二次采样以减少运算量。切比雪夫(
8、Chebyshev) II型低通IIR滤波器有平坦的通带,等波纹的抑制频带、适中的过度频带,非常适合于音频滤波。可以使分析达到很好的精度。方案二外围电路要求少,实现方便,我们采用方案二。 6、信号功率的计算。方案一:通过测真有效值的方式实现,应用普通的真有效值检测芯片可以方便的测出信号在一定时间段内的总功率。但对单个频点处的功率测量无能为力。方案二:在用FFT得到信号的频谱后根据帕斯瓦尔定律可以很方便的得到信号各频率分量的功率及信号的总功率。因为本设计中我们可以通过FFT得到信号的频谱,因此方案二最适合本设计。总体方案确定:经过以上论证我们确定总体设计方案框图如下: 图1-1、系统整体方案框图
9、二、 系统具体设计与实现1、前端可控增益放大电路及增益控制电路针对音频信号的特点以及题目中对精度的要求,我们选用了特别适合音频信号处理的经典运放NE5532。峰值保持部分使用普通运放TL084。信号进入后首先经过一与50欧姆精密电阻并联的跟随器,以满足题目中的50欧姆输入阻抗的要求,同时增强带后级带负载的能力。然后经过隔直电容进入后级放大电路。放大电路同时设置了1,2,20,200,4个放大通道,分别对10Vp-p、5Vp-p、500mVp-p、50mVp-p信号进行不同放大,这样将可测量信号的动态范围扩展到了10mV;电路图见图2-1。同时通过峰值保持电路记录一个FFT运算周期内的信号峰值,
10、通过与设定的参考电压进行比较以确定信号的峰峰值范围,以作为下一次采样时放大通道的选择参考;控制器通过模拟开关来选择不同的放大通道。峰值保持电路部分采用精密二极管与充电电容进行信号峰值保持。为减小电容漏电流对峰值保持的影响,选择了47uF的电容。每次采样前对读入峰峰值范围并对电容放电以记录下一次的峰峰值。图2-1、输入信号放大通路图2-2、峰值保持电路2、抗混叠滤波我们选择简单易用的管脚可编程滤波芯片MAX263来实现,该滤波芯片无需外加外围电路,减少了外界环境对其性能的影响。电路图见附图1-23、A/D转换部分电路见附图1-3。4、数字滤波及Nios核实现方式见附图2-1。5、本设计中增加了一
11、分贝测量的附加功能。三、理论分析与参数设计1、采样频率计算:根据奈奎斯特定律采样率应满足 ,本题目中信号输入频率最大为10KHz,因此 ,为进行二次采样,我们的采样率应大于40KHz。进行FFT的点数按 计算。又因为FFT运算量为2的n次方点时比较容易实现。在满足频率分辨力并尽量减小运算量的条件下我们可得出某一频率分辨率与采样率的关系。例如我们设计的频率分辨力为100Hz,则为分辨出10KHz的信号,则 ,求得N=200,我们取N=256。其他分辨力类推。本设计中我们设计了以下四个频率分辨力档:表3-1 频率分辨力与FFT点数及采样速率对应表分辨力FFT点数FFT测量频率*二次采样速的*原始采
12、样速度100Hz256点12.8K25.6K76.8K50Hz512点12.8K25.6K76.8K20Hz1024点10.24K20.24K60.72K10Hz2048点10.24K20.24K60.72K*FFT测量频率:FFT变换所能表示的最高频率。*二次采样速度:原始采样数据经数字滤波后,经二次采样(降低采样率)后的实际采样速度。2、IIR数字低通滤波器设计在进行FFT运算之前应当尽量避免频谱的混叠,即对带外信号要进行尽可能大的衰减,挈比雪夫(Chebyshev) II型滤波器具有通带内平坦并且衰减速度快的特点。其相频响应及群延迟特性都比较好。其转移函数具体系数计算可通过Matlab的
13、Filter Design & Analysis Tool来实现。得到系数后打开Altera DSP buider,在它的可视化界面中搭建出自己所需的滤波器。3、信号功率及各频率分量功率计算:连续傅立叶变换下的帕斯瓦尔能量定率为: ,离散傅立叶变换下的帕斯瓦尔能量定律为 ,由此可推出;同时可推出 ,即可得出个频率分量的功率。在计算时应当注意补偿因经过滤波器时信号的衰减,以及根据放大倍数还原信号到其实际值。从而使计算结果更加精确。4、信号周期性判断及周期测量周期信号的频谱都是谐波离散的,它仅含有 的各频率分量,即含有基频 (T为周期信号的周期)和基频的整数倍 (n=1,2,3,)这些频率成份,频
14、谱图中相邻普贤的间隔是基频 ,周期信号越长,谱线间隔愈小,频谱愈稠密,反之则愈稀疏。这是周期信号频谱的最基本特点。因此信号的周期性判断可用以下方式判断:从最小频率点开始观察,若最小频率分辨率点处的频率分量为0(实际不为0,而是一个很小的数值),则这个信号就是周期的。然后继续向上观察,出现第一个峰值的频率点处既是这个信号的基频。这种分析方法虽然可以很方便的测出基频大于最小分辨率信号的周期,但是对于基频等于或小于最小频率分辨率的信号的周期性就无能为力了。要测出基频更小的信号的周期性就要增加FFT的点数。5、正弦信号的失真度测量方法一般地,正弦波的失真是用失真度,即所有谐波能量之和与基波能量之比的平
15、方根来表示的。在频域中即可通过一下方式计算:,其中 为基波分量的傅立叶系数, 、 、 为谐波的傅立叶系数。四、 软件设计在本设计中,控制及计算部分都由FPGA来实现。其中Nios核完成键盘控制,液晶显示、FFT算法实现、功率计算、周期性判断及失真度测量的功能;而自动增益控制、A/D转换控制以及数字滤波器则由VHDL语言实现,以减轻CPU的负担,同时两部分并行处理提高了系统的速度。系统框图及流程图如下:图4-1 软件流程图五、 指标测试1调试方法和过程采用模拟电路由前端到后段,数字电路先仿真再试测,先逐个模块测试再连调的办法。2测试仪器(见附录三)3输入阻抗测量使用分压法测量:在系统输入上串联一
16、个 的精度0.1%的电阻,用34401A 61/2数字万用表测量精密电阻和系统输入端的电压比值。用TFG2040 DDS函数信号发生器输出:F=5KHz Vp-p=1V 的正弦波用34401A 61/2数字万用表测得精密电阻两端Vp-p=0000.501V测得系统输入端电压Vp-p=0000.499V 因此算得输入阻抗为: 4信号总功率及各频率分量功率测量使用两台TFG2040 DDS函数信号发生器产生两路信号叠加后进行测试,现列出一组典型信号测试结果:两路输入电压分别为Vp-p1=1.0000V(0.01W), =1KHz,Vp-p2=2.0000V(0.04W),=3KHz。详细测试结果见
17、附录三。表5-1 信号功率测量结果 单位: W信号总功率最大功率次大功率各频率点功率和各频率功率和与总功率误差理论值0.050000.040000.010000.050000本系统测得0.050210.039900.010130.050030.36%综合各项测试结果得总功率相对误差小于1%,各频率功率误差小于2%。5转换时间测试每完成一次转换让Nios对外接的一个LED灯置高一次,再完成一次转换后将LED灯置低,依次循环。把本音频分析仪频率分辨率设定在10Hz,用秒表记录LED灯亮起10次(即20个刷新周期)的时间,记录3次,取均值。表5-3、数据刷新时间测量 单位 S第一次第二次第三次平均时
18、间16.7316.5116.4916.577单次转换时间0.8370.8260.8250.8296失真度测试(1)用1KHz方波测试失真度用TFG2040 DDS函数信号发生器产生近似理想的1KHz方波理论计算失真度:46% (计算到10次谐波) 本系统测得失真度:46.8%(2)测量用EE1642产生的不非常理想的正弦波用ZQ4126失真度测试仪测得失真度:0.9%; 用本音频分析系统测得失真度:0.54%7动态范围测试使用TFG2040产生5V 1KHz信号,D120 DDS产生5KHz小信号,两信号叠加后输入系统进行测试 从100mV开始逐步调小小信号的幅度,从频谱图上观察是否可分辨小信
19、号峰值。表5-4 动态范围测量结果100mV50 mV30 mV10 mV5 mV可明显分辨可明显分辨可分辨可分辨不可分辨8.周期性测试使用TFG2040产生1K的方波、正弦波、三角波进行测试:检测为周期波使用TFG2040产生M序列,检测为非周期波。六 、结论本设计很好的满足了题目要求,对频率分辨力、动态范围及精度都做了较大的扩展。其实本设计还有很大的提升空间,但由于我们的动手能力以及理论水平有限,没能很好的达到。通过本次设计,我们的动手能力以及处理问题的能力都有了很大的提高,并加深了对信号处理的理解,我们的收获很大!参考书目:【1】 Vinay K. Ingle John G. Proak
20、is 数字信号处理 科学出版社 2006年【2】 程佩青 数字信号处理教程 清华出版社 2004年【3】 吴京等 信号与系统分析 国防科技大学出版社 2006年【4】 周立功等 SOPC嵌入式系统基础教程 北京航空航天大学出版社【5】 (美)Uwe Meyer-Baese 数字信号处理的FPGA实现 清华大学出版社 2006年【6】 Nios II Software Developers Handbook ALTERA co.附录一:前向通道电路图附图1-1、峰值范围确定电路附图1-2、抗混叠滤波电路图附图1-3、A/D模块电路图附录二 FPGA内部数字滤波及Nios核框图附图2-1、FPGA
21、内部嵌入IP核、采样控制器及滤波器组成框图附录三、1、测试仪器 TFG2040 DDS函数信号发生器 D120 DDS函数信号发生器/计数器 EE1642 模拟函数发生器 YB4360 模拟双踪示波器 M890C+ 31/2数字万用表 34401A 61/2数字万用表 SS1792D 支流稳定电源 ZQ4126 失真度测试仪 秒表2、信号功率及各频率分量功率测量附表3-1、信号功率及各频率分量功率测量结果 单位:W频率(Hz)信号总功率最大功率次大功率各频点功率和误差1f1=10K,f2=9K0.049780.039520.009780.04960.80%2f1=1K,f2=3K0.05021
22、0.039900.010130.050030.36%3f1=110,f2=1000.050340.040280.010190.050570.45%4f1=30,f2=200.050040.039540.010160.04950.67% 测试电路图: 附图3-1 信号功率测试电路图附录四、FFT源程序(仅核心部分)#include #include #include #define size_x Ntypedef struct double real; double img; complex;complex Wsize_x/2;complex xsize_x;double PI;void fft
23、();void initW();void change();void add(complex a,complex b,complex *c);void mul(complex a,complex b,complex *c);void sub(complex a,complex b,complex *c);void divi(complex a,complex b,complex *c);void output();int main() system(cls); PI=atan(1)*4; initW(); fft(); output(); return 0;void fft() int i=0
24、,j=0,k=0,l=0; complex up,down,product; change(); for(i=0;i (int)( log(size_x)/log(2) );i+) l=( 1i ); for(j=0;jsize_x;j+= (1l) ) for(k=0;kl;k+) mul(xj+k+l,Wsize_x*k/2/l,&product); add(xj+k,product,&up); sub(xj+k,product,&down); xj+k=up; xj+k+l=down; void initW() int i; for(i=0;isize_x/2;i+) Wi.real=c
25、os(2*PI/size_x*i); Wi.img=-1*sin(2*PI/size_x*i); void change() complex temp; int i=0,j=0,k=0,t; for(i=0;isize_x;i+) k=i;j=0; t=(unsigned) (log(size_x)/log(2); while(t-) j=j1; if(ji) temp=xi; xi=xj; xj=temp; void output() int i; printf(The result are as followsn); for(i=0;i=0.0001)printf(+%.4fjn,xi.img); else if(fabs(xi.img)real=a.real+b.real; c-img=a.img+b.img;void mul(complex a,complex b,complex *c) c-real=a.real*b.real - a.img*b.img; c-img=a.real*b.img + a.img*b.real;void sub(complex a,complex b,complex *c) c-real=a.real-b.real; c-img=a.img-b.img;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1