Python:リングモジュレーターの実装②

前回はリングモジュレータを実装したのでもう少し細かく見てみようということで数式をあげながら理論を追ってみる

前回の記事は此方
gsmcustomeffects.hatenablog.com


原理

被変調波(原音)を sin(2 \pi f_{c}\frac{n}{f_{s}})と置くとリングモジュレーションは以下の式で示すことができる。

  •  y(n) = Asin(2 \pi f_{m}\frac{n}{f_{s}}) \cdot sin(2 \pi f_{c}\frac{n}{f_{s}})

これを積和の公式(高校の加法定理とこで習う)を使って書き直すと

  •  sin\alpha sin\beta = -\frac{1}{2}\{cos(\alpha + \beta) - cos(\alpha - \beta)    \}
  •  y(n) = \frac{1}{2}[cos(2\pi(f_{c}-f_{m})\frac{n}{f_{s}})-cos(2\pi(f_{c}+f_{m})\frac{n}{f_{s}})   ]

fcを1kHz,fmを2kHzとした時のことを考えてみる。

  •  y(n) = \frac{1}{2}[cos(2\pi(1000-2000)\frac{n}{f_{s}})-cos(2\pi(1000+2000)\frac{n}{f_{s}})   ]
  •  y(n) = \frac{1}{2}[cos(2\pi(-1000)\frac{n}{f_{s}})-cos(2\pi(3000)\frac{n}{f_{s}})   ]

cosは偶関数なのでf(x) = f(-x)

  •  y(n) = \frac{1}{2}[cos(2\pi(1000)\frac{n}{f_{s}})-cos(2\pi(3000)\frac{n}{f_{s}})   ]

というわけで0.5倍された1kHzのcos と3kHzのcosが出てきそうである。

Pythonでグラフだしてみると同じになった

f:id:gsmcustomeffects:20180811004424p:plain

実験室!

理論がだいたいわかったとこで変調かけた音がどういうふうに聞こえるか検証していく
今回もゆきょん(@Yukyoooon)君に音源とってもらいました。
twitter.com

変調とのことでアルペジオ音源です.

ちなみにグラフは

  • 上段 : 原音
  • 中段 : 変調波形
  • 下段 : 加工音

原音

まずは原音から

100Hzのsin波形

高い周波数をかけすぎるとほんとに音程がわからなくなるので100Hz

[f:id:gsmcustomeffects:20180812204119p:plain]

10Hzのsin波形

[f:id:gsmcustomeffects:20180812204007p:plain]

5Hzのsin波形

[f:id:gsmcustomeffects:20180812212939p:plain]

1Hzのsin波形

[f:id:gsmcustomeffects:20180812212533p:plain]

これに関しては変調波形が遅いこともあってトレモロっぽい

5+10Hzの波形

  • wave1 : 振幅0.5 5Hz
  • wave2 : 振幅0.5 10Hz

[f:id:gsmcustomeffects:20180812214705p:plain]

1+10+100Hzの波形

  • wave1 : 振幅0.3 1Hz
  • wave2 : 振幅0.3 10Hz
  • wave3 : 振幅0.3 100Hz

[f:id:gsmcustomeffects:20180812215151p:plain]

1+10+100Hzの波形その2

さっきのだと全部の成分の主張が激しすぎるのでバランス調整した時の音

  • wave1 : 振幅0.7 1Hz
  • wave2 : 振幅0.1 10Hz
  • wave3 : 振幅0.1 100Hz

[f:id:gsmcustomeffects:20180812215544p:plain]

sin a * sin b * sin c + sin dの波形

  • wave1 : 振幅 1.0 1Hz
  • wave2 : 振幅 1.0 2Hz
  • wave3 : 振幅 1.0 3Hz
  • wave4 : 振幅 0.2 500Hz

wave1 * wave2 * wave3 +wave4って感じで積和の公式から変な周波数生成してそれに対して振幅弱めの高周波を加算するというアイデア

\begin{equation}
sin x sin 2x sin 3x = \frac{1}{4}(sin2x +sin4x - sin6x)
\end{equation}

前の三項はこういう感じに機能する。

波形の原型は3項がつかさどり味つけに4項目が効くという感じ

f:id:gsmcustomeffects:20180812223510p:plain

んで最後に音源


めんどくさいのでやらなかったアイデア

  • 加法定理から高い音が加えられるということはなんとなくわかったのでフィルターを組み合わせると面白いのかなと思った
  • 波形同士の引き算で倍音を消せるかも?
  • 変調波形をLFOでFMするとか?

あとこの方のdome filterも面白いのかなと

hhh-yama.hatenadiary.jp

まとめ

リングモジュレータの続きという形でもう少しまともにやってみた。
加法定理忘れてて焦った。

この辺までやっていろいろ面白いことが分かったのであとは実機でつまみいじりながら調整したいと思いました。
次回はトレモロでもやります。