Tidal prediction

4 visualizaciones (últimos 30 días)
Dany
Dany el 23 de Mayo de 2012
Comentada: Alexandria el 29 de Jun. de 2016
Hello, im trying to perform tidal prediction. in order to do that i need to analyse the raw data from the mareograph and to get the amplitude and the phase of the first 20 frequencies (those ones have the most impact in the data).
i've used the following functions: Y=fft(X); %X is the raw data Ph=angle(Y); Amp=abs(Y);
the problem is that the values that im getting for the amplitudes are enormous (the original data has values up to 0.4 meters, the amplitude has valuse of tens sometimes hundreds of meters) wich is wrong.
how can i fix it? what am i doing wrong?
thanx for the help .....
  1 comentario
Alexandria
Alexandria el 29 de Jun. de 2016
I want to perfom a tidal prediction, what data do you need to use?

Iniciar sesión para comentar.

Respuesta aceptada

Wayne King
Wayne King el 23 de Mayo de 2012
Hi Dany, you are most likely not scaling the estimates by the length of the input vector. For example.
t = 0:0.001:1-0.001;
x = cos(2*pi*100*t-pi/4)+0.5*randn(size(t));
xdft = fft(x);
xdft = xdft(1:length(x)/2+1);
xdft(2:end-1) = 2*xdft(2:end-1);
xdft = xdft./length(x);
fprintf('Amplitude at 100 Hz is %3.2f.\n',abs(xdft(101)))
fprintf('Phase at 100 Hz is %2.3f radians.\n',angle(xdft(101)))
  3 comentarios
Wayne King
Wayne King el 23 de Mayo de 2012
right, to make DFT as matlab implements it as a unitary operator, you have to multiply the output by 1/sqrt(length(x)). For the L2 norm:
x = randn(8,1);
norm(x,2)
xdft = 1/sqrt(length(x))*fft(x);
norm(xdft,2)
but 2/length(x) here for the positive frequencies gives you the MLE estimates of the sine wave amplitudes
Dany
Dany el 23 de Mayo de 2012
Wayne,
thank you for your help, it seems ok now.

Iniciar sesión para comentar.

Más respuestas (1)

Daniel Shub
Daniel Shub el 23 de Mayo de 2012
The concept of the first 20 frequencies doesn't make sense. The frequencies to which the first 20 components correspond depends on your sample rate and the number of samples in your signal/FFT. You might want to calculate the PSD instead of the FFT. Also, if all you want is the power in the low frequencies you might want to just lowpass filter your signal. Finally you might want to consider FREQZ instead of FFT.
There is no reason that the FFT of a waveform with a maximum magnitude of 0.4 cannot have values much much larger than 0.4. Consider
Amp = abs(fft(0.4*rand(1e5, 1)));
  1 comentario
Dany
Dany el 23 de Mayo de 2012
i will, thank you

Iniciar sesión para comentar.

Categorías

Más información sobre Fourier Analysis and Filtering en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by