Symmetrical Fourier propertie (frequency)

Sauraj

New member
Joined
Jul 6, 2019
Messages
39
Hi to all,
If I want to filter some (audio) signal, I have to convert it into the frequency domain with fft, then apply my filter and the convert back.
Now before I can convert it back into the time-domain (space domain?) with the inverse of fft I have to pay attention to the symmetrical property.
So symmetry property means that the first N/2 entries of the vector in frequency domain are frequencies and the second half is the complex conjugate of the first half.
Is it correct?
How to construct the right order to apply the inverse of fft on s?

I wrote this on python but its not working
Code:
for i in range(1, int(n/2)): # n is even I think and s is real signal vector
   s[i+int(n/2)] = np.conj(s) #"set the second part to be the complex conjugate of the first part"

Thank u in advance for the advice
 
Last edited by a moderator:
For example s after fft(s):


(first is real and N/2 is real)
...
(9+10j)
(7-8j)
(-5+6j)
(3-4j)
(-1-2j)
(-123+0.0j) #mid
(-1+2j)
(3+4j)
(-5-6j)
(7+8j)
(9-10j)
what do I have to do?
 
I have limited exposure to FFT techniques, so please bear with me, as I do not have the full answer to your question. My relevant experience lies mainly in digital signal processing.

So symmetry property means that the first N/2 entries of the vector in frequency domain are frequencies and the second half is the complex conjugate of the first half.
Is it correct?
The relationship is correct, although I'm not familiar with the conventions regarding the ordering.

Recall that the nyquist frequency of a stream is the greatest frequency that can be represented in a stream. It is half the sampling rate, because any tone requires both an "up" and a "down". Therefore, anything above the nyquist frequency is in sort of an auditory no-man's land.

Poles and zeroes with an imaginary component in the frequency domain risk producing a time-domain coefficient with an imaginary component, which renders it unusable on a signal comprised of real samples. Introducing additional poles and zeroes--the complex conjugates of the other poles and zeroes--guarantees that all coefficients expand to real values.

Multiplying a complex value by its complex conjugate always results in a real value. The influence of these new poles and zeroes on the signal is generally inconsequential because the frequencies they modify are above the nyquist frequency and therefore not actually present in the stream.

How to construct the right order to apply the inverse of fft on s?
If the angle of a pole or zero is less than [MATH]\pi[/MATH] (which corresponds to the nyquist frequency), its complex conjugate should be present in order to prevent complex time-domain coefficients. If the angle is greater than [MATH]\pi[/MATH] and its complex conjugate is not present, then it should not even be part of the filter in the first place.
 
OP, your python code was almost correct. See an adjusted version below. Uncomment the print if you want to see how the assignments progress. The following also ensures the first and mid elements are real (in case your filter might affect these)

Python:
mid=int(n/2)
s[0]=np.real(s[0])
s[mid]=np.real(s[mid])
for i in range(1, int(n/2)):
  # print(" %d = %d" % (mid+i,mid-i))
  s[mid+i] = np.conj(s[mid-i])

However I recommend that you don't do the above and consider using the python fft routines that are specifically designed for working with real signals:- numpy.fft.rfft and numpy.fft.irfft
 
Top