<span style="color: rgb(51, 102, 255);">Thanks for the explaination.&nbsp;&nbsp; Please see my questions and comment in lines. </span><br><br>On 4/16/07, Jean-Marc Valin &lt;<a href="mailto:jean-marc.valin@usherbrooke.ca">jean-marc.valin@usherbrooke.ca
</a>&gt; wrote:<br>&gt; (keeping this on the list)<br>&gt; <br>&gt; William Zhang wrote:<br>&gt; &gt; I read the mdf.c an my understanding is that N is actually window size for<br>&gt; &gt; the FFT. The actual length L = N/2 which is the frame length.&nbsp;&nbsp;The
<br>&gt; &gt; second part of the buffer is padded with the new frame data.&nbsp;&nbsp;So this is<br>&gt; &gt; like the overlap-save method for improving the acuracy in calculating<br>&gt; &gt; the fft of<br>&gt; &gt; long sequence of data?
<br>&gt; <br>&gt; The reason for the zero padding is that it&#39;s the only way to compute the<br>&gt; convolution correctly in the frequency domain (that is, without circular<br>&gt; convolution effects).<br>&gt; <br>&gt; &gt; My hardware logic can perform N real point FFT real fast and it produce
<br>&gt; &gt; N complex fft results<br>&gt; <br>&gt; If that&#39;s the case, then you can still benefit by converting the N-point<br>&gt; real FFT into an N/2 point complex FFT and an update pass.<br><span style="color: rgb(51, 102, 255);">
This is what the kiss_fftr function does, right? <br><br></span>&gt; &gt; RIRIRI...RI. How does it map to your N/2 complex<br>&gt; &gt; output especially<br>&gt; &gt; the first R and last R in your sequecne?<br>&gt; <br>&gt; The packing is actually R(0), R(1), I(1), R(2), I(2), ... R(N/2)
<br><br>&gt; Because the input is real, it means that I(0) and <span style="color: rgb(204, 0, 0);">R(N/2)</span> are equal to<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(51, 51, 255);">
I think you mean I(R/2), correct?</span><br>&gt; zero (so we don&#39;t need to include them). Also, everything above N/2 is<br>&gt; the complex conjugate of what&#39;s below so it&#39;s uninteresting as well.<br>&gt; <br>
&gt; <br>&gt; &gt; And do you think the hardware<br>&gt; &gt; approach will fit in<br>&gt; &gt; your AEC module?<br>&gt; <br>&gt; Sure, use the right ordering (and be careful with scaling!) and it&#39;ll work.<br><br><span style="color: rgb(51, 51, 255);">
In the FIX_POINT version of the spx_fft function, where is the actual code that do</span><br style="color: rgb(51, 51, 255);"><span style="color: rgb(51, 51, 255);">the forward FFT normaliaztion by 1/N? I saw the code first maxmize the input
</span><br style="color: rgb(51, 51, 255);"><span style="color: rgb(51, 51, 255);">before the FFT and renormalize it back afterwards. Isn&#39;t this making the signal bigger</span><br style="color: rgb(51, 51, 255);"><span style="color: rgb(51, 51, 255);">
and easy to overflow? If I am not mistaking, the input to the kiss_fft is the 2&#39;s complement<br>value. <br style="color: rgb(51, 51, 255);"></span><br style="color: rgb(51, 51, 255);"><span style="color: rgb(51, 51, 255);">
I use the Xilinx Logicore FFT IP which also supports the 16bit fixed point FFT and it</span><br style="color: rgb(51, 51, 255);"><span style="color: rgb(51, 51, 255);">has some internal scaling for each stage. Do I need to match the same scaling of 1/N
</span><br style="color: rgb(51, 51, 255);"><span style="color: rgb(51, 51, 255);">in the software code? </span><br style="color: rgb(51, 51, 255);"><br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jean-Marc<br>&gt; <br>&gt; <br>