Thread View: comp.dsp
7 messages
7 total messages
Started by Paul T Russell
Fri, 05 Oct 1990 14:53
Practical DSP problem
Author: Paul T Russell
Date: Fri, 05 Oct 1990 14:53
Date: Fri, 05 Oct 1990 14:53
14 lines
1084 bytes
1084 bytes
I would appreciate any suggestions on practical methods for extracting spectral information from a noisy signal. In particular I need to measure the amplitude of one sinusoidal component (whose frequency is known in advance) where the amplitude of the component is close to the noise level. My first thought was to use an FFT to estimate the power spectrum and then try to identify the peak, but I feel sure that there must be a better way. Maybe digital filtering or some other means of power spectrum estimation (such as the Maximum Entropy Method) ? Or perhaps I should be doing something in the time domain, such as autocorrelation + averaging ? Suggestions, ideas, examples, source code, all welcome.
Re: Practical DSP problem
Author: Bill Poser
Date: Fri, 05 Oct 1990 22:55
Date: Fri, 05 Oct 1990 22:55
8 lines
949 bytes
949 bytes
In order to determine the location of components known to be sinusoidal in noise, I recommend looking at S. Lawrence Marple, Jr.'s book _Digital Spectral Analysis with Applications_, Englewood Cliffs, N.J.: Prentice-Hall, which discusses an unusually wide range of spectral analysis techniques, including techniques for high-resolution identification of components of known type in noise. The eigen-analysis based frequency estimation techniques discussed in Chapter 13 are probably what you want.
Re: Practical DSP problem
Author: John Moore
Date: Sun, 07 Oct 1990 18:05
Date: Sun, 07 Oct 1990 18:05
43 lines
2358 bytes
2358 bytes
In article <3575@syma.sussex.ac.uk> paulr@syma.sussex.ac.uk (Paul T Russell) writes:
]I would appreciate any suggestions on practical methods
]for extracting spectral information from a noisy signal.
]In particular I need to measure the amplitude of
]one sinusoidal component (whose frequency is known in
]advance) where the amplitude of the component is
]close to the noise level. My first thought was to use
]an FFT to estimate the power spectrum and then try to
]identify the peak, but I feel sure that there must be
]a better way. Maybe digital filtering or some other
]means of power spectrum estimation (such as the Maximum
]Entropy Method) ? Or perhaps I should be doing something
]in the time domain, such as autocorrelation + averaging ?
I have an application where I need phase, rather than amplitude, but
the problem is similar. In that case, I compute:
for i = 0 through a bunch
I = sum(sinwt*sample[i])
Q = sum(coswt*sample[i])
A = sqrt(I*I + Q*Q)
P = arctan(I/Q)
This is equivalent to computing just one line of the PSD from the DFT.
I do this in real time with an 8 bit uP running at .25 itty-bitty-Mips.
I suspect autocorrelation would work even better, if you really know the
frequency, and you don't care about the phase.
Given that you know the frequency, I don't think you require anything
fancier than this. The algorithm shown above is simple enough that it
can be done in real time (on audio) with most microprocessor chips.
No need for a DSP or even a real fast micro (unless you are sampling
real fast and going for high precision/dynamic range).
--
John Moore HAM:NJ7E/CAP:T-Bird 381 {ames!ncar!noao!asuvax,mcdphx}!anasaz!john
USnail: 7525 Clearwater Pkwy, Scottsdale,AZ 85253 anasaz!john@asuvax.eas.asu.edu
Voice: (602) 951-9326 Wishful Thinking: Long palladium, Short Petroleum
Opinion: Support ALL of the bill of rights, INCLUDING the 2nd amendment!
Disclaimer: The opinions expressed here are all my fault, and no one elses.
Re: Practical DSP problem
Author: Sakari Mattila
Date: Mon, 08 Oct 1990 12:47
Date: Mon, 08 Oct 1990 12:47
15 lines
1013 bytes
1013 bytes
On finding a sine wave of known frequency buried in noise ...
If you know the phase of the sine, how about summing it for some
tens or even thousands of cycles ? If you do not know the phase,
how about programming a PLL (Phase Locked Loop) ? PLL is good
at finding the signal, if the signal is stable in frequency and
phase. If your signal is variable, try to filter it out of the noise.
--
Sakari M. Mattila 71307.1525@CompuServe.COM
mattila@tik.vtt.fi Sakari Mattila@3:663*371.0.FNET
Re: Practical DSP problem
Author: Bob Cutler
Date: Mon, 08 Oct 1990 14:52
Date: Mon, 08 Oct 1990 14:52
24 lines
998 bytes
998 bytes
> >I have an application where I need phase, rather than amplitude, but >the problem is similar. In that case, I compute: > > for i = 0 through a bunch > I = sum(sinwt*sample[i]) > Q = sum(coswt*sample[i]) > > A = sqrt(I*I + Q*Q) > P = arctan(I/Q) > >This is equivalent to computing just one line of the PSD from the DFT. >I do this in real time with an 8 bit uP running at .25 itty-bitty-Mips. > This will work even better if the time interval from 0 to 'a bunch' covers an integral number of cycles of sin(wt). --- Bob Cutler KE7ZJ Lake Stevens Instrument Division Hewlett-Packard Everett, WA
Re: Practical DSP problem
Author: Gregory Harrison
Date: Tue, 09 Oct 1990 15:57
Date: Tue, 09 Oct 1990 15:57
18 lines
1308 bytes
1308 bytes
In article <9360012@hplsla.HP.COM> bobc@hplsla.HP.COM (Bob Cutler) writes: >> >>I have an application where I need phase, rather than amplitude, but >>the problem is similar. In that case, I compute: >> >> for i = 0 through a bunch >> I = sum(sinwt*sample[i]) >> Q = sum(coswt*sample[i]) I believe that this is called the Geotzel method, and should be documented in good DSP texts. It is much more costly to compute an entire spectrum in this manner, but I would guess that it works just fine with single line spectra. I wonder if you could use a window on it. I wonder if you could process a wigner kernel in this manner. I believe that using this method you create a tuned filter. I wonder how to handle non-stationary cases. Score: 3 wonders, 3 tidbits of info. Greg
Re: Practical DSP problem
Author: phil
Date: Wed, 10 Oct 1990 02:11
Date: Wed, 10 Oct 1990 02:11
17 lines
1377 bytes
1377 bytes
> We don't know the absolute phase of the signal but we do know the > exact frequency. We are generating two sine waves at frequencies > f1 and f2 and trying to measure the distortion product at 2f1 - f2. > The signal is swamped by the two much larger components at f1 and > f2, and is close to the noise level. That might even be better. If you have f1 and f2 as separate components, you can generate 2*(f1-f2) directly from them by multiplying the instant values of the squares of f1 and f2 generating 2*(f1-f2). No sin/cos calculations or tables; just some multiplies. You will need to subtract out the DC from those multiplications. If f1 and f2 are of stable amplitude (and hence no sidebands to crossmodulate) then removing the DC should be easy. --Phil Howard, KA9WGN-- | Individual CHOICE is fundamental to a free society <phil@ux1.cso.uiuc.edu> | no matter what the particular issue is all about.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads