LPFの周波数特性
#周波数特性 #フィルタ #Shader_Music #シンセ #DSP #GLSL
モチベーション
GLSLでTB-303ごっこしたい
電気ふりかえり
Ref: http://physico.blue.coocan.jp/physics/sunflower/circuit/accr.html
キルヒホッフの第1法則
回路中の任意の分岐点において、流入する電流の和は流出する電流の和に等しい
電流が一箇所に集まっていったら怖いもんね
キルヒホッフの第2法則
回路内の閉路を一周したら、起電力の和は電圧降下の和に等しい
すべり台のやつだね
オームの法則
$ V = IR
$ Vは電位差
$ Iは電流
$ Rは抵抗値
コンデンサの静電容量
$ Q = CV
$ Vは電位差
$ Qは蓄えられた電荷
$ Cはコンデンサの電気容量
電荷ってなんだっけ
電流の時間微分だね
$ I = \frac{dQ(t)}{dt}
ラプラス変換
何に使うかよく分かんねえ!でもなんか便利らしい!
$ F(s) = \mathcal{L} \lbrack f(t) \rbrack = \int_0^\infty f(t) e^{-st} dt
実践上、ラプラス変換表ってのを見ながら変換していくと良さそう
http://okawa-denshi.jp/techdoc/2-1-4Rapurasuhyou.htm
周波数伝達関数
伝達関数$ G(s)の$ sに$ j \omegaを入れると、周波数伝達関数になる
ここは電気の世界なので、$ jは虚数だよ
$ |G(j \omega)|(長さ)がゲイン
$ \arg G(j \omega)(偏角)が位相
伝達関数
よくわからないけどたぶん僕はこれが知りたいんだと思う
$ G(s) = \frac{Y(s)}{X(s)} = \frac{\mathcal{L} \lbrack y(t) \rbrack}{\mathcal{L} \lbrack x(t) \rbrack}
See: https://ja.wikipedia.org/wiki/伝達関数法
LPFの周波数特性
Ref: https://qiita.com/Aogiri-m2d/items/d691eb801071f4402f6a
Ref: http://ayumi.cava.jp/audio/ac/node7.html
シンプルなRCフィルタ
https://gyazo.com/9031db80d620c2240f95a92381a97a34
https://everycircuit.com/circuit/6545761657159680
入力の電圧を$ x(t)
コンデンサの電位差が$ \frac{Q}{C}
抵抗の電位差が$ IR
とする
キルヒホッフ第2法則より、
$ x(t) - \frac{Q}{C} - IR = 0
$ x(t) - \frac{Q}{C} - \frac{dQ(t)}{dt} R = 0
知りたいのはコンデンサの電位差っぽいので、$ \frac{Q}{C} = y(t)とおく
$ \frac{dQ(t)}{dt} = C \dot y(t)もできるね
$ x(t) - y(t) - RC \dot y(t) = 0
$ \dot y(t) = -\frac{1}{RC} y(t) + \frac{1}{RC} x(t)
でこれにラプラス変換ってのをするんですか
$ \frac{1}{RC} = \omega_cとする
$ \mathcal{L} \lbrack \dot f(t) \rbrack = s F(s) - f(0)より、
$ y(0) = 0と仮定すると$ \mathcal{L} \lbrack \dot f(t) \rbrack = s F(s)になってくれるので、
$ sY(s) = -\omega_c Y(s) + \omega_c X(s)
$ (s + \omega_c) Y(s) = \omega_c X(s)
$ G(s) = \frac{\omega_c}{s + \omega_c}
$ sに$ j \omegaを入れると周波数伝達関数になるので
$ G(j \omega) = \frac{1}{1 + j \omega RC}
おお~
こいつの長さと偏角を求めるとそれぞれゲイン・位相になるらしい
ちょっと変形
$ G(j\omega) = \frac{1}{1 + \frac{j \omega}{\omega_c}} = \frac{1 - \frac{j \omega}{\omega_c}}{1 + (\frac{\omega}{\omega_c})^2}
$ |G(jw)| = \frac{\sqrt{(1 - \frac{j \omega}{\omega_c})^2}}{1 + (\frac{\omega}{\omega_c})^2} = \frac{\sqrt{1 + (\frac{\omega}{\omega_c})^2}}{1 + (\frac{\omega}{\omega_c})^2} = \frac{1}{\sqrt{1 + (\frac{\omega}{\omega_c})^2}}
$ \arg G(j \omega) = \tan^{-1} \left( \frac{\frac{\omega}{\omega_c}}{1} \right) = \tan^{-1} \left( -\frac{\omega}{\omega_c} \right)
https://gyazo.com/d5606ff6dee976b76660504a6445e945
https://www.desmos.com/calculator/iowh2n00eg
優勝
その他
2-polar, 4-polar
ラダーフィルタ
出力をフィードバック回路で入力に戻してやる
むずかしそう!!!やりたくない!!!!
The Art of VA Filter Designがだいたい解説してくれてそう
ラダーフィルタ
いわゆる4-Pole Ladder Filter
https://www.wolframalpha.com/input?i=abs+\frac{1}{k+%2B+(1+%2B+ix)^4}
https://www.wolframalpha.com/input?i=arg+\frac{1}{k+%2B+(1+%2B+ix)^4}
$ G(s) = \frac{1}{k + (1 + s)^4}
$ |G(j \omega)| = \frac{1}{\sqrt{(k + \omega^4 - 6 \omega^2 + 1)^2 + (4\omega (\omega^2 - 1))^2}}
$ \arg G(j \omega) = \tan^{-1} (k + \omega^4 - 6 \omega^2 + 1, 4 \omega(\omega^2 - 1))
https://gyazo.com/774552c1e2fdea83eef87b0be3ca2fd5
https://www.desmos.com/calculator/tyhfg8acum
code:glsl
/**
* Generate saw wave with 4 pole ladder filter using additive synthesis
*/
vec2 filterSaw(float freq, float phase, float cutoff, float reso) {
vec2 sum = vec2(0.0);
for (int i = 1; i <= 96; i ++) {
float fi = float(i);
float freqp = freq * fi;
float omega = freqp / cutoff;
float omegaSq = omega * omega;
float a = 4.0 * reso + omegaSq * omegaSq - 6.0 * omegaSq + 1.0;
float b = 4.0 * omega * (omegaSq - 1.0);
float r = 1.0 / sqrt(a * a + b * b);
float phi = atan(b, a);
sum += 0.66 * sin(fi * phase * TAU - phi) / fi * r;
}
return sum;
}
使用例: GLSL Acid Techno
2-pole
いわゆるSVF(State variable filter)ってのらしいですよ
https://www.wolframalpha.com/input?i=abs+\frac{1}{(iw)^2+%2B+2Riw+%2B+1}
https://www.wolframalpha.com/input?i=arg+\frac{1}{(iw)^2+%2B+2Riw+%2B+1}
$ G(s) = \frac{1}{s^2 + 2Rs + 1}
$ |G(j \omega)| = \frac{1}{\sqrt{4 R^2 \omega^2 + (1 - \omega^2)^2}}
$ \arg G(j \omega) = \tan^{-1} (-2R \omega, 1 - \omega^2)
https://gyazo.com/84dcb588a628c07102c5da065404ca75
https://www.desmos.com/calculator/vlkrju5kte
その他
Razor
Razorさん
LPFとBPFを組み合わせているっぽいです 位相の変化はなさそう
そんなもんか!
srtuss - acid jam
srtussさんのシェーダ
https://www.shadertoy.com/view/ldfSW2
$ cをカットオフのハーモニクスの倍率、
$ kをハーモニクスの倍率としたとき、
$ l = \max(k - c, 0)
$ b = |k - c|
とおき
$ 0.5 \ e^{-0.005 l^2} + 2.2 \ e^{-0.2 b^2}
https://gyazo.com/5a9d36caff8cf653141ee15ca9358590
https://www.desmos.com/calculator/gicfvqrz5u
雑ではあるがしっかりAcidしている