The last post looked at two time domain measurements of significant wave height, the highest 3rd calculation and the 4 times the standard deviation measurement.
It turns out that the standard deviation measurement can also be made in the frequency domain. This is because the variance of a time domain signal is equal to the area under the power-spectral density curve.
The first step of the measurement is to start out with time domain surface elevation data:
Perform a fourier transform on the data to get the frequency content:
Then convert the FFT data to a power-spectral distribution :
The area under this PSD curve will equal the variance of the original time domain signal. Standard deviation is just the square root of the variance so signinificant wave height can easily be calculated from here. The calculation would be:
4*sqrt(area under psd curve).
An example of this calculation in Matlab is available on the OpenWave Github repo. The script is called sig_wave_ex2.m:
%Calculates significant wave height in the time domain and the freq domain
%(Area under PSD curve is equal to variance of time domain signal)
num_waves = 100; %number of sine waves combined to make simulated wave data
fs = 10; %sample rate
dt=1/fs;
stoptime = 40; %signal duration in seconds
sample_length = (fs*stoptime)+1;
t = (0:dt:stoptime)'; % seconds
S = oceanWaveSim(num_waves, 1, fs, stoptime); %Generate simulated ocean surface displacement data
psd_area = psd_test(S, fs); %Get area under power-spectral distribution curve
fprintf('Elevation data signal variance = %0.2f\n',var(S));
fprintf('PSD area under curve = %0.2f\n',psd_area);
fprintf('Significant wave height (time domain calc) = %0.2f\n',4*sqrt(var(S)));
fprintf('Significant wave height (freq domain calc) = %0.2f\n',4*sqrt(psd_area));
%plot time domain ocean surface displacement signal
figure(4)
plot(t,S);