X-Git-Url: https://git.sesse.net/?p=c64tapwav;a=blobdiff_plain;f=filter.cpp;h=ecd45025cc2441476243feb89b58c88d94fa617f;hp=d8f97010f2670dd2f4566fa5153f01223640672f;hb=0f23da84ab2a790a5a9450c1b05f6300362fc91c;hpb=cec99d15ad920457eea61bc442b5ba610c13430e diff --git a/filter.cpp b/filter.cpp index d8f9701..ecd4502 100644 --- a/filter.cpp +++ b/filter.cpp @@ -23,3 +23,20 @@ Filter Filter::lpf(float cutoff_radians) return Filter(a0, a1, a2, b0, b1, b2); } + +Filter Filter::hpf(float cutoff_radians) +{ + float resonance = 1.0f / sqrt(2.0f); + float sn = sin(cutoff_radians), cs = cos(cutoff_radians); + float alpha = float(sn / (2 * resonance)); + + // coefficients for highpass filter + float a0 = 1 + alpha; + float b0 = (1 + cs) * 0.5f; + float b1 = -(1 + cs); + float b2 = b0; + float a1 = -2 * cs; + float a2 = 1 - alpha; + + return Filter(a0, a1, a2, b0, b1, b2); +}