【GNURadio实验报告】实验3( 二 )


从时域角度来看 , 采样频率越高 , 意味着数字信号的波形也就越能够贴合原始的模拟信号 , 采集的也就越完整 。
从频域角度来看 , 采样率越高 , 代表着采集的带宽也就越大 , 囊括进来的原始信号的频率信息也就越完整 , 保留更多的声音细节 。
例如 , 邓紫棋唱歌的高音很好听 , 但是音调高=频率高 , 为了能够采集到这些高音 , 就需要拓宽采样率 。如下图所示 , 假如歌曲人声+乐器的“音调”范围在0-10kHz之间 , 而我最大的采样率能够达到48kHz(奈奎斯特:采样频率要大于最高频率的2倍) , 也就能够保留更多的声音细节 , 音质自然也就越高 。
但是 , 如下图所示 , 当某个音的音调太高 , 以至于超出了采样率的范围 , 那么这个音会跑到屏幕之外吗?不会 , 它会被采样“窗口”右边的边界“弹回来” , 由原来的“高音”被扭曲称了“低音” , 这个现象叫做混叠 。
(引用自知乎文章《什么是混叠》的这张gif动图可以很好的展示发生混叠的这一过程)
(二)【Wav File 】的采样率含义
【Wav File 】的用途是从波形文件(.wav等)里面读取数据 , 形成数据流 。
以.wav文件为例 , 这种文件会在文件头偏移位置18H处记录下该文件的原始采样率(图片引用自) , 也就是我们右键文件属性里面给出的这个信息 。这一数值存在的目的 , 是当我们使用网易云等音乐播放器播放音频文件时 , 音频文件会告诉播放器 , 应当以多少采样率来播放自己 。
但是!对于【Wav File 】模块而言 , wav文件里面的数据没有时间戳!这是什么意思?
在【Wav File 】模块看来 , 波形文件存储的数据 , 是这样的一串数组:
[1,2,3,4,5,4,3,2,1,2,3,4,5……]#仔细看 , 这是一串正弦波的幅度值
如果有时间戳的话 , 那波形文件存储的数据应该如下这样 , 类似于字幕文件 , 以键值对的形式记录每个数值(每句台词)应当出现的时间点:
[(0s,1),(0.1s,2),(0.3s,3),(0.4s,4),(0.5s,5)……]#以键值对形式存储数据
然而 , wav文件仅仅是以一维方式记录了波形的采样数据 , 即一连串的幅度值 。播放器选择以什么样的速率去播放这串数据流 , 必然会影响音频播放的流速(例如语速变快) 。但丢失波形信息了吗?没有 , 因为wav文件存储的每个数据都被播放出来了 , 只不过播放得快/慢了一点 。
当我们使用【Audio Sink】模块分别以16kHz、48kHz(文件原始采样率)、96kHz去播放这段音乐 , 语速分别会像蜗牛一样、正常、非常快且声音尖锐 , 但声音细节并没有丢失 。
(三)【 】的采样率含义
【 】数据流模块 。该模块从1个向量中提取数据并输出 。下图所示的输出数据为 。
如下图所示 , 使用【QT GUI Time Sink】时域示波器来播放这串数据 。将该示波器的采样频率 Rate设为10 , 即1秒内读取10个点 。
结果如图 , 数字0-9在时间轴上依次排列开来 , 数字9的点恰好出现在0.9s处 , 下一个数字0刚好在1s处 , 表明这串数字正在以10Hz的速率被读取输出 。