summaryrefslogtreecommitdiffstats
path: root/Graphic_Equalizer_v1.0/doc/html/fft_8hcc-source.html
diff options
context:
space:
mode:
Diffstat (limited to 'Graphic_Equalizer_v1.0/doc/html/fft_8hcc-source.html')
-rw-r--r--Graphic_Equalizer_v1.0/doc/html/fft_8hcc-source.html445
1 files changed, 445 insertions, 0 deletions
diff --git a/Graphic_Equalizer_v1.0/doc/html/fft_8hcc-source.html b/Graphic_Equalizer_v1.0/doc/html/fft_8hcc-source.html
new file mode 100644
index 0000000..d4cfdb6
--- /dev/null
+++ b/Graphic_Equalizer_v1.0/doc/html/fft_8hcc-source.html
@@ -0,0 +1,445 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>Graphic Equalizer 2: C:/Project Marcel &amp; Oliver/Graphic_Equalizer/src/fft.hcc Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.9.1 -->
+<div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
+<div class="nav">
+<a class="el" href="dir_000000.html">C:</a>&nbsp;/&nbsp;<a class="el" href="dir_000001.html">Project Marcel &amp; Oliver</a>&nbsp;/&nbsp;<a class="el" href="dir_000002.html">Graphic_Equalizer</a>&nbsp;/&nbsp;<a class="el" href="dir_000004.html">src</a></div>
+<h1>fft.hcc</h1><a href="fft_8hcc.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001
+00020 <span class="preprocessor">#include &lt;stdlib.hch&gt;</span>
+00021 <span class="preprocessor">#include "pal_master.hch"</span>
+00022
+00023 <span class="preprocessor">#include "<a class="code" href="audio_8hch.html">audio.hch</a>"</span>
+00024 <span class="preprocessor">#include "<a class="code" href="weights__256_8hch.html">weights_256.hch</a>"</span>
+00025 <span class="preprocessor">#include "<a class="code" href="configuration_8hch.html">configuration.hch</a>"</span>
+00026 <span class="preprocessor">#include "xilinxmult.hch"</span>
+00027 <span class="preprocessor">#include "<a class="code" href="fft_8hch.html">fft.hch</a>"</span>
+00028
+00029 <span class="preprocessor">#if HAVE_DEBUG</span>
+00030 <span class="preprocessor"></span><span class="preprocessor"> #include "debug.hch"</span>
+00031 <span class="preprocessor">#endif</span>
+00032 <span class="preprocessor"></span>
+00033 <span class="comment">/* Define two multi-port RAMs for FFT calculation; one for real and one for imaginary values</span>
+00034 <span class="comment"> * Extra block RAM settings are defined to make sure read and write actions can be performed</span>
+00035 <span class="comment"> * within one clock-cycle.</span>
+00036 <span class="comment"> * Left out extra settings on new board the clock changes TODO !!!!</span>
+00037 <span class="comment"> */</span>
+00038 <span class="preprocessor">#if HARDWARE_MULTIPLY</span>
+00039 <span class="preprocessor"></span>mpram
+00040 {
+00041 ram <span class="keywordtype">signed</span> 18 rwrite[256];
+00042 rom <span class="keywordtype">signed</span> 18 read[256];
+00043 } real with {block = <span class="stringliteral">"BlockRAM"</span><span class="comment">/*, westart=2.5, welength=1, rclkpos={1.5}, wclkpos={3}, clkpulselen=0.5*/</span>};
+00044
+00045 mpram
+00046 {
+00047 ram <span class="keywordtype">signed</span> 18 rwrite[256];
+00048 rom <span class="keywordtype">signed</span> 18 read[256];
+00049 } imaginary with {block = <span class="stringliteral">"BlockRAM"</span><span class="comment">/*, westart=2.5, welength=1, rclkpos={1.5}, wclkpos={3}, clkpulselen=0.5*/</span>};
+00050 <span class="preprocessor">#else</span>
+00051 <span class="preprocessor"></span>mpram
+00052 {
+00053 ram <span class="keywordtype">signed</span> 24 rwrite[256];
+00054 rom <span class="keywordtype">signed</span> 24 read[256];
+00055 } real with {block = <span class="stringliteral">"BlockRAM"</span><span class="comment">/*, westart=2.5, welength=1, rclkpos={1.5}, wclkpos={3}, clkpulselen=0.5*/</span>};
+00056
+00057 mpram
+00058 {
+00059 ram <span class="keywordtype">signed</span> 24 rwrite[256];
+00060 rom <span class="keywordtype">signed</span> 24 read[256];
+00061 } imaginary with {block = <span class="stringliteral">"BlockRAM"</span><span class="comment">/*, westart=2.5, welength=1, rclkpos={1.5}, wclkpos={3}, clkpulselen=0.5*/</span>};
+00062 <span class="preprocessor">#endif</span>
+00063 <span class="preprocessor"></span><span class="comment">// multiplication factors for equalizer function</span>
+<a name="l00064"></a><a class="code" href="fft_8hcc.html#a1">00064</a> ram <span class="keywordtype">signed</span> 7 <a class="code" href="fft_8hcc.html#a1">eq_settings</a>[16] = {0,2,4,7,10,13,16,19,22,26,30,35,41,48,55,63};
+00065
+00066 <span class="preprocessor">#if HARDWARE_MULTIPLY</span>
+00067 <span class="preprocessor"></span><span class="preprocessor">#define DC_COMPONENT 0</span>
+00068 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00069"></a><a class="code" href="fft_8hcc.html#a0">00069</a> <span class="preprocessor"></span><span class="preprocessor">#define DC_COMPONENT 8470527</span>
+00070 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00071 <span class="preprocessor"></span>
+<a name="l00082"></a><a class="code" href="fft_8hcc.html#a2">00082</a> macro proc <a class="code" href="fft_8hcc.html#a2">multiply</a>(result, op_a, op_b)
+00083 {
+00084 <span class="preprocessor">#if HARDWARE_MULTIPLY</span>
+00085 <span class="preprocessor"></span> xilinxmult(result, op_a, adjs(op_b,18));
+00086 <span class="preprocessor">#else</span>
+00087 <span class="preprocessor"></span> result = (adjs(op_a,38))*(adjs(op_a,38));
+00088 <span class="preprocessor">#endif </span>
+00089 <span class="preprocessor"></span>}
+00090
+00091
+00092
+00093
+<a name="l00104"></a><a class="code" href="fft_8hcc.html#a3">00104</a> <span class="keywordtype">void</span> <a class="code" href="fft_8hcc.html#a3">calculate_fft</a>(<span class="keywordtype">unsigned</span> 1 select_inverse)
+00105 {
+00106 <span class="keywordtype">unsigned</span> 4 level;
+00107 <span class="keywordtype">unsigned</span> 8 point1,point2,j,f,k;
+00108 <span class="keywordtype">unsigned</span> 9 e,i;
+00109 <span class="keywordtype">signed</span> 16 weight1,weight2;
+00110 <span class="preprocessor">#if HARDWARE_MULTIPLY</span>
+00111 <span class="preprocessor"></span> <span class="keywordtype">signed</span> 18 p,q,r,t;
+00112 <span class="preprocessor">#else</span>
+00113 <span class="preprocessor"></span> <span class="keywordtype">signed</span> 24 p,q,r,t;
+00114 <span class="preprocessor">#endif</span>
+00115 <span class="preprocessor"></span> <span class="keywordtype">signed</span> a,b;
+00116
+00117 <span class="preprocessor">#if HARDWARE_MULTIPLY</span>
+00118 <span class="preprocessor"></span> <span class="comment">// Macro to provide rescaling of 36-bit result of fixed point multiply</span>
+00119 <span class="comment">// down to an 18-bit result. The range of bits selected depends on the </span>
+00120 <span class="comment">// number that represents the value of "1" in the trig function lookup</span>
+00121 <span class="comment">// tables. (Eg. for 16384 == 1, the lowest bit selected should be [14]).</span>
+00122 macro expr rescale (x) = (x[35] @ x[30:14]);
+00123 <span class="preprocessor">#else</span>
+00124 <span class="preprocessor"></span> <span class="comment">//Macro to rescale the multiply result down to a 24-bit value.</span>
+00125 macro expr rescale (x) = ((x&gt;&gt;FRACBITS)&lt;-24);
+00126 <span class="preprocessor">#endif</span>
+00127 <span class="preprocessor"></span>
+00128 <span class="keywordflow">for</span>(level=1;level&lt;=NUMBER_OF_COLUMNS;level++) <span class="comment">// count all the columns</span>
+00129 {
+00130 e=1&lt;&lt;(<a class="code" href="fft_8hch.html#a0">NUMBER_OF_COLUMNS</a>-level+1); <span class="comment">// number of points in each block in this column</span>
+00131 f=(e&gt;&gt;1)&lt;-8; <span class="comment">// number of butterflies in each block in this column</span>
+00132
+00133 <span class="keywordflow">for</span>(j=1;j&lt;=f;j++) <span class="comment">// count all the butterflies in each block</span>
+00134 {
+00135 par
+00136 {
+00137 <span class="comment">// Weight factors for real (the same for FFT and iFFT)</span>
+00138 weight1 = <a class="code" href="weights__256_8hch.html#a2">weight_re</a>[((j-1)&lt;&lt;(level-1))&lt;-7];
+00139
+00140
+00141 <span class="comment">// Weight factors for imaginary (opposite for FFT and iFFT)</span>
+00142 weight2 = (!select_inverse) ? (<a class="code" href="weights__256_8hch.html#a3">weight_im</a>[((j-1)&lt;&lt;(level-1))&lt;-7]) : -(<a class="code" href="weights__256_8hch.html#a3">weight_im</a>[((j-1)&lt;&lt;(level-1))&lt;-7]);
+00143
+00144 <span class="comment">/* ORIGINAL CODE BELOW, MODIFIED BECAUSE OF MISMATCHING OUTPUT WITH BORLAND TESTAPP</span>
+00145 <span class="comment"> weight2 = (!select_inverse) ? -(weight_im[((j-1)&lt;&lt;(level-1))&lt;-7]) : weight_im[((j-1)&lt;&lt;(level-1))&lt;-7]; </span>
+00146 <span class="comment"> */</span>
+00147
+00148
+00149
+00150 <span class="keywordflow">for</span>(i=0@j;i&lt;=NUMBER_OF_POINTS;i+=e) <span class="comment">// count all the blocks in this column</span>
+00151 { <span class="comment">// Butterfly calculation</span>
+00152 par
+00153 {
+00154 point1 = ((i&lt;-8)-1);
+00155 point2 = (((i&lt;-8)+f)-1);
+00156 }
+00157
+00158 par
+00159 {
+00160 p = (real.read[point1] &gt;&gt; 1) + (real.rwrite[point2] &gt;&gt; 1);
+00161 q = (imaginary.read[point1] &gt;&gt; 1) + (imaginary.rwrite[point2] &gt;&gt; 1);
+00162 }
+00163
+00164 par
+00165 {
+00166 r = (real.read[point1] &gt;&gt; 1) - (real.rwrite[point2] &gt;&gt; 1);
+00167 t = (imaginary.read[point1] &gt;&gt; 1) - (imaginary.rwrite[point2] &gt;&gt; 1);
+00168 }
+00169
+00170 <a class="code" href="fft_8hcc.html#a2">multiply</a>(a,r,weight1);
+00171 <a class="code" href="fft_8hcc.html#a2">multiply</a>(b,t,weight2);
+00172
+00173 par
+00174 {
+00175 real.rwrite[point2] = (rescale(a-b));
+00176 imaginary.rwrite[point1] = q;
+00177 }
+00178
+00179 <a class="code" href="fft_8hcc.html#a2">multiply</a>(a,t,weight1);
+00180 <a class="code" href="fft_8hcc.html#a2">multiply</a>(b,r,weight2);
+00181
+00182 par
+00183 {
+00184 real.rwrite[point1] = p;
+00185 imaginary.rwrite[point2] = (rescale(a+b));
+00186 }
+00187
+00188 }
+00189 }
+00190 }
+00191 }
+00192
+00193 j=1;
+00194 <span class="keywordflow">for</span>(i=1;i&lt;NUMBER_OF_POINTS;i++)
+00195 {
+00196 <span class="keywordflow">if</span>(i&lt;(0@j))
+00197 {
+00198 par
+00199 {
+00200 point1=j-1;
+00201 point2=(i-1)&lt;-8;
+00202 }
+00203 <span class="comment">/*</span>
+00204 <span class="comment"> COPYING ARRAY VALUES FROM ONE PLACE TO ANOTHER IN THE ARRAT MUST BE DONE IN </span>
+00205 <span class="comment"> 2 STEPS. FIRSTLY THE VALUES ARE COPIED TO SEPARATE VARIABLES AFTER THAT THEY</span>
+00206 <span class="comment"> ARE COPIED BACK TO THEIR NEW POSITION IN THE ARRAY. THIS MUST BE DONE TO </span>
+00207 <span class="comment"> PREVENT TIMING ISSUES FROM OCCURING.</span>
+00208 <span class="comment"> */</span>
+00209 par
+00210 {
+00211 p = real.read[point1];
+00212 q = imaginary.read[point1];
+00213 }
+00214 par
+00215 {
+00216 r = real.read[point2];
+00217 t = imaginary.read[point2];
+00218 }
+00219 par
+00220 {
+00221 real.rwrite[point1] = r;
+00222 imaginary.rwrite[point1] = t;
+00223 }
+00224 par
+00225 {
+00226 real.rwrite[point2] = p;
+00227 imaginary.rwrite[point2] = q;
+00228 }
+00229 }
+00230
+00231 k = <a class="code" href="fft_8hch.html#a1">NUMBER_OF_POINTS</a>&gt;&gt;1;
+00232
+00233
+00234 <span class="keywordflow">while</span>(k&lt;j)
+00235 {
+00236 j = j-k;
+00237 k = k&gt;&gt;1;
+00238 }
+00239
+00240 j+=k;
+00241 }
+00242
+00243 }
+00244
+00256 <span class="preprocessor">#if HARDWARE_MULTIPLY</span>
+00257 <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="fft_8hcc.html#a4">perform_fft</a>(<span class="keywordtype">signed</span> 18 *pcm_audio)
+00258 #<span class="keywordflow">else</span>
+<a name="l00259"></a><a class="code" href="fft_8hcc.html#a4">00259</a> <span class="keywordtype">void</span> <a class="code" href="fft_8hcc.html#a4">perform_fft</a>(<span class="keywordtype">signed</span> 16 *pcm_audio)
+00260 #endif
+00261 {
+00262 <span class="keywordtype">unsigned</span> 8 k;
+00263 <span class="preprocessor">#if HARDWARE_MULTIPLY</span>
+00264 <span class="preprocessor"></span> <span class="keywordtype">signed</span> 18 sample;
+00265 k=0;
+00266 sample = adjs(pcm_audio[k],18);
+00267 <span class="preprocessor">#else</span>
+00268 <span class="preprocessor"></span> <span class="keywordtype">signed</span> 24 sample;
+00269 k=0;
+00270 sample = adjs(pcm_audio[k],24);
+00271 <span class="preprocessor">#endif</span>
+00272 <span class="preprocessor"></span>
+00273 <span class="comment">//initialize variables for the copying pipeline</span>
+00274
+00275
+00276 <span class="comment">// copy audio data to real-array before starting FFT calculation</span>
+00277 <span class="comment">// and set imaginary values to zero</span>
+00278 <span class="keywordflow">do</span>
+00279 {
+00280 <span class="comment">//Copying the array values has been pipelined to prevent parallel access to the</span>
+00281 <span class="comment">//pcm_audio array. This copying procedure must be finished before another </span>
+00282 <span class="comment">//sample is read from the audio input. The time available for this loop is </span>
+00283 <span class="comment">//determined by the sampling rate of 44,1 Khz</span>
+00284 par
+00285 {
+00286 <span class="comment">//COPYING NEEDS TO BE DONE IN 2 STEPS, BECAUSE THE VALUE THAT NEEDS TO WRITTEN</span>
+00287 <span class="comment">//TO THE REAL-RAM NEEDS TO BE AVAILABLE ON THE START OFF THE CLOCKCYCLE.</span>
+00288 <span class="preprocessor">#if HARDWARE_MULTIPLY</span>
+00289 <span class="preprocessor"></span> sample = adjs(pcm_audio[k+1],18);
+00290 <span class="preprocessor">#else</span>
+00291 <span class="preprocessor"></span> sample = adjs(pcm_audio[k+1],24);
+00292 <span class="preprocessor">#endif</span>
+00293 <span class="preprocessor"></span> real.rwrite[k] = sample;
+00294 imaginary.rwrite[k] = 0;
+00295 k++;
+00296 }
+00297 } <span class="keywordflow">while</span> (k);
+00298
+00299
+00300
+00301 <span class="preprocessor">#if PERFORM_FFT_CALCULATION</span>
+00302 <span class="preprocessor"></span> <a class="code" href="fft_8hcc.html#a3">calculate_fft</a>(0);
+00303 <span class="preprocessor">#endif</span>
+00304 <span class="preprocessor"></span>
+00305
+00306 }
+00307
+00321 <span class="preprocessor">#if HARDWARE_MULTIPLY</span>
+00322 <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="fft_8hcc.html#a5">perform_ifft</a>(<span class="keywordtype">signed</span> 18 *modified_audio, <span class="keywordtype">unsigned</span> 6 *ifft_info)
+00323 #<span class="keywordflow">else</span>
+<a name="l00324"></a><a class="code" href="fft_8hcc.html#a5">00324</a> <span class="keywordtype">void</span> <a class="code" href="fft_8hcc.html#a5">perform_ifft</a>(<span class="keywordtype">signed</span> 16 *modified_audio, <span class="keywordtype">unsigned</span> 6 *ifft_info)
+00325 #endif
+00326 {
+00327 <span class="keywordtype">unsigned</span> 6 k;
+00328 <span class="preprocessor">#if HARDWARE_MULTIPLY </span>
+00329 <span class="preprocessor"></span> <span class="keywordtype">signed</span> 18 p;
+00330 <span class="preprocessor">#else</span>
+00331 <span class="preprocessor"></span> <span class="keywordtype">signed</span> 24 p;
+00332 <span class="preprocessor">#endif</span>
+00333 <span class="preprocessor"></span><span class="preprocessor">#if PERFORM_FFT_CALCULATION </span>
+00334 <span class="preprocessor"></span> <a class="code" href="fft_8hcc.html#a3">calculate_fft</a>(1);
+00335 <span class="preprocessor">#endif</span>
+00336 <span class="preprocessor"></span>
+00337 k=0;
+00338 <span class="comment">//initialize variables for the copying pipeline</span>
+00339 <span class="preprocessor">#if PERFORM_FFT_CALCULATION </span>
+00340 <span class="preprocessor"></span><span class="preprocessor"> #if HARDWARE_MULTIPLY </span>
+00341 <span class="preprocessor"></span> p = (real.read[(0@k)+95] &lt;&lt; NUMBER_OF_COLUMNS);
+00342 <span class="preprocessor"> #else</span>
+00343 <span class="preprocessor"></span> p = (real.read[(0@k)+95] &gt;&gt; NUMBER_OF_COLUMNS);
+00344 <span class="preprocessor"> #endif</span>
+00345 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+00346 <span class="preprocessor"></span> p = (real.read[(0@k)+95]);
+00347 <span class="preprocessor">#endif</span>
+00348 <span class="preprocessor"></span>
+00349 <span class="keywordflow">do</span>
+00350 {
+00351 <span class="comment">//Copying the array values has been pipelined to prevent parallel access to the</span>
+00352 <span class="comment">//pcm_audio array. This copying procedure must be finished before another </span>
+00353 <span class="comment">//sample is read from the audio input. The time available for this loop is </span>
+00354 <span class="comment">//determined by the sampling rate of 44,1 Khz</span>
+00355 par
+00356 {
+00357 <span class="comment">/*</span>
+00358 <span class="comment"> * Before copying the modified audio from the local real-array </span>
+00359 <span class="comment"> * to the output array of the audio I/O component, compensate</span>
+00360 <span class="comment"> * for the FFT calculation by shifting the values. </span>
+00361 <span class="comment"> * 95 is added to start the output from the middle of the sliding</span>
+00362 <span class="comment"> * window, this is done to get a better sound quality.</span>
+00363 <span class="comment"> */</span>
+00364 <span class="preprocessor">#if PERFORM_FFT_CALCULATION </span>
+00365 <span class="preprocessor"></span><span class="preprocessor"> #if HARDWARE_MULTIPLY </span>
+00366 <span class="preprocessor"></span> p = (real.read[(0@k)+95] &lt;&lt; NUMBER_OF_COLUMNS);
+00367 <span class="preprocessor"> #else</span>
+00368 <span class="preprocessor"></span> p = (real.read[(0@k)+95] &gt;&gt; NUMBER_OF_COLUMNS);
+00369 <span class="preprocessor"> #endif</span>
+00370 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+00371 <span class="preprocessor"></span> p = (real.read[(0@k)+95]);
+00372 <span class="preprocessor">#endif</span>
+00373 <span class="preprocessor"></span> <span class="comment">//Copy the modified audio from the local real array to the output array of the audio I/O component.</span>
+00374 <span class="preprocessor">#if HARDWARE_MULTIPLY</span>
+00375 <span class="preprocessor"></span> modified_audio[k] = p ;
+00376 <span class="preprocessor">#else</span>
+00377 <span class="preprocessor"></span> modified_audio[k] = (p&lt;-16);
+00378 <span class="preprocessor">#endif</span>
+00379 <span class="preprocessor"></span> <span class="comment">//Fill the array for displaying the waveform, only the 6 MSB are needed.</span>
+00380 ifft_info[k] = (<span class="keywordtype">unsigned</span> 6)(32+(p[17:12]));
+00381 k++;
+00382 }
+00383 } <span class="keywordflow">while</span>(k);
+00384 }
+00385
+<a name="l00398"></a><a class="code" href="fft_8hcc.html#a6">00398</a> <span class="keywordtype">void</span> <a class="code" href="fft_8hcc.html#a6">equalize_audio</a>(<a class="code" href="structaudiodata__t.html">audiodata_t</a> *audiodata)
+00399 {
+00400 <span class="preprocessor">#if HARDWARE_MULTIPLY</span>
+00401 <span class="preprocessor"></span> <span class="keywordtype">signed</span> 18 p,q;
+00402 <span class="preprocessor">#else</span>
+00403 <span class="preprocessor"></span> <span class="keywordtype">signed</span> 24 p,q;
+00404 <span class="preprocessor">#endif</span>
+00405 <span class="preprocessor"></span> <span class="keywordtype">signed</span> 18 a;
+00406 <span class="keywordtype">unsigned</span> 8 i, mirror_i, bit, m, n;
+00407 <span class="keywordtype">unsigned</span> 7 old_value;
+00408 <span class="keywordtype">unsigned</span> 9 tmp;
+00409
+00410 <span class="comment">//macro expr equalize_bar = multiply(q,a)[29:6];</span>
+00411
+00412 macro proc equalize_bar(retval)
+00413 {
+00414 <span class="keywordtype">signed</span> result;
+00415 <a class="code" href="fft_8hcc.html#a2">multiply</a>(result, q,a);
+00416 <span class="preprocessor">#if HARDWARE_MULTIPLY</span>
+00417 <span class="preprocessor"></span> retval = result[23:6]; <span class="comment">//drop last 6 bit to compensate the maximum multiplication with 64 from the eq_settings array</span>
+00418 <span class="preprocessor">#else</span>
+00419 <span class="preprocessor"></span> retval = result[29:6]; <span class="comment">//drop last 6 bit to compensate the maximum multiplication with 64 from the eq_settings array</span>
+00420 <span class="preprocessor">#endif</span>
+00421 <span class="preprocessor"></span> }
+00422
+00423 p = real.read[0] - DC_COMPONENT; <span class="comment">// remove DC component for calculations</span>
+00424 real.rwrite[0] = p;
+00425
+00426 <span class="keywordflow">for</span>(i=0;i!=NUMBER_OF_FREQUENCIES;i++)
+00427 {
+00428
+00429 <span class="comment">// set multiplication factor (0..64) for current frequency bar, The first frequency band must be equalized at 100% (63) since there is no DC-component taken into account.</span>
+00430 a = adjs(<a class="code" href="fft_8hcc.html#a1">eq_settings</a>[audiodata-&gt;<a class="code" href="structaudiodata__t.html#o0">equalizer_levels_ptr</a>[i &lt;- 7]],18);
+00431
+00432
+00433 <span class="comment">// multiply frequency with this factor and divide by 64 (drop 6 LSB's)</span>
+00434 q = real.read[i];
+00435 equalize_bar(p);
+00436 real.rwrite[i] = p;
+00437
+00438 q = imaginary.read[i];
+00439 equalize_bar(p);
+00440 imaginary.rwrite[i] = p;
+00441
+00442 <span class="comment">// the upper part(128..255) of the spectrum is mirrored to the lower part; </span>
+00443 <span class="comment">// these values need to be adjusted too</span>
+00444 <span class="keywordflow">if</span> ((i&lt;-7)!=0) <span class="comment">// if not in DC component bar</span>
+00445 {
+00446 mirror_i = (<a class="code" href="fft_8hch.html#a1">NUMBER_OF_POINTS</a>-1)-i+1;
+00447 q = real.read[mirror_i];
+00448 equalize_bar(p);
+00449 real.rwrite[mirror_i] = p;
+00450
+00451 q = imaginary.read[mirror_i];
+00452 equalize_bar(p);
+00453 imaginary.rwrite[mirror_i] = p;
+00454 }
+00455 }
+00456
+00457 <span class="comment">//write data to fft_info for display purposes</span>
+00458 <span class="keywordflow">for</span>(i=0;i&lt;NUMBER_OF_FREQUENCIES;i++)
+00459 {
+00460 p = real.read[i];
+00461 q = imaginary.read[i];
+00462 <span class="preprocessor">#if HARDWARE_MULTIPLY</span>
+00463 <span class="preprocessor"></span> <span class="keywordflow">if</span> (p[17] == 1) p = -p; <span class="keywordflow">else</span> delay;
+00464 <span class="keywordflow">if</span> (q[17] == 1) q = -q; <span class="keywordflow">else</span> delay;
+00465 <span class="preprocessor">#else</span>
+00466 <span class="preprocessor"></span> <span class="keywordflow">if</span> (p[23] == 1) p = -p; <span class="keywordflow">else</span> delay;
+00467 <span class="keywordflow">if</span> (q[23] == 1) q = -q; <span class="keywordflow">else</span> delay;
+00468 <span class="preprocessor">#endif</span>
+00469 <span class="preprocessor"></span> p = (p&lt;q) ? q : p; <span class="comment">// This is done to get the best visual frequency result</span>
+00470
+00471 <span class="keywordflow">if</span> (!audiodata-&gt;<a class="code" href="structaudiodata__t.html#o1">display_log</a>)
+00472 {
+00473
+00474 bit=126;
+00475 <span class="preprocessor">#if HARDWARE_MULTIPLY</span>
+00476 <span class="preprocessor"></span> <span class="keywordflow">while</span> ((p[15] == 0) &amp;&amp; (bit != 0))
+00477 <span class="preprocessor">#else</span>
+00478 <span class="preprocessor"></span> <span class="keywordflow">while</span> ((p[21] == 0) &amp;&amp; (bit != 0))
+00479 <span class="preprocessor">#endif</span>
+00480 <span class="preprocessor"></span> par
+00481 {
+00482 p = p&lt;&lt;1;
+00483 bit = bit - 18;
+00484 }
+00485 old_value = audiodata-&gt;fft_info.write[0 @ (i &lt;- 7)];
+00486 tmp = ((0@old_value) + (0@bit))&gt;&gt;1;
+00487 audiodata-&gt;fft_info.write[0 @ (i &lt;- 7)] = (old_value &lt;= (tmp&lt;-7)) ? (tmp&lt;-7) : old_value-1;
+00488 }
+00489 <span class="keywordflow">else</span>
+00490 {
+00491 old_value = audiodata-&gt;fft_info.write[0 @ (i &lt;- 7)];
+00492 <span class="preprocessor">#if HARDWARE_MULTIPLY</span>
+00493 <span class="preprocessor"></span> audiodata-&gt;fft_info.write[0 @ (i &lt;- 7)] = (old_value&lt;=(unsigned)(p[15:9])) ? (unsigned)(p[15:9]) : old_value-1;
+00494 <span class="preprocessor">#else</span>
+00495 <span class="preprocessor"></span> audiodata-&gt;fft_info.write[0 @ (i &lt;- 7)] = (old_value&lt;=(unsigned)(p[21:15])) ? (unsigned)(p[21:15]) : old_value-1;
+00496 <span class="preprocessor">#endif</span>
+00497 <span class="preprocessor"></span> }
+00498 }
+00499
+00500 <span class="comment">// add DC component again before inverse FFT calculation is performed</span>
+00501
+00502 p = real.read[0] + DC_COMPONENT;
+00503 real.rwrite[0] = p;
+00504 }
+00505
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Thu Dec 9 14:37:07 2004 for Graphic Equalizer 2 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.3.9.1 </small></address>
+</body>
+</html>