RunSemblance Documentation

Makes a semblance correlation of the two input traces. This is a full (non-gated) semblance.


The program is used as follows:

runSemblance input1FileName input2FileName

Where the input1FileName and input2FileName are in our standard file format.



The output of the program appears one place:

(1)   A copy of the output data is placed in the file lastDataOutput.

The returned floating point array is numbered , and the  point represents the value of the semblance when the middle of the event is lined up with the  point.




We present here the definition of semblance implemented in the LwsVector class using the method Semblance. We start by reviewing the basic theory of cross correlation. Our implementation of cross correlation is defined in RunXCorr. We summarize below the theory of cross correlation with lag.

Cross Correlation with Lag:




or in the digital domain:


where l is the lag, and k is the center of the window.

This should be normalized by


When normalized correctly, it will be between -1 and 1. It is 1 when f=g and l=0, and it is -1 when f=-g and l=0. Here is the complete cross correlation formula:





In the frequency domain:

If  is the fourier transform of convolution, we have:


which has lots of phase and DC problems.

Semblance with Lag

Cross correlation is very sensitive to phase differences. A better choice is Semblance, a measure of the coherence between traces. This is not usually computed with lag, but we need that here:


This is approximately the energy of f and G divided by the mean energy of each component. It is between 0 and 1, and is 1 when f=g and l=0.


In our implementation, we assume that the  is an event, i.e.  and  have different lengths, and we are interested in the results of passing  over . Let  and  be the lengths of  and  respectively. In our case,




Then in equation (2.1)  and  are extended with 0 values as necessary, and we have




that is we sum whenever  and  overlap, that is in the region where  and . Remember that  is the left hand endpoint of  and so one should add  to  to find the lag corresponding to the center of the event.


It turns out that when the length of  and  are very different, the semblance for where they partially overlap can be biased. So, instead of (2.3) we use only those points for which  and  completely overlap, making use of the assumption (2.2).






There is no clear frequency domain analogue. If , then . If  then . If  then . In general, it can be characterized as the energy of the sum divided by the mean energy of the components of the sum. This method is more robust with respect to phase distortions.  


For more than two samples, (2.1) can be generalized:




Writing the equation this way makes it clearer that we are comparing energy of the sum to the mean energy of the components. However, for notational convenience the lag, which is different for each j, is applied the  before summing.


In any case, we use equation (2.4) in RunSemblance and in Semblance. To make the array reference the center of the event, we pad  zeros on the beginning and the end of the resulting array. Then the returned floating point array is numbered , and the  point represents the value of the semblance when the middle of the event is lined up with the  point.