0
$\begingroup$

I am doing a project on short time Fourier transform, I have to perform STFT for 128 data points. I have developed a Matlab code to perform the STFT operation. But, my main concern is, I need to implement this in a microcontroller. I need to find the math behind this library. How MATLAB is calculating this operation, I need detailed math breakdown for this operation. In MATLAB website I have seen that, they are using Hann window. Can anyone help me to understand the math breakdown, behind this MATLAB STFT library? Thanks a lot.

The MATLAB code is below.

x = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127];

figure;
   plot(x);
   xlabel('time (in seconds)');
   title('Sine Signal versus Time');

   s = stft(x);
$\endgroup$
2

1 Answer 1

1
$\begingroup$

This depends a bit on what exactly you need. The short term Fourier Transform has a LOT of different parameters and you need to find which is the best parameter choice for your application.

As written, the code does three things.

  1. Applies a symmetric Hanning window
  2. Performs a Discrete Fourier Transform (DFT)
  3. Applies a circular shift

The first two steps can be written as

$$ X(k) = \sum_{k=0}^{N-1} x[n] \cdot \sin^2 \left( \frac{\pi(k+1)}{N+1} \right)\cdot e^{-j2\pi\frac{kn}{N}}$$

The last step is just reordering the data, which you may or may not have to do.

The hanning window has different flavors depending whether you want it to be symmetric or periodic and whether you want the first or last points to be zero of non-zero. What I have written uses the same flavor as stft().

For the Fourier Transform you can write this directly as the equation or you can try to find an FFT library for your processor, which would be faster. You can also try to write an FFT from scratch, but that's a fair bit of work.

If any possible, you should write this in floating point. Doing this in fixed point is VERY difficult.

$\endgroup$
1
  • $\begingroup$ Thanks a lot for your response and sorry for late reply. I have implemented your equation into MATLAB, without using any library. I have done the code using Hanning window and DFT, I didn't use the circular shift. I think I am getting similar result like MATLAB library. Because of not doing the circular shift the outputs are not in order. Thanks for your help. For modification of the above code, I am not using any FFT library, I am trying to implement it by my self. Can you tell me the pseudo code for the FFT algorithm? $\endgroup$
    – radium88
    Apr 4, 2022 at 11:46

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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