拙网论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 233|回复: 0

离散傅立叶变换之音频播放与频谱显示

[复制链接]

949

主题

1001

帖子

3736

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3736
发表于 2018-7-9 11:28:09 | 显示全部楼层 |阅读模式
https://blog.csdn.net/orbit/article/details/44353051


  频谱和均衡器,几乎是媒体播放程序的必备物件,没有这两个功能的媒体播放程序会被认为不够专业,现在主流的播放器都具备这两个功能,foobar 2000的十八段均衡器就曾经让很多人着迷。我用Winamp播放音乐(AOL已经在20131220日停止了Winamp的支持),最早吸引我的原因就是播放界面上那个跳动的频谱,如图(1)所示。我一直想搞清楚这个实现原理是什么,直到我知道有离散傅立叶变换这个东西存在的时候才恍然大悟。
图(1winmap上跳动的频谱

       本篇先来说说频谱吧。既然是频谱,就一定和频率有关系吧?是的,那个跳动的频谱实际上就是当前播放的一小段片音频信息在频域上的功率分布。鼓声和弦乐的频率范围相差很大,当音乐中有震耳的鼓声时,频谱中中低频的部分就跳的很高,说明这部分频率的功率比较高。同样,当高亢的小提琴声音响起时,频谱中高频的部分就跳的很高,说明高频部分的功率比较高。正是因为这个关系,频谱总是和正在播放的音乐相映成趣
       要在播放器中显示跳动的频谱,就需要知道音频数据中各个频率对应的功率,常见的音频数据都是时域信号,需要转换成频域信号才能进行分析。在《听声音破解电话号码》一文中,我们介绍了离散傅立叶变换可以将时域的声音信号转换成频域的频率功率分布,并给出了相关的算法,这正是本篇要介绍的频谱显示的基础。
       《听声音破解电话号码》一文中给出的PowerSpectrumS()函数,可以将44100Hz采样率的音频信号经过2048点离散傅立叶变换后,可以得到1024个点的有效频率和功率分布(另外1024个点与之具有对称性),对应的频率映射范围是0Hz22050Hz。播放器软件通常有一个很小巧的界面,在这个界面上用1024个波段全部显示从022050Hz的频谱是不现实的,也完全没有必要,因为大部分人的耳朵听力范围在20Hz20KHz之间,不在此范围的频率可以忽略。一般频谱最多显示32个波段(我用的winamp 2.91 版本只有19个频谱波段),这就涉及到另一个问题,那就是如何从1024个频谱数据中选择32个用作频谱的显示。选取的原则是要选择有代表性的频率,两个波段的中心频率最好不要相差太小,可以是均匀选择,也可以是不均匀选择。可采用的方法很多,最简单的方法,就是每隔32个频率点选择一个数据,刚好选择32个点的功率值,然后映射到32个频谱波段上显示。44100Hz采样率的音频信号经过2048点离散傅立叶变换后,其频谱分辨率是3.90625Hz,每32个点的频域数据覆盖的频率宽度是125Hz。也就是说,这种方法每隔125Hz选择一个频率点,简单粗暴地丢弃了太多的数据,会使得跳动的频谱缺少一致的连贯性。
       本文介绍的方法是将1024个点分成32个波段,每个波段包含32个频率点。在每个波段内找到中心频率点,从中心频率点向左和向右均匀地各取两个频率点,加上中心频率点共采集5个频率点的值进行计算。计算的方法是给这5个点赋予不同的权重,中间点权重最高,向两边依次降低,然后计算5个点的加权平均值,将加权平均值作为这个波段的频谱功率映射到频谱上显示。这样计算出来的加权平均值更能反映这个125Hz宽的频率段的实际功率,从最终的频谱显示效果看,这种方法得到的频谱跳动起来有比较好的连贯性。UpdateSpectrum()函数就是这个算法的体现,对于sampleData参数给出的一段音频数据,首先调用PowerSpectrumS()函数得到这段音频的功率分布,然后按照BAND_COUNT常量对其分段,最后对每段的频域数据计算加权平均值。我们给这5个点分配的权重是:中央点0.5,紧邻中央点的两个点是0.15,最外边的两个点是0.1SpectrumWnd是频谱窗口对象,通过该对象SetBandLevel()函数将计算的结果传递给频谱窗口。
图(2)频谱显示演示窗口


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|抱朴守拙BBS

GMT+8, 2025-5-26 02:58 , Processed in 0.191400 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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