DSPRelated.com
Forums

Pre-compensation of transient response

Started by Bob Masta February 22, 2015
On Sun, 22 Feb 2015 15:30:18 -0800, Mac Decman
<dearman.mark@gmail.com> wrote:

>On Sun, 22 Feb 2015 14:20:55 GMT, N0Spam@daqarta.com (Bob Masta) >wrote: > >>I have a user who wants to produce high-intensity acoustic >>tone bursts for SODAR (acoustic radar). The transducer adds >>an unwanted transient overshoot and ringing. >> >>The same tone burst will be used repeatedly. It occurs to me >>that the digitally-generated driving signal to the >>transducer could be pre-compensated to produce an acoustic >>signal of the desired shape. My first thought is that this >>could be done by deconvolution of the desired signal with >>the measured impulse response of the transducer. >> >>But somehow this just "feels wrong"... seems to me that the >>raw, uncompensated burst response should somehow be involved >>directly. >> >>It also seems certain that this must be a common issue that >>has long been solved... I just haven't found the right magic >>words to describe it to Google. >> >>So, my question to the group is what is this process called? >>Any hints or tips? >> >>Many thanks, >> >> >>Bob Masta >> >> DAQARTA v7.60 >> Data AcQuisition And Real-Time Analysis >> www.daqarta.com >>Scope, Spectrum, Spectrogram, Sound Level Meter >> Frequency Counter, Pitch Track, Pitch-to-MIDI >> FREE Signal Generator, DaqMusiq generator >> Science with your sound card! > >Can't you just use something like a raised cosine pulse shaping filter >and then compensate for that in the matched filter you use for >recovery? > >Mark
Good question. I was assuming that the user needed a reasonably-sharp onset for best temporal resolution of the echo returns. Best regards, Bob Masta DAQARTA v7.60 Data AcQuisition And Real-Time Analysis www.daqarta.com Scope, Spectrum, Spectrogram, Sound Level Meter Frequency Counter, Pitch Track, Pitch-to-MIDI FREE Signal Generator, DaqMusiq generator Science with your sound card!
On Mon, 23 Feb 2015 13:37:16 GMT, N0Spam@daqarta.com (Bob Masta) wrote:

>Thanks. I assume linearity... it's a high-power >loudspeaker, so there will certainly be some nonlinearity, >but that's not the issue so much as the ringing, etc. > >Anyway, please forgive my ignorance: How does one actually >go about using your proposed method? I can certainly >measure the impulse response, but I'm not sure how to find >the transfer function in terms of poles and zeroes... >doesn't seem like it will be straightforward.
Well, assuming that it's an individual loudspeaker driver in some sort of enclosure, if you have the Thiele/Small parameters and the box alignment (sealed, vented, bandpass, etc.) you can use all of that to create an approximation of the analogous s-domain filter (usually highpass), and get the transfer function from that. If you want more detail than that, i.e., you want to know the actual transfer function of the actual unit under test, then it becomes a system identification problem, which is nontrivial. If you search for "system identification" you will find as many ways to do that as there are people to invent them. One of the best methods that I have found for approximating the transfer function of a loudspeaker driver is Frequency Domain Least Squares, better known as FDLS. I guess I'm the Keeper of the Flame for FDLS, so if you send me a private email message (change "chatter" to "charter" and remove "invalid"), I'll send the info to you.
>Is there something flawed with my deconvolution idea?
Deconvolution is an inverse-system problem, and suffers from all of the nonminimum-phase stability problems mentioned earlier. In addition, regions of the frequency response where the amplitude is near zero suffer from gain problems when computing the inverse ([anything]/[a small number] = [a large number]), and regions where the amplitude is actually zero are impossible to invert ([anything]/0 = ...). Greg
It's tempting to try to exploit the fact that the input is a tone burst with long periods of 0's inbetween bursts.  If the inverse of the speaker response were unstable, you could probably tolerate the instability for the duration of the tone burst. The filter output would be growing over the duration of the tone burst (because it's unstable) but it would probably be ok as long as the growth was not excessive. But the problem is that the filter output continues to grow even after the tone burst input goes to zero.  You could reset the filter but the problem is that you can't reset the speaker at the same time. Too bad! But maybe you only care about making a perfect tone burst for some finite length of time, in which case you could reset the filter at the end of that time period, and let the speaker rattle around for a while in between bursts when no one is looking:)

Bob
On Mon, 23 Feb 2015 20:29:29 -0800 (PST),
radams2000@gmail.com wrote:

>It's tempting to try to exploit the fact that the input is a tone burst wit= >h long periods of 0's inbetween bursts. If the inverse of the speaker resp= >onse were unstable, you could probably tolerate the instability for the dur= >ation of the tone burst. The filter output would be growing over the durati= >on of the tone burst (because it's unstable) but it would probably be ok as= > long as the growth was not excessive. But the problem is that the filter o= >utput continues to grow even after the tone burst input goes to zero. You = >could reset the filter but the problem is that you can't reset the speaker = >at the same time. Too bad! But maybe you only care about making a perfect t= >one burst for some finite length of time, in which case you could reset the= > filter at the end of that time period, and let the speaker rattle around f= >or a while in between bursts when no one is looking:)
... Except that they *are* looking. If the speaker is rattling around, it's producing sound that will become intermingled with the return signals (the time-delayed responses to the supposedly-short burst). But it's actually even worse than that, since the design uses the speaker as the microphone to receive those return echoes. So it really needs to be done with all ringing or other instability before the first return. But your point about exploiting the long null periods between bursts is well taken. Note that there won't be an actual filter in the system... the idea is to store the compensated tone burst and spit it out repeatedly. So if the compensated burst has a long tail due to instability, it seems reasonable to just fade it quickly to zero after the main part of the burst. It may not be mathematically correct, but it will surely be *much* better than an uncompensated burst! Thanks, and best regards, Bob Masta DAQARTA v7.60 Data AcQuisition And Real-Time Analysis www.daqarta.com Scope, Spectrum, Spectrogram, Sound Level Meter Frequency Counter, Pitch Track, Pitch-to-MIDI FREE Signal Generator, DaqMusiq generator Science with your sound card!
N0Spam@daqarta.com (Bob Masta) writes:

> I have a user who wants to produce high-intensity acoustic > tone bursts for SODAR (acoustic radar). The transducer adds > an unwanted transient overshoot and ringing. > > The same tone burst will be used repeatedly. It occurs to me > that the digitally-generated driving signal to the > transducer could be pre-compensated to produce an acoustic > signal of the desired shape. My first thought is that this > could be done by deconvolution of the desired signal with > the measured impulse response of the transducer. > > But somehow this just "feels wrong"... seems to me that the > raw, uncompensated burst response should somehow be involved > directly. > > It also seems certain that this must be a common issue that > has long been solved... I just haven't found the right magic > words to describe it to Google. > > So, my question to the group is what is this process called? > Any hints or tips? > > Many thanks,
Bob, I didn't read all the responses, but are you sure the transducer is linear? I.e., that the transients/ringing are due to linear distortions? If so, and if the response is invertible, then sure, I don't see why not. If not, then you might consider Googling "Volterra series" to precompensate for nonlinear effects. -- Randy Yates Digital Signal Labs http://www.digitalsignallabs.com
On Mon, 23 Feb 2015 08:49:27 -0600, Greg Berchin wrote:

<< snip >>

> ([anything]/[a small number] = [a large number]), > > and regions where the amplitude is actually zero are impossible to > invert > > ([anything]/0 = ...).
If you take the transfer function that you want to invert and more or less force a floor to it (so the frequency-domain response never goes to zero) you can avoid these issues. I think the math is the same as you'd use to compute a Wiener filter, but it's been a long time since I've had to put pencil to paper on this issue. I could figure it out with a few hours of effort, but -- it's work. -- www.wescottdesign.com
On 2/23/15 9:49 AM, Greg Berchin wrote:
> On Mon, 23 Feb 2015 13:37:16 GMT, N0Spam@daqarta.com (Bob Masta) wrote: >
...
>> Is there something flawed with my deconvolution idea? > > Deconvolution is an inverse-system problem, and suffers from all of the > nonminimum-phase stability problems mentioned earlier. In addition, > regions of the frequency response where the amplitude is near zero > suffer from gain problems when computing the inverse > > ([anything]/[a small number] = [a large number]), >
well, not "[anything]" a small number divided by a small number might not be such a large number. and zero divided by a small number is still zero (as long as the "small number" ain't also zero). just picking nits...
> and regions where the amplitude is actually zero are impossible to > invert
these regions would actually be discrete frequencies for any realizable LTI system.
> ([anything]/0 = ...).
{ +INF if [anything] > 0 { [anything]/0 = { NaN if [anything] = 0 { { -INF if [anything] < 0 and that's assuming "+0" and not "-0". -- r b-j rbj@audioimagination.com "Imagination is more important than knowledge."
On Wed, 25 Feb 2015 23:37:12 -0500, robert bristow-johnson
<rbj@audioimagination.com> wrote:

>just picking nits...
And they call me pedantic ... I was trying to keep it simple. People intuitively understand the problems that occur when trying to divide by zero. One can employ methods to mitigate those problems, but that's a separate issue. Greg