嵌入式技术
今天给大伙们带来一款开发板,名字叫STM32F746DISCO,是云汉社区送给我评测的,我用它做了个音频信号分析器。
其实,我在云汉还有另一个昵称,叫做MC老徐,就是业余时间喜欢玩点freestyle,比如瞎弹或者瞎唱个调调。
当然,这些调调都是我现场即兴瞎编的。比如这个萤火虫板子的这个测试http://www.ickey.cc/e/video/detail/107.html
你会发现2分40秒时候,背景音乐竟然从《千本樱》变成了《极乐净土》,然后4分00秒又变成了《aLIEz》
我老婆说我唱歌虽然习惯性跑调,但是嗓音很有磁性。
我觉得老婆说得对。。。。。
但是“磁性”这个词语太玄幻,我们应该用一个更准确的标准来定义这个“磁性”。我觉得我这种特殊的嗓音是来自喉腔管道引入的高次谐波失真。
“高次谐波失真”这个词可能太严肃了,在音乐界,这种由音腔引起的谐波失真还有个更美妙的名字,叫做泛音。比如我们夸某某乐器的声音好听,常会夸它泛音丰富。
当然,我不能这么恬不知耻地,平白无故地自己夸自己“泛音丰富”。
作为一个有节操有底线的物理博士,我需要用科学方法来自证清白。
为了证明自己嗓音真的是“泛音丰富”,我记录了自己用“啊”音唱小字一组C音(约260赫兹)时候的数据,然后用快速傅里叶算法分析了频谱。
这里非常感谢数学家和物理学家傅里叶为我们提供的好工具。
我终于把信号分析器做出来了。结果表明,我的泛音确实很丰富。除了基频260赫兹附近的根音,泛音一直延伸到了一千赫兹以上。
程序代码是这样的。
先定义(快速傅里叶变换)FFT时候需要用到的参数。
然后定义绘图坐标轴的位置和颜色
接着绘制按钮
麦克风收到的音频信号存入sn数组变量
把sn数组画一下,这个是波形图
最后做快速傅里叶变换,从时域空间转换为频域空间,并画个频谱图。
接着,我把程序编译出一个bin文件,并烧写到了板子上。
为了验证这个项目在各频段下的稳定性,我们要找个音准好一点的设备来做测试音源。
我们打开Adobe公司的专业音频处理软件Audition,先新建一段空音轨。
然后填充标准440Hz正弦波,这个是模拟小字一组的A音。这个A音正是《小星星》开头的那个“索索嘟嘟啦啦嗦”里的那个“嘟”音,唱歌时候经常会用到的。
然后让电脑的扬声器播放这段声音。板子的麦克捕获这段声音并做FFT。
我们看看分析结果。可以从图里发现440Hz那儿功率比较大。
然后,我们再生成一段1千赫兹正弦波的声音。
同样地,扬声器播放这个声音。板子的麦克风捕获,并做FFT。下图中的数据非常漂亮。
我们再试试更高的频率。生成一段3千赫兹的正弦波形。
同样的套路,电脑扬声器播放,然后板子采集并FFT。
分析结果仍然非常漂亮。很准确地捕获到3千赫兹那个信号。
如果声音更复杂一些呢,比如来个和弦。
我们以1千赫兹作为根音,做个复杂的和弦。
这次要发出来的声音复杂了。信号的波形图和频谱图是这样的。
扬声器发声。然后,板子麦克风采集并做FFT。下图是数据分析结果,很准,完全符合预期。
以上测试可以验证我们这个音频信号分析器的性能是正常的。
另外,我那个被测出来嗓音“泛音丰富”的结果,也真实有效。
全部0条评论
快来发表一下你的评论吧 !