Tuesday, 29 September 2015

fourier transform - Conditions for symmetric and unimodal windows in both time and frequency domains


After a lecture on harmonic analysis and time/frequency methods, I reconsidered the Gaussian kernel, defined in continuous time.


It is unimodal and symmetric, and its continuous Fourier transform is another Gaussian, thus unimodal and symmetric (from Fourier transform of a Gaussian is not a Gaussian, but that's wrong!):


Gaussian/Fourier


As a filter or a window, the Gaussian ensure a monotonic weight decay around its center. The interpretation in the frequency domain is similar: frequencies are monotonically attenuated away from a center frequency.


Such a property allows a straightforward interpretation in both the time and the frequency domain.



  • For continuous kernels, are there generic characterizations (necessary or sufficient conditions) under which unimodal and symmetric windows also have a unimodal and symmetric amplitude spectrum?




Answer



This is only also partial answer. I translate unimodular into ripple-free, because ripples are essentially extremal points, and we just want to have a single one.


A ripple-free Fourier Transform translates (to my knowledge) to an infinitely often continuously differentiable time-domain function. Furthermore, to let the Fourier Transform be defined easily, the function should either decay very quickly or should have compact support. Hence, candidate functions would be from the Schwartz space of functions.


Unimodality further reduces the number of candidates, with the Gaussian being a prominent example. Others are Hermite Polynomials, weighted with the Gaussian. With a clever linear combination of Hermite function, you can create a function that is unimodal, different from a gaussian and still has ripple-free and symmetric Fourier transform.


import scipy.special
%matplotlib inline

Fs = 100
t = np.arange(-10, 10, 1./Fs)

H = scipy.special.hermite
g = lambda t: (H(4)(t)+H(2)(t)+80*H(0)(t)) * np.exp(-t*t)
gauss = lambda t: np.exp(-t*t)
plt.subplot(1,2,1)
plt.plot(t, g(t))
plt.plot(t, 80*gauss(t))
plt.xlim(-4,4)

plt.subplot(1,2,2)
plt.plot(20*np.log10(abs(np.fft.fft(g(t), 7*len(t)))))


Program output


I believe the ripples in the frequency are due to finite windowing and numerics. Might need more analysis with analytic solutions, e.g. from Mathematica.


So, the answer might be: The window needs to be unimodular and stem from the Schwartz space of functions?


No comments:

Post a Comment

readings - Appending 内 to a company name is read ない or うち?

For example, if I say マイクロソフト内のパートナーシップは強いです, is the 内 here read as うち or ない? Answer 「内」 in the form: 「Proper Noun + 内」 is always read 「ない...