필터 지우기
필터 지우기

Error when taking the continuous time Fourier transform

조회 수: 3 (최근 30일)
L'O.G.
L'O.G. 2022년 7월 11일
댓글: Paul 2022년 7월 11일
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
Jeffrey Clark
Jeffrey Clark 2022년 7월 11일
@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. 2022년 7월 11일
@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.

댓글을 달려면 로그인하십시오.

채택된 답변

Paul
Paul 2022년 7월 11일
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
L'O.G.
L'O.G. 2022년 7월 11일
Thanks @Paul. This is interesting. I'll think about this. Really appreciate your help.
Paul
Paul 2022년 7월 11일
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')

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Number Theory에 대해 자세히 알아보기

제품


릴리스

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by