0
$\begingroup$

Im working on a project in which I should FFT a signal coming into my FPGA from ADC. I want my FFT to show the peak values as clear as possible without the side lobes.

The solution should be straight forward: Window the time domain signal before FFT and I will get better results in the frequency domain, for example using Hamming Window.

But I encountered another approach to this, apply the WOLA (Weight, OverLap, Add) algorithm on the signal before the FFT.

So I used Matlab to check the results.

Lets assume I am capturing this noisy signal through the FPGA: enter image description here

so first I will check what is the FFT without any window: enter image description here

I want to decrease the side lobes of this fft, so the straightforward approach is to create a hamming window, and multiply it with the signal, like this:

% Generate Hamming Window using Equation:
n = [1:1024];
w = 0.54 - 0.46*cos(2*pi*n/1024); 
% Apply Hamming Window on Input Signal:
hamming_sim = din_window.*w;

enter image description here

and now lets FFT this new windowed signal:

fft_hamm_sim = abs(fft(hamming_sim));
fft_hamm_sim(1) = 0;
fft_hamm_sim(2) = 0;
fft_hamm_sim(1024) = 0;

enter image description here

OK so I am getting a good result as expected.

I encounterd another approach which requires taking the time domain hamming_window*input_signal, and apply WOLA on it and this is how I did it (I will be glad if someone will alert me if its not the right way):

I took the windowed signal and added the first array element with the middle array element and then the second array element added with the middle+1 array element, like this:

    wola_sim = zeros;
    i = 1;
    for k = 1:512
        wola_sim(i) = hamming_sim(k) + hamming_sim(k+512);
        i = i+1;
    end 

enter image description here

and now on this signal i applied FFT:

fft_wola_sim = abs(fft(wola_sim));
fft_wola_sim(1) = 0;

enter image description here

It is still decreasing the side lobes but it is easy to see that the result worse.

My questions:

  1. Am I applying the WOLA algorithm right? Apply hamming window and than add the first half of the array with the second half.

  2. Suppose I apply the WOLA right, what is it used for? Is it really suppose to help me supress the side lobes before the FFT? Why I getting worse result than only hamming window?

  3. For my needs, is it okay to just use the Hamming window?

$\endgroup$
  • $\begingroup$ The purpose of WOLA (and OLA for that matter) is to resynthesize (recombine) the multiple, overlapping fft segments (chunks) in order to generate a time domain signal (waveform). It should not be used for fft analysis so it's not appropriate for your use case. As for question #3, using a Hamming window is fine. $\endgroup$ – dsp_user May 21 at 7:05
  • $\begingroup$ @dsp_user Could I please ask you to turn the comment into an answer so that we close the question "gracefully"? This gives Michael Astahov the opportunity to accept / upvote it too. Otherwise, it is likely that it will be circulating the board as "unanswered" which is not what is really hapenning here. $\endgroup$ – A_A May 21 at 10:45
0
$\begingroup$

I'll try to briefly answer your questions.

  1. No, WOLA (weighted overlap and add) is applied directly on the result(s) of an inverse FFT operation. The IFFT results ( time segments ) are first multiplied by a particular window function (e.g Hamming ) and then overlap-added to produce the final time domain signal ( waveform ).

  2. As explained in #1, WOLA is used to generate a time domain signal from multiple, overlapping ifft segments. If you have only a single fft segment (from your FFT analysis), then there's no need for (W)OLA at all.

  3. Yes

| improve this answer | |
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.