【音频处理】Channel Vocoder 算法简介

这篇具有很好参考价值的文章主要介绍了【音频处理】Channel Vocoder 算法简介。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

系列文章目录

  • Delay Line 简介及其 C/C++ 实现
  • LFO 低频振荡器简介及其 C/C++ 实现
  • 【音效处理】Delay/Echo 算法简介
  • 【音效处理】Vibrato 算法简介
  • 【音效处理】Reverb 混响算法简介
  • 【音效处理】Compressor 压缩器算法简介
  • 【音频处理】Fast Convolution 快速卷积算法简介


Channel Vocoder

在各类剪辑软件中,有一类音效非常的魔幻、富有科技感,例如:

  • #变声 合成器声音真是笑死我了
  • 声网-魔力音阶音效

这类音效背后的原理来自原 Channel Vocoder(声道声码器)。Channel vocoder 最初由 Homer Dudley 在 1930s 发明,发明的初衷是为了做语音通信,但就目前来看,它在音效上取得了更多的进展。

Channel vocoder 的输入有两个两个信号:载波信号(carrier)和调制信号(modulator)。在音效场景中,carrier 通常是一个谐波丰富的音频,例如锯齿波或者小提琴等声音,而 modulator 通常是语音信号;算法的输出,则是将两个信号进行了某种混合,使得两种信号被叠加在一起,可以产生经典的机器人音效,它作为一种特殊效果在好莱坞中被广泛使用。下面视频是本人实现的 channel vocoder 示例,是一种非常「机械」的声音。

channel_vocoder_video

算法原理

Channel vocoder 的算法实现可以分为时域滤波器实现和频域傅里叶变换实现。

时域滤波器实现

【音频处理】Channel Vocoder 算法简介

Channel vocoder 在时域上可以被描述为 filter-bank 模型,算法处理逻辑如上图,我们对着图来说。

首先,需要选定一组 Band-Pass Filter,用来过滤出特定频率的音频信息,例如我可以选定 [337.5, 575, 850, 1200, 1700, 2350]。

接着,对于 carrier,经过 BPF 后得到不同频段的信号即可;对于 modulator,经过 BPF 处理后,我们还要获取到这个信号的包络(envelope)。获取包络方式多种多样,一种简易的方式是取信号的能量值,并经过一个 Low-Pass Filter 即可。

然后,将 modulator 的包络与 carrier 的相同频段信号做一个相乘,最后累加所有频段信号就可得到最终的输出。这里 有一个在线体验 channel vocoder 的页面,用的就是 filter-band 模型。

这里思考几个问题:

  1. 我要选多少个频段?没有一个固定的值,它可以被设置为算法的一个参数。频段越多计算量越大,但输出信号中 modulator 信号越清晰;频段越少,计算越快,但输出信号「机械感」越强,modulator 信号越不清晰。具体感受可以注意文章开头中视频中对 「Number Band」参数的调整。
  2. modulator 与 carrier 信号长度不一致怎么办?modulator 通常是语音信号,考虑在直播场景下使用 channel vocoder 音效的话,modulator 是无限长的,carrier 是一段固定长度的音频,可以重复循环使用 carrier。

频域傅里叶变换

【音频处理】Channel Vocoder 算法简介

时域上实现 channel vocoder ,需要使用了非常多的 Band-Pass Filter 来过滤出特定的频段,这种方式计算量很大。Channel Vocoder 音效的原理无非是:

  1. 在 carrier 和 modulator 信号中,找到特定频率的信息
  2. 将 modulator 频段信息进行某种非线性操作(例如找到包络),然后将这个结果与 carrier 频段信息相结合

为了达到上述两个目标,Channel Vocoder 现代实现通常用 FFT 替换 Band-Pass Filter。当使用很多频段时,这种方法更快,而且非线性和低通滤波都可以很容易地使用 FFT 的幅度来完成。FFT Channel vocoder 算法处理逻辑如上图,具体的:

  1. 对 modulator 进行 FFT,得到 FFT Bins,将 FFT Bins 分为 N 个 band,对每个 band 的幅度取均值,得到 b N b_N bN
  2. 对 carrier 进行 FFT,得到 FFT Bins,将 FFT Bins 分为 N 个 band,对每个 band 的幅度取均值,得到 a N a_N aN
  3. 完成 1、2 后,对于每个 band,我们计算得到 s = b N a N s = \frac{b_N}{a_N} s=aNbN,将 s 与当前的 carrier band 相乘,使 carrier 带上 modulator 的信息
  4. 最后,对相乘后的 FFT Bins 做 IFFT 得到时域输出信号

频域上实现 channel vocoder,计算量骤降,Number Bands 轻松设置到 256 都没有问题,而 Band-Filter 模型设置到 64 已经非常吃性能了,并且 Number Bands 参数可以实时调整不影响效果。但频域实现代码复杂性较高,需要在输入和输出两个入口设置 ringbuffer 以保证信号连续性,这同时也会引入一定的延迟(取决与 FFT 的 window size)。

总结

本文介绍了 Channel vocoder,它是一种非常神奇的音效,可以用来实现经典的机器人音效。Channel vocoder 可以使用时域和频域两种实现方法。时域方法中,它被看出是一种 filter-band 模型,通过 band-pass filter 过滤出特定频段的信号,然后将 modulator 中的包络信息附加到 carrier 中来实现;频域方法,经过 FFT 后,对每个 band 进行取均值的,将 modulator 中的各 band 的均值与 carrier 的 band 相乘,然后 IFFT 得到时域输出信号。频域方法计算量更小,参数调整更优化,因此目前大多实现都是频域方法,但它会引入算法延迟。文章来源地址https://www.toymoban.com/news/detail-408923.html

参考

  • Dudley’s Channel Vocoder
  • A channel vocoder walkthrough
  • A Channel Vocoder in Matlab

到了这里,关于【音频处理】Channel Vocoder 算法简介的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 聊聊音频信号处理中一个不太起眼的算法-limiter

    本文对笔者关于音频信号处理中的 Limiter 的理解作以记录。如有表述不当之处欢迎批评指正。欢迎任何形式的转载,但请务必注明出处。 由于工作上的需要,笔者花了一周左右的时间对 limiter (它属于动态范围控制器里面的一种算法,动态范围控制器包括 compressor, expander,

    2024年02月21日
    浏览(63)
  • 基于山景BP10128音频处理器高通滤波器算法设计

    + hezkz17进数字音频答疑 山景BP10128音频处理器是一款高性能的数字信号处理器,专门用于音频信号的处理和增强。它采用先进的数字信号处理技术和算法,能够对音频信号进行实时处理,并且具有高效、稳定、可靠等特点。 该处理器具有以下主要功能: 均衡器:支持低音、中

    2024年02月09日
    浏览(47)
  • 上海山景SH-ARC DSP音频处理器低通滤波算法实现

      +hezkz17进入数字音频答疑 上海山景DSP音频处理器介绍:  上海山景DSP音频处理器是一种数字信号处理器,专门用于音频信号的处理和增强。它采用先进的数字信号处理技术和算法,能够对音频信号进行实时处理,并且具有高效、稳定、可靠等特点。 该处理器可以应用于各种

    2024年02月13日
    浏览(33)
  • 嵌入式算法开发系列之图像处理算法

    在嵌入式系统中,图像处理算法是一项重要的技术,用于实现各种视觉应用,如机器视觉、监控系统和智能设备。本文将探讨图像处理算法的原理、应用以及如何使用 C 语言来实现这些算法。 图像处理算法涉及处理数字图像的各个方面,包括图像增强、滤波、特征提取、目标

    2024年04月16日
    浏览(53)
  • Golang中的管道(channel) 、goroutine与channel实现并发、单向管道、select多路复用以及goroutine panic处理

    目录 管道(channel) 无缓冲管道 有缓冲管道 需要注意 goroutine与channel实现并发 单向管道 定义单向管道 将双向管道转换为单向管道 单向管道作为函数参数 单向管道的代码示例 select多路复用 案例演示 goroutine panic处理 案例演示 管道(channel)是 Go 语言中实现并发的一种方式,

    2024年02月06日
    浏览(47)
  • 使用 Goroutine 和 Channel 来实现更复杂的并发模式,如并发任务执行、并发数据处理,如何做?

    使用 Goroutine 和 Channel 来实现更复杂的并发模式是 Go 语言的强大特性之一。 下面分别介绍如何实现并发任务执行和并发数据处理: 并发任务执行: 假设您有一些任务需要并发地执行,您可以使用 Goroutine 来同时执行这些任务,然后使用 Channel 来汇总结果。 下面是一个示例,

    2024年01月22日
    浏览(43)
  • APx500音频分析仪硬件简介

    两通道模拟输出,两通道或以上的模拟输入接口 线性编码数字音频接口(AES/EBU,TOSLINK,SPDIF)Linear PCM 脉冲密度调制码流(需要APx-PDM选件支持) Bluetooth 蓝牙音频码流(需APx-BT选件支持) 最高支持192kHz数字采样音频(APx555最高支持216kHz) APx500 v4.0 新增Bench模式,有效帮助工程师

    2024年04月12日
    浏览(46)
  • dedecms调用文章简介限制字数的方法

    在dedecms模板调用文章简介时,如何限制文章简介字数多少?yii666小编整理三种方法供大家借鉴: 第一种方法:(推荐,可加省略号) [field:description function=\\\'cn_substr(Html2text(\\\"@me\\\").\\\"...\\\",80)\\\'/] 调用现成的cn_substr()字符串截取函数来实现,80为限制字节数(一个汉字等于2个字节);

    2024年02月03日
    浏览(52)
  • 织梦dedecms文章简介摘要字数的设置方法

    在Dedecms系统中,文章摘要(能够经过infolen或description相关标签调用)被设置了字数上限为250字符,设置上限的主要目的是减少数据库的冗余,保证网站良好的性能。因而,假如对简介内容不设置上限显然不合理,但是假如能够自在控制这一上限,那么将对网页内容布局带来积

    2023年04月16日
    浏览(92)
  • 【科普向】LaTeX简介(一篇极简的 LaTeX 介绍文章)

    我们平时在word里新建一个doc(x)文件后,输入内容,调整页边距、字体大小、行间距等待,然后交给打印机打印就可以了。 如果你写了一篇关于新疆棉花的文章,2000字,在word里调整很快就可以得到你想要的效果。 但如果你想把自己记下的关于矩阵乘法的笔记打印下来,因为

    2024年02月04日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包