基于FFT算法的声光三维显示装置
2020-04-22杨佩
杨佩
摘 要:设计了一种基于FFT算法的声光三维显示装置。该装置通过FFT快速傅里叶变换算法来对语音信号进行频谱分析,并将频谱分析结果以三维视觉效果呈现。该装置可以大大提高传统二维频谱显示器的显示能力和观察效果,为使用者带来立体化的动态视听效果,可广泛应用于舞台表演、教育教学和大众娱乐等领域。
关键词:FFT算法; 声光; 三维显示; 语音信号; 频谱分析
中图分类号: TP391.4
文献标志码: A
Abstract:This paper studies an acousto-optic three-dimensional display device. The device uses Fast Fourier Transform (FFT) algorithm to analyze the spectrum of speech signals, and presents the spectrum analysis results in three-dimensional visual effect. This device can greatly improve the display ability and observation effect compared with traditional two-dimensional spectrum display equipment, and bring people a full range of audio-visual enjoyment. Also, it can be widely used in stage performances, education, teaching and public entertainment and other fields.
Key words:FFT algorithm; Acousto-optic; Three-dimensional display; Speech signals; Spectrum analysis
0 引言
FFT(快速傅里叶变换)算法可以对音频信号进行时域到频域的转化,该方法可以方便地对音频信号进行定量分析。对语音信号进行这样的频谱分析可以获得其各个频率成分的幅值分布和能量分布,从而得到语音信号主要幅度和能量分布的频域值。本文设计的声光三维显示装置通过对音频信号的频谱分析,可以以图示化的方式显示语音信号,声音越强,显示的幅度也越大。该装置可应用于舞台表演、教学演示、大众娱乐等方面需要使用的声光设备,并可扩展应用至音乐品质分析、语音识别、信号源输出信号品质分析等领域的相关研究[1-2]。
随着科学技术的不断发展,3D电影已逐渐被市场接受,超级英雄电影《复仇者联盟4》中大气磅礴的 3D视觉效果让人身临其境,给观影者带来震撼的视觉效果和强烈的真实感。但目前用于语音频谱分析的显示设备甚至3D电影的显示屏幕通常采用的都是X,Y坐标二维图形的平面显示形式,其只能在单一的二维平面上播放显示内容,且观众仅能在屏幕前方观看显示内容,立体感差、视听互动效果不强。随着实际需求的不断变化及视听多元化要求的提高,人们对于可视化设备的显示效果也有了更高的追求。本文设计的声光三维显示装置具有立体的三维显示效果,采用普通的观看方法就能给人以强烈的立体感,并可以在任意角度观看语音信号频谱变化情况。语音播放加三维立体显示效果将便于人们更详细的观察语音信号的频谱分析结果,并大大提高人们的视听享受体验效果[3]。
本文设计的声光三维显示装置是基于FFT算法来对语音信号进行频谱分析的,FFT算法是将离散傅立叶变换算法进行高效化、计算机化的一种改进算法,它可以将一个时域信号快速变换到频域,采用该算法能大大减少原离散傅里叶变换的计算量,并节省计算机所需计算存储空间,对于同一音频信号,对其采样的点数越多,FFT算法提高计算效率和减小存储量的效果就越突出。因此采用FFT算法可以对大数据量的语音信号进行高效的频谱分析,是本声光三维显示装置的核心运算方法。
FFT算法之所以能够大大节省计算量,其原因是通过奇偶分解运算及复数的折半引理,使得将长序列的 DFT可以仅由若干个底层的分解值来组合表示。它很好的利用了离散傅里叶变换的虚、实、奇、偶特性,巧妙的对DFT算法改进,获得了极佳的计算效果。FFT是一种DFT的高效算法,两者的运算结果完全相同,均为序列X[m]的频谱,但FFT的运算速度比DFT要快得多,是适用于计算机程序运行的低计算成本方法。
2 三维显示模块的硬件设计
目前用于舞台表演、视听娱乐、教育教学等领域的显示装置通常为二维显示屏,其只能在单一的二维平面上播放显示内容,且观众仅能在屏幕前方观看显示内容,立体感差、视听互动效果不强。如果将应用于视听领域中的二维显示屏升级为三维显示屏,它将能在视觉上给人以强烈的立体感,提升视听效果,且能够在360度内的任意方向进行观看,带给人们具有未来感的3D科技体验。
2.1 三维显示屏的工作原理
本设计中的三维显示装置为由若干个单位3D光立方体LED模块组成的大小可控的显示屏。该3D显示屏通过单片机控制显示屏中不同LED的点亮位置和顺序,来呈现所要显示的内容。
在控制原理方面,采用的是利用视觉暂留的动态扫描技术。人眼的扫描速度慢,具有视觉暂留现象,当设置合适的显示屏扫描时间時,就可使一系列低维静态画面呈现多维整体显示效果,从而最终实现所要显示的画面内容。每一个低维静态画面可称为一帧图像,当播放帧速高于24帧/秒时,人眼将无法区分各个低维图像的时间间隔,此时看起来将是相对静止的稳定画面。该动态扫描显示方法极大减少了LED灯的同时点亮个数,具有重大的节能意义,是目前被广为使用的主流显示技术[4]。
2.2 控制平台
为了便于外部接口灵活配置的需求,我们采用三维立方体模块式的结构形式,控制平台采用的是微型单片机开发系统。该系统搭载了运行速度比较快速的新型单片机STC15F2K60S2,除此之外,控制平台还应用了一些其他的装置,例如:SD卡,数据锁存器74HC573等,因此,它可以开发复杂的逻辑控制系统,本声光三维显示系统的控制平台使用微型单片机处理系统是最优的选择[5]。
2.3 三维光立方显示模块
所设计的声光三维显示系统由若干个的三维光立方模块组成。当使用8*8*8的光立方模块时,每个模块都有8层平二维显示平面,每层二维平面又由8*8个像素灯点组成,一共包含512个LED像素点。制作时令每个LED灯之间都间隔一定距离,可以做到很好的通透性,從而利用立方体的空间特性,实现较好的3D显示效果。
对于单个三维光立方模块而言,将8层中每一层的64个LED灯阴极串接在一起,将与层垂直方向的8层中相同位置的8个LED灯的阳极串接在一起,阴极连三极管开关,三极管基极由单片机控制,并用程序控制其导通与否;阳极则连接锁存器,由8个74HC573锁存器进行通断控制。单个三维光立方模块的硬件电路结构图,如图5所示。
3D光立方模块的驱动扫描方式分为层扫描和列扫描两种方式。产生层扫描信号的是层驱动电路,单片机程序进行FFT运算后输出层扫描信号,由74HC138译码器译码,它控制层LED灯共阴极连接的三极管开关。3D光立方模块显示的三维图像可分解为8层子图像,每层图像相应的像素信息由列扫描电路发送到LED列线上,每层LED灯连接的8个74HC573锁存器进行数据处理,并控制将数据由74HC573传递给LED灯控制它们的亮灭。
3D光立方的扫描方式有两种可选方案:一种是完成每一层扫描后即输出一次信号;另一种是完成全部 8 层扫描后再输出信号。由于显示时要考虑很多重要因素,比如扫描的均匀性、连贯性以及人眼的视觉暂留效应,故第一种方案是最优选择。
另外,考虑到发光效果,我们要在扫描层前,先利用74HC573的锁定功能锁存控制值,当全面扫描完成后,再使能74HC573输出控制值。
2.4 音频解码输出模块
语音信号输出模块我们采用了两路输出信号的方式。有两种实现方案可供语音FFT计算选择:一种是语音信号计算模块再单独使用额外的DSP芯片控制,此时系统将为双CPU控制模式;另一种是语音信号计算模块仍使用原单片机控制和计算,此时系统仍为单CPU控制模式。由于双CPU模式接口程序复杂,且系统的总体成本也比较高,故此处采用单CPU模式,仅使用若干个双莲花音频接口来实现FFT计算和音乐播放的多重效果。
另外,系统中采用了SD卡来存储语音信号信息以解决音频数据量大的问题。为实现大数据量的读写和存储,系统使用SPI总线协议读取SD卡中的数据,并移植了FAT16文件系统辅助播放。当播放诸如音乐这样的语音信号时,先读取SD卡中的音乐文件数据,并将数据传输到RAM中,再依次传送给单片机控制模块进行FFT计算和显示。
3 软件设计
本系统采中的STC15单片机主要负责FFT算法处理、模式切换、三维光立方模块扫描以及显示功能,并由双莲花音频插头实现语音信号的音箱播放。系统上电运行后,单片机先执行各功能模块的初始化工作,并加载相应的程序数据,然后对语音信号进行采样和FFT运算。系统可同时实现语音信号播放、显示模式控制等功能,通过单片机程序中的算法对信号分析计算后,对光立方进行行列扫描驱动实现动态显示效果。控制程序的工作流程图如图6所示。
系统进行3D光立方模块的行列扫描时,其主要控制过程如下所示:
(1) 关闭74HC573的使能;
(2) 从第1层开始到第8层,逐层对光立方模块每层的64列分别进行赋值;
(3) 打开74HC573使能并输出数据;
(4) 使用译码器控制1到8层的层选通。
4 系统的硬件测试
4.1 各元件可靠性的测试
在系统制作之前,先利用常见的5 V充电宝供电来验证每个LED灯的好坏。验证时将充电宝的正负极接面包板的电源和地列,然后分别将LED的长脚(阳极)和短脚(阴极)跨插在面包板的插孔中,再在LED灯的一侧串接220欧姆的限流电阻,最后利用面包线将LED灯和电阻连接到面包板对应的电源和地列,观察LED是否能正常发光。这里要特别强调限流电阻阻值的计算方法,其两端电压为电源电压减去LED灯导通电压的差值,其理想电流应为令LED灯具有足够亮度的额定电流值,用限流电阻两端电压值除以其理想电流值,即可得到测试用限流电阻的阻值。如果不经计算随意选用限流电阻,当其阻值较大时,测试电路中电流将较小,将导致LED亮度低甚至不亮,使测试结果出现误判;当限流电阻阻值较小时,测试电路中电流将较大,如果电流值远超LED额定电流值,可能会导致LED灯被烧坏。
在实际焊接制作过程中,还应随时根据硬件仿真图检查各个元件的连接关系是否正确,检验具有不同极性的器件(如二极管、三极管)和集成电路芯片各引脚的连接位置和连接关系是否正确,排除错接、短接等情况。在完成整体电路各元件及连接关系的可靠性检查,并确认电路无误后,就可以进行下面的静态检测与测试环节了。
4.2 显示测试
先断开系统的信号输入端,仅打开系统的5 v电源开关,用万用表测量电路中各关键测试点的电压值和电流值,并判断这些电压值和电流值是否处于合理的设计值范围,排除短路、断路等异常情况。
当确定系统电路上电能够正常工作后,在系统电路的输入端接入语音信号,并观察3D光立方的FFT频谱显示效果,并用示波器接语音信号的输入端和单片机的信号输出端,观察输入、输出信号的波形,判断信号参数和电路性能指标是否符合设计要求和预设计算结果。如果发现3D光立方显示频谱有误,则应对电路故障进行深入分析并做出相应修改,直到排除故障令电路能够正确显示为止。很多情况下,3D光立方的频谱显示结果不正确,是因为外界噪声干扰叠加到输出信号上所致。
4.3 测试中的注意事项
(1) 要规范使用万用表等测量仪器的接地端,测量仪器的接地端需与电路系统的接地端共地使用。
(2) 为防止输入端的噪声干扰,信号输入引线最好采用屏蔽导线,屏蔽导线的外圈金属屏蔽层需接公共地线。另外,在高频系统中,还要注意消除导线和底板中分布电容和寄生电容的影响,要尽量使PCB板上各元件间的连线距离短且宽度大。当使用示波器测量电路参数时,应使用示波器的夹子探头连接测试点,来降低或消除分布电容的不利影响。
(3) 合理选择电路中的测量位置,认真观察并记录测试过程,包括测试条件、故障现象、测试数据、输出波形、信号相位等。当输出显示不合理或遇到电路故障时,要仔细分析原因,查找问题所在。
5 总结
基于我国如今越来越大的舞台娱乐、教育教学等商用声光设备市场,并考虑到满足人们不断提高的视听享受需求,本文研究设计了一种基于FFT算法的声光三维显示装置。该装置通过FFT快速傅里叶算法来对语音信号进行频谱分析,并将频谱分析结果以三维视觉效果呈现。该设备将可以大大提高传统二维频谱显示器的显示能力和观察效果,为使用者带来多层次的感官体验效果,这种新鲜的科技美学必将具有广泛的实际应用价值。
参考文献
[1] 陈学,徐建华,叶甜春,等. 基于FFT的微弱GPS信号捕获算法[J]. 微电子学与计算机,2010,27(3):98-101.
[2] 桑红石,高伟. 高效可配置浮点FFT处理器设计[J]. 微电子学与计算机,2012,29(4):36-40.
[3] 梁铭林. LED显示技术的应用[J]. 智能建筑,2010(3):42-45.
[4] 苏珊,肖英,李行杰. 基于STC单片机的8×8×8 LED光立方系统设计[J]. 吉首大学学报(自然科学版),2013,34(6):33-36.
[5] 王甲琛,高明成. 基于IAP15F2K61S2单片机的3D光立方设计[J]. 山东冶金,2014,36(6):77-78.
(收稿日期: 2019.09.29)