>> 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

Reply by Michael●January 14, 20062006-01-14

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

Reply by Mark●January 13, 20062006-01-13

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

Reply by Rune Allnor●January 13, 20062006-01-13

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

Reply by ●January 12, 20062006-01-12

"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."

Reply by Michael●January 12, 20062006-01-12

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

Reply by Rune Allnor●January 12, 20062006-01-12

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

Reply by Michael●January 10, 20062006-01-10

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