Error when taking the continuous time Fourier transform

5 visualizaciones (últimos 30 días)
L'O.G.
L'O.G. el 11 de Jul. de 2022
Comentada: Paul el 11 de Jul. de 2022
I am trying to figure out what the error is associated with taking a Fourier transform. I have a 1D vector A of 130 elements and I know the error associated with each element that is just a number. The error is a 130 element vector called std_A. From that I think I can calculate the error associated with the function that it makes up:
syms t w real
f(t) = sum(exp(-t./A))*heaviside(t);
std_ft(t) = sqrt(sum((abs(t).*exp(-t.*A)*heaviside(t)+dirac(t)).*std_A).^2);
The last line is what I calculated by doing the error propagation for the nonlinear function and is approximate.
Since I think in general you need to take the Fourier transform of the error in the time domain to calculate the error in the frequency domain, I have:
std_fw(w) = fourier(std_ft(t),t,w);
The calculation is very slow I think due to the length of the vector A and also the end result is actually a function of both t and w, which I'm not sure how to work with.
Is there a better way of doing this? I feel like I am making this harder than it needs to be.
  4 comentarios
Jeffrey Clark
Jeffrey Clark el 11 de Jul. de 2022
@L'O.G., thanks for explaining some things. Your original post said std_fw(w) returned something that is a function of both t and w, but in your simplified example above f(w) is only a function of w. Is this your question? (It is mine.) Could the symbolic math engine not have been able to do the fourier completely? Or is your f(t) above and std_ft(t) quite different if you were to ask MATLAB to display those symbolic equations like you did above for f(w), perhaps with unresolved dependencies?
L'O.G.
L'O.G. el 11 de Jul. de 2022
@Jeffrey Clark I thought f(w) should only be a function of w, but unfortunately the symbolic engine doesn't seem able to do the CTFT completely. See Paul's response below and my comment to him, which is really the crux of my problem.

Iniciar sesión para comentar.

Respuesta aceptada

Paul
Paul el 11 de Jul. de 2022
Using some examle data ...
A = 1:5;
std_A = 11:15;
syms t w real
f(t) = sum(exp(-t./A))*heaviside(t)
f(t) = 
std_ft(t) = sqrt(sum((abs(t).*exp(-t.*A)*heaviside(t)+dirac(t)).*std_A).^2)
std_ft(t) = 
FWIW, there is no need to use abs(t) here because each is multiplied by heaviside(t).
Anyway, I doubt the signal std_ft(t) has a closed form expression for its Fourier Transform, assuming its Fourier Transform exists.
fourier(std_ft(t),t,w)
ans = 
Certainly Matlab can't find one, so it just resturns an answer in terms of fourier().
  6 comentarios
L'O.G.
L'O.G. el 11 de Jul. de 2022
Thanks @Paul. This is interesting. I'll think about this. Really appreciate your help.
Paul
Paul el 11 de Jul. de 2022
Actually, I guess I should have at least run a simple test to see if it works:
syms t w real
A = 1; dtau = 0.1;
f(t) = exp(-t/(A + dtau))*heaviside(t);
F(w) = fourier(f(t),t,w);
f0(t) = exp(-t/A)*heaviside(t);
F0(w) = fourier(f0(t),t,w);
dF(w) = dtau/A^2/(1/A + 1i*w)^2;
figure;
fplot(abs([F(w) , F0(w) , dF(w) , F0(w)+dF(w)]))
legend('F', 'F0', 'dF' , 'F0 + dF')
figure;
fplot(angle([F(w) , F0(w) , dF(w) , F0(w)+dF(w)]))
legend('F', 'F0', 'dF' , 'F0 + dF')

Iniciar sesión para comentar.

Más respuestas (0)

Productos


Versión

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by