Forums

Chebyshev IIR - how to achieve band-pass tranform?

Started by Michael January 10, 2006
Hello newsgroup,

the book "Guide to Signal Processing" shows a recursive filter, the 
chebyshev filter, implemented either as LowPass or as HighPass version.

How can you use a Chebyshev in a singel stage as a BandPass filter?

A BandPass implemented as FIR is formed by adding the Low- and HighPass 
filter kernel.

So, is it possible to perform such an action with Chebyshev as well (e.g. 
adding the coefficients)?

Or is it the only possible solution to use first a Chebyshev LP, and second 
a Chebyshev HP in order to obtain a Chebyshev band-pass?

Thanks a lot, Michael 


Michael wrote:
> Hello newsgroup, > > the book "Guide to Signal Processing" shows a recursive filter, the > chebyshev filter, implemented either as LowPass or as HighPass version. > > How can you use a Chebyshev in a singel stage as a BandPass filter? > > A BandPass implemented as FIR is formed by adding the Low- and HighPass > filter kernel. > > So, is it possible to perform such an action with Chebyshev as well (e.g. > adding the coefficients)? > > Or is it the only possible solution to use first a Chebyshev LP, and second > a Chebyshev HP in order to obtain a Chebyshev band-pass?
The main method to design a Discrete-time IIR filter is this: - Set up your filters pecification in discrete-time domain - Pre-warp the specification to continuous-time domain - Estimate the filter order necessary to meet the specification - Design a normalized LP prototype of this order - Use the BLT to transform to discrete-time domain - Use a frequency transform to convert from LP to BP. The last two step may be reversed. Note that the filter is formulated as a cascade of 2nd and 1st order sections throughout this process. Rune
Hello

> - Set up your filters pecification in discrete-time domain > - Pre-warp the specification to continuous-time domain > - Estimate the filter order necessary to meet the specification > - Design a normalized LP prototype of this order > - Use the BLT to transform to discrete-time domain > - Use a frequency transform to convert from LP to BP. > > The last two step may be reversed. Note that the filter is formulated > as a cascade of 2nd and 1st order sections throughout this process. >
Filter design seems to be very complex according to the steps written above. Well, Chebyshev filter seem to me like a box of magic. So, what does BLT mean? Due to "The Scientist and Engineer's Guide to DSP" you just have to specify your cutoff freq, number of poles, filter type(HP or LP). Then the sub routine calculates the A and B coefficients. These coefficients are used to calculate the outpu samples in a recursive way. By the way, has anyone of you implemented the Chebyshef-code printed in the book "Guide to DSP"? I get a distorted output file when coming more and more closer to the cutoff value 0.5 By using 0.5 as value for cutoff the output samples are all distorted. By using 0.48 as cutoff the output song starts with distortion. The heavy distortion at the beginning of the output file transforms than into normal filtered sound. A value of 0.1 works fine for the whole song (no distortion at the beginning). The A and B coefficients are calculated properly according to the table for Chebyshev coefficients printed in the book. I cannot explain this strange behavior. Perhaps my recursive calculation is wrong? for( long i = sNumberPoles; i < in.getBufferSize(); i++ ) { out.mBuffer[i] = RecursionCoefficientsA[0] * in.mBuffer[i]; for( short int j = 1; j <= sNumberPoles; j++ ) out.mBuffer[i] = out.mBuffer[i] + RecursionCoefficientsA[j] * in.mBuffer[i-j] + RecursionCoefficientsB[j] * out.mBuffer[i-j]; } Ciao, Michael
"Michael" <femi@hrz.tu-chemnitz.de> writes:

> > So, what does BLT mean? >
Bacon, Lettuce & Tomato. :-) Actually I think it's "bilinear transformation". Ciao, Peter K. -- "And he sees the vision splendid of the sunlit plains extended And at night the wondrous glory of the everlasting stars."
Michael wrote:
> Hello > > > - Set up your filters pecification in discrete-time domain > > - Pre-warp the specification to continuous-time domain > > - Estimate the filter order necessary to meet the specification > > - Design a normalized LP prototype of this order > > - Use the BLT to transform to discrete-time domain > > - Use a frequency transform to convert from LP to BP. > > > > The last two step may be reversed. Note that the filter is formulated > > as a cascade of 2nd and 1st order sections throughout this process. > > > > Filter design seems to be very complex according to the steps written above. > Well, Chebyshev filter seem to me like a box of magic. > > So, what does BLT mean? > > Due to "The Scientist and Engineer's Guide to DSP" you just have to specify > your cutoff freq, number of poles, filter type(HP or LP). Then the sub > routine calculates the A and B coefficients. These coefficients are used to > calculate the outpu samples in a recursive way.
Yep. But how do you know what order to specify? The above procedure takes care of all that.
> By the way, has anyone of you implemented the Chebyshef-code printed in the > book "Guide to DSP"? > > I get a distorted output file when coming more and more closer to the cutoff > value 0.5
And the value 1 corresponds to the sampling frequency? If so, that's as expected.
> By using 0.5 as value for cutoff the output samples are all distorted. > By using 0.48 as cutoff the output song starts with distortion. The heavy > distortion at the beginning of the output file transforms than into normal > filtered sound. > A value of 0.1 works fine for the whole song (no distortion at the > beginning). > The A and B coefficients are calculated properly according to the table for > Chebyshev coefficients printed in the book. > > I cannot explain this strange behavior. > Perhaps my recursive calculation is wrong?
I don't know about your calculations. What the filter is concerned, you are probably pushing the filter cut-off frequency right up agains the Nyquist frequency. If you do that, all sorts of strange things happen. What you see is what is to be expected.
> for( long i = sNumberPoles; i < in.getBufferSize(); i++ ) > { > out.mBuffer[i] = RecursionCoefficientsA[0] * in.mBuffer[i]; > for( short int j = 1; j <= sNumberPoles; j++ ) > out.mBuffer[i] = out.mBuffer[i] + RecursionCoefficientsA[j] * > in.mBuffer[i-j] + RecursionCoefficientsB[j] * out.mBuffer[i-j]; > } > > Ciao, Michael
Rune
you can also be having overflow problems internal to the filter
calculations...

does the distortion improve if you reduce the input signal amplitude?

what type of distortion are you having?

Mar

Hi,

> you can also be having overflow problems internal to the filter > calculations... > > does the distortion improve if you reduce the input signal amplitude? > > what type of distortion are you having? > > Mar >
I have tested the Chebyshev with different amplitudes of the input signal. I know that problem in connection with my FIR filters. There I got a strange output by filtering a sinus wave, which showed a "huge"(?) amplitude. All in all, it is the problem of coming closer to the Nyquist freq, e.g. I have 44100Hz input, cutoff 0.5 or 0.495, and strange things happen: type of distortion: Well, it is different to describe, so you can find my output files here: http://www-user.tu-chemnitz.de/~femi/cheb/ 0.5c means cutoff value 4p stands for number of poles Ciao, Michael
Hi,

>> I get a distorted output file when coming more and more closer to the >> cutoff >> value 0.5 > > And the value 1 corresponds to the sampling frequency? If so, that's as > expected. > > What the filter is concerned, you > are probably pushing the filter cut-off frequency right up agains the > Nyquist > frequency. If you do that, all sorts of strange things happen. What you > see is what is to be expected.
Your are right, the value 0.5 is the Nyquist freq. The strange behavior I mentioned appears by pushing the filter-cutoff-freq agains 0.5 as well as against 0.0. So this strange behavior is "normal"? But my implemented FIR-filters are able to cut frequencies near the nyquist freq (using a value of 0.5 does not show any abnormal things). Bye, Michael