diff options
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.html | 445 |
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 & 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 Page</a> | <a class="qindex" href="annotated.html">Data Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="functions.html">Data Fields</a> | <a class="qindex" href="globals.html">Globals</a></div> +<div class="nav"> +<a class="el" href="dir_000000.html">C:</a> / <a class="el" href="dir_000001.html">Project Marcel & Oliver</a> / <a class="el" href="dir_000002.html">Graphic_Equalizer</a> / <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 <stdlib.hch></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>>FRACBITS)<-24); +00126 <span class="preprocessor">#endif</span> +00127 <span class="preprocessor"></span> +00128 <span class="keywordflow">for</span>(level=1;level<=NUMBER_OF_COLUMNS;level++) <span class="comment">// count all the columns</span> +00129 { +00130 e=1<<(<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>>1)<-8; <span class="comment">// number of butterflies in each block in this column</span> +00132 +00133 <span class="keywordflow">for</span>(j=1;j<=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)<<(level-1))<-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)<<(level-1))<-7]) : -(<a class="code" href="weights__256_8hch.html#a3">weight_im</a>[((j-1)<<(level-1))<-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)<<(level-1))<-7]) : weight_im[((j-1)<<(level-1))<-7]; </span> +00146 <span class="comment"> */</span> +00147 +00148 +00149 +00150 <span class="keywordflow">for</span>(i=0@j;i<=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<-8)-1); +00155 point2 = (((i<-8)+f)-1); +00156 } +00157 +00158 par +00159 { +00160 p = (real.read[point1] >> 1) + (real.rwrite[point2] >> 1); +00161 q = (imaginary.read[point1] >> 1) + (imaginary.rwrite[point2] >> 1); +00162 } +00163 +00164 par +00165 { +00166 r = (real.read[point1] >> 1) - (real.rwrite[point2] >> 1); +00167 t = (imaginary.read[point1] >> 1) - (imaginary.rwrite[point2] >> 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<NUMBER_OF_POINTS;i++) +00195 { +00196 <span class="keywordflow">if</span>(i<(0@j)) +00197 { +00198 par +00199 { +00200 point1=j-1; +00201 point2=(i-1)<-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>>>1; +00232 +00233 +00234 <span class="keywordflow">while</span>(k<j) +00235 { +00236 j = j-k; +00237 k = k>>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] << NUMBER_OF_COLUMNS); +00342 <span class="preprocessor"> #else</span> +00343 <span class="preprocessor"></span> p = (real.read[(0@k)+95] >> 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] << NUMBER_OF_COLUMNS); +00367 <span class="preprocessor"> #else</span> +00368 <span class="preprocessor"></span> p = (real.read[(0@k)+95] >> 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<-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-><a class="code" href="structaudiodata__t.html#o0">equalizer_levels_ptr</a>[i <- 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<-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<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<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-><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) && (bit != 0)) +00477 <span class="preprocessor">#else</span> +00478 <span class="preprocessor"></span> <span class="keywordflow">while</span> ((p[21] == 0) && (bit != 0)) +00479 <span class="preprocessor">#endif</span> +00480 <span class="preprocessor"></span> par +00481 { +00482 p = p<<1; +00483 bit = bit - 18; +00484 } +00485 old_value = audiodata->fft_info.write[0 @ (i <- 7)]; +00486 tmp = ((0@old_value) + (0@bit))>>1; +00487 audiodata->fft_info.write[0 @ (i <- 7)] = (old_value <= (tmp<-7)) ? (tmp<-7) : old_value-1; +00488 } +00489 <span class="keywordflow">else</span> +00490 { +00491 old_value = audiodata->fft_info.write[0 @ (i <- 7)]; +00492 <span class="preprocessor">#if HARDWARE_MULTIPLY</span> +00493 <span class="preprocessor"></span> audiodata->fft_info.write[0 @ (i <- 7)] = (old_value<=(unsigned)(p[15:9])) ? (unsigned)(p[15:9]) : old_value-1; +00494 <span class="preprocessor">#else</span> +00495 <span class="preprocessor"></span> audiodata->fft_info.write[0 @ (i <- 7)] = (old_value<=(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 +<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> |