next up previous contents
Next: Function: prelim_stats() Up: GRASP Routines: Stochastic background Previous: Example: omega_min program   Contents


Function: analyze()

0

void analyze(int average, float *in1, float *in2, int n, float delta_t, float f_low, float f_high, double *gamma12, double *whiten1, double *whiten2, int real_time_noise1, int real_time_noise2, double *power1, double *power2, double *signal, double *variance)
This high-level function performs the optimal data processing for the detection of an isotropic and unpolarized stochastic background of gravitational radiation having a constant frequency spectrum: $\Omega_{\rm gw}(f)=\Omega_0$ for $f_{\rm low}\le f \le f_{\rm high}$. It calculates the cross-correlation signal value $S$ and theoretical variance $\sigma^2$, taking as input the continuous-in-time whitened data streams $o_1(t)$ and $o_2(t)$ produced by two detectors.

The arguments of analyze() are:

average: Input. An integer variable that should be set equal to 1 if the values of the real-time cross-correlation and/or noise power spectra corresponding to two overlapped data sets are to be averaged.
in1: Input. in1[0..n-1] is an array of floating point variables containing the values of the continuous-in-time whitened data stream $o_1(t)$ produced by the first detector. $o_1(t)$ is the convolution of detector whitening filter $W_1(t)$ with the data stream $s_1(t):=h_1(t)+n_1(t)$, where $h_1(t)$ is the gravitational strain and $n_1(t)$ is the noise intrinsic to the detector. These variables have units of rHz (or ${\rm sec}^{-1/2}$), which follows from the definition of $s_1(t)$ as a strain and $\tilde W_1(f)$ as the ``inverse'' of the square root of the noise power spectrum $P_1(f)$. in1[i] contains the value of $o_1(t)$ evaluated at the discrete time $t_i=i\Delta t$, where $i=0,1,\cdots,N-1$.
in2: Input. in2[0..n-1] is an array of floating point variables containing the values of the continuous-in-time whitened data stream $o_2(t)$ produced by the second detector, in exactly the same format as the previous argument.
n: Input. The number $N$ of data points corresponding to an observation time $T:=N\ \Delta t$, where $\Delta t$ is the sampling period of the detectors, defined below. $N$ should equal an integer power of 2.
delta_t: Input. The sampling period $\Delta t$ (in sec) of the detectors.
f_low: Input. The frequency $f_{\rm low}$ (in Hz) below which the spectrum $\Omega_{\rm gw}(f)$ of the stochastic background is assumed to be zero. $f_{\rm low}$ should lie in the range $0\le f_{\rm low}\le f_{\rm Nyquist}$, where $f_{\rm Nyquist}$ is the Nyquist critical frequency. (The Nyquist critical frequency is defined by $f_{\rm Nyquist}:=1/(2\Delta t)$, where $\Delta t$ is the sampling period of the detectors.) $f_{\rm low}$ should also be less than or equal to $f_{\rm high}$.
f_high: Input. The frequency $f_{\rm high}$ (in Hz) above which the spectrum $\Omega_{\rm gw}(f)$ of the stochastic background is assumed to be zero. $f_{\rm high}$ should lie in the range $0\le f_{\rm high}\le f_{\rm Nyquist}$. It should also be greater than or equal to $f_{\rm low}$.
gamma12: Input. gamma12[0..n/2-1] is an array of double precision variables containing the values of the overlap reduction function $\gamma(f)$ for the two detector sites. These variables are dimensionless. gamma12[i] contains the value of $\gamma(f)$ evaluated at the discrete frequency $f_i=i/(N\Delta t)$, where $i=0,1,\cdots,N/2-1$.
whiten1: Input. whiten1[0..n-1] is an array of double precision variables containing the values of the real and imaginary parts of the spectrum $\tilde W_1(f)$ of the whitening filter of the first detector. These variables have units ${\rm rHz}/{\rm strain}$ (or ${\rm sec}^{-1/2}$), which are inverse to the units of the square root of the noise power spectrum $P_1(f)$. whiten1[2*i] and whiten1[2*i+1] contain, respectively, the values of the real and imaginary parts of $\tilde W_1(f)$ evaluated at the discrete frequency $f_i=i/(N\Delta t)$, where $i=0,1,\cdots,N/2-1$.
whiten2: Input. whiten2[0..n-1] is an array of double precision variables containing the values of the real and imaginary parts of the spectrum $\tilde W_2(f)$ of the whitening filter of the second detector, in exactly the same format as the previous argument.
real_time_noise1: Input. An integer variable that should be set equal to 1 if the real-time noise power spectrum $P_1(f)$ of the first detector should be calculated and used when performing the data analysis.
real_time_noise2: Input. An integer variable that should be set equal to 1 if the real-time noise power spectrum $P_2(f)$ for the second detector should be calculated and used when performing the data analysis.
power1: Input/Output. power1[0..n/2-1] is an array of double precision variables containing the values of the noise power spectrum $P_1(f)$ of the first detector. These variables have units of ${\rm strain}^2/{\rm Hz}$ (or seconds). power1[i] contains the value of $P_1(f)$ evaluated at the discrete frequency $f_i=i/(N\Delta t)$, where $i=0,1,\cdots,N/2-1$. If ${\tt real\_time\_noise1}=1$, the values of power1[0..n/2-1] are changed to
\begin{displaymath}
P_1(f):={2\over T}\ \tilde s_1^*(f)\tilde s_1(f)\ ,
\end{displaymath} (11.23.266)

where $\tilde s_1(f)$ is the Fourier transform of the unwhitened data stream $s_1(t)$ at the first detector site. If ${\tt real\_time\_noise1}\ne 1$, the values of power1[0..n/2-1] are unchanged.
power2: Input/Output. power2[0..n/2-1] is an array of double precision variables containing the values of the noise power spectrum $P_2(f)$ of the second detector, in exactly the same format as the previous argument.
signal: Output. A pointer to a double precision variable containing the value of the cross-correlation signal
\begin{displaymath}
S:=\int_{f_{\rm low}}^{f_{\rm high}} df\ \tilde s_{12}(f)\ \tilde Q(f)\ ,
\end{displaymath} (11.23.267)

where $\tilde s_{12}(f)$ is the real-time cross-correlation spectrum and $\tilde Q(f)$ is the spectrum of the optimal filter function. $S$ has units of seconds.
variance: Output. A pointer to a double precision variable containing the value of the theoretical variance $\sigma^2$ of the cross-correlation signal $S$. $\sigma^2$ has units of sec${}^2$.

analyze() is very simple function, consisting primarily of calls to other more basic functions. If real_time_noise1 or ${\tt real\_time\_noise2}=1$, analyze() calls extract_noise() to obtain the desired real-time noise power spectra. It then calls extract_signal() and optimal_filter() to obtain the values of $\tilde s_{12}(f)$ and $\tilde Q(f)$, which are needed to calculate the cross-correlation signal $S$, according to Eq. ([*]). Finally, analyze() calls calculate_var() to obtain the theoretical variance $\sigma^2$ associated with $S$.

Note: One should call analyze() with ${\tt average}\ne 1$, when one suspects that the current input data in1[] and in2[] are not continuous with the data from the previous call to analyze(). This is because a discontinuity between the ``old'' and ``new'' data sets has a tendency to introduce spurious large frequency components into the real-time cross-correlation and/or noise power spectra, which should not be present. (See the discussion at the end of Secs. [*] and [*] for more details.)

Authors: Bruce Allen, ballen@dirac.phys.uwm.edu, and Joseph Romano, romano@csd.uwm.edu
Comments: None.


next up previous contents
Next: Function: prelim_stats() Up: GRASP Routines: Stochastic background Previous: Example: omega_min program   Contents
Bruce Allen 2000-11-19