【Day17-音讯】浅谈声音资料的基本分析方式——时间域与频率域

如同我们在Day14的时候提到的最常出现的四种资料类型,而前两天我们稍微谈了一下文字资料的基本处理,那今天就接着来将一下声音资料的处理吧

声音资料

其实我觉得声音资料是几种资料类型里面对人来说最有挖掘价值的,毕竟其他不论是影像还是文字,人类都有办法很快的从中获取到大概的资讯,但声音是唯一一个必须要经过时间才能理解里面资讯的内容。

声音原始的样子——随着时间变化的波形

如果你有使用过一些录音的软件的话,那你会看过类似这条的东西吧

这其实就要回归到我们是怎麽听到不同的声音的这件事情上,声音的本质是空气介质疏密波的震动,因为对耳膜产生不同的压力进而听到了声音。所以上面这张图其实就是随着不同时间音量大小的波形图。

使用声音处理套件读取与分析声音——librosa

在处理分析声音资料的时候根据需求会有许多不同的套件,这边我推荐的是librosa,它包含了许多处理声音很好用的工具

使用librosa读取声音档案

在读取声音档案的时候,除了声音本身的sound以外,还有一个sr表示取样频率(sample rate),这个东西会影响到我们是如何解读一系列的数据点是如何表示不同的声音的?

import librosa
sound, sr = librosa.load("sample.wav") # 使用.load读取档案
print('Sampling rate={} Hz.'.format(sr))

输出:

Sampling rate=22050 Hz.
显示声音波形图
import librosa.display
librosa.display.waveplot(sound,sr)

输出:

声音的不同成分——使用STFT取出声音频谱

我们知道Do和Re听起来是不同的,那它们又差在哪里呢?其实就是声音不同的频率高低而已,那声音的频率其实可以透过傅立叶分析的方式来得到,这边不会深入讨论背後的数学原理,有兴趣的朋友可以自己去找看看。

在我们把声音从时间域转换成频率域的时候,我们图形的纵轴就会变成了不同的频率,因此这个频谱图的意义就表示这个声音在不同时间时候的频率分布。

使用stft转换成频率域

from matplotlib import pyplot as plt
sound_stft = librosa.stft(sound) # stft转换出来的是复数
sound_stft_db = librosa.amplitude_to_db(abs(sound_stft)) # 因此需要取绝对值来表示强度
plt.figure(figsize=(20, 5))
librosa.display.specshow(sound_stft_db, sr=sr, x_axis='time', y_axis='hz')
plt.colorbar()

输出:

也可以把复数的频谱转换回来

signal_new = librosa.istft(sound_stft)
librosa.display.waveplot(signal_new,sr)


<<:  Day17 - BST(Delete-Case3)

>>:  每秒几十万上下 - 1分K 当冲策略是否有搞头 ?!

Day30|就这样持续下去吧!GO~

终於~让我熬到最後一天了! 虽然订阅的人数最後还是屈指可数 但看着镜子中的自己体态变好,心情真的也跟...

拥有这些知识就不会迷失在浩瀚的宇宙

开启虚幻世界的大门 虚拟技术地端前哨站,首先登场的是VirtualBox。此篇,会简单讲述虚拟技术V...

环境建置(2)

昨日安装完Anaconda後,今天要继续安装需要的lib, (1)先用管理者权限打开Anaconda...

【第13天】训练模型-优化器(Optimizer)

摘要 优化器演算法比较 1.1 浅谈优化器演算法 1.2 设计实验 1.3 函数设定 1.4 纪录学...

[Day9]参观乙太链与区块链

那我们就实际上网去看一下乙太链跟区块链长怎麽样吧! 参观乙太链 这边分别是最近新增的区块以及最近完...