Signal Relationships and Conversion: Transforming one Signal into another?

500 views Asked by At

I'm trying to relate a near shore tidal signal (point A) to 3 points along a long model boundary (points B C D). I want to possibly have a relationship between B C D with which we can convert A predictions into B C and D. At the moment I'm doing a single phase shift, an amplitude ration for levels above zeros, an amplitude ration for levels below zero and a mean level shift.

This creates a kink in the Tidal signal at Peak ebb and Peak flood and results in the model over predicting ebb currents. I was wondering if anyone is aware of a more complex relationship for this sort of transformation?

One thing I would like to capture is the difference in phase shift between high and low water (for example the ration of period of the positives to the period of the negatives might be different for the different points).

An example algorithm for current process.

A = vector (size n x 1 ) units meters

time_A = vector (size n x 1 )

ph_B = phase shift for AvsB.

pos_amp_B = positive amplitude ration.
neg_amp_B = negative amplitude ration.

B_mean = long term mean of B.

A_mean = long term mean of A.

for i = 1:n
    a = A(i) - A_mean
    if a > 0
       B(i) = a*pos_amp_B
    else
       B(i) = a*neg_amp_B
    end
    time_B(i) = time_A(i) = ph_B
    B(i) = B(i) + B_mean
end

BTW: The relationship is based on about 6 months of data.

EDIT 1: Well, firstly just think of two sinusoidal signals (ie. amplitude, phase shift), but not regular, so for example the period is 12.5 hrs but the slopes and periods of the positive half and negative half aren't all the same. You don't need any contextual knowledge. Im just looking for a transformation algorithm.

EDIT 2:

Here's a pic of the timeseries and the fft comparisons (fft focused on frequencies of high energy (12.5 hrs (semidiurnal)), just to give idea not all frequencys are so scaled nicely). Black is A. green in zeros line.

Water Level [m] timeseries (top) and fft analysis (bottom)

3

There are 3 answers

2
Siskin On

Without a more detailed knowledge of your domain, it's difficult to provide a definitive answer for you. I will make the assumption here that your tidal behaviour is a linear time invariant (LTI) system. From the data you have shown in your question, this looks to be a reasonable assumption.

So now you can create your B, C and D signals by simply applying an amplitude and phase adjustment to your signal A. There are several ways to do this; below I have done it by multiplying A by a complex number. Adjust the amplitude and phase of the complex number to give the result you need. Here's an example written in Matlab code:

% Create an example signal at location 'A'
t = 0:0.1:10;
A = 0.35.*sin(2.*pi.*0.5.*t) + 1.*sin(2.*pi.*0.5175.*t) + 0.3.*sin(0.5255.*t);

% We want a complex version of A, so let's apply a Hilbert transform to it
A = hilbert(A);

% Now we can create the other signals by transforming the amplitude and
% phase. Exactly what amplitude and phase to apply needs to be determined.
B = 0.9*exp(j*0.1).*A;
C = 0.8*exp(j*0.4).*A;
D = 0.7*exp(j*0.6).*A;

% Plot what these signals look like
figure(1); hold on;
plot(t,real(A),'k');
plot(t,real(B),'r');
plot(t,real(C),'g');
plot(t,real(D),'b');
xlabel('Time');
ylabel('Amplitude');
legend('A','B','C','D');

This will produce a plot very similar in appearance to the picture you posted in your question. If your tidal behaviour cannot be approximated by an LTI system, then you may have to perform some more complex non-linear modelling.

Hope that helps!

0
pefu On

Models for tidal predictions are very very complex.

For more precise predictions you will need more data. Have a look at the following paper (unfortunately written in German; I'm not aware of an english translation):

Das Nordseemodell der BAW zur Simulation der Tide in der Deutschen Bucht

Fortunately this paper contains lot of tables and pictures which can be understood without knowing the German language.

In summary: Beside the tidal levels at point A, B, C, D you certainly need some approximation of the depth profile of the sea floor and you will need wind data for your computations. And only six months of real world data are not enough: You will need at least a year of data to cover all seasons.

The software referenced on page 93 of the paper has been put under the GPLv2 in 2010 and can be found here

0
claj On

This looks similar to a forced oscillation (driven by the moon) with disturbances in the sea-air system.

Could you set up a system of four ODE's and an external source of force, like:

   <<< tidal force field >>>

|         |         |         |
o -vvvvv- o -vvvvv- o -vvvvv- o
A         B         C         D

where the -vvvvv- is supposed to resemble mechanical springs.

All the springs are also affected by the moon, probably with some slight phase shift if the points are further apart.

You could likely decide the constants in the resulting matrix for the system by using some method-I-wish-I-knew given in stochastic differential equations. The approach with stochastical differential equations seems to be used in hydrology (paywall), so maybe I'm not too far off.

If you want to live on the edge, you could try to make the couplings behave slightly non-linear (ie, flatten out slightly when reaching max, which could be thought of as the increasing surface of the sea when it rises).