[PD] plotting freq response of [cpole~] (or "vcf")

Charles Z Henry czhenry at gmail.com
Tue Aug 12 21:52:18 CEST 2014


On Tue, Aug 5, 2014 at 2:24 PM, Alexandre Torres Porres
<porres at gmail.com> wrote:
> the tricky math thingy is that is, well, complex...
>
> worth noting is that the signal input is meant to be real, not complex, and
> that this still creates two outputs (real and imaginary), in other words, I
> needed to generate two frequency responses (one for the real and the other
> for the imaginary part).

Frequency response is normally computed in terms of magnitude and
phase--because the result of applying a filter is to multiply the
magnitudes and shift (add) the phases.

The magnitude can be calculated as the square root of the sum of
squares of the real and imaginary parts, and the phase can be
calculated as the arc-tan of the imaginary part divided by the real
part.

|H(w)| = sqrt( Re(H(w))^2 + Im(H(w))^2)

phase(H(w)) = atan( Im(H(w)) / Re(H(w)))

The units of phase will of course be the same as the units of your
arc-tan function (either radians or degrees).

> I just have no idea how to get there just by knowing [cpole~]'s transfer
> function is H(Z) = 1/(1 - aZ^-1)

Z^-1  =  e^(-i*w)    where w is the angular frequency

This is the basic relationship that defines a unit shift operator.
The phase shift is proportional to the frequency.

Notice this is in absolute terms with no mention of sampling frequency
(or as though sampled at 1 Hz).  The frequency ranges from -pi rad/sec
to +pi rad/sec.  To put it in terms of 'f' in Hz relative to the
sampling frequency, use

w=(2*pi/Fs) * f,  with Fs=sampling frequency in Hz

The next problem: you get a complex number in the denominator.
Multiply numerator and denominator by the conjugate and split into
real and imaginary parts before applying the magnitude and phase
calculations to get your spectrum.  Your coefficient 'a'  is a complex
number, so work carefully with the conjugate math to separate the real
and imaginary parts.

Chuck


>
> 2014-08-05 15:59 GMT-03:00 Alexandre Torres Porres <porres at gmail.com>:
>
>> Hi there, I have a patch based on mmb's work [filterplot.mmb]. It plots
>> frequency response from biquad coefficients. I have it attached, as a
>> default, it is plotting the freq response of a bandpass filter.
>>
>> So, I've been meaning to get the freq response of [vcf~] for a while now
>> and I have the intuition that this patch may be adapted for that. [By the
>> way, [vcf~] is basically a [cpole~] filter with the right coefficients and
>> gain adjustment.
>>
>> The heart of this freq response patch is the subpatch that deals with the
>> Z-Transform (that's what I believe anyway). In this case, it originally
>> deals with the Z-transform of the biquad filter, but I believe that if we
>> change it to cpole's tranfer function it'll work to plot vcf's frequency
>> response.
>>
>> Right? Did I nail it?
>>
>> Well, if so... I've recently succeeded in getting the vcf's coefficients
>> and gain to use them with [cpole~]. If you want you can check my patch
>> attached. I'm generating the cpole's coeficients and everything, but the
>> plotting subpatch still needs biquad coeficients to work. All that'd be
>> missing is adapting the formula for the transfer function to cpole's.
>>
>> cpole's help file says that its Transfer Function is: H(Z) = 1/(1 -
>> aZ^-1)... so it doesn't seem even hard to do it so. Unfortunately I'm just a
>> geeky musician with no math background and needed help getting down to it. I
>> tried some stuff in the dark and failed.
>>
>> thanks
>> Alex
>
>
>
> _______________________________________________
> Pd-list at lists.iem.at mailing list
> UNSUBSCRIBE and account-management ->
> http://lists.puredata.info/listinfo/pd-list
>



More information about the Pd-list mailing list