毕业设计(论文)-音频信号处理系统.doc_第1页
毕业设计(论文)-音频信号处理系统.doc_第2页
毕业设计(论文)-音频信号处理系统.doc_第3页
毕业设计(论文)-音频信号处理系统.doc_第4页
毕业设计(论文)-音频信号处理系统.doc_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本科毕业论文(设计) 题 目 音频信号处理系统 指导教师 XX 职称 讲师 学生姓名 XX 学号 XXXXXX专 业 电子信息工程 班级 电信(1)班 院 (系) 电子信息工程学院完成时间 2011年04月21日III音频信号处理系统摘 要音频信号的频谱显示是FFT运算的一大进步,随着科技水平的提高,人们对于音频信号的频谱显示提出了更高的要求。与传统频谱分析相比,FFT运算通过对单片机进行编程实现频谱运算,操作简单,易于仿真测试,为研究新的频谱算法提供一个广阔的平台。因此,用FFT运算研究音频信号的频谱具有重要的意义。本文利用单片机及外围电路实现音频信号的频谱显示。该系统以STC12C5A60S2中的A/D接口对音频信号进行数据采集和A/D转换,并将得到的数据送入STC12C5A60S2进行FFT运算,运算的结果将显示在LCD1604上。此处所使用的音频信号可来自CD或DVD碟机。该系统结构简单,可分块独立实现,操作简单。在家庭影院、卡拉OK等音响系统中,实时显示音乐信号的频谱将为音乐系统增添不少色彩。关键字 音频信号/单片机/频谱显示AUDIO SIGNAL PROCESSING SYSTEMABSTRACT Audio signal spectrum display is a major progress of computation FFT, along with the technological level enhancement, people for audio signal spectrum display put forward higher request. Compared with the traditional spectrum analysis, FFT operations through the SCM for programming realize spectrum operation, simple operation, easy to simulation test for the study of the new algorithm provides a broad spectrum of the platform. Therefore, with the FFT spectrum of audio computing research has important significance. This atticle used singlechip and peripheral circuit implementation audio signal spectrum display. This system to the A/D interface STC12C5A60S2 for audio signal for data acquisition and A/D conversion, and will get data into STC12C5A60S2 on FFT operations, operation results will show in LCD1604. Here the audio signal can be used from a CD or DVD machine. The system structure is simple, can block independent realize, simple operation. In home theaters, karaoke sound system, such as music signals for real-time display for the spectrum will be music system add many colors.KEY WORDS Audio Signal,Microcontroller,Spectrum Display Circuit目 录中文摘要I英文摘要II1 绪论12 系统功能定义23 系统设计33.1 主控单元3 3.1.1 STC12C5A60S2 单片机最小应用系统3 3.1.2 STC12C5A60S2系列单片机简介5 3.1.3 STC12C5A60S2系列单片机的内部结构与信号引脚73.2 STC12C5A60S2系列单片机的A/D转换器93.3 频谱显示单元11 3.3.1 LCD显示的基本原理11 3.3.2 LCD1604简介12 3.3.3 LCD1604的基本参数、引脚功能及指令说明124 音频信号处理相关原理164.1 采样频率164.2 样本大小16 4.3 音频频谱算法原理16 4.3.1 倒位序及其优化算法16 4.3.2 蝶形运算及其优化算法175 软件设计195.1 A/D采样195.2 周期判定205.3 FFT变换215.4 特征值提取226 过程分析及总结23致 谢26参考文献27附 录A 源程序28附 录B 系统电路图381 绪论 目前实际生产的音乐系统产品,大多采用以下两种方法实现音频频谱显示:一是利用硬件滤波器和A/D转换器;二是利用DSP处理频谱显示。前者实现简单,但硬件成本高,后者软件和硬件实现都比较复杂。这里针对单片机RAM资源少,运算速度慢的特点,提出一种切实可行的快速傅里叶算法实现频谱显示。本设计通过STC12C5A60S2单片机及外围器件组成的系统实现音频信号的频谱显示,将音频信号送入STC12C5A60S2单片机的A/D转换接口进行数据的采集和预处理,然后送入单片机中通过编程实现频谱计算,在LCD1604上实时显示音频信号的频谱 。 本软件来源于千千静听(音乐播放器)中的频谱显示功能,参照此可以采用软硬结合的办法实现实时显示音频信号频谱的功能。2 系统功能定义该系统由单片机STC12C5A60S2,音频数据采集电路,频谱显示电路等部分组成,图1为系统整体设计原理框图。频谱显示电路FFT算法计算频谱值音频信号数据采集 图1 系统整体设计框图该系统从功能上可划分成3部分: l音频数据通过STC12C5A60S2的A/D接口实现模拟音频信号的采样保持和量化处理,包括音频采集和转换(该单片机内置A/D转换); l频谱显示电路实现模拟音频信号频谱的分段显示,它将音频信号频谱划分成14段,每段按照14级量化,由LCD1604显示器件显示; l主控制器采用STC12C5A60S2单片机。在完成系统其他控制任务的前提下,充分利用单片机剩余计算资源,采用优化FFT算法计算音频信号频谱,并将结果输出到LCD1604频谱显示电路。3 系统设计 本设计以STC12C5A60S2单片机作为主控单元,进行频谱计算和数据采集,由LCD1604显示频谱。3.1 主控单元 本设计以STC12C5A60S2作为主控单元,进行音频数据的采集,A/D转换,频谱计算(FFT)。3.1.1 STC12C5A60S2 单片机最小应用系统3由STC12C5A60S2单片机最小系统构成的电路如图2所示。图2 STC12C5A60S2单片机最小系统原理图3.1.1.1 系统组成 l复位电路 时钟频率低于12MHz时,可以不用C1,R1接1K电阻到地时钟频率高于12MHz时,建议使用第二复位功能脚(STC12C5A60S2系列在RST2/EX_LVD/P4.6口STC12C5201AD系列在RST2/EX_LVD/P1.2口) l晶振电路 如果外部时钟频率在33MHz以上时,建议直接使用外部有源晶振 如果使用内部R/C振荡器时钟(室温情况下5V单片机为:11MHz17MHz,3V单片机为8MHz12MHz),XTAL1和XTAL2脚浮空.如果外部时钟频率在27MHz以上时,使用标称频率就是基本频率的晶体,不要使用三泛音的晶体,否则如参数搭配不当,就有可能振在基频,此时实际频率就只有标称频率的1/3了,或直接使用外部有源晶振,时钟从XTAL1脚输入,XTAL2脚必须浮空. 当时钟频率高于12MHz时,建议使用第二复位功能脚,可以不用C1,R1接1K电阻到地 l电源 l下载接口3.1.1.2 结构特点 l复位电路的极性电容C1的大小直接影响单片机的复位时间,一般采用1030uF,51单片机最小系统容值越大需要的复位时间越短。 l晶振Y1也可以采用6MHz或者11.0592MHz,在正常工作的情况下可以采用更高频率的晶振,51单片机最小系统晶振的振荡频率直接影响单片机的处理速度,频率越大处理速度越快。 l起振电容C2、C3一般采用1533pF,并且电容离晶振越近越好,晶振离单片机越近越好4.P0口为开漏输出,作为输出口时需加上拉电阻,阻值一般为10k。 l设置为定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。计数值N乘以机器周期Tcy就是定时时间t。 l设置为计数器模式时,外部事件计数脉冲由T0或T1引脚输入到计数器。在每个机器周期的S5P2期间采样T0、T1引脚电平。当某周期采样到一高电平输入,而下一周期又采样到一低电平时,则计数器加1,更新的计数值在下一个机器周期的S3P1期间装入计数器。由于检测一个从1到0的下降沿需要2个机器周期,因此要求被采样的电平至少要维持一个机器周期。当晶振频率为12MHz时,最高计数频率不超过1/2MHz,即计数脉冲的周期要大于2 ms。3.1.1.3 主要接口定义标识符号 地址 寄存器名称P3 0B0H I/O口3寄存器PCON 87H 电源控制及波特率选择寄存器SCON 98H 串行口控制寄存器SBUF 99H 串行数据缓冲寄存器TCON 88H 定时控制寄存器TMOD 89H 定时器方式选择寄存器TL0 8AH 定时器0低8位TH0 8CH 定时器0高8位TL1 8BH 定时器1低8位TH1 8DH 定时器1高8位3.1.1.4 传统8051单片机到STC12C5A60S2系列单片机的过渡 STC12C5A60S2系列单片机的定时器定时器与传统8051完全兼容,上电复位后,定时器部分缺省还是除12再计数的,而串口由定时器1控制速度,所以定时器/串口完全兼容。增加了独立波特率发生器,省去了传统8052的定时器2,如是用T2做波特率的,请改用独立波特率发生器做波特率发生器。传统8051的111条指令执行速度全面提速,最快的指令快24倍,最慢的指令快3倍靠软件延时实现精确延时的程序需要调整。3.1.2 STC12C5A60S2 系列单片机简介 STC12C5A60S2/AD/PWM 系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S,即25万次/秒),针对电机控制,强干扰场合。2 l 增强型 8051 CPU,1T,单时钟/机器周期,指令代码完全兼容传统8051 l 工作电压: STC12C5A60S2 系列工作电压: 5.5V - 3.5V(5V单片机) STC12LE5A60S2 系列工作电压: 3.6V - 2.2V(3V单片机) l 工作频率范围:035MHz,相当于普通8051的 0420MHz l 用户应用程序空间 8K /16K / 20K / 32K / 40K / 48K / 52K / 60K / 62K 字节. l 片上集成1280字节 RAM l 通用I/O口(36/40/44个),复位后为:准双向口/弱上拉(普通8051传统I/O口) 可设置成四种模式:准双向口/弱上拉,强推挽/强上拉,仅为输入/高阻,开漏每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过120mA l ISP(在系统可编程)/ IAP(在应用可编程),无需专用编程器,无需专用仿真器可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片 l 有EEPROM功能(STC12C5A62S2/AD/PWM无内部EEPROM) l 看门狗 l 内部集成MAX810专用复位电路(外部晶体12M以下时,复位脚可直接 1K电阻到地) l 外部掉电检测电路: 在P4.6口有一个低压门槛比较器5V单片机为1.33V,误差为5%,3.3V 单片机为1.31V,误差为3% l 时钟源:外部高精度晶体/时钟,内部R/C振荡器(温漂为5% 到10% 以内)用户在下载用户程序时,可选择是使用内部R/C 振荡器还是外部晶体/ 时钟常温下内部R/C 振荡器频率为:5.0V 单片机为: 11MHz 17MHz3.3V 单片机为: 8MHz 12MHz精度要求不高时,可选择使用内部时钟,但因为有制造误差和温漂,以实际测试为准 l 共4个16位定时器两个与传统8051兼容的定时器/计数器,16位定时器T0和T1,没有定时器2,但有独立波特率发生器做串行通讯的波特率发生器,再加上2路PCA模块可再实现2个16位定时器 l 3个时钟输出口,可由T0的溢出在P3.4/T0输出时钟,可由T1的溢出在P3.5/T1输出时钟,独立波特率发生器可以在P1.0口输出时钟 l 外部中断I/O口7路,传统的下降沿中断或低电平触发中断,并新增支持上升沿中断的PCA模块,Power Down模式可由外部中断唤醒,INT0/P3.2,INT1/P3.3,T0/P3.4, T1/P3.5, RxD/P3.0,CCP0/P1.3(也可通过寄存器设置到P4.2), CCP1/P1.4(也可通过寄存器设置到P4.3) l PWM(2路)/ PCA(可编程计数器阵列,2路)- 也可用来当2路D/A使用- 也可用来再实现2个定时器- 也可用来再实现2个外部中断(上升沿中断/下降沿中断均可分别或同时支持) lA/D转换, 10位精度ADC,共8路,转换速度可达250K/S(每秒钟25万次) l 通用全双工异步串行口(UART),由于STC12系列是高速的8051,可再用定时器或PCA软件实现多串口 l STC12C5A60S2系列有双串口,后缀有S2标志的才有双串口,RxD2/P1.2(可通过寄存器设置到P4.2),TxD2/P1.3(可通过寄存器设置到P4.3) l 工作温度范围:-40 +85(工业级) / 0 75(商业级) l 封装:LQFP-48, LQFP-44, PDIP-40, PLCC-44, QFN-40 I/O口不够时,可用2到3根普通I/O口线外接74HC164/165/595(均可级联)来扩展I/O口,还可用A/D做按键扫描来节省I/O口,或用双CPU,三线通信,还多了串口。3.1.3 STC12C5A60S2 系列单片机的内部结构与信号引脚STC12C5A60S2系列单片机的内部结构框图如图3所示。STC12C5A60S2单片机中包含中央处理器(CPU)、程序存储器(Flash)、数据存储器(SRAM)、定时/计数器、UART串口、串口2、I/O接口、高速A/D转换、SPI接口、PCA、看门狗及片内R/C振荡器和外部晶体振荡电路等模块。 STC12C5A60S2系列单片机几乎包含了数据采集和控制中所需的所有单元模块,可称得上一个片上系统。图3 STC12C5A60S2系列内部结构框图 STC12C5A60S2系列单片机管脚如图4所示。图4 STC12C5A60S2系列单片机管脚图 STC12C5A60S2系列(有第二串口,有A/D转换,有PWM/PCA功能,有内部EEPROM) l由P4SW寄存器设置(NA/P4.4,ALE/P4.5,EX_LVD/P4.6)三个端口的第二功能NA/P4.4: 0,复位后P4SW.4 = 0,NA/P4.4脚是弱上拉,无任何功能 1,通过设置P4SW.4 = 1,将NA/P4.4脚设置成I/O口(P4.4)ALE/P4.5:0,复位后P4SW.5=0,ALE/P4.5脚是ALE信号,只有在用MOVX指令访问片外扩展器件时才有信号输出 1,通过设置P4SW.5 = 1,将ALE/P4.5脚设置成I/O口(P4.5)EX_LVD/P4.6: 0,复位后P4SW.6=0,EX_LVD/P4.6是外部低压检测脚,可使用 查询方式或设置成中断来检测 1,通过设置P4SW.6 = 1将EX_LVD/P4.6脚设置成I/O口(P4.6) l在ISP烧录程序时设置RST/P4.7的第二功能RST/P4.7在ISP烧录程序时选择是复位脚还是P4.7口,如设置成P4.7口,必须使用外部时钟。 l由AUXR1寄存器设置(PCA/PWM/SPI/UART2)是在P1口还是在P4口PCA_P4: 0,复位后AUXR1.6 = 0,PCA/PWM在P1口 1,通过设置AUXR1.6 = 1,将PCA/PWM从P1口切换到P4口SPI_P4:0,复位后AUXR1.5 = 0,SPI在P1口 1,通过设置AUXR1.5 = 1,将SPI从P1口切换到P4口S2_P4: 0,复位后AUXR1.4 = 0,UART2/串口2在P1口(仅针对双串口单片机 有效) 1,通过设置AUXR1.4=1,将UART2/串口2从P1口切换到P4口(仅针对双串口单片机有效)3.2 STC12C5A60S2系列单片机的A/D转换器 本设计无需外加A/D转换,使用的单片机内置A/D接口,音频信号可直接送入单片机进行数据采集和预处理。STC12C5A60S2系列单片机ADC(A/D转换器)的结构如图5所示。图5 STC12C5A60S2系列单片机ADC(A/D转换器)结构图 当AUXR.1/ADRJ = 0时,A/D转换结果寄存器格式如下: 当AUXR.1/ADRJ = 1时,A/D转换结果寄存器格式如下: STC12C5A60S2系列单片机ADC由多路选择开关、比较器、逐次比较寄存器、10位DAC、转换结果寄存器(ADC_RES和ADC_RESL)以及ADC_CONTR构成。 STC12C5A60S2系列单片机的ADC是逐次比较型ADC。逐次比较型ADC由一个比较器和D/A转换器构成,通过逐次比较逻辑,从最高位(MSB)开始,顺序地对每一输入电压与内置D/A转换器输出进行比较,经过多次比较,使转换所得的数字量逐次逼近输入模拟量对应值。逐次比较型A/D转换器具有速度高,功耗低等优点。 从上图可以看出,通过模拟多路开关,将通过ADC07的模拟量输入送给比较器。用数/模转换器(DAC)转换的模拟量与本次输入的模拟量通过比较器进行比较,将比较结果保存到逐次比较器,并通过逐次比较寄存器输出转换结果。A/D转换结束后,最终的转换结果保存到ADC转换结果寄存器ADC_RES和ADC_RESL,同时,置位ADC控制寄存器ADC_CONTR中的A/D转换结束标志位ADC_FLAG,以供程序查询或发出中断申请。模拟通道的选择控制由ADC控制寄存器ADC_CONTR中的CHS2 CHS0确定。ADC的转换速度由ADC控制寄存器中的SPEED1和SPEED0确定。在使用ADC之前,应先给ADC上电,也就是置位ADC控制寄存器中的ADC_POWER位。 当ADRJ=0时,如果取10位结果,则按下面公式计算:10-bit A/D Conversion Result:(ADC_RES7:0, ADC_RESL1:0) = 1024 xVin/Vcc (1) 当ADRJ=0时,如果取8位结果,按下面公式计算:8-bit A/D Conversion Result:(ADC_RES7:0)= 256 x Vin/Vcc (2) 当ADRJ=1时,如果取10位结果,则按下面公式计算:10-bit A/D Conversion Result:(ADC_RES1:0, ADC_RESL7:0) = 1024 xVin/Vcc (3) 式中,Vin为模拟输入通道输入电压,Vcc为单片机实际工作电压,用单片机工作电压作为模拟参考电压。3.3 频谱显示单元 由STC12C5A60S2单片机计算得到的频谱值将显示于LCD1604。3.3.1 LCD显示的基本原理 l字符的显示 用LCD显示一个字符时比较复杂,因为一个字符由68或88点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。 ll汉字的显示 汉字的显示一般采用图形的方式,事先从微机中提取要显示的汉字的点阵码(一般用字模提取软件),每个汉字占32B,分左右两半,各占16B,左边为1、3、5右边为2、4、6根据在LCD上开始显示的行列号及每行的列数可找出显示RAM对应的地址,设立光标,送上要显示的汉字的第一字节,光标位置加1,送第二个字节,换行按列对齐,送第三个字节直到32B显示完就可以LCD上得到一个完整汉字。3.3.2 LCD1604简介 字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,16*4,20*2和40*2行等的模块。一般1604字符型液晶显示器实物如图6所示。图 6 1604字符型液晶显示器实物图3.3.3 LCD1604的基本参数、引脚功能及指令说明 LCD1604分为带背光和不带背光两种,带背光的比不带背光的厚,是否带背光在应用中并无差别。 lLCD1604主要技术参数: 显示容量:164个字符 芯片工作电压:4.55.5V 工作电流:2.0mA(5.0V) 模块最佳工作电压:5.0V 字符尺寸:2.954.35(WH)mm l引脚功能说明 1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表1所示。表1引脚接口说明表编号符号引脚说明编号符号引脚说明1GND电源地9D2数据2VCC电源正极10D3数据3V0显示偏压11D4数据4RS数据命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15LED+背光源正极8D1数据16LED-背光源负极 第1脚:GND为地电源。 第2脚:VCC接5V正电源。 第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。 第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。 第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。 第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。 第714脚:D0D7为8位双向数据线。 第15脚:背光源正极。 第16脚:背光源负极。 LCD1604的指令说明 1604液晶模块内部的控制器共有11条控制指令,如表2所示。表2控制命令表序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式000000011/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L*6置功能00001DLNF*7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM)10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容 1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平) 指令1:清显示,指令码01H,光标复位到地址00H位置。 指令2:光标复位,光标返回到地址00H。 指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。 指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。 指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。 指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。 指令7:字符发生器RAM地址设置。 指令8:DDRAM地址设置。 指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。 指令10:写数据。 指令11:读数据。4 音频信号处理相关原理5 音频信号的处理主要涉及采样频率,样本大小,算法原理这几个方面。4.1 采样频率根据香农采样定理,一般采样频率至少应为所采样音频信号最高频率的2倍。由于人耳所能感受的频率为20HZ20KHZ,所以理论上采样频率最高取40KHZ。目前工业上广泛采用的采样频率大致有3种:44KHZ,16bit的声音称作CD音质;22KHZ,16bit的声音效果近似于立体声广播(FMSteroeo),称作广播音质;11KHZ,8bit的声音称作电话音质。为提高频谱计算的精度,拟采用40KHZ的采样频率和8bit的数据位长。4.2 样本大小 采样频率确定后,还需要确定样本值,即完成一次FFT运算所需要的采样点数。根据数字信号处理的基本原理,假设采样频率为Fs,采样点数为N,则FFT运算后,第n点所表示的频率为:Fn=(n1)Fs/N(1nN)。Fn若要精确到HZ,则需采样长度为(1/f)s的信号。提高频率分辨率,需增加采样点数,但这在一些实际应用中是不现实的,则采用有频率细分法,即采样比较短时间的信号,然后在后面补充一定数量的0,使其长度达到所需的点数,再作FFT,这在一定程度上能够提高频率分辨率。由于该系统是将音频信号频谱划分成14段显示,因此采用16点FFT运算,去掉第1点和第16点的结果即可。4.3 音频频谱算法原理 音频频谱值的计算采用快速傅里叶算法FFT(Fast Fourier Transform),为了提高显示器的刷新频率,系统每隔10ms读取16次A/D转换值,得到16点实数序列,紧接着完成16点FFT运算得到16点复数序列。4.3.1 倒位序及其优化算法 基2-FFT算法将原始数据倒位序存储,但运算后的结果则按正常顺序输出。原始采样数据放在数组float data1m16中,data1m0存放第1次读取的A/D转换值,data1m1存放第2次读取的A/D转换值,以此类推,可见第n(n=(b3b2b1b0)b)次读取的A/D转换值存放在data1mn。倒序操作后采样数据存储在float dataRe 16中,原来第n次读取值的A/D转换值存放在data1mn(n=(b0b1b2b3)b)中。根据样本大小在系统代码段中建立倒序表数组,采用查表方式实现快速倒序操作,与移位操作等方法相比,可明显提高运算速度。4.3.2 蝶形运算及其优化算法 根据基2-FFT算法,N点FFT运算可以分成log2N级,每一级都有N/2个蝶形运算,如图7所示: 图7 蝶形运算 蝶形运算公式的推导过程如下:X(k)=X(k)+X(k+b)W PN (4)X(k+b)=X(k)X(k+b)W PN (5)式中,WPN =cos(2P/N)jsin(2P/N)。 将式(4)化简成实部和虚部的形式,得到:XR(k)=XR(k)+XR(k+b)cos(2P/N)+X1(k+b)sin(2P/N) (6)X1(k)=XR(k+b)sin(2P/N)+X1(k+b)cos(2P/N) (7) 同理,式5)化简得到:XR(k+b)=XR(k)-XR(k+b)cos(2P/N)-X1(k+b)sin(2P/N) (8)X1(k+b)=X1(k)+XR(k+b)sin(2P/N)-X1(k+b)cos(2P/N) (9) 可见每个蝶形运算的输出都是由其输入值与某一正弦函数和余弦函数的乘积累加得到的。 由式(6)(9)编制正弦和余弦表,每次做蝶形运算时刻查表加快运算速度。 基2-FFT算法的基本思想 基2-FFT算法的基本思想是用3层循环完成全部N点FFT运算: l最里层循环处理单独的一个蝶形运算,采用查表方法实现乘法运算; l中间层循环完成每一级的N/2个蝶形运算 l最外层循环完成log2N级蝶形运算 由此可看出:在每一级中,最里层循环完成N/2L个蝶形运算;中间层循环控制最里层循环进行2L-1次运算。因此,中间层循环完成时,共进行(2L-1)N/2L=N/2个蝶形运算。实际上最里层和中间层循环完成了第L级计算,最外层则最终完成log2N级蝶形运算。 需要加以说明的数据是: l在第L级中,每个蝶形的两个输入端相距b=2L-1个点 l同一乘数对应这相邻间隔为2L个点的N/2L个蝶形 l第L级的2L-1个蝶形因子中的P,可表示为P=jx25-L,其中 j=0,1,2,.(2L-1-1)5 软件设计 音频系统主循环如图 8所示。上电系统初始化System_InitalN判断A/D使能标志= =1?Y周期性判定Cycle_Deal()FFT变换函数FFT( )频谱显示函数Spectrum_Show()计算功率谱Power Spectrum()功率谱显示函数Power Spectrum_Show()图 8 主程序流程图 l经过采样、AD转换完成后,清除AD使能标志,得到离散化的数字信号。 l调用周期判定函数,实现对信号周期性的分析。 l调用FFT变换函数,对离散信号的快速傅里叶变换,实现时域到频域的变换。 l显示输入信号的频谱。 l计算信号的功率谱及计算最大功率。 l显示信号的功率谱及最大功率。5.1 AD采样 理论分析:因12位的AD模块,故量化单位为1212,因频率分辨率f=100 Hz、FFT的子样本点数N=512,故采样频率fs=51 200 Hz(fsNf)、采样周期Ts=151 200 s(采样周期一采样时间+转换时间)。因振荡频率为737 MHz,故指令周期TCY=(1737)4=O5s。实际控制:转换时间为14个TAD(为正确AD转换,TAD=33333 ns)。所以,配置AD自动采样时间为6个TAD,AD转换时钟为16TCY,则AD转换总时间为0092 ms,采样频率为1087 kHz。AD模块工作在系统时钟源、自动转换模式,每完成一次转换进入一次中断。在程序中应该定义一个采样点数的结构体,用于存放AD采集到的数据,每个结构体内包括一个实部和一个虚部。在中断服务子程序中,由AD模块采集到的数字量存储到结构体的实部,共进行采样点数次转换,中断服务子程序的流程如图 9所示。A/D转换入口清除中断标志位从转换结果缓存器取出转换结果Y转换次数标志加1转换次数标志清0转换结果次数标志=采样点数N关A/D中断中断返回图 9 A/D中断服务子程序流程图5.2 周期判定 音频信号的频率分量不但多,而且不具周期性。测量周期可以在时域也可以在频域,但是由于频域测量周期性时要求某些频率点具有由规律的零点或接近零点出现,所以对于较为复杂的、频率分量较多且功率分布较均匀且低的信号就无法正确地分析其周期性。因此,对于信号的周期性判定,应该在对信号进行FFT变换之前,直接调用周期判断函数。周期性判定子程序流程图如图 10所示。周期性判定函数入口Y测定信号量标志位=0?Y判定信号量=0?判定信号量=4?周期加1Y更新信号量标志位更新信号量标志位清除周期有效性标志Y返回图 10 周期性判定子程序流程图5.3 FFT变换 由于直接傅里叶变换的计算量与子样本点数N的平方成正比,在N较大时,计算量太大,不适合在资源有限的嵌入式系统中实现。所以最常用基2 FFT算法,其主要思想是将N点直接傅里叶变换分解成多个较短的直接傅里叶变换,再利用旋转因子的周期性、对称性,在很大程度上节省了系统资源。MPLAB C30 C编译器内部提供了几乎全部的数字信号处理软件工具,通过DSPIC30F系列微处理器,只需调用Microchip公司提供的库函数,即可方便的实现数字信号处理。对于基2 FFT变换来说,其软件流程图如图 11所示。FFT函数入口初始化蝶形因子Twid Factor Init()数据预处理FFT变换FFT Complex IP( )倒序处理Bit Reverse Complex() ()转换结果次数标志=采样点数中断返回图 11 FFT变换软件流程图5.4 特征值提取对频域分析起决定作用的量包括采样频率、采样点数。通过FFT变换,得到离散化的幅度谱X(k),先将离散化的幅度值平方,再除于子样本点数N,就可得到该频率点对应的功率值(功率=X(k)*X(k)N)。6 过程分析及总结 l程序编译在Keil 2中创建一个New Project 选择单片机型号为STC12C5A60S2(这里需要下载STC库文件,更换uv2.cdb),保存此工程文件,鼠标右键点击Source Group 1,将写好的C程序(文件名为lcd)添加到此处,单击Keil 2菜单栏上的Translate Current File,即可进行C程序的编译,编译结果如图12。单击Build For Target设置生成HEX文件的要素。然后选择Build All Target即可生成HEX文件(文件名为音频处理系统),生成结果如图13。图 12 编译结果图 13 生成HEX文件 l程序烧录 由于要将程序写入单片机芯片中,故板子上留出了和下载线连接的接口JP0,P1.0作为A/D输入接口,单片机芯片插入电路后,用已经做好的下载线将PC电路板JP0接口相连接,在电脑上运行下载程序STC-ISP软件。 在软件界面上选择单片机型号为STC12C5A60S2,然后打开生成的.HEX文件,选择端口,这里为COM4,选择DOWNLOAD ,打开电源,即可进行程序烧录。图14 Step 1图15 Step 2图16 Step 3图17 Step 4图18 Step 5 l结果显示 HEX文件写入单片机后,将LCD1604的引脚插入单片机P0口插座(具体为LCD1604的D0-D7接单片机的P0-P7),晶振选择为22.1184M,MP3通过音频数据线接到单片机P1.0口,打开电源,在LCD上显示结果如图19。图19频谱显示这样,从MP3输出的音频信号在单片机中进行A/D转换和FFT运算后就以频谱的形式显示到液晶屏了。所用相关器件有:单片机最小系统板一块,LCD1604液晶屏一块,22.1184M晶振一个,MP3一部,音频数据线,电源线,下载线各一条。 l总结 在整个设计过程中,调试与仿真可是算是最重要与复杂的阶段了。在调试阶段,所要解决的问题牵扯到软、硬件各个方面。在完成硬件电路与软件设计之后,将设计好的程序通过下载器下载至单片机芯片中,在调试中发现了软件中存在的问题,比如,频谱在LCD1604上不能实时的更新显示,严重影响到数据的可读性,经过细心的检错与排错,反复的下载与测试,最终系统能较好地完成设计的要求。能够实现音频信号实时显示频谱。同时在设计功能实现的同时,充分考虑了整个系统的成本控制,以及最重要的系统稳定性。在系统涉及的各个领域,我还需要更进一步进行学习和探索,以使在以后的设计中能将自己的新鲜思维应用至实际操作中。 本设计频谱显示系统的应用面广,结构较为简单,系统易集成。无论是哪种音频信号,多数情况下能保证频谱显示的精度与速度。当音频信号频率较高是,普通的单片机运算速度相对较慢,延时比较厉害,需要使用增强型的单片机才能实时显示频谱。致谢在我毕业设计即将完成之际,回想四年的大学生涯,我的感慨颇多,学到了一身的本领,正打算展翅高飞的我,首先我由衷的感谢我的指导老师XX老师,在我的毕业设计完成过程中给予我无私的帮助设计得以顺利的完成。其次,还要感谢XX老师,X老师在百忙之中

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论