HU(omega) =
Why Does ifourier Not Return Equivalent Results for Equivalent Transforms?
이전 댓글 표시
Consider two expressions of a Fourier transform
syms t omega real
HU(omega) = -(exp(-omega*1i)*(exp(omega*1i) - 1)*(omega + 1i))/(omega*(omega^2 + 1))
Y(omega) = (exp(-omega*1i)*1i - 1i)/(omega*(1 + omega*1i))
The transforms are equivalent
simplify(HU(omega)-Y(omega))
so I would expect the inverse transforms to be equivalent.
Inverse transform of Y(omega)
y(t) = ifourier(Y(omega),omega,t)
Inverse transform of HU(omega)
hu(t) = ifourier(HU(omega),omega,t)
hu(t) looks complicated, but the primary concern is that Dirac delta in the first term in the numerator.
Simplify both expressions
s = @(z) simplify(rewrite(simplify(z),'heaviside'));
y(t) = s(y(t))
hu(t) = s(hu(t))
Sure enough, both time domain signals are the same with the exception that hu(t) includes that Dirac delta term.
Show that they are the same, except for the Dirac delta, by subtracting and using fplot that ignores Dirac delta terms:
figure
fplot(y(t)-hu(t),[-10,10]),ylim([-1e-16,1e-16])
Is this a bug, or is there a problem in the code, or am I misunderstanding what the results should be?
댓글 수: 4
Taking a round trip fourier(ifourier(X)) is apparently not producing the same answer for hu -- they differ by a constant of 1
syms t omega real
HU(omega) = -(exp(-omega*1i)*(exp(omega*1i) - 1)*(omega + 1i))/(omega*(omega^2 + 1))
Y(omega) = (exp(-omega*1i)*1i - 1i)/(omega*(1 + omega*1i))
figure(1)
y(t) = ifourier(Y(omega),omega,t)
hu(t) = ifourier(HU(omega),omega,t)
yy = rewrite(simplify(y), 'heaviside')
symvar(yy)
YY = fourier(yy)
YY = subs(YY, symvar(YY), omega)
YY - Y
simplify(ans)
simplify(expand(ans))
C1 = collect(ans, omega)
symvar(C1)
fplot(C1, [0 5])
figure(2)
huhu = rewrite(simplify(hu), 'heaviside')
HUHU = fourier(huhu)
HUHU = subs(HUHU, symvar(HUHU), omega)
HUHU - HU
simplify(ans)
simplify(expand(ans))
C2 = collect(ans, omega)
symvar(C2)
fplot(C2, [0 5])
David Goodmanson
2026년 2월 23일
편집: David Goodmanson
2026년 2월 23일
Hi Paul,
That would appear to be the case, especially since (putting things slightly differently and ignoring multiplicative constants),
lim{w-->inf} hu(w)
= lim{w-->inf} Ftrans(hu(t)) % supposed hu(t)
= lim{w-->inf} Ftrans(delta(t) + sum of heavisides)
= lim{w-->inf} (1 + O(1/w)) = 1 *
whereas
hu(w) = y(w) is O(1/w^2) as w-->inf
* Using O(1/w) for one heaviside and still O(1/w) for a sum of heavisides is a simple upper bound to illustrate the point. For a particular sum of heavisides the actual behavior could fall off faster, as it does here.
Paul
2026년 2월 23일
답변 (1개)
카테고리
도움말 센터 및 File Exchange에서 z-transforms에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




















