AUTOVC 代码解析 —— make_spect.py
简介
本项目一个基于 AUTOVC 模型的语音转换项目,它是使用 PyTorch 实现的(项目地址)。
AUTOVC 遵循自动编码器框架,只对自动编码器损耗进行训练,但它引入了精心调整的降维和时间下采样来约束信息流,这个简单的方案带来了显著的性能提高。(详情请参阅 AUTOVC 的详细介绍)。
由于 AUTOVC 项目较大,代码较多。为了方便学习与整理,将按照工程文件的结构依次介绍。
本文将介绍项目中的 make_spect.py 文件:读取音频文件,并转换为 Mel 频谱保存。
函数解析
butter_highpass
该函数的作用是: 创建一个高通滤波器,得到滤波器系数:分子(’ b ‘)和分母(’ a ')多项式
输入参数:
cutoff : 滤波器截止频率
fs : 样本采样率
order : 滤波器阶数
输出参数:
b, a : IIR 滤波器的分子(' b ')和分母(' a ')多项式
代码详解:
def butter_highpass(cutoff, fs, order=5):
# 取一半的 fs 标量,fs 是采样率, nyq 与尼奎斯特定理有关
nyq = 0.5 * fs
# cutoff 是截止频率,需要标准化(我也不懂,想问问神奇海螺)
normal_cutoff = cutoff / nyq
# 设计一个 n 阶数字或模拟巴特沃斯滤波器并返回滤波器系数,其中:
# order 是 int 型整数,代表设计的滤波器的阶数;
# normal_cutoff 为临界频率,这里作为高通滤波器的标量,对于数字滤波器, normal_cutoff 与 fs (采样率)的单位相同。
# 默认情况下, fs 是 2 个半周期/样本,所以这些从 0 到 1 标准化,其中 1 是尼奎斯特频率。(因此, normal_cutoff 是半周期/样本。)(我也没看懂,等待大佬相助);
# btype 为可选过滤器的类型,在这里默认为 'high' ,选择高通滤波器;
# analog 为滤波器返回标志:当为 True 时,返回一个模拟滤波器,否则返回一个数字滤波器。这里代表设计的是一个数字滤波器;
# 综上所述,这里创建了一个 order 阶临界频率为 normal_cutoff 的高通滤波器,并返回了 IIR 滤波器的分子(' b ')和分母(' a ')多项式。
b, a = signal.butter(order, normal_cutoff, btype='high', analog=False)
# 返回IIR 滤波器的分子(' b ')和分母(' a ')多项式
return b, a
pySTFT
该函数的作用是: 实现给定样本片段的短时傅里叶变换
输入参数:
x : 音频样本
fft_length : 傅里叶变换的长度
hop_length : 跳跃的长度

本文解析了基于PyTorch实现的AUTOVC语音转换项目的make_spect.py文件。该文件负责将音频文件转换为Mel频谱图并保存,涉及高通滤波器的设计与短时傅里叶变换的应用。
最低0.47元/天 解锁文章
3359

被折叠的 条评论
为什么被折叠?



