ウェーブシェイピング関数まとめ

ウェーブシェイピング合成

ウェーブシェイピング合成とは、入力信号に対して非線形な入出力特性(ウェーブシェイピング関数)を適用することで波形を変形し、その非線形性に起因する倍音生成およびダイナミクスの変化を制御する手法です。
基本的な例としては、sin や tanh といった関数を用いたソフトクリッピングや、一定の振幅レベルで信号を制限するハードクリッピングなどが挙げられます。
本記事では、私が調査したさまざまなウェーブシェイピング関数について紹介していきます。desmosでインタラクティブに操作できるものもあります。

表記の仕方

数式とグラフを羅列していきます。パラメタとしてa, b, kが登場します。変数名に特に意味はなく、引用元の表記に合わせてあります。
使用するパラメタの値は、画像のキャプションに記載しています。(特に記載がない場合はパラメタの設定が不要なものです。)
また、場合分け関数をnote上で表現するために、{条件: 出力, otherwise}という擬似記法を用います。

Designing Audio Effect Plugins in C++より

Soft clip sigmoid waveshaper functions

Arraya: No saturation, very mild

y=\frac{3x}2(1-\frac{x^2}3)

画像

Sigmoid

y=2\cdot\frac{1}{1+e^{-kx}}-1

画像
k=5
画像
k=10

Sigmoid2: No saturation, very mild

y=\frac{(e^x-1)(e+1)}{(e^x+1)(e-1)}

画像

Hyperbolic Tangent: Good for diode simulation

y=\frac{tanh(kx)}{tanh(k)}

画像
k=1
画像
k=3
画像
k=5

Arctangent

y=\frac{arctanh(kx)}{arctanh(k)}

画像
k=0.1
画像
k=0.9 

Fuzz Exponential 1

y=sgn(x)\frac{1-e^{-|kx|}}{1-e^{-k}}

画像
k=1
画像
k=5

Fuzz Exponential 2

y=sgn(-x)\frac{1-e^{|x|}}{e-1}

画像

Exponential 2

y=\frac{e-e^{(1-x)}}{e-1}

画像

Arctangent Square Root

y=2.5tan^{-1}(0.9x)+2.5\sqrt{1-(0.9x)^2}-2.5

画像

Square Sign

y=x^2sgn(x)

画像

Cube

y=x^3

画像

Hard Clipper

y=\{{|x|>0.5:\ 0.5\cdot sgn(x),\ x}\}

画像

Half-Wave Rectifier

y=0.5(x+|x|)

画像

Full-Wave Rectifier

y=|x|

画像

Square Law

y=x^2

画像

Absolute Square Root

y=\sqrt{|x|}

画像

DAFX: Digital Audio Effectsより

tube

y= \{{ x=Q: \dfrac{1}{d}+\dfrac{Q}{1-e^{dQ}},\ \dfrac{x-Q}{1-e^{-d(x-Q)}}+\dfrac{Q}{1-e^{dQ}} }\}

画像
Q=-0.2, d=8

symclip

y= \{{ |x|\le \tfrac{1}{3}: 2x,\ \tfrac{1}{3}\le |x|\le \tfrac{2}{3}: \operatorname{sgn}(x)\cdot\dfrac{3-(2-3|x|)^2}{3},\ \tfrac{2}{3}\le |x|\le 1: \operatorname{sgn}(x) }\}

画像

expdist

y=sgn(x)(1-e^{-|x|})

画像

MusicDSP.orgより

Soft saturation

y= \{{ x\le a_{1}: x,\ x>a_{1}: a_{1}+\dfrac{x-a_{1}}{1+\left(\dfrac{x-a_{1}}{1-a_{1}}\right)^2} }\}

画像
a=0
画像
a=1

Variable-hardness clipping function

y=sgn(x)\cdot arctan(|x|^k)^{\frac{1}k}

画像
k=1
画像
k=10

Variable-hardness clipping function 2

y=\frac{1}a \cdot arctan(xa)

画像
a=0.1
画像
a=1.0

Variable-hardness clipping function 3

y=a \cdot tanh(bx)

画像
a=1, b=1
画像
a=1, b=5

WaveShaper

y=x \cdot \frac{(|x|+a)}{(x^2+(a-1) \cdot |x|+1)}

画像
a=0
画像
a=0.5
画像
a=5

Waveshaper2

y= \{{ x>\tfrac{1}{a}: 1,\ x\le \tfrac{1}{a}: \dfrac{\sin\left(a\pi x\right)}{\sin\left(a\pi\right)} }\}

画像

Waveshaper3

y=\frac{(1+\frac{2a}{1-a})\cdot x}{1+\frac{2a}{1-a}\cdot|x|}

画像
a=0.5

Waveshaper (simple description)

y=1.5x-0.5+x^3

画像

Waveshaper :: Gloubi-boulga

x = 0.686306x

a = 1 + \exp(-0.75\cdot\sqrt{ |x|})

y = \frac{\exp(x) - \exp(-ax)}{\exp(x) + \exp(-x)}

画像

リンク

上記の関数をdesmos上でインタラクティブに操作できるリンクです。

おわりに

noteだと画像を縦に並べるしかできなくて若干見にくいのと、出力される倍音の例があるとわかりやすいと思う。気が向いたらやるかも


いいなと思ったら応援しよう!

コメント

コメントするには、 ログイン または 会員登録 をお願いします。
ウェーブシェイピング関数まとめ|ユタニツグマサ
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1