Magicode logo
Magicode
0
4 min read

【DSP】Pythonで学ぶディストーションの仕組み

はじめに

この記事では、サウンドメイキングに必要なエフェクターの一つ、「ディストーション」の仕組みを、Pythonコード形式で解説します。

ディストーションとは?

音楽、特に音声信号処理(シンセ、エフェクター、アナライザなど)において、波形に歪みが生じることで音が変化することを指します。

ディストーション(Distortion)は、「歪み(ひずみ)」という意味です。

どうなるの?

こういう波形が

こういう感じになります。

このように、波形の形が対称非対称問わず、変形して音が変わることを、「歪む」といいます。

(厳密には、上下方向の変形が生じる場合のみ、『歪む』という言葉が使われます)

(が、折り返し歪み(Aliasing Distortion)のように、慣用句的に『歪み』という言葉が使われているケースは存在します)

やってみよう

まずはサイン波を生成します。

import numpy as np
from IPython.display import Audio
import matplotlib.pyplot as plt

x = np.linspace(0, 1, 8000) * np.pi * 2.0
sine = np.sin(x)

plt.plot(sine)

このような音ができるので、歪ませてみます。


まずは、ソフトクリップといわれるタイプのディストーションを実装します。

とはいっても、三角関数の一種を使用するだけなので簡単です。

softclipped = np.tanh(sine * 2)
plt.plot(softclipped)

このような音になります。

元の音より太くなっていると思います。

実際、元の音にはない成分が含まれています。


次に、ハードクリップといわれるタイプのディストーションを実装します。

具体的には、波形がある一定以上の大きさを超えたときに、その地点でバッサリと波形を切り取る、という処理になります。

今回は、NumPyのclip関数を使います。

hardclipped = np.clip(sine * 2, -1, 1)
plt.plot(hardclipped)

このような音になります。

ソフトクリップよりも、音が鋭くなります。

音の高い部分がより激しくなっていると思います。


最後に、上下の形が非対称になるディストーションをかけます。

今回は指数関数np.expを使い、波形の上半分よりも下半分のほうが大きくなるようにして、最後にソフトクリップをかけます。

asym_sine = np.exp(sine*2) + 1
asym_clip = np.tanh(asym_sine)
plt.plot(asym_clip)

このような音になります。

分かりにくいですが、先程の音とは変化の仕方が違います。

難しく言うと、先程の2つにはなかった偶数倍音が出ています。

人によっては、ソフトクリップ、ハードクリップの音を「冷たい」、非対称に歪んだ音を「暖かい」と言ったりもします。

詳しい説明

今回、ソフトクリップに使った関数はtanhといいます。

詳しいことは省きますが、この関数に入力した数値は、正の値なら限りなく1に、負の値なら限りなく-1に収束する、という関数です。

こういった関数のことを『誤差関数』と言ったりします。

また、こういった数学関数でなくても、入力と出力のマッピング(数値同士の対応 ex. 0.5は0.7に、0.8は0.9に…)を自由に書いて処理することもできます(iZotope Trash2などにその機能があります)。

対称非対称のお話

対象歪みは、基本的に偶数倍音が出にくい傾向にあります。

例えば、サイン波は基音だけなので、対象歪みを起こすと奇数倍音だけが出てきます。

矩形波や三角波、それに限らず、波形が点対称のものに対象歪みを起こすと、必ず奇数倍音が出ます。

が、DC(直流)成分が含まれている場合は、偶数倍音が出ることがあります。

それに対し非対称歪みは、どんな入力波形であっても、偶数倍音が出ます。

このことについて詳しく知るには、フーリエ級数などの知識が必要になってくるので、ここでは割愛します。

まとめ

  • DSPにおける基本的なディストーションは、『ソフトクリップ』、『ハードクリップ』、『非対称歪み』
    • 場合によって、これらを組み合わせたり、応用して使う
  • ソフトクリップは、正の数が大きければ大きいほど1に、負の数が大きければ大きいほど-1に向かう
  • ハードクリップは、一定以上の大きさの数値を、バッサリとカットする
  • 歪みの種類によって、出る成分が違う
    • 非対称歪みは偶数倍音が出る。ソフトクリップやハードクリップなどの対象歪みは偶数倍音が出にくい
    • 対象歪みでも、原音にDC成分が乗っていたり、偶数倍音が含まれていたりすると、上記の限りではない
    • 倍音についてはこちらを参照

お疲れ様でした。

出典

Wikipedia - 倍音

筆者の独学の知識

Discussion

コメントにはログインが必要です。