[comp.dsp] Why Don't My FFT Deconvolutions Work!!

alex@bilver.uucp (Alex Matulich) (02/09/91)

I am doing a project that involves "sharpening up" a two-dimensional radar
scan of an object.  This, of course, requires a convolution.

I know that this is normally done for visual images by operating a 3x3
kernel over each pixel in the image, such as
       -1  0 -1
        0  5  0
       -1  0 -1
however, my response function is more than 3 pixels wide.  (In fact, it is
a _different size_ in the x and y dimensions because the waveguide used to
scan the object is rectangular and has different beamwidths in each
direction).

I don't have the faintest idea how to make an arbitrary-sized sharpening
kernel, and furthermore I am unclear on how to re-scale things after
I'm done.  I'm more comfortable with FFT's, anyway, and I can precisely
define my response function too.

You will recall that the deconvolution of a function f with a response
function g is

F(f decon g) = F(f) / F(g)

where F() is the Fourier transform.  See the problem?  You have to DIVIDE
by the Fourier transform of g.  In all my experiments, for any response
function I try, F(g) is zero somewhere (or near zero) which completely
messes up the result.

As a simple experiment I tried convolving some arbitrary 1-D signal with
a response function and then deconvolving it to see if I got back what I
started with.  The convolution always works perfectly.  The deconvolution
is junk.

TELL ME!  HOW IS THIS DONE, REALLY?  What can I do to make it work?
Thanks in advance -- email replies and I'll summarize.

-- 
 _ |__  Alex Matulich   (alex@bilver.UUCP)
 /(+__>  Unicorn Research Corp, 4621 N Landmark Dr, Orlando, FL 32817
//| \     UUCP:  ...uunet!tarpit!bilver!alex
///__)     bitnet:  IN%"bilver!alex@uunet.uu.net"

cosgrok@jacobs.CS.ORST.EDU (Kevin Cosgrove) (02/14/91)

In article <1991Feb9.034956.7993@bilver.uucp> alex@bilver.uucp (Alex Matulich) writes:
[stuff deleted]
>You will recall that the deconvolution of a function f with a response
>function g is
>
>F(f decon g) = F(f) / F(g)
>
>where F() is the Fourier transform.  See the problem?  You have to DIVIDE
>by the Fourier transform of g.  In all my experiments, for any response
>function I try, F(g) is zero somewhere (or near zero) which completely
>messes up the result.

Don't get too frustrated.  We don't want to see you end up in a hospital
or anything -- geese that's it!  Could l'Hopital's rule help evaluate
the function when the denominator goes to zero?

If that doesn't work, you might try _Discrete-Time_Signal_Processing by
Oppenheim and Schafer via Prentice-Hall Pub. as a reference.  Chapter 12
covers deconvolution directly in the time domain, which could even be
faster while inducing less noise -- but I'm not sure since I won't get
to that chapter 'til next term.

__
--
Kevin Cosgrove <cosgrok@jacobs.cs.orst.edu>

cjwein@watcgl.waterloo.edu (Chris J. Wein) (02/15/91)

In article <1991Feb14.042835.5631@lynx.CS.ORST.EDU> cosgrok@jacobs.CS.ORST.EDU (Kevin Cosgrove) writes:
>In article <1991Feb9.034956.7993@bilver.uucp> alex@bilver.uucp (Alex Matulich) writes:
>[stuff deleted]
>>You will recall that the deconvolution of a function f with a response
>>function g is
>>
>>F(f decon g) = F(f) / F(g)
>>
>>where F() is the Fourier transform.  See the problem?  You have to DIVIDE
>>by the Fourier transform of g.  In all my experiments, for any response
>>function I try, F(g) is zero somewhere (or near zero) which completely
>>messes up the result.
>
>Don't get too frustrated.  We don't want to see you end up in a hospital
>or anything -- geese that's it!  Could l'Hopital's rule help evaluate
>the function when the denominator goes to zero?
>

L'Hopital's Rule only works when both the numerator and the denominator
become zero.  The best example is finding the value of (sin x)/x at x=0.
A singularity is a singularity and using l'Hopital's rule doesn't make it
go away magically.

-- 
==============================================================================
 Chris Wein                           | cjwein@watcgl.waterloo.edu 
 Computer Graphics Lab, CS Dept.      | cjwein@watcgl.uwaterloo.ca
 University of Waterloo               | (519) 888-4548