51DIY音乐频谱显示

以前,每当看到家里的音箱功放上的几排小灯,随着播放的音乐如波浪般跳跃,或者在电脑上打开千千静听这个音乐播放软件时,看到那动感的频谱跟随音乐节奏优美的舞动着时,不禁思绪万千,要是自己某天能亲手用普通的单片机 DIY 这么一个东东,那将是多么有成就感的事情,至少对我们电子爱好者来说,这是许多人曾经梦想过的。伴随音箱里传来的美妙音乐,原本只能“听”的音乐,现在却还能“看”,给人带来视觉上的炫酷享受。

本文将带领你动手探究其中的奥秘,让我们给音乐赋予一个完美的视听极限。

一、理论篇

(一)理论基础概述

1)什么是频谱?什么是频谱显示?

说到“频谱”这个词,它好像是一种很神秘的东西,究竟什么是“频谱”?这便要从波形本身的来源说起。我们知道,一切声音都是由振动产生的。声音之所以千变万化各不相同,是因为它们的振动各不相同。看看琵琶,吉他或者其他的弦类乐器,可以发现它的每一根琴弦的直径都是不一样的。琴弦越细,音调也就越高。反之则越低。显然粗的弦就不如细的弦振动得快或者说是振动的频率高。产生音调高低的不同,就是由于振动的频率不同。很显然频率越高,音高也就越高。

频率的单位是赫兹(简写为 Hz),赫兹 (1857-1894),是德国物理学家,他发现了电磁波,为了纪念他,人们用它的名字来做为频率的单位。所谓的一赫兹,就是一秒钟振动一次。那么 440Hz 呢,当然就是每秒振动 440 次,这个声音就是音乐中的标准 A 音,是乐器定音的标准。而钢琴中央 C 的频率则是 261.63Hz。

我们人的耳朵能够听到的频率范围,是 20Hz 到 20000Hz。低于这个频率范围的声音叫次声波,而高于这个频率范围的声音叫做超声波。所以我们能听到的音乐的频率,即都在人耳可听到的这个范围之内,约从 20Hz 到 20KHz。

比如,下面的表格中是我们常见的一些人声的基频范围
• 男低音 80-320Hz
• 男中音 96-387Hz
• 男高音 122-488Hz
• 女低音 145-580Hz
• 女高音 259-1034Hz

根据傅立叶分析,任何声音可以分解为数个甚至无限个正弦波,而它们往往又包含有无数多的谐波分量。而它们又往往是时刻在变化着。所以一个声音的构成其实是很复杂的。将声音的频率分量绘制成曲线,就形成了频谱。

对频谱进行分析的仪器就是频谱分析仪,早期频谱仪都是模拟分析的。频谱仪的原理就是将声音以信号通过一系列不同中心频率的模拟带通滤波器。每个带通滤波器相当于一个共振电路,其特性由中心频率(步进的)、频带宽度及响应时间表示。在声音信号通过滤波器后,经过平方检波器,并进行平均之后,在每个频率上测定所传输的功率,从而得到信号的频谱。然而,传统的频谱仪受到滤波器性能的制约,因为模拟电路本身的特性所局限,滤波器的带宽和响应时间成反比,也就是说模拟滤波器的频率分辨力与时间分解能力之间存在矛盾。因为频谱仪所测量的往往都是非稳态声,一般来说,都是使用若干个滤波器来覆盖整个频率范围,并将信号同时并联地输入到这些滤波器上去。或者使用中心频率能够从低到高连续变化的滤波器。

随着科学技术的不断进步,现在我们所使用的基本不再是那些笨重而不准确的模拟仪器的频谱仪,取而代之的是基于处理器的软件分析法。它分析的数据来源其实是经过了 ADC(模数转换器件)转换后得出的数字信号,所以频谱仪软件所测量的信号准确度,很大程度取决于数模转换电路的性能。比起模拟滤波器,数字滤波器应该要更加迅速和精确。

2) 什么是均衡器和音乐频谱显示?在我们欣赏音乐的过程中有什么样的作用?

对于录音棚等专业级别的音乐制作来说,通常都需要对录制的音频信号进行频谱分析来辅助音频的加工制作。当然对于我们普通的爱好者来说,不需要那么精确的频谱分析,我们更多的是用来略显音乐节奏,美化环境,增添气氛。于是,大多数的音乐播放软件(如图一),手机,mp3,高档的音箱设备等,都有了音乐频谱显示。

在这里插入图片描述

图一 千千静听播放音乐时的频谱显示

当高级组合音响在工作时,你可以看到其中有一个部件上有一排一、二十个高高低低的推式调纽按频率高低自左而右排列,显示一种频率分布图;或者是还有一、二十个高高低低的光柱在不断地上下跳,时而中间起一个高峰,时而并排突起两、三个高峰,而且与音乐的高低和强度同步,高音越是强,高峰就偏右边;低音越强,高峰就偏左边,这就是均衡器及其联结的频谱显示。有时,也用一排色彩不同的条纹来显示,条纹的色彩亮度随声音的强弱而同步地改变。

我们知道,实际上每一种音乐声,包括哪怕是一个人的独唱,一件乐器的独奏,都包括了一系列从低到高不同频率的声波,更不要说是乐队演奏了。如果声音中低频成分多,听起来就较厚实;如果是高音成分多,听起来就比较明亮。有的人喜欢听低音成分多些,有些人喜欢听高音成分多些,各不相同。因此,以前的收录机上就有一个调节高低音的旋钮。把旋钮指向高音部位,高音就比较强;把旋钮指向低音部位,低音就比较强,这就是一个简单的均衡器

好的声音效果,其各段频率成分应该有一定的比例,录音的时候,录音师操作调音台就可以使各段频率的成分得到调整。由于各种乐器的基频高低是不同的,所以,也可以使各种乐器之间的声音比例得到调整,常见的是把频率由低至高分成 5 段或 7 段、10 段或 15 段,有经验的录音师或音乐家能听出哪里(哪个频率段)“空”了,即这个频段弱。哪里“鼓了个包”,即这个频段过强。通过均衡器可以把这些予以弥补。又因为每个人对音乐中频率分布的欣赏标准是不同的,因此,各位录音师掌握的尺度也不同,显示出各自的风格。

录音师也可以在录音时做些“手脚”,例如,有的录音机低音部分不太好,于是在录音时就把低音部分加强,这样,在这台录音机上播放时,低音就得到了补尝,因此,你播放购买收录机随机奉送的“试机带”时,听起来常常总是非常动人的,但在播放正常的磁带时,往往就不行了。所以在正式试验整机和评比设备、磁带、唱片时,是不准用均衡器而且要用标准试机带的。由于每个人的欣赏和爱好的不同,有人喜欢低音“浓”些,有人则崇尚自然,也有人有时要强调某种乐器。因此在高级的放音设备上也有均衡器,可以根据每人不同的爱好去随心所欲地调整频率响应。同时,这也可以弥补录音带质量上的某些缺陷,例如,除了频响不平衡外,可以抑制某个频段上突出的噪声等。

3) 制作音乐频谱显示需要用到什么基础知识

首先,我们采用是基于微处理器的软件分析法,微处理器是本制作的核心部分,因此,选择一个合适的性能与配置的微处理器是关键,我选择增强型的 8051 单片机便能够满足本次制作的要求。软件上的分析法核心是快速傅立叶算法,简称 FFT。

4) 什么是 FFT?

FFT(Fast Fourier Transform)即离散傅立叶变换的快速算法。在数字信号处理中常常需要用到离散傅立叶变换(DFT),以获取信号的频域特征。尽管传统的 DFT 算法能够获取信号频域特征,但是算法计算量大,耗时长,且要求相当大的内存,不利于计算机实时对信号进行处理,限制了DFT 的应用。直到 Cooley& Tukey 在1965 年提出的快速离散傅立叶计算方法被发现,快速傅立叶变换算法才在实际的工程中得到广泛应用。需要强调的是,FFT 并不是一种新的频域特征获取方式,而是 DFT 的一种快速实现算法,可用来将一个信号从时域变换到频域。多数的复杂信号在进行频域变换之后,变换的目的实际上是从频域里来看同一个信号,从而容易分析出其信号的特性。这也是很多信号分析采用 FFT 变换的一个重要原因。另外,
FFT 能将一个信号的频谱提取出来,这在频谱分析方面也是经常使用的。

5) 如何使用 FFT?

首先,我们用 ADC 去采样一个模拟信号之后,使之变为数字信号。根据采样定理,因音频信号的最高频率约为 20Khz,若 adc 的采样频率设置为 40Khz,既有采样频率大于信号频率的两倍,就能基本满足要求。其次,将采样得到的数字信号,送入 FFT 进行变换处理。通常,若我们取 N 个采样点,经过 FFT 运算之后,就可以得到 N 个点的 FFT 结果。但通常为了方便进行 FFT 运算,通常 N 取 2 的整数次
方。设 Fs 为 ADC 的采样频率,N 为傅立叶变换的点数.则有最小分辨频率 f=Fs/N,因此频谱显示的最低频率就是 f Hz,以后每向右移一个点,频率值将增加 f Hz. 由于 FFT 结果的对称性,通常只使用前 N/2 个采样点的结果。

简而言之,使用 A/D 转换器对输入的音频信号进行采样以后,经过 FFT 变换,然后取某些频率项的幅值,量化显示,驱动 LED 点阵,点亮相应的 LED 灯。

关于采样点数的选择,要根据自己选择单片机的实际资源情况。比如STC12A32S2 单片机,只有 1280B RAM,我们取 64 点的 FFT 就可以满足要求,还达到更好的视觉效果,更高的刷新频率,以及为以后软件扩展留下余地。

(二)电路原理图

  1. 几个电路设计亮点

双音频插孔设计,不影响正常的音频输出,省去了音频分线器;

去掉音频输入处理的电平移动电路,简化电路,并加入软自动增益控制,实现自动根据音乐的声音大小调节显示幅度;

采用食人鱼 LED 来显示,不仅特别的亮,而且比用普通的草帽状 LED 效果更美,耐电流也更大,还省去了部分限流电阻,食人鱼 LED 有四个引脚,便于手工焊接,大量减少跳线

在这里插入图片描述

图二 MCU 部分的原理图

在这里插入图片描述

图三 点阵驱动电路图

(三)编程思路

  1. 在主函数中,单片机通过 AD 对音频数据采样,然后存放到数据缓存区进行预处理,完成 AD 滤波处理,自动增益控制信息扫描以及其他信息处理。接着,将缓存区数据送入 快速傅立叶变换(FFT)处理子函数进行运算。处理完后,从缓存区取出运算结果,根据得到幅值计算出点阵的显示数据,并存储到显示缓存区。

  2. 在中断函数中,根据显示缓冲区的内容对点阵显示屏进行实时刷新点亮。

(四) 程序流程图

在这里插入图片描述

在这里插入图片描述

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ReCclay

如果觉得不错,不妨请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值