Show me the numbers

Started by Cedron May 28, 2015
By popular demand, or at least a few requests, here are some empirical
results comparing my frequency formula with Candan's.

For the Noise, Dawg, and Candan columns, the first column is the average
and the second column is the standard deviation.  The data sets start out
with the noiseless case and then there are increasing levels of noise. 
The values of the frequency are based on the 30 Hz within a tenth of a
second interval that I used in another post.  There are 10 samples and a
DFT size of 10.  There are more details of the testing below.

If the data lines wrap in your display, you can copy and paste the whole
set into a fixed pitch text editor for best results.


Target Noise Level = 0.000

Freq Sig RMS  Noise RMS      Dawg            Candan
---- -------  -------------- --------------- ---------------
 3.0  0.7071  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000
 3.1  0.7126  0.0000  0.0000  0.0000  0.0000  0.0096  0.0000
 3.2  0.7337  0.0000  0.0000  0.0000  0.0000  0.0075  0.0000
 3.3  0.7438  0.0000  0.0000  0.0000  0.0000 -0.0093  0.0000
 3.4  0.7296  0.0000  0.0000 -0.0000  0.0000 -0.0317  0.0000
 3.5  0.7071  0.0000  0.0000  0.0000  0.0000 -0.0434  0.0000
 3.6  0.7054  0.0000  0.0000 -0.0000  0.0000 -0.0324  0.0000
 3.7  0.7290  0.0000  0.0000 -0.0000  0.0000 -0.0023  0.0000
 3.8  0.7489  0.0000  0.0000 -0.0000  0.0000  0.0291  0.0000
 3.9  0.7389  0.0000  0.0000 -0.0000  0.0000  0.0427  0.0000


Target Noise Level = 0.001

Freq Sig RMS  Noise RMS      Dawg            Candan
---- -------  -------------- --------------- ---------------
 3.0  0.7071  0.0010  0.0002  0.0000  0.0003  0.0000  0.0003
 3.1  0.7126  0.0010  0.0002  0.0000  0.0003  0.0096  0.0003
 3.2  0.7337  0.0010  0.0002 -0.0000  0.0004  0.0075  0.0004
 3.3  0.7438  0.0010  0.0002  0.0000  0.0004 -0.0093  0.0004
 3.4  0.7296  0.0010  0.0002  0.0000  0.0005 -0.0317  0.0004
 3.5  0.7071  0.0010  0.0002  0.0000  0.0006 -0.0434  0.0005
 3.6  0.7054  0.0010  0.0002 -0.0000  0.0007 -0.0324  0.0006
 3.7  0.7290  0.0010  0.0002 -0.0000  0.0009 -0.0023  0.0007
 3.8  0.7489  0.0010  0.0002  0.0000  0.0011  0.0291  0.0009
 3.9  0.7389  0.0010  0.0002  0.0000  0.0014  0.0427  0.0011


Target Noise Level = 0.010

Freq Sig RMS  Noise RMS      Dawg            Candan
---- -------  -------------- --------------- ---------------
 3.0  0.7071  0.0100  0.0022 -0.0000  0.0032 -0.0000  0.0034
 3.1  0.7126  0.0101  0.0022 -0.0000  0.0034  0.0096  0.0035
 3.2  0.7337  0.0100  0.0022  0.0000  0.0038  0.0075  0.0037
 3.3  0.7438  0.0100  0.0022  0.0001  0.0043 -0.0093  0.0040
 3.4  0.7296  0.0100  0.0022 -0.0001  0.0051 -0.0318  0.0045
 3.5  0.7071  0.0100  0.0022  0.0000  0.0060 -0.0434  0.0051
 3.6  0.7054  0.0100  0.0022 -0.0000  0.0071 -0.0325  0.0059
 3.7  0.7290  0.0100  0.0022  0.0000  0.0087 -0.0023  0.0072
 3.8  0.7489  0.0100  0.0022 -0.0000  0.0107  0.0290  0.0087
 3.9  0.7389  0.0100  0.0022  0.0000  0.0139  0.0428  0.0108


Target Noise Level = 0.100

Freq Sig RMS  Noise RMS      Dawg            Candan
---- -------  -------------- --------------- ---------------
 3.0  0.7071  0.1002  0.0224 -0.0003  0.0323 -0.0003  0.0340
 3.1  0.7126  0.0997  0.0220 -0.0003  0.0344  0.0092  0.0348
 3.2  0.7337  0.1002  0.0222 -0.0008  0.0376  0.0065  0.0365
 3.3  0.7438  0.0999  0.0224  0.0001  0.0431 -0.0094  0.0401
 3.4  0.7296  0.0996  0.0223  0.0009  0.0503 -0.0314  0.0437
 3.5  0.7071  0.1003  0.0223  0.0003  0.0603 -0.0440  0.0507
 3.6  0.7054  0.1000  0.0220 -0.0005  0.0718 -0.0336  0.0593
 3.7  0.7290  0.1003  0.0223  0.0007  0.0890 -0.0033  0.0722
 3.8  0.7489  0.1001  0.0221  0.0038  0.1121  0.0294  0.0892
 3.9  0.7389  0.1001  0.0222  0.0092  0.1510  0.0431  0.1107


This is a side by side comparison test between my frequency equations and
those of Candan (recommended by Eric Jacobsen).

My equation looks like this:

acos( real( [WB]Z / WZ ) ) * [N/(2Pi)]

The derivation and details of the values can be found in my blog article
titled "Exact Frequency Formula for a Pure Real Tone in a DFT" at
dsprelated.com.  The link is:

http://www.dsprelated.com/showarticle/773.php

Cagatay Candan's looks like this

real( (1,0,-1)Z / (-1,2,-1)Z ) * [tan(Pi/N)/(Pi/N)] + BinNumber

The derivation and details of his can be found in a published paper titled
"A Method For Fine Resolution Frequency Estimation From Three DFT
Samples".

Z is the 3 bin DFT vector.  The bracketed expression are values that are
precalculated prior to repeated use.  Candan's formula is based on
Jacobsen's estimator and differs by including a bias correction
multiplication term.  Jacobsen's formula can be shown to be an
approximation of mine with some trigonometric identities, using the limit
value of W, and a few sin( x ) ~=~ x when x is small substitution.  Both
formulas being evaluated have roughly the same computation complexity with
mine having a little bit more.  I have not done any timing testing yet.

The clean signal being tested is:

cos( Freq * [2Pi/N] * s )     0 <= s < 10

The noise is near Guassian, produced by adding together 10 uniform random
variables on the range [-1 to 1] and multiplying by the appropriate
scaling factor to achieve the target noise level.

Each data line consists of the results of 10,000 trial runs.  For each run
a fresh set of noise is added.  The RMS of the signal and the RMS of the
noise are calculated.  A three bin DFT of the signal+noise is calculated
and the results shared by the two formulas.  The frequency is subtracted
from the results to produce the collected data.  Each run produces a data
tuple (Signal RMS, Noise RMS, Dawg Error, Candan Error).  The average and
standard deviation of these values are calculated over the 10,000 runs. 
These are the result values displayed in the table.  The standard
deviation for the signal is not shown because it is always zero (doesn't
change from run to run).

The results confirm what I have repeatedly stated:

1) In the noiseless case, my formula is exact.

2) In the presence of noise, mine behaves comparably to
Jacobsen's/Candan's.

Ced


---------------------------------------
Posted through http://www.DSPRelated.com
A couple of small oops:

Gaussian

For each run a fresh set of noise is used.

Sorry,
Ced
---------------------------------------
Posted through http://www.DSPRelated.com
Cedron <103185@DSPRelated> wrote:

>My equation looks like this: > >acos( real( [WB]Z / WZ ) ) * [N/(2Pi)]
Looks right.
>Cagatay Candan's looks like this > >real( (1,0,-1)Z / (-1,2,-1)Z ) * [tan(Pi/N)/(Pi/N)] + BinNumber
Looks like a quadratic interpolation. Of course, I haven't gone through the math but... there can be only one right answer. Probably yours. Maybe Candan is more noise-immune, or something. Steve
Hi Cedron,

I was curious too about the real performance of your estimator with noise,
and I did myself some tests too. I was at the beginning rather pessimist
about your estimator in presence of noise, but I must admit it is not so
bad (yet it is more complex to compute than other estimators).

I don't know how to add image on this forum, so you can find the results
here:
 http://92.243.17.111/uploads/mse.pdf, and the full SCILAB test script
here: http://92.243.17.111/uploads/freqestim.sce

In the graph, the methods compared are the following:

 -- "Basic method" : just taken the highest FFT bin, no interpolation
 -- "C&eacute;dron" : your method
 -- "Quadratic" : quadratic interpolation, as described here
http://dspguru.com/dsp/howtos/how-to-interpolate-fft-peak
 -- "Jacobsen" : Eric Jacobsen formula, from
http://www.statistik.tu-dortmund.de/~bischl/mypapers/frequency_estimation_by_dft_interpolation_a_comparison_of_methods.pdf.
Since we are Lucky enough to have him among us, maybe he could check that
I have well implemented his formula (function "fe_jacobsen_calc" in the
script)
 -- "Gaussian" : quadratic interpolation in the log domain, with Gaussian
pre-windowing, as described here 
http://www.dsprelated.com/freebooks/sasp/Quadratic_Interpolation_Spectral_Peaks.html.
Not sure if I have well implemented it, because the results are not so
good (theorically, if the gaussian window was ideal, it should be an exact
method). The poor results I have seem to indicate I have made a mistake.

As can be seen in the graph, all methods except the exact formula
("C&eacute;dron" label) have a noise floor at high SNR. This is as expected,
except for the gaussian method, which I assumed was more or less exact
(except for the finite gaussian window effect).

So I come back on my first statement about your method: it is not so bad,
especially at high SNR (as expected for an exact formula), but also at
medium SNR (down to about 5 dB). Under 5 dB, it behave rather simularly or
is less accurate that the other methods.


Best regards,

Julien

PS : any hints to corrections or upgrades to the script would be welcome!


---------------------------------------
Posted through http://www.DSPRelated.com
PS: The first link is: http://92.243.17.111/uploads/mse.pdf
(without the comma at the end)
---------------------------------------
Posted through http://www.DSPRelated.com
On Fri, 29 May 2015 02:23:43 -0500, "tsd82" <105802@DSPRelated> wrote:

>Hi Cedron, > >I was curious too about the real performance of your estimator with noise, >and I did myself some tests too. I was at the beginning rather pessimist >about your estimator in presence of noise, but I must admit it is not so >bad (yet it is more complex to compute than other estimators). > >I don't know how to add image on this forum, so you can find the results >here: > http://92.243.17.111/uploads/mse.pdf, and the full SCILAB test script >here: http://92.243.17.111/uploads/freqestim.sce > >In the graph, the methods compared are the following: > > -- "Basic method" : just taken the highest FFT bin, no interpolation > -- "C&eacute;dron" : your method > -- "Quadratic" : quadratic interpolation, as described here >http://dspguru.com/dsp/howtos/how-to-interpolate-fft-peak > -- "Jacobsen" : Eric Jacobsen formula, from >http://www.statistik.tu-dortmund.de/~bischl/mypapers/frequency_estimation_by_dft_interpolation_a_comparison_of_methods.pdf. >Since we are Lucky enough to have him among us, maybe he could check that >I have well implemented his formula (function "fe_jacobsen_calc" in the >script)
Julien - please contact me via email: eric.jacobsen@ieee.org.
> -- "Gaussian" : quadratic interpolation in the log domain, with Gaussian >pre-windowing, as described here >http://www.dsprelated.com/freebooks/sasp/Quadratic_Interpolation_Spectral_Peaks.html. >Not sure if I have well implemented it, because the results are not so >good (theorically, if the gaussian window was ideal, it should be an exact >method). The poor results I have seem to indicate I have made a mistake. > >As can be seen in the graph, all methods except the exact formula >("C&eacute;dron" label) have a noise floor at high SNR. This is as expected, >except for the gaussian method, which I assumed was more or less exact >(except for the finite gaussian window effect). > >So I come back on my first statement about your method: it is not so bad, >especially at high SNR (as expected for an exact formula), but also at >medium SNR (down to about 5 dB). Under 5 dB, it behave rather simularly or >is less accurate that the other methods. > > >Best regards, > >Julien > >PS : any hints to corrections or upgrades to the script would be welcome! > > >--------------------------------------- >Posted through http://www.DSPRelated.com
Eric Jacobsen Anchor Hill Communications http://www.anchorhill.com
>Cedron <103185@DSPRelated> wrote: > >>My equation looks like this: >> >>acos( real( [WB]Z / WZ ) ) * [N/(2Pi)] > >Looks right.
Almost, one small oops there as well. It should be: acos( real( [WB]Z / [W]Z ) ) * [N/(2Pi)]
> >>Cagatay Candan's looks like this >> >>real( (1,0,-1)Z / (-1,2,-1)Z ) * [tan(Pi/N)/(Pi/N)] + BinNumber > >Looks like a quadratic interpolation. > >Of course, I haven't gone through the math but... there can >be only one right answer. Probably yours. >
The correct answer can often take on many forms. Hopefully my data table and Julien's graph will give you (and others) sufficient motivation to read my articles. The derivation really spans two articles: "DFT Bin Value Formulas for Pure Real Tones" (771) This article develops a formula for the bin values as a function of the signal parameters. It is a reworking of the definition of a signal plugged into the definition of a DFT and simplified to a non-summation form. Nowhere during the process are any approximations taken, so the results are exact. There is some gooblygook that needs to be waded through (equations (17), (20), and (21)), but there is nothing conceptually deep in the derivation. It is just straightforward algebra. The "Qualitative Analysis" section tries to explain its descriptive ability of the behavior of leakage. "Exact Frequency Formula for a Pure Real Tone in a DFT" (773) This article solves the inverse of the bin value formulas to find the frequency (alpha) as a function of bin values. Again, no approximations are taken, so it remains exact. Overall, I think that my derivation is much simpler than the one in Candan's paper. As rbj pointed out, my usage of the n and k subscripts is reversed from the common convention.
>Maybe Candan is more noise-immune, or something. > > >Steve
Why do you presuppose that Candan's should have any superior properties? I'm not saying it doesn't, but it is just an approximation of the correct answer. Ced --------------------------------------- Posted through http://www.DSPRelated.com
Hi Julien,

You made my day.

>Hi Cedron, > >I was curious too about the real performance of your estimator with
noise,
>and I did myself some tests too. I was at the beginning rather pessimist >about your estimator in presence of noise, but I must admit it is not so >bad (yet it is more complex to compute than other estimators). > >I don't know how to add image on this forum, so you can find the results >here: > http://92.243.17.111/uploads/mse.pdf, and the full SCILAB test script >here: http://92.243.17.111/uploads/freqestim.sce
In order to pose graphics on Usenet, you have to use the "Save As ASCII Art" option of your software. Tee hee. Your graph is awesome. I bet it is more convincing to others than either my data table or theoretical arguments. I am so appreciative that you took the time to do this.
> >In the graph, the methods compared are the following: > > -- "Basic method" : just taken the highest FFT bin, no interpolation > -- "C&Atilde;&copy;dron" : your method > -- "Quadratic" : quadratic interpolation, as described here >http://dspguru.com/dsp/howtos/how-to-interpolate-fft-peak > -- "Jacobsen" : Eric Jacobsen formula, from >http://www.statistik.tu-dortmund.de/~bischl/mypapers/frequency_estimation_by_dft_interpolation_a_comparison_of_methods.pdf.
From this article: "Also, it&rsquo;s not very evident, why exactly this adaptation results in such an improvement[Jacobsen 2009, personal communication]." It is very evident when you understand that his estimator is an approximation of the correct equation and converges to it as the number of samples grows.
>Since we are Lucky enough to have him among us, maybe he could check
that
>I have well implemented his formula (function "fe_jacobsen_calc" in the >script) > -- "Gaussian" : quadratic interpolation in the log domain, with
Gaussian
>pre-windowing, as described here >http://www.dsprelated.com/freebooks/sasp/Quadratic_Interpolation_Spectral_Peaks.html. >Not sure if I have well implemented it, because the results are not so >good (theorically, if the gaussian window was ideal, it should be an
exact
>method). The poor results I have seem to indicate I have made a mistake. > >As can be seen in the graph, all methods except the exact formula >("C&Atilde;&copy;dron" label) have a noise floor at high SNR. This is as expected, >except for the gaussian method, which I assumed was more or less exact >(except for the finite gaussian window effect).
I love the accent mark. The shelf can be explained by Steve Pope's cases: (1) FT of a continuous-time function which is a rectangle (2) FT of the above rectangle multiplied by an impulse train In case (1) there is no shelf, but since case (1) and case (2) only resemble each other, there will be differences. When the number of samples increases, case (2) approaches case (1), (as mentioned in the other thread) and the differences become smaller. Case (2) never becomes case (1). Case (1) is its limit. Just like a binomial distribution never becomes a bell curve. If you increase the number of samples, the shelf will be lowered. A chart like the one you made with bin count as the horizontal axis would show this clearly. (Pretty please?) Noiseless would emphasize the point.
> >So I come back on my first statement about your method: it is not so
bad,
>especially at high SNR (as expected for an exact formula), but also at >medium SNR (down to about 5 dB). Under 5 dB, it behave rather simularly
or
>is less accurate that the other methods. >
Agreed. In my frequency formula article I wrote: "If the noise level is high enough, the advantages of an exact formula may not be worth the extra calculations compared to a quick and dirty estimation formula." However, in a real world application, the savings from the ability to reduce the number of bins may swamp the extra cost.
> >Best regards, > >Julien > >PS : any hints to corrections or upgrades to the script would be
welcome!
> > >--------------------------------------- >Posted through http://www.DSPRelated.com
This sure is a tough crowd. So far I have gotten an "okay" from rbj, a "probably right" from Steve Pope, and a "not so bad" from you. Here is a field of Mathematics that has been around for more than a century, intensely studied in the last few decades, and I derive an exact solution for a fundamental concept that conventional wisdom proclaims is impossible, and all I get is this? How about an "attaboy"? Thanks, Ced --------------------------------------- Posted through http://www.DSPRelated.com
On Fri, 29 May 2015 02:23:43 -0500, "tsd82" <105802@DSPRelated> wrote:

>Hi Cedron, > >I was curious too about the real performance of your estimator with noise, >and I did myself some tests too. I was at the beginning rather pessimist >about your estimator in presence of noise, but I must admit it is not so >bad (yet it is more complex to compute than other estimators).
Hi Julien, So you were able to implement Cedron's scheme in software. Good for you! (I mean it.)
>I don't know how to add image on this forum, so you can find the results >here: > http://92.243.17.111/uploads/mse.pdf, and the full SCILAB test script >here: http://92.243.17.111/uploads/freqestim.sce > >In the graph, the methods compared are the following: > > -- "Basic method" : just taken the highest FFT bin, no interpolation > -- "C&eacute;dron" : your method > -- "Quadratic" : quadratic interpolation, as described here >http://dspguru.com/dsp/howtos/how-to-interpolate-fft-peak > -- "Jacobsen" : Eric Jacobsen formula, from >http://www.statistik.tu-dortmund.de/~bischl/mypapers/frequency_estimation_by_dft_interpolation_a_comparison_of_methods.pdf. >Since we are Lucky enough to have him among us, maybe he could check that >I have well implemented his formula (function "fe_jacobsen_calc" in the >script) > -- "Gaussian" : quadratic interpolation in the log domain, with Gaussian >pre-windowing, as described here >http://www.dsprelated.com/freebooks/sasp/Quadratic_Interpolation_Spectral_Peaks.html. >Not sure if I have well implemented it, because the results are not so >good (theorically, if the gaussian window was ideal, it should be an exact >method). The poor results I have seem to indicate I have made a mistake. > >As can be seen in the graph, all methods except the exact formula >("C&eacute;dron" label) have a noise floor at high SNR. This is as expected, >except for the gaussian method, which I assumed was more or less exact >(except for the finite gaussian window effect).
Based on your results, it looks like the Cedron method has similar performance to Candan's method. Two papers from Candan can be found at: http://www.eee.metu.edu.tr/~ccandan/pub_dir/FineDopplerEst_IEEE_SPL_June2011.pdf and http://www.eee.metu.edu.tr/~ccandan/pub_dir/Orguner_Candan_Freq_Est_From_Many_Bins_Elsevier_SP_Dec_2014.pdf
>So I come back on my first statement about your method: it is not so bad, >especially at high SNR (as expected for an exact formula), but also at >medium SNR (down to about 5 dB). Under 5 dB, it behave rather simularly or >is less accurate that the other methods.
This 'freq estimation based on DFT samples' topic has been attacked by dozens of skilled DSP people for decades. It's not as simple as Cedron implies. And the results of all that study and effort are a collection of "frequency estimation" methods. And none of those DSP folk, other than Cedron, has claimed to produce "exact" frequency estimation results. I think the word "exact" should be avoided when discussing this 'freq estimation based on DFT samples' topic. Measuring the freq of a real-world, noise-contaminated, sinusoidal signal is never, as far as I can tell, "exact". For a trivial example, no computer on Earth can measure the "exact" frequency of a noise-free input sine wave sequence whose frequency is 100/3 Hz. For that matter, no computer screen is capable of displaying the "exact" frequency of that sine wave in decimal format. :-) I've done a little Matlab modeling on this topic and, as far as I can tell, Jacobsen's method is the most accurate method that I've encountered. I'm talking about processing real-world input signals that have moderate SNRs (less than, say, 15 dB). Here's an interesting comp.dsp thread on the subject: http://compgroups.net/comp.dsp/fft-zero-padding-and-dft-bins/1960737
>Best regards, >Julien > >PS : any hints to corrections or upgrades to the script would be welcome!
Julien, as if there are not enough papers on this topic, here are three more documents on this 'DFT-based freq estimation' subject: http://mgasior.web.cern.ch/mgasior/pap/biw2004_poster.pdf [The above interesting Gasior poster came from: http://mgasior.web.cern.ch/mgasior/pap/index.html] http://i-rep.emu.edu.tr:8080/jspui/bitstream/11129/1503/1/CetinkayaSadi.pdf and http://www.statistik.tu-dortmund.de/~bischl/mypapers/frequency_estimation_by_dft_interpolation_a_comparison_of_methods.pdf Julien, don'tcha just love DSP? [-Rick-]
> >PS : any hints to corrections or upgrades to the script would be
welcome!
> > >--------------------------------------- >Posted through http://www.DSPRelated.com
Hi Julien, Do you know how to code in C++ on Linux by any chance? I'd be happy to send you my source code. Here is another set of data from my test program. Everything is identical to the first except the number of samples was increased to 100. Target Noise Level = 0.000 Freq Sig RMS Noise RMS Dawg Candan ---- ------- -------------- --------------- --------------- 3.0 0.7071 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 3.1 0.7168 0.0000 0.0000 -0.0000 0.0000 0.0023 0.0000 3.2 0.7154 0.0000 0.0000 0.0000 0.0000 0.0017 0.0000 3.3 0.7054 0.0000 0.0000 -0.0000 0.0000 -0.0023 0.0000 3.4 0.7005 0.0000 0.0000 -0.0000 0.0000 -0.0073 0.0000 3.5 0.7071 0.0000 0.0000 0.0000 0.0000 -0.0099 0.0000 3.6 0.7156 0.0000 0.0000 0.0000 0.0000 -0.0080 0.0000 3.7 0.7147 0.0000 0.0000 -0.0000 0.0000 -0.0027 0.0000 3.8 0.7060 0.0000 0.0000 -0.0000 0.0000 0.0024 0.0000 3.9 0.7016 0.0000 0.0000 -0.0000 0.0000 0.0036 0.0000 Target Noise Level = 0.001 Freq Sig RMS Noise RMS Dawg Candan ---- ------- -------------- --------------- --------------- 3.0 0.7071 0.0010 0.0001 0.0000 0.0001 0.0000 0.0001 3.1 0.7168 0.0010 0.0001 0.0000 0.0001 0.0023 0.0001 3.2 0.7154 0.0010 0.0001 -0.0000 0.0001 0.0017 0.0001 3.3 0.7054 0.0010 0.0001 0.0000 0.0001 -0.0023 0.0001 3.4 0.7005 0.0010 0.0001 0.0000 0.0001 -0.0073 0.0001 3.5 0.7071 0.0010 0.0001 0.0000 0.0001 -0.0099 0.0002 3.6 0.7156 0.0010 0.0001 -0.0000 0.0002 -0.0080 0.0002 3.7 0.7147 0.0010 0.0001 0.0000 0.0002 -0.0027 0.0002 3.8 0.7060 0.0010 0.0001 0.0000 0.0002 0.0024 0.0003 3.9 0.7016 0.0010 0.0001 0.0000 0.0003 0.0036 0.0003 Target Noise Level = 0.010 Freq Sig RMS Noise RMS Dawg Candan ---- ------- -------------- --------------- --------------- 3.0 0.7071 0.0102 0.0007 -0.0000 0.0010 -0.0000 0.0010 3.1 0.7168 0.0102 0.0007 -0.0000 0.0010 0.0023 0.0011 3.2 0.7154 0.0102 0.0007 0.0000 0.0010 0.0017 0.0011 3.3 0.7054 0.0102 0.0007 -0.0000 0.0011 -0.0023 0.0012 3.4 0.7005 0.0102 0.0007 0.0000 0.0012 -0.0073 0.0014 3.5 0.7071 0.0102 0.0007 0.0000 0.0014 -0.0099 0.0016 3.6 0.7156 0.0102 0.0007 0.0000 0.0016 -0.0080 0.0019 3.7 0.7147 0.0102 0.0007 -0.0000 0.0018 -0.0027 0.0022 3.8 0.7060 0.0102 0.0007 -0.0000 0.0022 0.0024 0.0027 3.9 0.7016 0.0102 0.0007 0.0000 0.0027 0.0037 0.0033 Target Noise Level = 0.100 Freq Sig RMS Noise RMS Dawg Candan ---- ------- -------------- --------------- --------------- 3.0 0.7071 0.1023 0.0071 -0.0001 0.0102 -0.0001 0.0101 3.1 0.7168 0.1023 0.0071 0.0000 0.0101 0.0023 0.0105 3.2 0.7154 0.1024 0.0070 -0.0001 0.0103 0.0016 0.0111 3.3 0.7054 0.1024 0.0071 0.0000 0.0111 -0.0023 0.0124 3.4 0.7005 0.1021 0.0071 0.0000 0.0120 -0.0073 0.0138 3.5 0.7071 0.1022 0.0071 0.0001 0.0137 -0.0097 0.0159 3.6 0.7156 0.1024 0.0072 -0.0001 0.0156 -0.0081 0.0185 3.7 0.7147 0.1023 0.0072 -0.0004 0.0187 -0.0031 0.0224 3.8 0.7060 0.1021 0.0071 -0.0005 0.0223 0.0019 0.0270 3.9 0.7016 0.1023 0.0071 0.0002 0.0270 0.0040 0.0329 As one would expect, all the standard deviation columns went down significantly. Candan's values also improved considerably. Unlike the first set, where his standard deviations were slightly smaller than mine, in this set the reverse is true. It is also interesting to note that the standard deviations from both formulas seem to be proportionate to the RMS of the noise. The rescaling of the random number seems to be a little off too, but not enough that I felt the need to fix it. Increasing the number of samples is definitely a noise mitigation technique. Ced --------------------------------------- Posted through http://www.DSPRelated.com