基于FPGA的音频信号分析仪设计(含完整程序).doc

上传人:仙人指路1688 文档编号:4152896 上传时间:2023-04-07 格式:DOC 页数:50 大小:2.26MB
返回 下载 相关 举报
基于FPGA的音频信号分析仪设计(含完整程序).doc_第1页
第1页 / 共50页
基于FPGA的音频信号分析仪设计(含完整程序).doc_第2页
第2页 / 共50页
基于FPGA的音频信号分析仪设计(含完整程序).doc_第3页
第3页 / 共50页
基于FPGA的音频信号分析仪设计(含完整程序).doc_第4页
第4页 / 共50页
基于FPGA的音频信号分析仪设计(含完整程序).doc_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《基于FPGA的音频信号分析仪设计(含完整程序).doc》由会员分享,可在线阅读,更多相关《基于FPGA的音频信号分析仪设计(含完整程序).doc(50页珍藏版)》请在三一办公上搜索。

1、本科毕业论文(设计)题 目 基于FPGA的音频信号分析仪 学生姓名 专业名称 电子信息科学与技术 指导教师 教师职称 2009年12月10日基于FPGA的音频信号分析仪摘要:本音频信号分析仪以FPGA为核心,通过前级信号调理电路和12位A/D转换芯片,对音频信号进行正确采样,把连续信号离散化。然后通过基于Altera Cyclone II 系列FPGA嵌入高性能的NIOS II处理器,代替传统的DSP芯片和高性能MCU,实现了基于FFT的音频信号分析仪,并在时域和频域对音频信号各个频率分量以及功率等指标进行分析和处理。最后采用高分辨率的彩色液晶对信号的功率谱等信息进行显示并通过触摸屏控制整个系

2、统的运行。该系统能够精确测量的音频信号频率范为100Hz-10KHz,其幅度范围为100mVpp-5Vpp,分辨力分为100Hz和20Hz两档,测量功率精确度高达5%,是理想的音频信号分析仪的解决方案。关键词:FFT;FPGA;NIOS II ;频谱;信号功率;The Audio Signal Analyzer Based on FPGAAbstract: The audio signal analyzer is based on FPGA, through the signal processing circuit and 12bit A / D converter chip for aud

3、io signal sampling, the continuous signal discrete. Instead of using DSP or MCU, we use high performance NIOS II Embedded Processor for FFT fast Fourier transform computing and in the time domain and frequency domain of the various audio frequency signal weight and power, and other indicators for an

4、alysis and processing. At last through the high-resolution Touch screen LCD display the signal power spectrum and control the operation of the entire system. The system can accurately measure the audio signal frequency range of 100Hz - 10 KHz, the range of 100mVpp-5Vpp, resolution of 100 Hz and 20 H

5、z correspondent. Power measurement accuracy up to 5%, is the ideal audio signal analyzer solution.Keyword: FFT;FPGA;NIOS II ;Spectrum;Signal Power;目 录1 前言11.1音频分析原理11.2音频分析方法11.3音频参数测量及分析12 系统方案设计32.1系统设计要求32.2系统方案论证32.2.1 系统整体方案选择32.2.2 系统核心处理器的选择33 系统硬件设计53.1 FPGA与NIOS II介绍53.2 FPGA核心板电路设计53.2.1 F

6、PGA电源电路63.2.2FPGA时钟电路73.2.3FPGA配置电路93.3前级信号调理电路103.4AD采样电路设计133.5系统电源电路设计143.6彩色液晶电路设计143.7触摸屏电路设计154系统软件设计174.1NIOSII集成开发环境介绍174.2系统主程序设计174.3AD转换驱动程序184.4触摸屏识别程序194.5 FFT算法的C语言实现204.5.1 FFT的MATLAB仿真与分析204.5.2倒位序算法分析234.5.3实数蝶形运算算法234.5.4 DITFFT算法的基本思想分析245 系统调试与测试结果265.1系统调试265.2测试方案与测试结果265.2.1测试

7、电路265.2.2两路信号总功率测量275.2.3单个频率分量测量275.3误差分析286结束语29参考文献30附 录31附录一31附录二35附录三36附录四42附录五43附录六44谢 辞461 前言1.1 音频分析原理音频是多媒体中的一种重要媒体。我们能够听见的音频信号的频率范围大约是20Hz-20kHz,其中语音大约分布在300Hz-4kHz之内,而音乐和其他自然声响是全范围分布的。声音经过模拟设备记录或再生,成为模拟音频,再经数字化成为数字音频。这里所说的音频分析就是以数字音频信号为分析对象,以数字信号处理为分析手段,提取信号在时域、频域内一系列特性的过程。音频分析的原理主要涉及数字信号

8、处理的基本理论、音频分析的基本方法以及音频参数测量和分析内容,其中数字信号处理是音频分析的理论基础。傅立叶变换和信号的采样是进行音频分析时用到的最基本的技术。傅立叶变换是进行频谱分析的基础,信号的频谱分析是指按信号的频率结构,求取其分量的幅值、相位等按频率分布规律,建立以频率为横轴的各种“谱”,如幅度谱、相位谱。在以计算机为中心的测试系统中,模拟信号进入数字计算机前先经过A/D变换器,将连续时间信号变为离散时间信号,称为信号的采样。然后再经幅值量化变为离散的数字信号。这样,在频域上将会出现一系列新的问题,频谱会发生变化。由模拟信号变成数字信号后,其傅立叶变换也变成离散傅立叶变换,涉及到采样定理

9、、频率混叠、截断和泄漏、加窗与窗函数等一系列问题。1.2 音频分析方法通常在对某音频设备音频测量分析时,该设备被看成是一个具有输入端口和输出端口的黑箱系统。将某种己知信号输入该系统,然后从输出端获取输出信号进行分析,从而了解该系统的一些特性,这就是音频分析的一般方法。输入音频设备的信号,称作激励信号。激励信号可以是正弦、方波等周期信号,也可以是白噪声、粉红噪声等随机信号,还可以是双音、多音、正弦突发等信号。最常用的检测分析方法有正弦信号检测、脉冲信号检测、最大长度序列信号检测等。1.3 音频参数测量及分析音频测量一般包括信号电压、频率、信噪比、谐波失真等基本参数。大部分音频参数都可以由这几种基

10、本参数组合而成。音频分析可以分为时域分析、频域分析、时频分析等几类。由于信号的谐波失真对于音频测量比较重要,因此将其单独归类为失真分析。以下分别介绍各种音频参数测量和音频分析。音频测量中需要测量的基本参数主要有电压、频率、信噪比。电压测试可以分为均方根电压(RMS)、平均电压和峰值电压等几种。频率是音频测量中最基本的参数之一。通常利用高频精密时钟作为基准来测量信号的频率。测量频率时,在一个限定的时间内的输入信号和基准时钟同时计数,然后将两者的计数值比较后乘以基准时钟的频率就得到信号频率。随着微处理芯片的运算速度的提高,信号的频率也可以利用快速傅立叶变换通过软件计算得到。信噪比是音频设备的基本性

11、能指标,是信号的有效电压与噪声电压的比值。在实际测量中,为方便起见,通常用带有噪声的信号总电压代替信号电压计算信噪比。时域分析通常是将某种测试信号输入待测音频设备,观察设备输出信号的时域波形来评定设备的相关性能。最常用的时域分析测试信号有正弦信号、方波信号、阶跃信号及单音突变信号等。例如将正弦信号输入设备,观察输出信号时域波形失真就是一种时域分析方法。频域分析是音频分析的重要内容,频域分析的主要依据是频率响应特性曲线图。频率响应曲线图反映了音频设备在整个音频范围内的频率响应的分布情况。一般来说曲线峰值处的频率成分,回放声压大、声压强;曲线谷底处频率成分声压小、声音弱。若波峰和波谷起伏太大,则会

12、造成较严重的频率失真。谐波失真的测量方法有两种,一种是以正弦信号输入待测设备,然后分析设备响应信号的频率成分,可以得到谐波失真。另一种更简单的测量方法是首先利用带阻滤波器滤除响应信号中的基频成分,然后直接测量剩余信号的电压,将其与原响应信号作比较,就可以得到谐波失真。显然第二种方法得到的谐波失真是THD+N,由于采用了信号的总电压值代替了基频分量电压值,因此得到的谐波失真比实际值偏小,且实际的谐波失真越大,误差越大。在实际的音频测量时,通常在一定的频率范围内选取若干个频率点,分别测量出各点的谐波失真,然后将各谐波失真数值以频率为横坐标连成一条曲线,称为谐波失真曲线。2 系统方案设计2.1 系统

13、设计要求本系统是在2007年全国大学生电子设计竞赛A题音频信号分析仪的基础上进行设计的,题目的基本部分要求如下:(1)输入阻抗:50Ohm(2)输入信号电压范围(峰-峰值):100mV5V(3)输入信号包含的频率成分范围:200Hz10kHz(4)频率分辨力:100Hz(可正确测量被测信号中,频差不小于100Hz的频率分量的功率值。)(5)检测输入信号的总功率和各频率分量的频率和功率,检测出的各频率分量的功率之和不小于总功率值的95%;各频率分量功率测量的相对误差的绝对值小于10%,总功率测量的相对误差的绝对值小于5%。(6)分析时间:5秒。应以5秒周期刷新分析数据,信号各频率分量应按功率大小

14、依次存储并可回放显示,同时实时显示信号总功率和至少前两个频率分量的频率值和功率值,并设暂停键保持显示的数据。2.2 系统方案论证2.2.1 系统整体方案选择音频信号分析仪可分为模拟式音频信号分析仪和数字式音频信号分析仪。方案一:以FFT为基础的的数字音频信号分析仪。通过对信号的频域分析可以很方便的得到输入信号的各种信息,如功率谱、频率分量以及周期性等。外围电路少,实现方便,精度高。方案二:以模拟滤波器为基础的模拟式频谱分析仪。扫描滤波法、有并行滤波法、小外差法等。因为受到模拟滤波器滤性能的限制,此种方法实现起来比较困难。所以选用方案一作为本系统的实现方式。2.2.2 系统核心处理器的选择方案一

15、:以普通单片机为核心进行相关算法的处理。从发展历史看,单片机的发展已经有比较长的时间,应用比较广泛,各种技术都比较成熟,但单片机处理速度不是很快,存储器资源不够,没有实现数字信号处理的DSP模块。故不采用普通单片机。方案二:采用DSP处理器进行处理。和普通单片机相比,DSP的处理速度快,存储器资源,很适合FFT算法的实现。但是DSP处理器芯片的结构有点复杂,开发难度大。方案三:在FPGA中嵌入NIOS II处理器,通过软件实现。NIOS II 支持C语言编程方式,普通的C语言版的FFT稍加改正即可应用到本方案中,而且Altera Cyclone II FPGA内部有丰富的硬件乘法器和存储器资源

16、,开发难度低,速度快。考虑到本系统对处理器的处理速度要求不是很高。为了减小开发难度,采用了方案三。音频信号先经过由运放和电阻组成的50Ohm阻抗匹配电路以满足输入阻抗50 Ohm的系统要求,这样方便信号功率的计算。为了保证所处理的信号被不失真的采样,信号还要通过截止频率为10Khz的抗混叠低通滤波器。最后为了AD能正确的采样,信号还要通过信号抬高电路。经过12位A/D转换芯片MAX144转换后的数字信号经由基于FPGA的NIOSII处理器进行FFT变换和处理,分析各个频率点的功率值,并将这些值显示在分辨率320*240的彩色液晶上。图1 系统总体框图3 系统硬件设计3.1 FPGA与NIOS

17、II介绍现场可编程门阵列(FPGA)是一种半导体器件,可以在制造完成后进行编程。FPGA硬件功能不是预先确定好的,而是针对产品特性和功能进行编程,以适应新标准,即使产品已经在现场使用了,也可以针对某些应用重新配置硬件因此,叫做“现场可编程”。也可以使用FPGA来实现专用集成电路(ASIC)完成的任何逻辑功能,而且在产品发售后也能够对功能进行更新,在很多应用中都具有一定优势。与以前使用可编程逻辑和互联I/O的FPGA不同,现在的FPGA含有各种可配置嵌入式SRAM、高速收发器、高速I/O、逻辑模块和走线。特别是,FPGA含有名为逻辑单元(LE)的可编程逻辑,以及分层的可配置互联,支持LE的物理连

18、接。您可以配置LE来完成复杂的组合功能,或者只是简单的AND和XOR等逻辑门。在大部分FPGA中,逻辑模块含有存储器单元,例如简单的触发器或者较复杂的存储器模块等。NIOSII系列软核处理器是ALTERA的第二代FPGA嵌入式处理器,其性能超过200DMIPS,在ALTERA FPGA中实现仅需35美分。ALTERA的STRATIX、STRATIXGX、 STRATIX II和 CYCLON系列FPGA全面支持NIOS II处理器,以后推出的FPGA器件也将支持NIOS II。自ALTERA于2000年推出第一代16位NIOS处理器以来,已经交付了13000多套NIOS开发套件,NIOS成为最

19、流行的软核处理器。刚推出的NIOS II系列采用全新的架构,比第一代NIOS具有更高水平的效率和性能。和第一代相比,NIOS II核平均占用不到50%的FPGA资源,而计算性能增长了1倍。3.2 FPGA核心板电路设计系统采用的是ALTERA公司的CYCLON II 系列型号为EP2C8Q208C8的FPGA芯片。CYCLON II器件采用了90nm工艺制造,其增加了硬的DSP块,在芯片总体性能上要优于第一代产品CYCLON系列器件。FPGA核心板电路图主要由FPGA电源电路(图2)、时钟电路(图3)、配置电路(图4)和Sdram和Flash电路(图5)组成四部分组成。3.2.1 FPGA电源

20、电路本系统的FPGA核心板需要3.3V和1.2V两种电压。CYCLONII器件的每个bank都有VREF引脚,可用来独立支持任一种基准电压标准,其具有两重功能,如果某一I/Obank不使用基准电压标准,那么VREF引脚作为可用的I/O引脚。每个bank也有专用的VCCIO引脚,每个CYCLONII器件都支持1.5V,1.8V,2.5V和3.3V的接口,各个独立的bank也支持不同的I/O电压标准。每个I/Obank通过多个VCCIO引脚为输入输出提供多种标准,例如当VCCIO为3.3V时,该bank为输入输出引脚提供LVTTL,LVCOMS和3.3VPCI。在I/Obank中可使用许多单端和差

21、分标准,只要他们使用相同的VREF和适当的VCCIO值。CYCLONII的架构支持多电压I/O接口,这就允许CYCLONII器件为多系统提供不同的电压。CYCLONII器件带有一组VCC引脚(VCCINT),用于驱动内部逻辑门阵列和使用LVPECL,LVDS,HSTL或者SSTLI/O标准的输入缓冲器。还有4组或者8组的VCC引(VCCIO)用于驱动输出I/O引脚和使用LVTTL,LVCMOS或者PCII/O标准的输入缓冲器。CYCLONII器件的VCCINT引脚必须接1.2V的电源,如果VCCINT接的是1.2V,那么输入引脚允许接1.5V,1.8V,2.5V或者3.3V。VCCIO引脚能从

22、1.5V,1.8V,2.5V或者3.3V的电源中任选,依赖于输出的需求。输出电平可以与系统的电源相容。(例如当VCCIO接了1.5V的电源,输出电平就会调整为1.5V的系统)。当VCCIO引脚接了3.3V的电源,输出最高为3.3V并且与3.3V的系统兼容。由于FPGA核心板要驱动AD转换芯片和彩色液晶,而AD转换芯片和彩色液晶都需要与3.3V电压兼容的电平。所以VCCIO引脚接了3.3V的电源的电压。图2 FPGA核心板电源电路3.2.2 FPGA时钟电路(1)全局时钟网络在整个CYCLONII器件中有16或者8个全局时钟网络驱动器,专用的时钟引脚(CLK ),PLL输出,逻辑阵列和两用的时钟

23、引脚(DPCLK)都能驱动全局时钟网络。如果这些专用的时钟引脚没有用来提供给全局时钟网络,那么他们可以被用作普通的输入引脚提供给逻辑阵列作为多通道连接。不过,如果他们被用作普通目的的输入引脚,他们没有可用的I/O寄存器,必须用LE-based寄存器来代替。CYCLONII器件总有20个或8个有双重用处的时钟引脚,DPCLK19.0或者DPCLK7.0,较大的器件有20个,左右两边各4个,上下两边各6个。角落的CDPCLK引脚在进入时钟控制模块之前首先被复用。直到有信号通过一个多路复用器馈送到时钟控制模块之前,这些信号到时钟控制模块产生的延时要大于其他直接馈送到时钟控制模块的DPCLK引脚。在较

24、小的CYCLONII器件中(如EP2C5和EP2C8)有8个DPCLK引脚,器件的每边各两个。一个可编程的延时信道从DPCLK引脚到他的扇出终点是可见的,要设置从DPCLK引脚到他扇出终点的延时,要使用QUARTUSII软件中的Input Delay from Dual-Purpose Clock Pinto Fan-Out Destinations assignment设置。这些双重作用的引脚能连接到全局时钟网络作为高扇出控制信号,例如时钟,异步清零,预设,时钟使能,或者协议控制信号如PCI的TRDY和IRDY,外部存储接口DQS。全局时钟网络可以为器件内部的所有资源提供时钟,例如IOEs,

25、LEs,存储模块和内部乘法器。全局时钟线也可被控制信号使用,例如时钟使能和通过外部引脚同步或异步清除反馈,也可用于DDRSDRAM或者QDRIISRAM的DQS信号接口。内部逻辑也能驱动全局时钟网络内部产生全局时钟和异步清零,时钟使能,或者其他带大扇出的控制信号。 (2)时钟控制模块CYCLONII器件有一个可见的时钟控制块来控制全局时钟网络。这些时钟控制模块被分配到器件的外围,每个CYCLONII器件最多有16个可见时钟控制模块,器件的每边有4个,稍小一些的CYCLONII器件(EP2C5或EP2C8)有8个时钟控制模块,器件的左右各4个。这些控制模块有以下功能:1动态全局时钟网络时钟源选择

26、;2动态使能或禁用全局时钟网络在CYCLONII器件中,专用的CLK引脚,PLL计数器输出,PDCLK引脚和内部逻辑都可以向全局时钟块提供源。时钟模块的输出又反馈给相应的全局时钟网络。以下几个源可以作为时钟控制模块的输入:在同一边的4个时钟引脚作为时钟控制模块;一个PLL输出三个PLL时钟引脚;四个DPCLK引脚(包括CDPCLK引脚)在同一边作为时钟控制模块;四个内部产生信号在这些源中,只有两个时钟引脚,两个PLL时钟输出,一个DPCLK引脚,和一个内部逻辑信号可以被器件选择输入到时钟控制模块,除了这六个输入,两个时钟引脚和两个PLL输出引脚可以被动态的选择提供给全局时钟网络。时钟控制模块支

27、持从DPCLK和内部逻辑信号中静态选择。图3 FPGA核心板的时钟电路3.2.3 FPGA配置电路CYCLONII器件使用SRAM单元存储配置信息,由于SRAM存储器是易失性的,所以每次上电后配置信息都会重新加载到CYCLONII芯片中。可以使用AS(actionserial)配置方式,这需要DCLK的频率达到40MHz的情况下,配置CYCLONII芯片。也可使用PS(passiveserial)和JTAG(JointTestActionGroup)方式来配置。此外,CYCLONII芯片还能接收压缩的配置信息比特流,在运行过程中解压这些数据,来降低存储要求和配置时间。可以通过CYCLONII芯

28、片的MSEL引脚的高低来选择哪中配置方式,MSEL引脚是有其所在bank的VCCIO引脚驱动的,MSEL1.0引脚有9K欧的内部下拉电阻始终有效。在上电复位和重新配置时,MSEL引脚肯定是出于LVTTLVil或者Vih电平,分别被看作逻辑低和逻辑高。因此,为了避免因使用了错误的配置方法而产生问题,需要将MSEL引脚连接到其所在的I/Obank的VCCIO和GND,不需要连上拉或下拉电阻。MESL引脚不需要处理器或其他的器件来驱动。表1 CYCLONII配置模式配置模式MSEL1MSELO描述AS(20MHz)00串行配置器件PS01增强配置器件FastAs(40MHz)10AS模式JTAG*下

29、载电缆和微机 图4 FPGA的配置电路3.3 前级信号调理电路前级信号调理电路由前级阻抗匹配电路、低通滤波器和信号抬高电路组成。信号输入后通过R5,R6两个100Ohm的并联电阻和一个高精度低噪声运放OP07实现跟随作用,由于集成运放的输入阻抗很大,所以输入阻抗即为:R5/R6=50Ohm。OP07闭环带宽600KHZ,电压噪声密度10个单位,充分满足系统的设计要求。图5 前级阻抗匹配电路系统要求音频信号频率为20HZ10KHZ,根据奎斯特定律,我们至少要保证20K的采样频率,才能保证所处理的信号被不失真的采集,否则会发生混叠现象(还原信号时,被采样的低频信号与高频信号无法区分),现在就是要设

30、计这样一个滤波器,能够很好的滤去10KHZ以上的频率,考虑到设计难度与实际情况,放弃了制作20HZ10KHZ带通滤波器的想法,转而制作一款高性能的低通滤波器,截止频率10KHZ。低通滤波器的制作方法很多,有源,无源,查表,同时还可以借助丰富的滤波器设计软件验证自己的设计,结合自己的实际制作经验,选用一款开关电容滤波器芯片MAX293来完成本次设计低通滤波环节。MAX293是一款8阶低通椭圆开关电容滤波器芯片,有两种驱动方式,一种是时钟驱动,从CLK脚输入一个频率为F的信号,即可得到截止频率为F/100的低通滤波器,第二种是在CLK脚对地并一个电容,截止频率与电容的关系大约为F=100000/3

31、C。考虑到防止时钟信号的串扰和简化设计,采用第二种方式。图6 低通滤波电路系统要求能测试的音频信号的峰峰值为5v,而AD转换电路只能采样正信号,所以需要把信号至少抬高2.5v才能让AD转换电路正确的采样。并且AD的参考电压为+5v,如果信号的最大幅值超过+5v将不能被AD转换电路正确采样。因此,信号抬高电路只有把输入信号抬高2.5v才能满足以上两个要求。根据叠加定理:Vout(=(1+R7/R8)*(R11/(R11+R10)*Vin+(1+R7/R8)*(R10/(R11+R10)*5=Vin+2.5。图7 信号抬高电路3.4 AD采样电路设计为了提高系统的精度,AD转换芯片我选用的是MAX

32、IM公司生产的新型12位串行模数转换器MAX144。MAX144是美国MAXIM公司生产的新型双通道12位串行模数转换器,它具有自动关断和快速唤醒功能,且内部集成有时钟电路,采样/保持电路;同时具有转换速率高、功耗低等优点,特别适合于由电池供电且对体积和精度有较高要求的智能仪器仪表产品。图8 AD采样电路3.5 系统电源电路设计根据系统的要求,本系统需要+5v,-5v两种电压,考虑到实际调试情况和电路的升级,在系统电源设计的时候加上了正负电压可调的电源电路。直流稳压电源一般由电源变压器、整流滤波电路及稳压电路所组成。其中+5v,-5v两种电压由稳压芯片CW7805和CW7905产生,正负可调电

33、压由LM317和LM337产生。图9 系统电源电路3.6 彩色液晶电路设计为了让音频信号功率谱显示的更清晰,本系统采用了2.2寸分辨率为320*240的彩色液晶。这款液晶的驱动芯片采用的是NEC公司PD161704A。PD161704A有1382400位的显示RAM(240pixelsx18bitsx320lines)。图10彩色液晶驱动电路3.7 触摸屏电路设计为了让系统人机界面的操作性更好,在彩色液晶上面还加了一块触摸屏。触摸屏的驱动芯片采用的是TI公司的ADS7843。ADS7843是4线电阻触摸屏转换接口芯片。它是一款具有同步串行接口的12位取样模数转换器。ADS7843的工作原理就是

34、通过连结触摸屏X+将触摸信号输入到AD转换器同时打开Y+和Y-驱动,然后将数字化的X+的电压,从而得到当前Y位置的测量结果。同理也得到X方向的坐标。图11触摸屏驱动电路4 系统软件设计4.1 NIOSII集成开发环境介绍NIOSII集成开发环境(IDE)是NIOSII系列嵌入式处理器的基本软件开发工具。所有软件开发任务都可以NIOSII IDE下完成,包括编辑、编译和调试程序。NIOSII IDE提供了一个统一的开发平台,用于所有NIOSII处理器系统。仅仅通过一台PC机、一片ALTERA的FPGA以及一根JTAG下载电缆,软件开发人员就能够往NIOSII处理器系统写入程序以及和NIOSII处

35、理器系统进行通讯。NIOSII IDE基于开放式的、可扩展EclipseIDEproject工程以及EclipseC/C+开发工具(CDT)工程。4.2 系统主程序设计主程序包括AD转换驱动程序,LCD初始化与显示,触摸屏驱动与触摸识别和FFT运算。主程序流程图如图12所示,程序见附录。图12主程序设计流程图4.3 AD转换驱动程序为了让AD转换电路正确地采样数据和NIOSII软核CPU正确地读取数据,整个AD转换驱动程序由一个时钟控制模块,串行数据转并行数据模块,16位的加法器,一个12位D触发器缓冲模块和MAX144的状态机模块组成。图13 QUARTUSII软件下设计的MAX144驱动的

36、顶层原理图由于本系统采用的是12位串行AD,对时序要求很严格。所以必须严格按照MAX144的数据手册上时序,利用状态机编写驱动程序。MAX144的两个模拟输入通道CH0与CH1可连接到两个不同的信号源上。上电复位后,MAX144将自动对CH0通道的模拟信号进行A/D转换,转换完毕又自动切换到CH1通道,并对CH1通道模拟信号进行A/D转换,之后交替地在CH0和CH1通道间进行切换和转换。输出数据中包含的一个通道标志位CHID,用以确定该数据为哪一通道转换得到。如果只有一路模拟信号,可以将CH0与CH1连接在一起作为一个输入通道,但输出的数据中仍包含有通道标志位CHID。将CS/SHDN设置为低

37、电平可启动A/D转换过程,在CS/SHDN的下降沿,内部采样/保持电路将进入采样模式,此时如果SCLK为高电平,则选择内部时钟模式;若为低电平则选择外部时钟模式。当串行时钟频率小于100kHz或大2.17MHz时,应选择内部时钟模式。当工作于外部时钟模式时,由于外部时钟不仅要移出数据,而且要驱动模数转换,因此,A/D转换必须在140s内完成,否则采样/保持电路中电容上电压的降低可能导致转换结果精度的降低。转换结束后,内部振荡电路被关闭,DOUT变为高电平,此时即可读取转换数据。图14 MAX144的时钟模式时序图图15 MAX144驱动的状态转移图4.4 触摸屏识别程序当触摸屏幕时,PENIR

38、Q就被拉低,然后发送Y轴或者X轴的控制字节,再延时消除抖动,接着就循环8次读取Y轴或者X轴的坐标值并且取其平均值,这样得到的值就是比较精确的坐标值。最后判断PENIRQ是否为高,如果为高,再判断一次。这样通过判断两次的方法可以克服触摸屏信号的抖动。如果两次都为高,则发送控制字节返回到开始继续判断PENIRQ是否为低。如果两次判断有一次不为高电平,则发送X轴控制字节,读取X轴的坐标值。图16 触摸屏的触摸识别流程图4.5 FFT算法的C语言实现4.5.1 FFT的MATLAB仿真与分析信号经过ADC采样后得到的数字信号,就可以做FFT变换了。N个采样点,经过FFT之后,就可以得到N个点的FFT结

39、果。为了方便进行FFT运算,通常N取2的整数次方。 假设采样频率为Fs,信号频率F,采样点数为N。那么FFT之后结果就是一个为N点的复数。每一个点就对应着一个频率点。这个点的模值,就是该频率值下的幅度特性。假设原始信号的峰值为A,那么FFT的结果的每个点(除了第一个点直流分量之外)的模值就是A的N/2倍。而第一个点就是直流分量,它的模值就是直流分量的N倍。而每个点的相位呢,就是在该频率下的信号的相位。第一个点表示直流分量(即0Hz),而最后一个点N的再下一个点(实际上这个点是不存在的,这里是假设的第N+1个点,也可以看作是将第一个点分做两半分,另一半移到最后)则表示采样频率Fs,这中间被N-1

40、个点平均分成N等份,每个点的频率依次增加。例如某点n所表示的频率为:Fn=(n-1)*Fs/N。由上面的公式可以看出,Fn所能分辨到频率为Fs/N,如果采样频率Fs为1024Hz,采样点数为1024点,则可以分辨到1Hz。1024Hz的采样率采样1024点,刚好是1秒,也就是说,采样1秒时间的信号并做FFT,则结果可以分析到1Hz,如果采样2秒时间的信号并做FFT,则结果可以分析到0.5Hz。如果要提高频率分辨力,则必须增加采样点数,也即采样时间。频率分辨率和采样时间是倒数关系。假设FFT之后某点n用复数a+bi表示,那么这个复数的模就是,相位就是Pn=atan2(b,a)。根据以上的结果,就

41、可以计算出n点(n1,且n=N/2)对应的信号表达式为:An/(N/2)*cos(2*pi*Fn*t+Pn),即2*An/N*cos(2*pi*Fn*t+Pn)对于n=1点的信号,是直流分量,幅度即为A1/N。由于FFT结果的对称性,通常我们只使用前半部分的结果,即小于采样频率一半的结果。假设我们有一个信号,它含有2V的直流分量,频率为50Hz、相位为-30度、幅度为1.5V的交流信号,以及一个频率为75Hz、相位为90度、幅度为2V的交流信号。用数学表达式就是如下:S=2+1.5*cos(2*pi*50*t-pi*30/180)+2*cos(2*pi*75*t+pi*90/180)式中cos

42、参数为弧度,所以-30度和90度要分别换算成弧度。现在以256Hz的采样率对这个信号进行采样,总共采样256点。按照上面的分析,Fn=(n-1)*Fs/N,每两个点之间的间距就是1Hz,第n个点的频率就是n-1。信号一共有3个频率:0Hz、50Hz、75Hz,应该分别在第1个点、第51个点、第76个点上出现峰值,其它各点应该接近0。 图17 原始信号的波形图图18 原始信号经过FFT后的波形图从上图中可以看到,在第1点、第51点、和第76点附近有比较大的值,经过FFT后三点的幅值分别为512、192和256,三点附近的数据的幅值都近似为零。 按照公式,可以计算出直流分量为:512/N=512/

43、256=2;50Hz信号的幅度为:192/(N/2)=192/(256/2)=1.5;75Hz信号的幅度为256/(N/2)=256/(256/2)=2。可见,从频谱分析出来的幅度是正确的。4.5.2 倒位序算法分析按时间抽取(DIT)的FFT算法通常将原始数据倒位序存储,最后按正常顺序输出结果X(0),X(1),.,X(k),.。假设一开始,数据在数组floatdataR128中,我们将下标i表示为(b6b5b4b3b2b1b0)b,倒位序存放就是将原来第i个位置的元素存放到第(b0b1b2b3b4b5b6)b的位置上去.由于C语言的位操作能力很强,可以分别提取出b6、b5、b4、b3、b2

44、、b1、b0,再重新组合成b0、b1、b2、b3、b4、b5、b6,即是倒位序的位置。这种算法充分利用了C语言的位操作能力。程序段如下(假设128点FFT):int b0=b1=b2=b3=b4=b5=6=0;b0=i&0x01;b1=(i/2)&0x01;b2=(i/4)&0x01;b3=(i/8)&0x01;b4=(i/16)&0x01;b5=(i/32)&0x01;b6=(i/64)&0x01;invert_pos=x0*64+x1*32+x2*16+x3*8+x4*4+x5*2+x6;4.5.3 实数蝶形运算算法图19蝶形图蝶形公式:X(K) = X(K) + X(K+B)WPN X(

45、K+B) = X(K) - X(K+B) WPN其中WPN= cos(2P/N)- jsin(2P/N)。设 X(K+B) = XR(K+B) + jXI(K+B), X(K) = XR(K) + jXI(K),有:XR(K)+jXI(K)= XR(K)+jXI(K)+ XR(K+B) + jXI(K+B)* cos(2P/N)-jsin(2P/N);继续分解得到下列两式: XR(K)= XR(K)+ XR(K+B) cos(2P/N)+ XI(K+B) sin (2P/N) (1)XI(K)= XI(K)-XR(K+B) sin(2P/N)+XI(K+B)cos (2P/N) (2) 需要注

46、意的是: XR(K)、XR(K)的存储位置相同,所以经过(1)、(2)后,该位置上的值已经改变,而下面求X(K+B)要用到X(K),因此在编程时要注意保存XR(K)和XI(K)到TR和TI两个临时变量中。同理: XR(K+B)+jXI(K+B)= XR(K)+jXI(K)- XR(K+B)+jXI(K+B) * cos(2P/N)-jsin(2P/N)继续分解得到下列两式:XR(K+B)= XR(K)-XR(K+B) cos(2P/N)- XI(K+B) sin (2P/N) (3)XI(K+B)= XI(K)+ XR(K+B) sin(2P/N)- XI(K+B) cos (2P/N) (4

47、)注意: 在编程时, 式(3)、(4)中的XR(K)和 XI(K)分别用TR和TI代替。 经过式(3)后, XR(K+B)的值已变化,而式(4)中要用到该位置上的上一级值,所以在执行式(3)前要先将上一级的值XR(K+B)保存。 在编程时, XR(K)和 XR(K), XI(K)和 XI(K)使用同一个变量。通过以上分析,我们只要将式(1)、(2)、(3)、(4)转换成C语言语句即可。要注意变量的中间保存,详见以下程序段。TR=dataRk;TI=dataIk;temp=dataRk+b;dataRk=dataRk+dataRk+b*cos_tabp+dataIk+b*sin_tabp;data

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号