找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

[嵌入式/ARM] 音乐频率幅度彩灯指示器的设计与实现

[复制链接]
admin 发表于 2013-3-24 17:29:16 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
摘  要: 关键词: STM32F103单片机;FFT算法;音乐信号;幅度;频率;LED灯
       本文主要讨论了音乐频率幅度彩灯指示器的设计与制作,设定音量等级为32级,频率等级为15级,每一频率等级下的音量等级又分为级;以嵌入式单片机STM32F103作为主控制核心,以音乐信号自动增益、电压抬高、真有效值测量、LCD显示、按键等作为辅助硬件电路;采用快速傅里叶变换FFT(Fast Fourier Transform)理论对音乐信号进行详细的频域分析和处理。在此方案下完成音乐频率幅度彩灯指示器的设计后,以信号发生器产生的标准正弦波、方波以及手机播放的任意MP3音乐(即音频信号)作为输入信号进行现场测试,实验结果验证了设计题目的全部基础和提高要求,具有较好的音乐信号频率等级和幅度等级指示效果。
1 理论分析和计算
1.1 快速傅里叶变换原理

     快速傅里叶变换(FFT)是1965年由J.W.库利和T.W.图基提出的[1-3]计算离散傅里叶变换(DFT)的一种快速算法,其实质是根据离散傅氏变换的奇、偶、虚、实等特性进行改进的一种DFT算法。计算有限长信号序列x(n)的离散傅里叶变换时,其正变换式如下所示:

20121107050713957454054.gif
2 系统硬件设计
2.1 总体设计

     所设计系统的总体原理图如图1所示。其中,ARM控制器采用ST公司生产的STM32F103芯片,内有2个12 bit的A/D转换器、7个定时器、9个通信接口,最高工作频率72 MHz,足以满足设计需求;音频信号的峰-峰值范围为0~Vmax,Vmax的大小根据需要设定,频率范围为50 Hz~10 kHz。为了避免输入信号过小和保证输入信号的幅值为正,需要对其进行自动增益和抬高电压预处理,预处理后的音频信号的峰-峰值范围约为0~3 V,然后经过A/D采样,快速傅里叶(FFT)变换,得到不同的等级的频率和音量,经过串口输出;点阵电路大小为32×64,采用AT89S51单片机对其控制[4-6]。在LED阵列中,其中前15列表示15个频率等级,第16列表示总音量等级;另采用一行16个LED灯,用其亮度指示每个频段下音量的强弱。整体电路采用模块化设计,简单易懂,易于调试和实现系统要求。
    20121107050714004324055.gif
   2.2 主要单元电路
     采用STM32F103 ARM芯片,配置外部5 V的直流电源和晶振电路就可以构成单片机最小控制系统电路,限于篇幅,其最小系统电路图忽略,文中主要介绍关键的硬件单元电路,即音频信号预处理电路和电压真有效测量电路,限于篇幅,仅介绍电路组成及功能,硬件单元电路图忽略。
2.2.1 音频信号预处理电路
     音频信号预处理电路主要包含两个部分:电压自动增益电路、电压抬高电路。由于输入音频信号的电压范围(峰-峰值)为0~5 V,当音频信号电压的峰-峰值比较小时,信号的幅值较小,受外界信号干扰大,容易引起测量不准,所以要采用放大电路。设计中选用OP2365组成三级增益可调的放大电路,电压增益可调范围分为四档:10 mV~200 mV,70 mV~750 mV,200 mV~2 V和300 mV~5 V。当输入音频信号电压值较小时,就选择增益较大的一档进行调节;当输入音频信号电压值较大时,就不需要再对信号放大。另外,音频信号采样时,要求输入信号的电压范围不能有负值,并保证被转换电压的幅值范围在STM32F103芯片自带的A/D转换器的处理范围内,这就需要对输入信号电压负值进行抬高处理,保证信号电压为正值。经过抬高处理后,正弦信号的负峰值点刚好和横轴相交,抬高电压值vtg=3.3 V。
2.2.2 真有效值电压检测电路
     交流电压的真有效值是通过电路对输入交流电压进行“平方-求平均值-开平方”的运算而得到的。设计中采用AD736和OP07组成真有效值电压检测电路。AD736是经过激光修正的单片精密真有效值AC/DC转换器,准确度较高、频率特性较好。OP07芯片是一种低噪声、非斩波稳零的双极性运算放大器集成电路,具有低失调、高开环增益的特性。实际测试中,该电路测量正弦波电压的综合误差不超过±3%。假设输入信号的峰值为vmax,则有效值 20121107050714035574056.gif ,检测出峰值后,按照比例进行放大。
3 系统软件设计
       系统软件采用模块化设计,分为主程序和子程序两大部分。主控制芯片采用STM32F103,由于处理器速度较快,所以采用C语言编程,方便简单。子程序包括A/D采样、周期性判断、FFT变换、延时、LED驱动、LCD显示等。系统程序流程图如图2所示,限于篇幅,文中仅介绍FFT变换子程序。系统通过模式选择按键进入不同的功能。对频率的指示采用两种频率等级计算方法:线性方法和对数方法。线性方法是在最低频率点和最大频率点之间进行15等分,得到各个频率点及其对应的幅度,然后根据这些频点计算出中心频率点及其对应的幅度;对数方式是在最低频率点和最大频率点之间采用对数函数计算15个频率等级点及其对应的幅度。同时,系统也采用了按键模式来控制各个频段对应的音量强弱。系统输入信号自动增益的档位、按键模式、对各个频点下的幅度及总的幅度会显示在LCD液晶屏上。
    20121107050714082454057.gif
   4 测试方法与结果分析
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-12-26 11:15 , Processed in 0.059022 second(s), 10 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表