Algebraic minimum-phase variant of sinc function

DSP, Plugin and Host development discussion.
RELATED
PRODUCTS

Post

To remove the problems around nyquist you could also use a higher order transformation (as suggested by RBJ). Or you could calculate the spectral difference between the original analog filter and the IIR Biquad to design a short additional FIR filter. This filter can be created for example by zeroing the phase, to make a linear phase correction filter. However I think it's more useful if it is minimum phase, so you'll need the linear phase->minimum phase transformation.
This method I now call Christian's filter design method ;-)

Post

Christian Budde wrote:To remove the problems around nyquist you could also use a higher order transformation (as suggested by RBJ). Or you could calculate the spectral difference between the original analog filter and the IIR Biquad to design a short additional FIR filter. This filter can be created for example by zeroing the phase, to make a linear phase correction filter. However I think it's more useful if it is minimum phase, so you'll need the linear phase->minimum phase transformation.
This method I now call Christian's filter design method ;-)
You are without doubts a clever guy. 'Additional FIR filter' is a good solution, but it increases filter order.

I still have hopes to find a way to extend method offered by me into a usable one.
Image

Post

Aleksey Vaneev wrote:'Additional FIR filter' is a good solution, but it increases filter order.
Details...

Post

Christian Budde wrote:Details...
Devil is in the details, you know...
Image

Post

so you're going to sinc-interpolate filter coefficients. i can see, that this should work in the FIR-case - you say that it works for the feedback-path too, because it basically IS a FIR applied in a feedback path - did i get that right? jaaa, seems to make sense. however the problem with frequency-warping due to the bilinear transform has been solved for eq's by mr. orfanidis:

http://www.ece.rutgers.edu/~orfanidi/ece521/peq.pdf

have you considered to the scale the angles of the poles and zeros instead of interpolating coeffs? not sure if this will work, but it makes intuively sense (at least to me)

the devil is always in the detail!
My website: rs-met.com, My presences on: YouTube, GitHub, Facebook

Post

braindoc wrote:so you're going to sinc-interpolate filter coefficients. i can see, that this should work in the FIR-case - you say that it works for the feedback-path too, because it basically IS a FIR applied in a feedback path - did i get that right? jaaa, seems to make sense. however the problem with frequency-warping due to the bilinear transform has been solved for eq's by mr. orfanidis:

http://www.ece.rutgers.edu/~orfanidi/ece521/peq.pdf

have you considered to the scale the angles of the poles and zeros instead of interpolating coeffs? not sure if this will work, but it makes intuively sense (at least to me)

the devil is always in the detail!
Orfanidis PEQ does not produce good shape PEQ - it does have a 'prescribed' gain at Nyquist (/2) freq, but bell's shape as far as I know, is distorted a lot.

IIR (recursive) part is a FIR, but working as a deconvolution. This is a nice piece of knowledge as well (strangely I've not encountered it anywhere) - since knowing this fact alone helps to produce stable IIR filters (response of this IIR part should not contain zero spectral components from 0 to pi to be stable - can't see any other unstability reasons).

Another 'derivative' piece of knowledge is that you can simply swap IIR and FIR parts, and have an exact inverse filter (be sure to check FIR part for zero spectral components first).

I have not 'mastered' poles and zeros design yet. I know how it works and how poles/zeros are transformed into filter coefficients, but I do not see a logic behind putting poles/zeros in certain places - looks like a voodoo, and you may be sure you've put them correctly only after obtaining real FIR+IIR filter coefficients.
Image

Post

voodoo? i find, to think in terms of poles and zeros is the most straightforward way to think about filters, there is. when you start with a biquad with real coefficients and convert them into poles and zeros (by finding the roots of the quadratic polynomials), you'll end up with either two real poles (or zeros) or two complex conjugate poles (or zeros). in the case of a modification of complex conjugate poles (zeros), all you need to ensure real coeffs is to modify them always pair-wise. after such a modification you convert back to biquad coeffs by simply multiplying out the two first order complex transfer-functions. if everything has gone right, the imaginary parts of the biquad-coeffs must vanish.
My website: rs-met.com, My presences on: YouTube, GitHub, Facebook

Post

braindoc, the most 'bad' problem with z-plane pole/zero design is that it does not take z-phase shift into account. So, you can't count for stable shape when moving poles/zeros around unit circle. When you are close to pi you have one shape, when you are close to 0 you have another shape (so your example with pole/zero angle scaling won't work out of the box).
Image

Post

Another obvious, but useful knowledge about FIR/IIR parts is that you can process them separately. For example, when you have 5 peaking filters, you may recombine them into a single filter, with a high probability of order reduction. E.g. instead of 10th order (if you run them in sequence) you may obtain 8th order filter in a straightforward way: by first convolving FIR parts of all filters, and then convolving IIR parts of all filters. It is probable that some left-most or right-most coefficients in resulting lots will turn into zeros, and you may safely skip them thus reducing overall filter order (and maybe group delay).

Also FIR processing part can be assembled into a more efficient code fragment. IIR part filtering may follow in another code fragment, running independently.
Image

Post

z phase shift? what is this? but yeah, the shape changes a bit when moving the poles and zeros around. you want to just shift the exact shape of the freq-response left or right, i guess?

as for the order-truncation - i would be very careful with doing such dirty things with high order (direct-form) IIR's. i found that i can easily run into instable operation with orders above 12-16 even without any truncation (double presicion design of z-plane poles and zeros -> convolution of the (complex) linear factors to get the coeffs). any approximation can make that only worse, i think. but nowadays i prefer to use biquad-cascades instead of direct-form anyway - numerical problems automagically disappear
My website: rs-met.com, My presences on: YouTube, GitHub, Facebook

Post

braindoc wrote:z phase shift? what is this? but yeah, the shape changes a bit when moving the poles and zeros around. you want to just shift the exact shape of the freq-response left or right, i guess?
z phase-shift is the complex phase-shift signal takes when you move it forward or backward by 1 sample relative to sample at 'time zero'. (by complex I mean that each spectral component is rotated by some degree - frequency at pi takes most phase-shift: +/- pi radians, frequencies near 0 take almost no phase-shift).
braindoc wrote:as for the order-truncation - i would be very careful with doing such dirty things with high order (direct-form) IIR's. i found that i can easily run into instable operation with orders above 12-16 even without any truncation (double presicion design of z-plane poles and zeros -> convolution of the (complex) linear factors to get the coeffs). any approximation can make that only worse, i think. but nowadays i prefer to use biquad-cascades instead of direct-form anyway - numerical problems automagically disappear
As I've said, IIR filter's stability is not a magical thing - it can be proved (frequency response should not have any dips that turn into zeros, and that gain change span inbetween 0 and pi can be represented by floating point value - e.g. if gain change span is near 80 dB you may use 32-bit floats, if it is larger you have to use better resolution - otherwise spectral components where gain suppression is greatest will be truncated thus leading to unstability).

Beside that I was talking about removing zero left-most and right-most elements - this is not a kernel truncation.
Last edited by Aleksey Vaneev on Sun Mar 04, 2007 7:41 pm, edited 2 times in total.
Image

Post

By the way, peaking filters with low center frequencies absolutely require 64-bit resolution, because if you study their FIR parts you'll see that gain change spans 80 dB (from low frequencies to high frequencies). This means that resolution of lower frequencies is lowered by 80 dB relative to high frequencies, add 90 dB of dynamic range, and you have 170 dB of difference between the quietest low-freq signal, and the loudest high-freq signal, while 32-bit floats have 144 dB dynamic range (it is scalable, but that's why I'm talking about 170 dB difference).

(it is a bit of number mangling, but you get the idea).
Image

Post

i'm not sure if i understand your stabilty criterion - you say, the sequence of a-coefficients (viewed as a FIR-filter impulse response) should not have zeros in its fourier transform in order to ensure stability?
My website: rs-met.com, My presences on: YouTube, GitHub, Facebook

Post

braindoc wrote:i'm not sure if i understand your stabilty criterion - you say, the sequence of a-coefficients (viewed as a FIR-filter impulse response) should not have zeros in its fourier transform in order to ensure stability?
Yes, this is right - it should not have zeros in its power spectrum (otherwise response inversion/deconvolution is unrealizable).
Image

Post

mmhh. interesting. must think about it...
My website: rs-met.com, My presences on: YouTube, GitHub, Facebook

Post Reply

Return to “DSP and Plugin Development”