FFT在单片机上的实现.docx

上传人:b****8 文档编号:9477578 上传时间:2023-02-04 格式:DOCX 页数:32 大小:678.15KB
下载 相关 举报
FFT在单片机上的实现.docx_第1页
第1页 / 共32页
FFT在单片机上的实现.docx_第2页
第2页 / 共32页
FFT在单片机上的实现.docx_第3页
第3页 / 共32页
FFT在单片机上的实现.docx_第4页
第4页 / 共32页
FFT在单片机上的实现.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

FFT在单片机上的实现.docx

《FFT在单片机上的实现.docx》由会员分享,可在线阅读,更多相关《FFT在单片机上的实现.docx(32页珍藏版)》请在冰豆网上搜索。

FFT在单片机上的实现.docx

FFT在单片机上的实现

FFT在单片机上的实现

摘要

音频信号分析仪是一种可广泛见于各种音响、调音和录音设备上的,能实时地采样及分析输入的音频信号的频谱,并将其显示在显示屏上的设备,使人在聆听音乐时能对音乐的高低频能有直观的了解。

本文所介绍的即是这样一个音频信号分析系统。

系统的硬件由信号调理、控制处理器、显示模块三部分组成。

信号调理电路使信号可输入300mV~3V的交流音频信号。

这里只对单路信号处理:

当电压较低时使用LM324运放获得增益,对超过12800Hz的信号进行滤波处理。

另外设置输出音频接口以便监听。

控制处理器采用51内核1T单片机STC12C60A5S2,晶振频率为。

该单片机自带8路10位高速ADC,这里只用1路ADC的高8位。

对信号连续采32个点进行浮点型FFT运算。

一次完整采样的时间为,最高采样频率为25600Hz,分辨频率为800Hz~12800Hz,分16级。

显示部分主体为1602液晶显示屏,其具有2行×16列的8×5点显示点阵。

16分频谱将分别以柱高形式显示在显示屏上。

程序中设置了频率下落效果以使观感更好。

另设置了对比度调节电阻,使屏幕对比度可调。

关键词:

FFT单片机音频频谱

^

THEREALIZATIONOFFFTINTHEMICROCONTROALER

ABSTRACT

Audiosignalanalyzerisakindofdevicewhichcanbewidelyfoundinvariousofaudio,mixingandrecordingdevices,andcansamplingandanalysisofthespectrumoftheinputhaveanintuitiveaudiosignalanddisplaysitonthedisplayinreal-time,peoplecanarelisteningtoMusicformusicwhenhighfrequencyunderstanding.Whatpresentedinthisarticleisjustsuchanaudiosignalanalysissystem.Thehardwareofthesystemareformedwiththreeparts:

thesignalconditioner,thecontrolprocessor and thedisplaymodule.

Signalconditioningcircuitmakesthesignalof300mV~3VACaudiosignalavailableforinputting.Inthissystem,weonlyprocesswithsingle-channelsignal:

WhenthevoltageislowerthesystemusesLM324opamptogainvoltage,andastosignalsmorethan12800Hzitfiltersthem.Inadditionthesystemsetsanoutputaudiointerfaceformonitoring.

Thecontrolprocessorofthesystemisthe51cores1TMCUSTC12C60A5S2,withcrystalfrequency.Thedevicecomeswith8-channel&10-bithigh-speedADC,whereonlyonechannelADChigh8.Thesignalcollected32pointsinconsecutivefloating-pointFFToperation.Acompletesamplingtimeis,themaximumsamplingfrequencyis25600Hz,andthedistinguishfrequencyis800Hz~12800Hz,with16levels.

Themaindisplaysectionis1602LCDscreen,whichhas2rows×16columns-8×5dotdisplaymatrix.16pointstothecolumnheightspectrumwillbedisplayedonthedisplay.Theprocessofsettingofthefrequencydropintheperceptionofbettereffect.Thereisalsocontrastadjustmentresistor,whichmakesthescreencontrastadjustable.

#

KEYWORDS:

FFT,MCU,AUDIOSPECTRUM

 

]

~

第1章绪论

§研究的背景及意义

§1.1.1课题研究背景

在家庭影院、卡拉OK等音响系统中,实时显示音乐信号的频谱将为音响系统增不少色彩。

目前实际生产的音响系统产品,大多采用以下两种方法实现音频频谱显示:

一是利用硬件滤波器和A/D转换器;二是利用单片机或DSP处理频谱显示。

前者实现简单,但硬件成本高;后者软件和硬件实现都较复杂。

§1.1.2课题研究意义

目前,大多数音频信号处理仪不但体积大而且价格贵,在一些特殊方面难以普及使用,而嵌入式系统分析仪具有小巧可靠的特点,所以开发基于特殊功能单片机的音频信号分析仪器是语音识别的基础,具有很好的现实意义。

§课题发展的状况

早期专业的音频分析仪种类很少,在做音频测量时一般是利用万用电表、频率计、示波器及频谱仪等组合成一套音频测试系统。

这种测试系统中间环节多,各环节之间接口匹配较为困难,使用起来比较麻烦,测量结果往往也不精确。

传统的频谱分析仪的前端电路是一定带宽内可调谐的接收机,输入信号经变频器变频后由低通滤器输出,滤波输出作为垂直分量,频率作为水平分量,在示波器屏幕上绘出坐标图,就是输入信号的频谱图。

由于变频器可以达到很宽的频率,例如30Hz-30GHz,与外部混频器配合,可扩展到100GHz以上,频谱分析仪是频率覆盖最宽的测量仪器之一。

无论测量连续信号或调制信号,频谱分析仪都是很理想的测量工具。

但是,传统的频谱分析仪也有明显的缺点,它只能测量频率的幅度,缺少相位信息,因此属于标量仪器而不是矢量仪器。

近年来出现的音频分析仪器也与仪器的主流发展趋势一致,朝着高度集成化、智能化的方向发展,这些仪器集成了复杂音频信号发生装置、功率放大装置等,具备了一些初步的图形化分析功能,使用户很容易组建音频测量系统。

基于快速傅里叶变换(FFT)的现代频谱分析仪,通过傅里叶运算将被测信号分解成分立的频率分量,达到与传统频谱分析仪同样的结果,。

这种新型的频谱分析仪采用数字方法直接由模拟/数字转换器(ADC)对输入信号取样,再经FFT处理后获得频谱分布图。

 

在这种频谱分析仪中,为获得良好的仪器线性度和高分辨率,对信号进行数据采集时ADC的取样率最少等于输入信号最高频率的两倍,亦即频率上限是100MHz的实时频谱分析仪需要ADC有200MS/S的取样率。

目前半导体工艺水平可制成分辨率8位和取样率4GS/S的ADC或者分辨率12位和取样率800MS/S的ADC,亦即,原理上仪器可达到2GHz的带宽,为了扩展频率上限,可在ADC前端增加下变频器,本振采用数字调谐振荡器。

这种混合式的频谱分析仪可扩展到几GHz以下的频段使用。

§设计任务

1、完成信号电压调理电路和硬件的连接电路的设计。

制作出硬件实物。

2、ADC模块能正确采集到音频的完整波形,并保证一定的精度。

3、学习频谱分析和傅里叶变换有关原理,使用FFT算法分析出当前音频的频谱。

4、设计显示程序,使显示屏能实时地、以柱状图的形式将音频频谱显示出来,并有一定的美观效果。

 

第2章系统方案设计

§系统方案设计

图2-1系统总体方案

系统由信号调理电路、数模转换模块、主控制器、显示部件组成。

信号调理电路主要负责对音频信号的电压进行变换,使其电压变化能正确地被数模转换模块采集。

对信号的滤波处理也在这里进行。

ADC模块将连续变化的电压值转化为单片机可识别的离散数字量。

主控制器对采集的数据处理得到信号频谱,并控制显示屏将频谱实时显示出来。

由于是对模拟信号的实时采集分析,本系统除了可应用于数码音乐播放器的音频谱显示,还可连接麦克风显示分析环境或人声音频谱。

§系统硬件的选择

§2.2.1处理器的比较与选择

鉴于本次设计的学习目的,处理器选择最易操作的51内核的单片机。

传统8051单片机以12个晶振周期作为一个机器周期,处理速度慢,内存较小,且在用到ADC时需要与ADC芯片通讯花费时间,因此舍弃传统8051单片机。

升级版的51内核单片机有STC12系列和Cygnal的C8051F系列待选。

其中后者被誉为51系列最快单片机,内部有最高12位高速ADC和最高4K的RAM。

但这款单片机价格较贵且仅有贴片形式的封装,调试困难。

STC的12系列单片机同样有较快的处理速度,内部有最高10位高速ADC和1280字节RAM。

考虑到本次设计目的为普通的频谱分析器,且液晶显示屏整体刷新速度有100ms的瓶颈限制,这里采用双排插针封装的STC12C560S2单片机作为处理器。

晶振使用单片机最高允许的晶振。

§2.2.2采样模块的确定

由于单片机自带ADC转换模块,可以直接使用。

内部ADC模块的采样速度高达250K/S,远高于音频最高频率20KHz的二倍。

使用内部ADC模块还可以省去通信、存储等使用外部ADC芯片时的繁琐操作。

因此确定使用单片机内部ADC模块作为采样模块。

§2.2.3显示器件的比较和选择

常见的单片机操作的8位显示屏有1602和12864两种,均为单色显示屏。

前者是分块显示的显示屏。

每格块的像素点为8×5,共2行16列。

后者12864为128×64个像素点的整块点阵显示屏,用于显示图形十分方便,但每次更新图形都需要整屏刷新,需要传输的数据量较大。

综合考虑,采用1602作为显示设备。

利用同列的两个显示块显示一个变化高度的亮柱来表示一个频率分量的幅值大小。

 

第3章系统硬件设计

§单片机STC12C5A60S2

§3.1.1单片机STC12C5A60S2功能简介

1.增强型8051CPU,单时钟/机器周期,指令代码完全兼容传统8051

2.工作电压:

STC12C5A60S2系列工作电压:

-(5V单片机)

3.工作频率范围:

0~35MHz,相当于普通8051的0~420MHz

4.用户应用程序空间8K/16K/20K/32K/40K/48K/52K/60K/62K

5.片上集成1280字节RAM

6.通用I/O口(36/40/44个),复位后为:

准双向口/弱上拉(普通8051传统I/O口)可设置成四种模式:

准双向口/弱上拉,强上拉,仅为输入/高阻,开漏上拉,仅为输入/高阻,开漏上拉,仅为输入/高阻,每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过120mA

7.ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器可通过串口()直接下载用户程序。

8.有EEPROM功能(STC12C5A62S2/AD/PWM无内部EEPROM)

9.看门狗

10.内部集成MAX810专用复位电路(外部晶体12M以下时,复位脚可直接1K电阻到地)

11.外部掉电检测电路:

在口有一个低压门槛比较器5V单片机为,误差为±5%,单片机为,误差为±3%

12.时钟源:

外部高精度晶体/时钟,内部R/C振荡器(温漂为±5%到±10%以内)用户在下载用户程序时,可选择是使用内部R/C振荡器还是外部晶体/时钟常温下内部R/C振荡器频率为:

单片机为:

11MHz~17MHz单片机为:

8MHz~12MHz。

精度要求不高时,可选择使用内部时钟,但因为有制造误差和温漂,以实际测试为准。

13.共4个16位定时器,两个与传统8051兼容的定时器/计数器,16位定时器T0和T1,没有定时器2,但有独立波特率发生器做串行通讯的波特率发生器,再加上2路PCA模块可再实现2个16位定时器

14.3个时钟输出口,可由T0的溢出在T0输出时钟,可由T1的溢出在T1输出时钟,独立波特率发生器可以在口输出时钟

15.外部中断I/O口7路,传统的下降沿中断或低电平触发中断,并新增支持上升沿中断的PCA模块。

16.PWM(2路)/PCA(可编程计数器阵列,2路)也可用来当2路D/A使用,也可用来再实现2个定时器,也可用来再实现2个外部中断(上升沿中断/下降沿中断均可分别或同时支持)

17.A/D转换,10位精度ADC,共8路,转换速度可达250K/S

18.通用全双工异步串行口(UART),由于STC12系列是高速的8051,可再用定时器或PCA软件

19.STC12C5A60S2系列有双串口,后缀有S2标志的才有双串口,RxD2/(可通过寄存器设置到,TxD2/(可通过寄存器设置到

20.工作温度范围:

-40~+85℃(工业级)/0~75℃(商业级)

21.封装:

PDIP-40

§3.1.2单片机STC12C5A60S2引脚图

图3-1STC12C5A60S2引脚图

§3.1.2单片机的最小系统

STC12C60S2最高支持33MHz的晶振,为使单片机处理数据的速度尽量快,这里选用的晶振。

当外部晶振大于10MHz时,单片机需要外部复位电路。

用RC上电复位的的方式,电容为10uF、电阻为10

时,电容的放电时间为ms,大于RST脚高电平复位时间。

单片机的串口通过PL-2303芯片与电脑USB连接用来下载程序。

这里省略PL-2303芯片的连接图。

方便起见,单片机供电直接使用USB的+5V供电。

下面是单片机的最小系统连接图:

图3-2STC12C5A60S2最小系统

§显示屏LCD1602

§3.2.1LCD1602简介

1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:

阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。

读CGROM地址的时候,先读左边那列,再读上面那行,如:

感叹号!

的ASCII为0x21,字母B的ASCII为0x42(前面加0x表示十六进制)。

另外还有8个可由用户自定义的5X8的字符发生器CGRAM。

用户可以将自定义图形写入其中。

其他特性为:

+5V电压,对比度可调,内含复位电路,有80字节显示数据存储器DDRAM,提供各种控制命令,如:

清屏、字符闪烁、光标闪烁、显示移位等多种功能。

§3.2.2LCD1602的硬件连接

图3-3单片机与1602液晶的连接

§信号调理电路

§3.3.1LM324电压增益与偏移电路

本系统的信号输入来自数字音频播放器如PC机的声卡、MP3,或有源麦克风等有源设备,单声道输入。

输入信号为均值为0,幅值为

V~

V的交流信号,由

输入。

而进入单片机ADC模块的电压

要求0~

为USB供电的+5V。

因此必须进行电压调理。

整个系统采用单电源供电,所以无法对交流信号直接放大,必须先偏移再放大。

该过程可由一个运算放大器来完成。

运放选用LM324N,连线图如下:

图3-4电压增益与偏移电路

这是一个同向加法电路,由模拟电路相关知识易得:

其中

的输入信号,电压范围为

V

V,

为偏移电压,由稳压二极管产生,其作用是使均值为0的交流音频信号偏移使全为正值。

电阻

~

的值的计算过程略,这里只对图中的数值进行验证。

输入电压为

V时,应将放大倍数取最大,可变电阻

取0,得:

V

的输入电压为

V时,应将放大倍数取最小,可变电阻

,得:

V

可见电阻如图取值,当音频信号较大和较小时,都可以通过调节可变电阻R2来使采样达到较好的效果。

为使稳压管正常工作,稳压管的阴极应接在高于稳压管反向导通电压的位置。

即有:

带入上式,得

,取

§3.3.2滤波电路

如果由于原信号频带很宽或采样频率

选得太低,则频域中相邻周期的波形就会发生重叠,从而引起误差。

这种现象称频率混叠,简称频混。

如果一个信号的频谱具有无限的带宽,则不论如何选择采样频率

,频混误差都不可避免。

然而这种信号并不多见,比较常见的是一个有用的低频信号混进了一个高频的噪声信号。

因此在采样之前先用低通滤波器滤去高频噪声,这种低通滤波器称为抗混淆滤波器。

在现代数字式分析系统中,它已被列为基本组成环节。

抗混淆滤波器的截止频率选为

由采样定理可知:

对一个频率为

的有限带宽连续信号进行采样,只有当采样频率

时,其离散傅里叶变换才不会发生频率混淆,因而只有用这样采样的点才能得到离散信号的频谱。

人可感知的音频中多不超过12KHz,为了凸显低频声音信号的频谱变化,本系统只分析12KHz以下的音频信号。

使用RC滤波器,当

,截止频率

时,电容值

为:

取10nF。

另外,单片机ADC输入的标准电路还要求加一个截止频率为的滤波器。

总体滤波电路图如下:

图3-5滤波电路

第4章系统软件设计

§系统软件总体设计

该系统的软件需要完成控制ADC模块采样信号、对采集的数据计算、控制液晶显示屏显示三个任务。

三个任务理论上应顺序运行,上一个任务完成后生成的数据交予下一个任务继续处理。

但信号采样需要严格控制采样时间间隔,数据计算任务处理速度很快,而液晶显示的控制又会间隔较长时间。

因此三个部分不能一个接一个运行。

程序还包括了各模块的初始化,总程序流程图如下:

图4-1系统程序流程总图

本程序采用中断的方式,将需要定时的采样程序和显示程序分别放在两个中断服务程序中,而主程序一直等待采样完成处理数据。

数据的连接使用了两个全局变量数组。

这样就使三个子程序在运行时,采样程序的采样时间间隔有了保障,而后两个子程序又始终有数据可以处理。

§系统软件详细设计

§4.2.1系统的准备和初始化

Code代码段准备了一个32个元素的nxd数组和一个8×8的User数组。

定义如下:

unsignedcharcodenxd[32]=

{0,16,8,24,4,20,12,28,2,18,10,26,6,22,14,30,

1,17,9,25,5,21,13,29,3,19,11,27,7,23,15,31};

unsignedcharcodeUser[8][8]=

{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F},

{0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F},

{0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x1F},

{0x00,0x00,0x00,0x00,0x1F,0x1F,0x1F,0x1F},

{0x00,0x00,0x00,0x1F,0x1F,0x1F,0x1F,0x1F},

{0x00,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F},

{0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F},

{0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F}};

nxd数组用于将32个采样点重新排列,其值为采样点重排的顺序。

这将在下面的§4.2.3蝶形运算的FFT算法中详细介绍。

User二维数组为液晶显示块的8种显示点阵的分布,这将在下面的§显示子程序中详细介绍。

main()函数的开始是一些初始化程序,这包括液晶显示屏的初始化、显示屏CGRAM的写入、ADC的初始化和定时器0的初始化。

代码和注释如下:

LcdInt();delay(15);

8a4.2.2A

12C5A

4.2.3

一步再将X(4m+i),i=0,1,2,3分解成4个N42序列,迭代r次后完成计算,整个算法的复杂度减少为O(Nlog4N)

上诉结论可以推广到N点的一般情况,规律是第一列只有一种类型的蝶形运算,系数是,以后每列的蝶形类型,比前一列增加一倍,到第是N/2个蝶形类型,系数是,共N/2个。

由后向前每推进一列,则用上述系数中偶数序号的那一半,例如第列的系数则为参加蝶形运算的两个数据点的间距,则是最末一级最大,其值为N/2,向前每推进一列,间距减少一半。

对N=2L点FFT,共需L级蝶形运算,每级有N/2个蝶形运算组成,蝶形运算两节点的距离:

2L-1(L表示级数)每个蝶形运算有一次复乘和2次复加。

图4-48点FFT运算示意图

本程序每次采样32个点,进行32点FFT运算。

限于篇幅不再画出32点FFT运算图。

程序用排好的32个序号来重排采集到的32个信号点。

运算时的复数用结构体存储和表示。

具体运算程序见附录。

§4.2.4显示子程序

由信号处理的相关知识知,非周期信号的频谱图为连续函数。

声音信号显然为非周期信号,但在单片机内,频谱只能表示为离散且成倍的频率分量。

本系统将每个频谱分量以亮柱的高度形式显示在显示屏上。

LCD1602一般只能显示CGROM内的160个字符,不能显示图形。

要显示不同高度的立柱,只能编辑CGRAM。

在程序初始化阶段,已将CGRAM的0x10~0x17的用户自定义位置写入如下图形:

图4-51602字符空间(字库)图

当需要在第p列显示高为l的亮柱时,先对LCD写入p列第二行的地址,若l<8,就在这个位置调取CGRAM中0x10~0x16对应高度的图形(当l=0时调取0x20显示空格),若l≥8,则在p列第二行显示0x17全亮图后,在第p列第一行显示高度为l-8的亮柱。

这样就实现了以亮柱高度直观展示频率分量幅值的目的。

为了获得更好的视觉感受,显示程序还加入了频谱亮柱缓慢下落的动画效果。

做法为:

当本次计算的的频率幅值大于等于上次的幅值时,立即更新此幅值以待显示。

若本次计算的频率幅值小于上次的幅值时,只将上次的幅值减1显示。

如此就会使得亮柱可以突然升高,却只能缓慢下落。

这符合了人对突然增强的事件敏感而对突然减弱的事件不敏感的感受。

由LCD1602的资料知,控制一个亮块需要有写地址和写数据两步操作,且间隔的典型时间为5ms。

整屏刷新一次需要经历

若计算出16个频率分量幅值后统一显示,则信号采集后至少要经过320ms才能看到结果,实时性太差。

本程序利用定时器,采用了显示与频谱计算工作交替处理的方式,即:

在两次写1602的等待过程中进行采样和计算工作,每次对1602的同列两个亮块操作时,取到的数据都

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

当前位置:首页 > 人文社科 > 设计艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1