【项目实战】AUTOVC 代码解析 —— make_spect.py

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

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	:	跳跃的长度
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值