关于前端:网页js版音频数字信号处理H5录音特定频率信号的特征分析和识别提取

3次阅读

共计 2209 个字符,预计需要花费 6 分钟才能阅读完成。

音频数字信号处理 Audio DSP (Digital Signal Processing) 是一个简单又业余的话题,本文介绍的是如何从音频中实时剖析和辨认出特定频率信号的一种办法,对应的代码为可运行在浏览器中的 html5 网页版(可移植);可用于辨认环境中特定频率的声音、或噪声、乐器弹奏的音调。

在线测试:FFT 频域剖析 ECharts 频谱曲线图

900Hz 频率的摩尔斯电码声音频谱曲线,为本文的次要剖析对象,请见文末生成 LOVE 对应的电码音频文件,而后把文件拖入下面的这个在线测试页面,即可失去此图:

吉他 6 根空弦音频谱曲线:

一、网页中的音频数据源

H5 网页中获取音频数据的办法至多有三种:

  1. 通过网络申请下载失去音频文件二进制内容(xhrfetch
  2. 通过 input[type=file] 抉择文件,在用 FileReader 读取取得二进制内容
  3. 通过浏览器的 getUserMedia 接口拜访设施的麦克风,录制失去音频二进制内容

不同音频格式有不同的压缩编码方法,为了失去文件内的音频数据,咱们须要解码音频文件,失去音频的采样数据(PCM)才好进行下一步解决;.wav格局的文件解码简略,它是个别是由 wav 头 +pcm 数据组合而成的,间接去掉 wav 头即实现解码,其余文件可通过 AudioContextdecodeAudioData办法间接解码成 32 位 pcm 再转成 16 位 pcm。

得益于古代浏览器的 WebRTC 性能加持,网页也能实现丰盛的音视频交互,能够实现网页录音,实时采集环境中的声音失去 pcm 数据,GitHub Recorder 是一个功能丰富的 H5 网页录音开源库,能够不便的进行实时处理录音数据。

二、FFT:时域转频域

咱们失去音频的采样数据(PCM)后,能够将此数据按值的大小间接绘制进去,即可失去一个声音的波形,此波形为音频的时域波形:横坐标是工夫,纵坐标是采样值的大小,比方在 Audition 中显示如下图所示(生成此音频文件请见文末)。

在时域波形上,咱们能直观的晓得在某个工夫点是否有声音,和声音的大小,但不晓得这个声音是否是咱们须要的信号,还是其余杂音;数字信号剖析的重头戏出场了:FFT,疾速傅里叶变换。

通过 FFT 能够将单个时域波形分解成 N 个不同频率的波形,即时域信号变换成频域信号,N 取决于 fftSize 的大小,比方 fftSize=1024,将失去512 个频率重量;在 Audition 中能够十分直观的感触到频域信号的强度散布,如下图所示,900Hz 的信号十分亮(生成此音频文件请见文末)。

H5 js 版的 FFT 的实现有很多开源代码能够参考,或者间接应用浏览器提供的 AudioContextcreateAnalyser接口来进行频域数据变换;Recorder 库中的提供了 2 个 FFT 实现能够应用:extensions/lib.fft.jsdsp.lib.fft_exact.js,到上文中的在线测试中能够看到这两文件。

js 版的 FFT 变换操作也比较简单,Audition中用到的这个音频文件,在网页中通过变换后失去的频域数据,叠加绘制到一起即失去了文章结尾的第一张摩尔斯电码声音频谱曲线图,信号非常明显。

三、信号的特征分析

以文章结尾的“900Hz 频率的摩尔斯电码声音频谱曲线图”为例,咱们通过频谱剖析,能够直观的看到信号最强的频率波峰,能量十分集中,频率值扩散在 900Hz 左近,也就是说这段音频中信号的次要频率为 900Hz 左右,和理论生成此摩尔斯电码所应用的 900Hz 频率统一。

剖析失去了次要频率,咱们只关注这个次要频率的波形曲线,也能直观的看出和摩尔斯电码法则统一的特色:持续时间短的是滴(.),持续时间长的是嗒(-),嗒的长度是滴的 3 倍,滴嗒之间距离 1 个滴的长度,字符之间距离 3 个滴的长度(单词之间距离 7 个滴以上的长度)。

四、信号的辨认提取

剖析出信号的特色后,就有方法通过编写代码来进行信号的辨认和提取,仍旧是以上图为例,咱们来提取出外面蕴含的摩尔斯电码。

(1)过滤掉其余能量低的值,中只保留能量集中的几个频率

(2)程序代码中对这几个频率进行综合分析判断,每个波峰取和后面频率相差不大的频率当做无效波峰(这样可无效排除掉杂波烦扰),失去一条曲线

(3)依据曲线中的值的大小,较小的值全副当做 0,高的保留,最终转换失去断断续续的矩形波,有波峰的中央即为有信号,失去每个波峰的持续时间,即可辨认出滴 (.) 嗒(-),即为摩尔斯电码

Q: 为啥不必 PCM 的音量大小来直接判断信号?

A: 最初的矩形波看起来和时域的波形包络没有多大区别,这是因为录制的样本中没有比拟大的背景杂音烦扰;在没有杂音烦扰的状况下,间接用 PCM 的采样值(或音量)来提取信号也是可行的;但在有比拟大的烦扰的状况下(开端那段杂音),时域就很难辨别出是否是正确的信号,频域中分离出来的波形更能反映出本来的信号。

如果是要依据声音的频率来判断是什么信号,那就必须转到频域来辨认解决,比方乐器的音调,时域是齐全无奈辨认出是哪个调的。

附录

  • Recorder 用于 html5 录音:https://github.com/xiangyuecn/Recorder,网页中实时录制取得音频数据。
  • 趣味摩尔斯电码:小程序,微信版和字节抖音版,将文本 LOVE 转换成摩斯码并播放,录制失去上文中应用的摩尔斯电码音频;内置电码翻译性能,能够实时录制音频并解析出电码,本文所总结的内容即为其音频辨认成电码所应用的原理。

【完】

正文完
 0