You need the transfer function. Then to get the response you compute the complex number result by plugging in the ratio of the frequency you want to the cutoff of the filter.

Here’s an example for a one-pole low-pass filter.

Transfer function is: H(s) = 1 / (1 + s)

Let: ratio = frequency_to_measure / filter_cutoff

Then H(i * ratio) = 1 / (1 + i * ratio)

Then you take the amplitude of the result for the frequency response or the phase of the result for the phase response.

Here’s some code even:

```
float ratio = frequency_to_measure / filter_cutoff;
std::complex<float> numerator(1.0f, 0.0f);
std::complex<float> denominator(1.0f, ratio);
std::complex<float> result = one_pole_mult / one_pole_shift;
float amplitude_response = std::abs(result);
float phase_response = std::arg(result);
```

Just do that with the transfer function for the ladder filter instead. As @IvanC pointed out this method can only give you the result of the *linear* version (without distortions). You can’t show the non-linear version because the response is dependent on the audio input.

@Holy_City just beat me to recommending this book.