原理

音频的原理

把模拟信号转变成 数字信号,前者是连续的,后者离散的。因此有 DAC 和 ADC。
需要关注的三个指标,这三个指标决定音频的质量

  1. 比特率:表示经过编码(压缩)后的音频数据每秒钟需要用多少个比特来表示,单位常为 kbps。 这个数字越大音频质量越好,但是数据文件就越大。

  2. 响度和强度:声音的主观属性响度表示的是一个声音听来有多响的程度。响度主要随声音的强度而变化,但也受频率的影响。总的说,中频纯音听来比低频和高频纯音响一些。这个就是振幅。计算方式 20lg(amp1/基准振幅),基准振幅就是在声音最大的时候采用的振幅。

  3. 采样和采样率:采样是把连续的时间信号,变成离散的数字信号。采样率是指每秒钟采集多少个样本。采样率越高其质量越好,一般在底层是 48k 采样率,宽带电话是 16k,窄带是 8k。

Nyquist 采样定律:采样率大于或等于连续信号最高频率分量的 2 倍时,采样信号可以用来完美重构原始连续信号。

这句话的意思大概就是, 比如采样率是 16Khz, 那么频率只能达到 8kHz;如果是 48kHz 的采样率,那么频率可以达到 24kHz.

开源软件 audacity 的插件就是 ny 结尾的,里面用 lisp 语言写的,用于计算一些 rms、THD 等

视频编码

  1. 视频通过其中每一帧的图像表达信息;视频包含的音频可提供大量信息;视频通过图像的运动、场景的变换提供信息;
  2. 视频信号有 2 种

因此 YUV编码更常用。

RGB 和 YUV 之间可以转换。

视频编码的最主要目的是数据压缩,在传输过程中花费太多的带宽。
数据有冗余的,所以可以压缩

音视频

gb2QgK

封装格式(也叫容器),就是将已经编码压缩好的视频轨音频轨按照一定的格式放到一个文件中,也就是说仅仅是一个外壳,或者大家把它当成一个放视频轨和音频轨的文件夹也可以。说得通俗点,视频轨相当于饭,而音频轨相当于菜,封装格式就是一个碗,或者一个锅,用来盛放饭菜的容器。 下面是几种常用的 视频文件后缀类型 与其相对应的 封装格式。

视频编码格式, 比较常见 H264。音频编码常见的 aac,和 mp3。 AAC 压缩比高,音质更好。

关于 H264 压缩技术

Audio

最基础

验证数据用的是

影响声音质量的因素

评估标准

根据提供给算法的信息,语音质量测试算法可分为两大类

  1. 完全引用"(FR)
    算法可以访问并使用原始参考信号进行比较(即差异分析)。它可以比较参考信号的每个样本(说话端)与降级信号的每个对应样本(侦听器侧)。FR 测量可提供最高的精度和可重复性,但只能应用于实时网络中的专用测试(例如移动网络基准的驱动测试工具)

  2. "无参考"(NR)
    算法仅使用降级信号进行质量评估,并且没有原始参考信号的信息。NR 算法只是低准确性估计值,因为源引用的原发语音特征(例如男性或女性说话者、背景噪音、非语音)完全未知。NR 算法的常见变体甚至不分析解码的音频信号,而是对 IP 数据包级别上的数字位流进行分析。因此,测量仅限于传输流分析。

POLQA是最新的,其他都是小弟。
CzlEBt

Perceptual Evaluation of Speech Quality
PESQ 结合了 PSQM 和 PAMS 的优势,针对 VoIP 和混合的端到端应用作了改进,并针对 MOS 和 MOS-LQ 计算方法做了修改。
也是全参考测试算法

## first, install soundfile and pypesq
import soundfile as sf
from pypesq import pesq

ref, sr = sf.read("sine.wav")
deg, sr = sf.read("sine1.wav")
score = pesq(ref, deg, sr)

print(111,score)

得到的 score 分数就是MOS 的值

输出结果

4.5

计算方法

https://pypi.org/project/pesq/

并扩展到处理更高带宽的音频信号。进一步的改进针对时间调用信号的处理,具有许多延迟变化。
全参考算法,在对参考和测试信号的相应摘录进行时间对齐后,对语音信号进行采样分析 ,对于端到端的质量评估。

前面提到的都是全参考的, 无参考, 马上就来.看下面这个就是实际的应用.

FAD 一种新颖的,无参考的音乐增强算法评估指标


python -m frechet_audio_distance.compute_fad --background_stats stats/background_stats --test_stats stats/test1_stats
python -m frechet_audio_distance.compute_fad --background_stats stats/background_stats --test_stats stats/test2_stats

Video

PEVQ 还通过各种 KPI(包括 PSNR、失真指示器和唇部同步延迟)来量化视频信号中的异常。

psnr 是 “Peak Signal to Noise Ratio” 的缩写,即峰值信噪比,是一种评价图像的客观标准,它具有局限性,一般是用于最大值信号和背景噪音之间的一个工程项目。

PSNR 是最普遍,最广泛使用的评鉴画质的客观量测法,不过许多实验结果都显示,PSNR的分数无法和人眼看到的视觉品质完全一致,有可能 PSNR 较高者看起来反而比 PSNR 较低者差。这是因为人眼的视觉对于误差的敏感度并不是绝对的,其感知结果会受到许多因素的影响而产生变化

SSIM(structural similarity index),结构相似性,是一种衡量两幅图像相似度的指标。该指标首先由德州大学奥斯丁分校的图像和视频工程实验室 (Laboratory for Image and Video Engineering) 提出。SSIM 使用的两张图像中,一张为未经压缩的无失真图像,另一张为失真后的图像。


# 应用

webrtc
WebRTC 是一个免费的开放软件项目,可通过简单的 API 为浏览器和移动应用程序提供实时通信(RTC)功能。 WebRTC 组件已经过优化,可以最好地满足此目的。

testrtc

这里包含 audio 和 video 的测试和评估方法.

mic 主要是针对 audio

  1. 能否 2s 静音
  2. 计算 RMS 值
  3. clip 测试
  4. 单双讲测试

camara 分 2 部分, 一个 WxH 分辨率 (width x height) 和支持的分辨率

  1. 列出似乎受支持的分辨率

网络

  1. Udp/Tcp 验证它可以使用给定协议与转服务器进行通信
  2. IPv6 连接 验证它至少可以收集一个 IPv6 候选者

连接性 (主要 TURN server 连接的验证)

  1. relay 可以通过 TURN 服务器在对等体之间建立连接
  2. Reflexive 通过 NAT 验证对等体之间的连接
  3. Host 验证可以在具有相同 IP 地址的对等体之间建立连接

吞吐量

  1. 数据吞吐量 建立环回调用并测试链路上的数据通道吞吐量

  2. 视频带宽

  3. 建立环回呼叫并测试链路上的视频性能

py_quality_assessment

read more


↙↙↙阅读原文可查看相关链接,并与作者交流