Analysis of data in Fig. 8 of:

The Ether-Drift Experiment and the Determination of the Absolute Motion of the Earth
Dayton C. Miller, Case School of Applied Science
July 1933, Reviews of Modern Physics.

Marker values from Fig 8.

m01Fig8 = {10, 7,    1,    -4, -13,   0,   8, &nb ... ransfer the values into a 1D array with 320 elements *) mRaw = Flatten[Transpose[clms]] ;

A function to filter mRaw using a process that removes any component that has a period of half a turn. The first and last four elements receive different processing to avoid indexing errors.

FilterHalfTurn[data_] := Module[{dataF = {}}, For[i = 1, i≤4, dataF = Append[dataF, data ... 4;320, dataF = Append[dataF, data[[i - 4]]/4 + data[[i]] 3/4] ; i ++] ; Return[dataF] ;] ;

Filter mRaw into mRawF excluding any component with period of half a turn.

mRawF = FilterHalfTurn[mRaw] ;

Plot unfiltered and filtered versions of mRaw.
Peaks that appear in the unfiltered version but not in the filtered version are due to signal component with a period of half a turn.

ListPlot[mRaw, PlotJoinedTrue, AspectRatio1/2, ImageSize560] ListPlot[mRawF, PlotJoinedTrue, AspectRatio1/2, ImageSize560]

[Graphics:HTMLFiles/index_5.gif]

-Graphics-

[Graphics:HTMLFiles/index_6.gif]

-Graphics-

A function to plot Digitial Fourier Transforms.
Mathematica labels the first element of a list as "1", so to allow correct labelling of bins, the function deletes Bin 0 from position 1 of "Fourier[data]".

<<Graphics`MultipleListPlot` RowBox[{RowBox[{RowBox[{PlotDFT[data_, rx_, ry_], :=, RowBo ... /200}, ,, , PlotRange-> {{0, rx}, {0, ry}}, ,, ImageSize640}], ]}]}], ;}],  }]

Plot DFTs of unfiltered and filtered versions of mRaw.
Any significant signal component with a period of half a turn will cause a peak in Bin 40.
Note that the DFT for the unfiltered data has such a peak. However, the DFT for the filtered data has no peak in that bin.              

PlotDFT[mRaw, 160, 20] PlotDFT[mRawF, 160, 20]

[Graphics:HTMLFiles/index_9.gif]

-Graphics-

[Graphics:HTMLFiles/index_10.gif]

-Graphics-

Since there is no peak in Bin 40, mRawF contains only unwanted components.
Subtract mRawF from mRaw to create an array without these components.

mRawD = mRaw - mRawF ;

Plot a DFT for mRawD.
Bin 40 will contain any signal with a period of half a turn. We see the DFT is dominated by such a component.

PlotDFT[mRawD, 160, 6]

[Graphics:HTMLFiles/index_13.gif]

-Graphics-

Here is the waveform for the first 10 turns of mRawD.

MultipleListPlot[mRawD, PlotJoinedTrue, AxesOrigin {1, 0}, PlotRange&# ... ks {Table[8 i, {i, 20}], Automatic}, AspectRatio1/8, ImageSize800]

[Graphics:HTMLFiles/index_15.gif]

-Graphics-

Some function definitions to aid further analysis.

A function to estimate the standard error of the mean

StdError[data_] := StandardDeviation[data]/Sqrt[Length[data]] ;

A function to give the t-value of Student's t-distribution for a two tailed 95% Confidence Level.
The first two lines define it for two different Degrees of Freedom (the number of samples minus one)
The third line ensures it returns NaN if accidentally called with  any other value of df.

RowBox[{RowBox[{RowBox[{RowBox[{tCL95[df_/;df19], :=, 2.093}], ;}], , RowBox[{ ...                 }]

A function to estimate if mean signal value exceeds mean noise value with certainty greater than 95%.

This will only be applied to data derived in the same way as mRawD.
"Signal" means 20 values for a marker or 40 values for a marker pair.

Assume the mean noise value is zero with a standard error equal to the standard error for the mean signal value.

Let this standard error be SE.

Then the standard error for the difference between the mean signal value and the assumed mean noise value is:
              SE_diff =    (SE^2 + SE^2)^(1/2)= 2^(1/2) SE

The deviation for a 95% Confidence Level is equal to t_CL95 times the standard error.

So for a mean signal value to exceed the mean noise value with certainty greater than 95%, the difference between mean signal value and zero (the assumed mean noise value) must be greater than
                                t_CL95 SE_diff = t_CL952^(1/2) SE

SignalExceedsNoise95PercentCL[mean_, SE_, NumSamples_] := Positive[Abs[mean] - (tCL95[NumSamples - 1] Sqrt[2] SE)] ;

A function to convert a 1D, 320 element array into a 2D array of 320/k rows each containing k elements.
Take[data,{e,e+k-1}] takes elements in the range e .. e+k-1.

Get2D[data_, k_] := Module[{rows = {}}, For[i = 1, i≤320/k, e = 1 + k (i - 1) ; rows = Append[rows, Take[data, {e, e + k - 1}]] ; i ++] ; Return[rows] ;] ; <br />

A function to pass values with error bars to MultipleListPlot.  

ValsAndEBs[vals_, errors_] := Module[{}, Return[Transpose[{vals, Map[ErrorBar, errors]}]] ;] ; <br />

A function to print a table from a list of headers and a list of columns.

(* First a utility function to format and align numeric values  *)(* This wi ... nbsp;       = Join[{headers}, rows] ; TableForm[t] ]

End function definitions. Analysis resumes here.

Get a 2D array of values for 20 complete turns, 16 elements per turn.
Calculate and display the means and standard errors for each column.
Report if means exceed noise with certainty greater than 95%.

turnsD = Get2D[mRawD, 16] ;       means   = Mean[turnsD] ;  ... bsp;         {means,     SEs, tests}]

[Graphics:HTMLFiles/index_28.gif]

-Graphics-
Marker   Mean     Std. Error   Exceeds Noise (95%CL)

  1       0.238    0.135       False

  2       0.325    0.128       False

  3       0.150    0.141       False

  4      -0.188    0.144       False

  5      -0.650    0.150       True

  6      -0.875    0.141       True

  7      -0.538    0.167       True

  8      -0.038    0.165       False

  9       0.625    0.134       True

10       0.888    0.111       True

11       0.738    0.138       True

12       0.400    0.143       False

13      -0.213    0.143       False

14      -0.338    0.142       False

15      -0.350    0.181       False

16      -0.175    0.163       False

This resembles the upper plot in Fig. 8 of Miller's paper.

Means for six markers exceed noise with certainty greater than 95%.

However, markers that are 180 degrees apart measure the same direction, but do not give the same values because the mirrors are not orthogonal to the arms. This is called the "Full Period Effect" (p238 in Miller's paper). Fig. 30 shows that with the interferometer adjusted for six fringes in the field of view, which was usual, the full period affect would be about 75% of the half period effect.

So to obtain true values for each direction, the data from opposite pairs of markers must be combined as in the lower plot in Fig. 8.

To do this the following code will get a 2D array of 40 half turns, 8 elements per half turn and compute the means and standard errors for each column.

It will also report if means exceed noise with certainty greater than 95%.

halfTurnsD = Get2D[mRawD, 8] ;       means    &nb ...                tests}]

[Graphics:HTMLFiles/index_30.gif]

-Graphics-
Marker   Mean     Std. Error   Exceeds Noise (95%CL)

  1+9     0.431    0.099       True

  2+10    0.606    0.095       True

  3+11    0.444    0.108       True

  4+12    0.106    0.111       False

  5+13   -0.431    0.108       True

  6+14   -0.606    0.108       True

  7+15   -0.444    0.123       True

  8+16   -0.106    0.115       False

The above shows that Miller`s data contains a signal with means for SIX out of eight directions exceeding noise with certainty greater than 95%.
Here is a comparison with Miller`s final values in the last row of  figures in Fig. 8.

RowBox[{RowBox[{RowBox[{MillerFinal, =, RowBox[{{, RowBox[{0.33, ,, 0.58, ,, 0.43, ,, 0.05, ,, ... p;            MillerFinal }] 

[Graphics:HTMLFiles/index_32.gif]

Marker   Mean     Std. Error   Miller's value

  1+9     0.431    0.099        0.330

  2+10    0.606    0.095        0.580

  3+11    0.444    0.108        0.430

  4+12    0.106    0.111        0.050

  5+13   -0.431    0.108       -0.520

  6+14   -0.606    0.108       -0.620

  7+15   -0.444    0.123       -0.450

  8+16   -0.106    0.115       -0.120

The above shows that Miller obtained results that were very close to the results obtained here. This suggests that his algorithm performed remarkably well at extracting signal from noise.  

However, could the signal processing used above have converted drift and noise in Miller's data into a periodic looking signal? That is, could the above clean looking signal be nothing more than an artifact of the processing?

To confirm this is not the case, the above processing is applied below to an array containing random values. If the processing does not extract a signal from such values, then it is very unlikely that the signal extracted from Miller's data is an artifact of the processing.

To approximate the variability in Miller's values, the array is created by starting with an intial value of 10 and then creating each successive value by subtracting 60/320 to simulate drift and then adding a random value. It was found that the variability in Miller's values was slightly exceeded by choosing the random value from a normal distribution and multiplying by a factor of 1.05.

<<Statistics`NormalDistribution` x = 10 ; mRnd = {x} ; RowBox[{RowBox[{For, [, RowBox[{i ... om[NormalDistribution[]]}]}]}], ;, , mRnd = Append[mRnd, Round[x]], ;, i ++}]}], ]}], ;}]

Histogram differences between adjacent elements of mRaw and mRnd to compare their variability.

<<Graphics`Graphics` Histogram[Take[mRaw, {2, 320}] - Take[mRaw, 319]]    Hist ... ;                

[Graphics:HTMLFiles/index_35.gif]

-Graphics-

[Graphics:HTMLFiles/index_36.gif]

-Graphics-

The above shows that mRnd exhibits slightly greater variability than mRaw. That should provide a fair test of the capability of the signal processing algorithm to not extract a false signal from random values.

Filter mRnd into mRndF.
This will exclude components with period of half a turn.

mRndF = FilterHalfTurn[mRnd] ;

Plot mRnd and mRndF.
As before, peaks that appear in the unfiltered version but not in the filtered version will be due to "signal" component with a period of half a turn, but they are expected to be purely random in this case.

ListPlot[mRnd, PlotJoinedTrue, AspectRatio1/2, ImageSize560]  ListPlot[mRndF, PlotJoinedTrue, AspectRatio1/2, ImageSize560]

[Graphics:HTMLFiles/index_39.gif]

-Graphics-

[Graphics:HTMLFiles/index_40.gif]

-Graphics-

Here are DFTs of unfiltered and filtered versions of mRnd.
Note that neither DFT has a prominent peak in Bin 40, although the filtered version is  smoother in that region.

PlotDFT[mRnd, 160, 20] PlotDFT[mRndF, 160, 20]

[Graphics:HTMLFiles/index_42.gif]

-Graphics-

[Graphics:HTMLFiles/index_43.gif]

-Graphics-

Subtract mRndF from mRnd to get rid of unwanted components.

mRndD = mRnd - mRndF ; 

Plot the DFT for mRndD.
Although some component of period half a turn can be expected to be present in Bin 40, there is no peak of significance as there was in the case of mRawD

PlotDFT[mRndD, 160, 6]

[Graphics:HTMLFiles/index_46.gif]

-Graphics-

Here is a plot of the first ten "turns".  

MultipleListPlot[mRndD, PlotJoinedTrue, AxesOrigin {1, 0}, PlotRange&# ... ; {Table[8 i, {i, 20}], Automatic}, AspectRatio1/8, ImageSize800] 

[Graphics:HTMLFiles/index_48.gif]

-Graphics-

Compute and plot the means and standard errors for 20 complete "turns" using values from mRndD.

RowBox[{, RowBox[{turnsD = Get2D[mRndD, 16] ;,  , , means    =  ... sp;       {means,     SEs, tests}], }]}]

[Graphics:HTMLFiles/index_50.gif]

-Graphics-
Marker   Mean     Std. Error   Exceeds Noise (95%CL)

  1       0.038    0.175       False

  2      -0.088    0.205       False

  3      -0.163    0.196       False

  4      -0.263    0.158       False

  5       0.000    0.174       False

  6       0.038    0.241       False

  7       0.088    0.201       False

  8       0.125    0.140       False

  9      -0.013    0.131       False

10       0.038    0.175       False

11      -0.050    0.200       False

12       0.088    0.223       False

13      -0.025    0.228       False

14       0.013    0.216       False

15       0.125    0.226       False

16       0.050    0.189       False

None of the means exceeds noise with certainty greater than 95%. But as explained earlier, to obtain true values for each direction, data from opposite pairs of markers must be combined.

halfTurnsD = Get2D[mRndD, 8] ;    means       &nb ... td. Error", "Exceeds Noise (95%CL)"}, {means,     SEs, tests}]

[Graphics:HTMLFiles/index_52.gif]

-Graphics-
Marker   Mean     Std. Error   Exceeds Noise (95%CL)

  1+9     0.013    0.108       False

  2+10   -0.025    0.133       False

  3+11   -0.106    0.139       False

  4+12   -0.088    0.138       False

  5+13   -0.013    0.142       False

  6+14    0.025    0.160       False

  7+15    0.106    0.149       False

  8+16    0.088    0.116       False

None of the means exceed noise with certainty greater than 95% even when data from opposite markers is combined.

The above shows that the processing used herein extracts a signal from Miller's data, but does not extract a signal from random data with similar variability to Miller's data.

Hence we can conclude that the signal extracted from Miller's data is a real signal and is not an artifact of the processing.


Created by Mathematica  (June 16, 2008)