音频处理

Wolfram 语言为参数式和交互式音频处理提供内置支持,并完全与 Wolfram 语言强大的数学和算法能力相集成. 通过应用线性和非线性滤波器,添加效果,使用特定的音频函数分析处理音频对象或通过与其他 Wolfram 语言相集成来拓展对音频对象的处理.
滤波
音频信号可用作许多信号处理函数的输入.
LowpassFilter[audio,ωc]
对音频应用具有截止频率 ωc 的低通滤波器
HighpassFilter[audio,ωc]
对音频应用具有截止频率 ωc 的高通滤波器
WienerFilter[audio,r]
对音频应用 r 样本范围的维纳滤波器
MeanFilter[audio,r]
对音频应用 r 样本范围的均值滤波器
TotalVariationFilter[audio]
对音频应用全变差滤波器
GaussianFilter[audio, r]
对音频应用 r 样本范围的高斯滤波器
可以直接应用到音频对象的滤波器.
Wolfram 语言中的许多滤波函数可直接用于音频对象. 在许多情况下,可以指定截止频率作为一个频率 Quantity.
FIR 滤波器应用于一个音频对象:
绘制原始的和处理过的信号的功率谱图:
使用 WienerFilter 对录音除燥:
离散时间传递函数模型可以使用 RecurrenceFilter 滤波音频对象.
RecurrenceFilter[tf,audio]
使用由 TransferFunctionModel tf 定义的离散时间滤波
BiquadraticFilterModel[{"type",spec}]
创建给定 {"type",spec} 的二次滤波器
ButterworthFilterModel[{"type",spec}]
创建给定 {"type",spec} 的巴特沃斯滤波器
TransferFunctionModel[m,s]
表示带有复变量 s 的传递函数矩阵 m 的模型
ToDiscreteTimeModel[lsys,τ]
给出连续时间系统模型 lsys 的离散时间近似,其中采样周期为 τ
一些可用的滤波器模型和其他实用程序.
使用模拟(连续时间)滤波器模型的一个最简单方法是用 ToDiscreteTimeModel 离散化传递函数并用 RecurrenceFilter 把结果应用到音频对象.
将谐振二次滤波器应用到音频对象:
可使用 TransferFunctionModel 创建离散传递函数并用 RecurrenceFilter 应用于音频对象.
使用 TransferFunctionModel 定义梳妆滤波器并应用于音频对象:
效果与操作
可以使用内置或用户定义的函数修改和操作音频对象.
AudioTimeStretch[audio,r]
通过指定的因子 r 对音频进行时间拉伸
AudioPitchShift[audio,r]
通过指定的因子 r 对音频进行音调移位
AudioReverb[audio]
对音频应用混响效果
AudioDelay[audio,delay]
用延迟时间 delay 对音频应用延迟效果
AudioChannelMix[audio,desttype]
把音频通道混合到指定的 desttype
一些常用的音频效果.
使用音高移位和时间拉伸独立地修改音频信号的音高和持续时间.
减慢音频对象:
把音频对象的音高调高:
延迟和混响效果可用于浸入虚拟环境的录音中或产生特殊的效果.
应用延迟或混响效果:
通过对一串噪声增加带有高反馈值的短延迟执行 KarplusStrong 合成. 这将模拟振弦的声音:
可使用 AudioChannelMix 获取任意通道数下混合与上混合.
下混合与上混合多通道音频对象:
通过可在 Audio 对象上执行算术运算的优势可能可以改变录音. 所有带有属性 NumericFunctionListable 的 Wolfram 语言的算符和函数可以重载以便处理音频对象.
使用 Tanh 函数平滑音频对象的失真:
使用 ChebyshevT 函数获取波形整形器效果:
用正弦波乘以音频对象获取环调制器 效果:
分析

整体信号的分析

录音上全局和局部可被计算的属性.
AudioMeasurements[audio,"prop"]
对整个 audio 计算属性 "prop"
计算全局度量的一些功能.
时域和频域属性可以用 AudioMeasurements 度量. 在音频对象的通道上的平均样本值上计算属性.
计算录音的时域属性:
计算录音的频域属性:
通过直接应用内置统计函数计算其他度量.
计算音频对象的矩和熵:
不像 AudioMeasurements,重载的函数被应用于数据的展平版本. 如果输入是多通道音频对象,所有通道的样本值会在单个数组中被展平.
计算录音的统计属性:

部分信号分析

除了音频对象的全局属性,还可以局部计算度量.
AudioLocalMeasurements[audio,"prop"]
局部计算 audio 部分的属性 "prop"
AudioIntervals[audio,crit]
求当满足标准 critaudio 区间
计算局部度量的一些功能.
AudioLocalMeasurements 中,局部计算属性. 按 PartitionGranularity 规范划分信号,然后在每个分区上计算要求的属性. 结果以 TimeSeries 形式返回,其时间戳对应于每个分区的中心时间.
计算 40 ms 分区上的 RMS 幅度,其中,补偿为 1 ms:
AudioLocalMeasurementsAudioMeasurements 的结果可用于 Wolfram 语言中其他函数的输入.
使用 "SpectralCentroid""SpectralSpread" 度量找到列表中类似音频对象的聚类:
使用 MFCC 度量作为特征计算 ExampleData["Audio"] 集合中各元素间的距离c:
使用 AudioIntervals 允许提取满足用户定义标准的区间.
定位录音中的非声音部分:

高级分析

可以使用基于神经网络的函数来更深入地了解信号的内容.
SpeechRecognize[audio]
识别 audio 中的音频并以字符串形式返回
PitchRecognize[audio]
识别 audio 中主要音调
AudioIdentify[audio]
识别录制的是哪个 audio
基于神经网络的某些功能.
执行高级音频分析:
所有机器学习功能都知道 Audio 对象并从语义上重要特征提取开始执行它们的计算.
Classify[{audio1class1,audio2class2,}]
生成一个在给定范例和类上训练的 ClassifierFunction[]
FeatureExtraction[{audio1,audio2,}]
生成一个在给定范例上训练的 FeatureExtractorFunction[]
FeatureSpacePlot[{audio1,audio2,}]
用散点图绘制 audioi 上的特征提取
高级机器学习的某些函数.
该预处理转换每个固定大小向量的音频对象,使之可以被容易比较.
分类一个小的乐器声音的数据集:
绘制使用 FeatureSpacePlot 收集的音频特征.
FeatureSpacePlot 在有语义意义的空间绘制信号列表:

神经网络

Audio 对象紧密集成在强大的神经网络框架中. NetEncoder 为各种高级构造(如 Audio 对象)提供了一个简单的神经网络入口点.
"Audio"
将信号编码为波形
"AudioSpectrogram"
将信号编码为频谱
"AudioMFCC"
将信号编码为梅尔频谱
音频 NetEncoder 的一些范例.
不同的编码器可用于计算不同的特征. 一些维护原始信号的所有信息(比如 "Audio""AudioSTFT"),另一些在放弃某些信息但是大幅减小维度(比如 "AudioMFCC")之间提供折衷.
使用不同编码器可视化计算的特征:
使用编码器,可以轻松地从头开始训练网络,以解决与音频相关的任务,并生成性能测量结果.
NetTrain[net,data]
在数据集 data 上训练网络 net
NetChain[{layer1,layer2,}]
指定一个 layeri 输出连接到 layeri+1 输入的网络
NetMeasurements[net,data,measurement]
为在 data 上计算的 net 计算请求的 measurement
一些神经网络函数.
使用 NetChainNetGraph 创建任意拓扑的网络,并利用序列聚焦的层(如 GatedRecurrentLayerLongShortTermMemoryLayer )来分析可变长度信号.
训练网络分类语音数字从 0 到 9: