DSPRelated.com
Forums

Audio output distorted with any FFT windowing other than rectangular

Started by tomb18 April 16, 2015
Hi,
For an experiment i have a simple application that takes a quadrature
signal from a radio and then does the following:
Complex FFT -> Inverse FFT -> Cartesian to Polar -> audio out
If I tune the radio to an AM signal I can demodulate it perfectly well by
this but it depends on how the FFT is processed.
In the FFT routine, I apply a window and if it is anything other than a
rectangular window the sound is distorted even to the point where it's
only noise.  The same thing if there is any FFT sample overlap.  Why is
this the case?
As I mentioned this is an experiment.  I already have a fully functional
spectrum scope which provides very good resolution using a Blackman window
and sample overlap.  I wish to add demodulation of the signals in the
frequency domain starting from the spectrum but this is problematic.
Thanks for any insight (I'm a beginner in DSP).
---------------------------------------
Posted through http://www.DSPRelated.com
Your question is missing many details. I assume you are doing the following

1) fill the fft input buffer with complex samples 
2) fft, then inverse fft
3) take the complex values in the output buffer and convert to polar. 

While you didn't say this, I assume the output you use is just the magnitude portion of the polar output (the angle is thrown away so don't bother computing it)

So, a few points. 
The fft/inverse fft just cancel each other so the output buffer equals the input buffer. Were you planning to do some filtering in the frequency domain ? If not then the whole scheme is just wasting the fft/inverse fft and you could just compute the magnitude of the original complex signal on a sample-by-sample basis. 

If you ARE planning on doing some filtering in the frequency domain then you need to use the conventional overlap-add method of reconstructing the time-domain signal, followed by taking the magnitude of the resulting samples. 

Note that none of the above can be described as AM demodulation in the frequency domain, since after the ifft you are back in the time domain. I've never heard of AM demodulation in the frequency domain, perhaps it exists, I'm not a comms expert. 

Bob

On Thu, 16 Apr 2015 07:41:50 -0500, "tomb18" <103312@DSPRelated>
wrote:

>Hi, >For an experiment i have a simple application that takes a quadrature >signal from a radio and then does the following: >Complex FFT -> Inverse FFT -> Cartesian to Polar -> audio out >If I tune the radio to an AM signal I can demodulate it perfectly well by >this but it depends on how the FFT is processed. >In the FFT routine, I apply a window and if it is anything other than a >rectangular window the sound is distorted even to the point where it's >only noise. The same thing if there is any FFT sample overlap. Why is >this the case? >As I mentioned this is an experiment. I already have a fully functional >spectrum scope which provides very good resolution using a Blackman window >and sample overlap. I wish to add demodulation of the signals in the >frequency domain starting from the spectrum but this is problematic. >Thanks for any insight (I'm a beginner in DSP). >--------------------------------------- >Posted through http://www.DSPRelated.com
I'll second Bob's input. Without a better explanation of what you're doing, the FFT's cancel each other. Likewise, if you're doing magnitude detection after conversion to polar, you may want to describe details of that. So, it wouldn't be surprising if the windowing is hosing things up if the signal processing chain isn't doing useful things, anyway. Eric Jacobsen Anchor Hill Communications http://www.anchorhill.com
"tomb18" <103312@DSPRelated> writes:

> Hi, > For an experiment i have a simple application that takes a quadrature > signal from a radio and then does the following: > Complex FFT -> Inverse FFT -> Cartesian to Polar -> audio out > If I tune the radio to an AM signal I can demodulate it perfectly well by > this but it depends on how the FFT is processed. > In the FFT routine, I apply a window and if it is anything other than a > rectangular window the sound is distorted even to the point where it's > only noise. The same thing if there is any FFT sample overlap. Why is > this the case? > As I mentioned this is an experiment. I already have a fully functional > spectrum scope which provides very good resolution using a Blackman window > and sample overlap. I wish to add demodulation of the signals in the > frequency domain starting from the spectrum but this is problematic. > Thanks for any insight (I'm a beginner in DSP).
Hi, I second Bob and Eric's comments that we need more input to know for sure what you're doing, but let me make some comments and conjectures. In your first experiment, you might as well skip the FFTs. Doing a forward FFT followed by an inverse FFT is the same as doing nothing at all. So you might was well just say you're taking the original complex signal and computing the magnitude of it. Yeah, that's an AM demodulator. Secondly, if you're taking some intermediate signal from some software (e.g., from a scope) that computes a spectrum, and trying to use that to demodulate, then yup, that won't work. That's because processing a signal for spectral analysis (e.g., by applying a Blackman window) is not compatible with demodulation. -- Randy Yates Digital Signal Labs http://www.digitalsignallabs.com
On 4/16/15 8:18 PM, Randy Yates wrote:
> Doing a forward FFT followed by an inverse FFT is the same as doing > nothing at all.
quantization error. maybe that's the effect the OP wants. :) one way of testing an FFT/iFFT is to do exactly that, subtract the original, and see how close you you get to nothing at all. i remember doing that in the 1980s when i wrote my first simple FFT (which i have posted a while ago and also recently). i also did that with resampling algs where i would stretch it by a factor of 513/512 (because i had 512 fractional delays in my sinc() lookup table) and then follow that with 512/513 and see how close the result was to the original. this would test for LPF effect, alias distortion, in addition to quantization error. if i lined my ducks up well, i could do a direct subtraction of the original. doing nothing at all is sorta an art. -- r b-j rbj@audioimagination.com "Imagination is more important than knowledge."
Many thanks to all that replied!
Starting here I will explain this a little more.
1)Yes the FFT input buffer is filled with complex samples.
2)I take the complex FFT and output it to the inverse FFT.  I also take
the complex FFT and plot it in a spectrum (this is independent of the
demodulation).
3) I take the complex values in the output buffer and convert to polar.
4) I only take the magnitude.

The first point is better explained by my overall goal which is to provide
a spectrum scope for a software defined radio.  This is functional and
works very well.  I now wish to isolate signals (SSB or AM) from the
spectrum, which can be anywhere over the whole range of 192kHz (I sample
at 192kHz and plot positive and negative frequencies.  The radio provides
a quadrature output).
So my test application is just demodulating signals around 0-3kHz i.e. in
the center of the spectrum. By tuning the radio manually, I can get the
signals down to this frequency range and then demodulate.
So the overall flow is:
Stereo audio (I and Q fed into left and right channels), Sampling at
192kHz,
FFT with blackman, plotting of spectrum (with IQ balance control).
Now I can take the FFT with rectangular windowing, inverse FFT, then for
AM I convert to polar and take the magnitude.  Then it's off to the audio
out.
For USB I take the output of the inverse fourier, take the imaginary
values, send them through a hilbert transform and subtract the shifted
values from the real.Then it's out to the audio. For LSB its the same
except it's added.
All of this works well.
So my original question is why did the audio become distorted when I used
a blackman window.  That has been explained by Randy.

My ultimate goal however (and I am a beginner here!) is to isolate a
signal in the frequency domain and bring it down to 0 hz.
Next I need a bandpass filter.  I then need to pass this filter through an
inverse FFT, apply windowing to this filter.  Next do an FFT on this
filter and multiply it with the original signals FFT.  After this I do an
iFFT with the overlap add procedure.  Whew!  This is why I started with
the simple case above.
So, my next questions are about the bandpass filter.  How does one create
one, and also how does one apply an iFFT to it?
Assuming that there is an equation for the bandpass filter, does one just
create a buffer containing the results of the filter from -0.5 to +0.5 and
using the value of "1" as the input?  Do you then send this buffer to the
inverse FFT?  I think this is the one area where I have not really seen an
explanation of this.
I really appreciate the help here as things are not always clear.
Regards, Tom

>Your question is missing many details. I assume you are doing the >following > >1) fill the fft input buffer with complex samples >2) fft, then inverse fft >3) take the complex values in the output buffer and convert to >polar. > >While you didn't say this, I assume the output you use is just the >magnitude portion of the polar output (the angle is thrown away so don't
bother
>computing it) > >So, a few points. >The fft/inverse fft just cancel each other so the output buffer equals >the input buffer. Were you planning to do some filtering in the
frequency
>domain ? If not then the whole scheme is just wasting the fft/inverse fft
and
>you could just compute the magnitude of the original complex signal on a >sample-by-sample basis. > >If you ARE planning on doing some filtering in the frequency domain then >you need to use the conventional overlap-add method of reconstructing
the
>time-domain signal, followed by taking the magnitude of the resulting >samples. > >Note that none of the above can be described as AM demodulation in the >frequency domain, since after the ifft you are back in the time domain.
I've
>never heard of AM demodulation in the frequency domain, perhaps it
exists,
>I'm not a comms expert. > >Bob
--------------------------------------- Posted through http://www.DSPRelated.com
I'm not going to fix your top-posting, so this is just going to be a
mess from here if the thread continues.

You're doing things the hard way, IMHO.

You don't need to take an FFT and then an iFFT.    Take the FFT, use
that for your spectrum analysis or whatever.    Take the same signal
that went into the FFT and mix whatever part of that you want to be at
zero-Hz with a complex mix operation (i.e., multiply sample-by-sample
with a complex tone at the appropriate frequency).

You can then apply a low-pass filter to isolate the signal that you
want before detecting the magnitude.

That'll save a ton of computation and avoid all the hassles with
overlap-add, etc.   A LPF is much easier to design and implement than
a BPF.



On Fri, 17 Apr 2015 10:41:17 -0500, "tomb18" <103312@DSPRelated>
wrote:

>Many thanks to all that replied! >Starting here I will explain this a little more. >1)Yes the FFT input buffer is filled with complex samples. >2)I take the complex FFT and output it to the inverse FFT. I also take >the complex FFT and plot it in a spectrum (this is independent of the >demodulation). >3) I take the complex values in the output buffer and convert to polar. >4) I only take the magnitude. > >The first point is better explained by my overall goal which is to provide >a spectrum scope for a software defined radio. This is functional and >works very well. I now wish to isolate signals (SSB or AM) from the >spectrum, which can be anywhere over the whole range of 192kHz (I sample >at 192kHz and plot positive and negative frequencies. The radio provides >a quadrature output). >So my test application is just demodulating signals around 0-3kHz i.e. in >the center of the spectrum. By tuning the radio manually, I can get the >signals down to this frequency range and then demodulate. >So the overall flow is: >Stereo audio (I and Q fed into left and right channels), Sampling at >192kHz, >FFT with blackman, plotting of spectrum (with IQ balance control). >Now I can take the FFT with rectangular windowing, inverse FFT, then for >AM I convert to polar and take the magnitude. Then it's off to the audio >out. >For USB I take the output of the inverse fourier, take the imaginary >values, send them through a hilbert transform and subtract the shifted >values from the real.Then it's out to the audio. For LSB its the same >except it's added. >All of this works well. >So my original question is why did the audio become distorted when I used >a blackman window. That has been explained by Randy. > >My ultimate goal however (and I am a beginner here!) is to isolate a >signal in the frequency domain and bring it down to 0 hz. >Next I need a bandpass filter. I then need to pass this filter through an >inverse FFT, apply windowing to this filter. Next do an FFT on this >filter and multiply it with the original signals FFT. After this I do an >iFFT with the overlap add procedure. Whew! This is why I started with >the simple case above. >So, my next questions are about the bandpass filter. How does one create >one, and also how does one apply an iFFT to it? >Assuming that there is an equation for the bandpass filter, does one just >create a buffer containing the results of the filter from -0.5 to +0.5 and >using the value of "1" as the input? Do you then send this buffer to the >inverse FFT? I think this is the one area where I have not really seen an >explanation of this. >I really appreciate the help here as things are not always clear. >Regards, Tom
>>Your question is missing many details. I assume you are doing the >>following >> >>1) fill the fft input buffer with complex samples >>2) fft, then inverse fft >>3) take the complex values in the output buffer and convert to >>polar. >> >>While you didn't say this, I assume the output you use is just the >>magnitude portion of the polar output (the angle is thrown away so don't >bother >>computing it) >> >>So, a few points. >>The fft/inverse fft just cancel each other so the output buffer equals >>the input buffer. Were you planning to do some filtering in the >frequency >>domain ? If not then the whole scheme is just wasting the fft/inverse fft >and >>you could just compute the magnitude of the original complex signal on a >>sample-by-sample basis. >> >>If you ARE planning on doing some filtering in the frequency domain then >>you need to use the conventional overlap-add method of reconstructing >the >>time-domain signal, followed by taking the magnitude of the resulting >>samples. >> >>Note that none of the above can be described as AM demodulation in the >>frequency domain, since after the ifft you are back in the time domain. >I've >>never heard of AM demodulation in the frequency domain, perhaps it >exists, >>I'm not a comms expert. >> >>Bob > > >--------------------------------------- >Posted through http://www.DSPRelated.com
Eric Jacobsen Anchor Hill Communications http://www.anchorhill.com
>I'm not going to fix your top-posting, so this is just going to be a >mess from here if the thread continues. > >You're doing things the hard way, IMHO. > >You don't need to take an FFT and then an iFFT. Take the FFT, use >that for your spectrum analysis or whatever. Take the same signal >that went into the FFT and mix whatever part of that you want to be at >zero-Hz with a complex mix operation (i.e., multiply sample-by-sample >with a complex tone at the appropriate frequency). > >You can then apply a low-pass filter to isolate the signal that you >want before detecting the magnitude. > >That'll save a ton of computation and avoid all the hassles with >overlap-add, etc. A LPF is much easier to design and implement than >a BPF. > > > >On Fri, 17 Apr 2015 10:41:17 -0500, "tomb18" <103312@DSPRelated> >wrote: > >>Many thanks to all that replied! >>Starting here I will explain this a little more. >>1)Yes the FFT input buffer is filled with complex samples. >>2)I take the complex FFT and output it to the inverse FFT. I also >take >>the complex FFT and plot it in a spectrum (this is independent of the >>demodulation). >>3) I take the complex values in the output buffer and convert to >polar. >>4) I only take the magnitude. >> >>The first point is better explained by my overall goal which is to >provide >>a spectrum scope for a software defined radio. This is functional and >>works very well. I now wish to isolate signals (SSB or AM) from the >>spectrum, which can be anywhere over the whole range of 192kHz (I >sample >>at 192kHz and plot positive and negative frequencies. The radio >provides >>a quadrature output). >>So my test application is just demodulating signals around 0-3kHz i.e. >in >>the center of the spectrum. By tuning the radio manually, I can get >the >>signals down to this frequency range and then demodulate. >>So the overall flow is: >>Stereo audio (I and Q fed into left and right channels), Sampling at >>192kHz, >>FFT with blackman, plotting of spectrum (with IQ balance control). >>Now I can take the FFT with rectangular windowing, inverse FFT, then >for >>AM I convert to polar and take the magnitude. Then it's off to the >audio >>out. >>For USB I take the output of the inverse fourier, take the imaginary >>values, send them through a hilbert transform and subtract the shifted >>values from the real.Then it's out to the audio. For LSB its the same >>except it's added. >>All of this works well. >>So my original question is why did the audio become distorted when I >used >>a blackman window. That has been explained by Randy. >> >>My ultimate goal however (and I am a beginner here!) is to isolate a >>signal in the frequency domain and bring it down to 0 hz. >>Next I need a bandpass filter. I then need to pass this filter through >an >>inverse FFT, apply windowing to this filter. Next do an FFT on this >>filter and multiply it with the original signals FFT. After this I do >an >>iFFT with the overlap add procedure. Whew! This is why I started >with >>the simple case above. >>So, my next questions are about the bandpass filter. How does one >create >>one, and also how does one apply an iFFT to it? >>Assuming that there is an equation for the bandpass filter, does one >just >>create a buffer containing the results of the filter from -0.5 to +0.5 >and >>using the value of "1" as the input? Do you then send this buffer to >the >>inverse FFT? I think this is the one area where I have not really seen >an >>explanation of this. >>I really appreciate the help here as things are not always clear. >>Regards, Tom > > >>>Your question is missing many details. I assume you are doing the >>>following >>> >>>1) fill the fft input buffer with complex samples >>>2) fft, then inverse fft >>>3) take the complex values in the output buffer and convert to >>>polar. >>> >>>While you didn't say this, I assume the output you use is just the >>>magnitude portion of the polar output (the angle is thrown away so >don't >>bother >>>computing it) >>> >>>So, a few points. >>>The fft/inverse fft just cancel each other so the output buffer >equals >>>the input buffer. Were you planning to do some filtering in the >>frequency >>>domain ? If not then the whole scheme is just wasting the fft/inverse >fft >>and >>>you could just compute the magnitude of the original complex signal on >a >>>sample-by-sample basis. >>> >>>If you ARE planning on doing some filtering in the frequency domain >then >>>you need to use the conventional overlap-add method of reconstructing >>the >>>time-domain signal, followed by taking the magnitude of the resulting >>>samples. >>> >>>Note that none of the above can be described as AM demodulation in >the >>>frequency domain, since after the ifft you are back in the time >domain. >>I've >>>never heard of AM demodulation in the frequency domain, perhaps it >>exists, >>>I'm not a comms expert. >>> >>>Bob >> >> >>--------------------------------------- >>Posted through http://www.DSPRelated.com > >Eric Jacobsen >Anchor Hill Communications >http://www.anchorhill.com
Hi, Sorry about the top posting....I subscribe to mailing lists often and the ones I subscribe to suggest top posting. Well I'll be....you are right. I just tried this taking the IQ signal off before it goes into the FFT and as expected, all the demodulation I did works exactly the same. No need for an inverse FFT. Not only that, getting rid of the iFFT means there is now no noticeable delay. Much better. At the moment, I am just tuning the radio to get the signal to where I can hear it. Next, I need to do the multiplication with the complex tone but I have a question that will really show how little I know about all of this, lol. The IQ signals come from the sound card. The sampling is done at 192kHz and 4096 byte blocks are delivered at a time. I presume I just need to deal with one block at a time? Can I just multiply each signal ( I and Q) with a sine and cosine? Do I need to match the magnitudes in any way? Like I said, here i really don't know what I'm doing. Thanks, Tom --------------------------------------- Posted through http://www.DSPRelated.com
"tomb18" <103312@DSPRelated> writes:
> [...] > The IQ signals come from the sound card. The sampling is done at 192kHz > and 4096 byte blocks are delivered at a time. I presume I just need to > deal with one block at a time?
Yes, since multiplication is memoryless.
> Can I just multiply each signal ( I and Q) with a sine and cosine?
You could. You could also throw away every 2^8 - 1 real sample. Wouldn't work very well, but you could... You have two complex values, (x + i*y) and (w + i*v). Multiply those and see what you get.
> Do I need to match the magnitudes in any way?
The magnitude of the mixing signal should be 1. If you're working with floats, the multiplication is pretty much a matter of of implementing the result from previous section. If you're using integers (fixed-point), then it's much more complicated. -- Randy Yates Digital Signal Labs http://www.digitalsignallabs.com
On Fri, 17 Apr 2015 14:52:32 -0500, "tomb18" <103312@DSPRelated>
wrote:

>>I'm not going to fix your top-posting, so this is just going to be a >>mess from here if the thread continues. >> >>You're doing things the hard way, IMHO. >> >>You don't need to take an FFT and then an iFFT. Take the FFT, use >>that for your spectrum analysis or whatever. Take the same signal >>that went into the FFT and mix whatever part of that you want to be at >>zero-Hz with a complex mix operation (i.e., multiply sample-by-sample >>with a complex tone at the appropriate frequency). >> >>You can then apply a low-pass filter to isolate the signal that you >>want before detecting the magnitude. >> >>That'll save a ton of computation and avoid all the hassles with >>overlap-add, etc. A LPF is much easier to design and implement than >>a BPF. >> >> >> >>On Fri, 17 Apr 2015 10:41:17 -0500, "tomb18" <103312@DSPRelated> >>wrote: >> >>>Many thanks to all that replied! >>>Starting here I will explain this a little more. >>>1)Yes the FFT input buffer is filled with complex samples. >>>2)I take the complex FFT and output it to the inverse FFT. I also >>take >>>the complex FFT and plot it in a spectrum (this is independent of the >>>demodulation). >>>3) I take the complex values in the output buffer and convert to >>polar. >>>4) I only take the magnitude. >>> >>>The first point is better explained by my overall goal which is to >>provide >>>a spectrum scope for a software defined radio. This is functional and >>>works very well. I now wish to isolate signals (SSB or AM) from the >>>spectrum, which can be anywhere over the whole range of 192kHz (I >>sample >>>at 192kHz and plot positive and negative frequencies. The radio >>provides >>>a quadrature output). >>>So my test application is just demodulating signals around 0-3kHz i.e. >>in >>>the center of the spectrum. By tuning the radio manually, I can get >>the >>>signals down to this frequency range and then demodulate. >>>So the overall flow is: >>>Stereo audio (I and Q fed into left and right channels), Sampling at >>>192kHz, >>>FFT with blackman, plotting of spectrum (with IQ balance control). >>>Now I can take the FFT with rectangular windowing, inverse FFT, then >>for >>>AM I convert to polar and take the magnitude. Then it's off to the >>audio >>>out. >>>For USB I take the output of the inverse fourier, take the imaginary >>>values, send them through a hilbert transform and subtract the shifted >>>values from the real.Then it's out to the audio. For LSB its the same >>>except it's added. >>>All of this works well. >>>So my original question is why did the audio become distorted when I >>used >>>a blackman window. That has been explained by Randy. >>> >>>My ultimate goal however (and I am a beginner here!) is to isolate a >>>signal in the frequency domain and bring it down to 0 hz. >>>Next I need a bandpass filter. I then need to pass this filter through >>an >>>inverse FFT, apply windowing to this filter. Next do an FFT on this >>>filter and multiply it with the original signals FFT. After this I do >>an >>>iFFT with the overlap add procedure. Whew! This is why I started >>with >>>the simple case above. >>>So, my next questions are about the bandpass filter. How does one >>create >>>one, and also how does one apply an iFFT to it? >>>Assuming that there is an equation for the bandpass filter, does one >>just >>>create a buffer containing the results of the filter from -0.5 to +0.5 >>and >>>using the value of "1" as the input? Do you then send this buffer to >>the >>>inverse FFT? I think this is the one area where I have not really seen >>an >>>explanation of this. >>>I really appreciate the help here as things are not always clear. >>>Regards, Tom >> >> >>>>Your question is missing many details. I assume you are doing the >>>>following >>>> >>>>1) fill the fft input buffer with complex samples >>>>2) fft, then inverse fft >>>>3) take the complex values in the output buffer and convert to >>>>polar. >>>> >>>>While you didn't say this, I assume the output you use is just the >>>>magnitude portion of the polar output (the angle is thrown away so >>don't >>>bother >>>>computing it) >>>> >>>>So, a few points. >>>>The fft/inverse fft just cancel each other so the output buffer >>equals >>>>the input buffer. Were you planning to do some filtering in the >>>frequency >>>>domain ? If not then the whole scheme is just wasting the fft/inverse >>fft >>>and >>>>you could just compute the magnitude of the original complex signal on >>a >>>>sample-by-sample basis. >>>> >>>>If you ARE planning on doing some filtering in the frequency domain >>then >>>>you need to use the conventional overlap-add method of reconstructing >>>the >>>>time-domain signal, followed by taking the magnitude of the resulting >>>>samples. >>>> >>>>Note that none of the above can be described as AM demodulation in >>the >>>>frequency domain, since after the ifft you are back in the time >>domain. >>>I've >>>>never heard of AM demodulation in the frequency domain, perhaps it >>>exists, >>>>I'm not a comms expert. >>>> >>>>Bob >>> >>> >>>--------------------------------------- >>>Posted through http://www.DSPRelated.com >> >>Eric Jacobsen >>Anchor Hill Communications >>http://www.anchorhill.com > >Hi, >Sorry about the top posting....I subscribe to mailing lists often and the >ones I subscribe to suggest top posting. >Well I'll be....you are right. I just tried this taking the IQ signal off >before it goes into the FFT and as expected, all the demodulation I did >works exactly the same. No need for an inverse FFT. Not only that, >getting rid of the iFFT means there is now no noticeable delay. Much >better. >At the moment, I am just tuning the radio to get the signal to where I can >hear it. Next, I need to do the multiplication with the complex tone but >I have a question that will really show how little I know about all of >this, lol. >The IQ signals come from the sound card. The sampling is done at 192kHz >and 4096 byte blocks are delivered at a time. I presume I just need to >deal with one block at a time? Can I just multiply each signal ( I and Q) >with a sine and cosine? Do I need to match the magnitudes in any way? >Like I said, here i really don't know what I'm doing. >Thanks, Tom >--------------------------------------- >Posted through http://www.DSPRelated.com
Assuming the time between the blocks is the same as the time between the samples, it will be better to keep the phase of the mixer continuous across the edge of the blocks. In other words, don't reset the phase at the beginning of each block, or you may hear a pop or other artifact at the block edge. This may be less likely since you're ultimately demodulating AM, but if you do apply some filtering before detecting the AM you can wind up with artifacts at the block edges if you're not careful. Eric Jacobsen Anchor Hill Communications http://www.anchorhill.com