arm graphic equalizer example q31 8c source


CMSIS DSP Software Library: arm_graphic_equalizer_example_q31.c Source File Main Page Modules Data Structures Files Examples File List Globals arm_graphic_equalizer_example_q31.c Go to the documentation of this file.00001 /* ---------------------------------------------------------------------- 00002 * Copyright (C) 2010 ARM Limited. All rights reserved. 00003 * 00004 * $Date: 29. November 2010 00005 * $Revision: V1.0.3 00006 * 00007 * Project: CMSIS DSP Library 00008 * Title: arm_graphic_equalizer_example_q31.c 00009 * 00010 * Description: Example showing an audio graphic equalizer constructed 00011 * out of Biquad filters. 00012 * 00013 * Target Processor: Cortex-M4/Cortex-M3 00014 * 00015 * 00016 * Version 1.0.3 2010/11/29 00017 * Re-organized the CMSIS folders and updated documentation. 00018 * 00019 * Version 1.0.1 2010/10/05 KK 00020 * Production release and review comments incorporated. 00021 * 00022 * Version 1.0.0 2010/09/20 KK 00023 * Production release and review comments incorporated. 00024 * ------------------------------------------------------------------- */ 00025 00113 #include "arm_math.h" 00114 #include "math_helper.h" 00115 00116 /* Length of the overall data in the test */ 00117 #define TESTLENGTH 320 00118 00119 /* Block size for the underlying processing */ 00120 #define BLOCKSIZE 32 00121 00122 /* Total number of blocks to run */ 00123 #define NUMBLOCKS (TESTLENGTH/BLOCKSIZE) 00124 00125 /* Number of 2nd order Biquad stages per filter */ 00126 #define NUMSTAGES 2 00127 00128 #define SNR_THRESHOLD_F32 98 00129 00130 /* ------------------------------------------------------------------- 00131 * External Declarations for Input and Output buffers 00132 * ------------------------------------------------------------------- */ 00133 00134 extern float32_t testInput_f32[TESTLENGTH]; 00135 static float32_t testOutput[TESTLENGTH]; 00136 00137 extern float32_t testRefOutput_f32[TESTLENGTH]; 00138 00139 /* ---------------------------------------------------------------------- 00140 ** Q31 state buffers for Band1, Band2, Band3, Band4, Band5 00141 ** ------------------------------------------------------------------- */ 00142 00143 static q63_t biquadStateBand1Q31[4 * 2]; 00144 static q63_t biquadStateBand2Q31[4 * 2]; 00145 static q31_t biquadStateBand3Q31[4 * 2]; 00146 static q31_t biquadStateBand4Q31[4 * 2]; 00147 static q31_t biquadStateBand5Q31[4 * 2]; 00148 00149 /* ---------------------------------------------------------------------- 00150 ** Q31 input and output buffers 00151 ** ------------------------------------------------------------------- */ 00152 00153 q31_t inputQ31[BLOCKSIZE]; 00154 q31_t outputQ31[BLOCKSIZE]; 00155 00156 /* ---------------------------------------------------------------------- 00157 ** Entire coefficient table. There are 10 coefficients per 4th order Biquad 00158 ** cascade filter. The first 10 coefficients correspond to the -9 dB gain 00159 ** setting of band 1; the next 10 coefficient correspond to the -8 dB gain 00160 ** setting of band 1; and so on. There are 10*19=190 coefficients in total 00161 ** for band 1 (gains = -9, -8, -7, ..., 9). After this come the 190 coefficients 00162 ** for band 2. 00163 ** 00164 ** The coefficients are in Q29 format and require a postShift of 2. 00165 ** ------------------------------------------------------------------- */ 00166 00167 const q31_t coeffTable[950] = { 00168 00169 /* Band 1, -9 dB gain */ 00170 535576962, -1071153923, 535576962, 1073741824, -536870912, 535576962, -1063501998, 527979313, 1060865294, -524146981, 00171 /* Band 1, -8 dB gain */ 00172 535723226, -1071446451, 535723226, 1073741824, -536870912, 535723226, -1063568947, 527903217, 1061230578, -524503778, 00173 535868593, -1071737186, 535868593, 1073741824, -536870912, 535868593, -1063627467, 527819780, 1061585502, -524850686, 00174 536013181, -1072026363, 536013181, 1073741824, -536870912, 536013181, -1063677598, 527728935, 1061930361, -525187972, 00175 536157109, -1072314217, 536157109, 1073741824, -536870912, 536157109, -1063719372, 527630607, 1062265438, -525515897, 00176 536300492, -1072600983, 536300492, 1073741824, -536870912, 536300492, -1063752815, 527524720, 1062591011, -525834716, 00177 536443447, -1072886894, 536443447, 1073741824, -536870912, 536443447, -1063777945, 527411186, 1062907350, -526144676, 00178 536586091, -1073172183, 536586091, 1073741824, -536870912, 536586091, -1063794775, 527289917, 1063214717, -526446017, 00179 536728541, -1073457082, 536728541, 1073741824, -536870912, 536728541, -1063803308, 527160815, 1063513366, -526738975, 00180 536870912, -1073741824, 536870912, 1073741824, -536870912, 536870912, -1063803543, 527023777, 1063803543, -527023777, 00181 537013321, -1074026642, 537013321, 1073741824, -536870912, 537013321, -1063795470, 526878696, 1064085490, -527300648, 00182 537155884, -1074311768, 537155884, 1073741824, -536870912, 537155884, -1063779073, 526725455, 1064359439, -527569803, 00183 537298718, -1074597435, 537298718, 1073741824, -536870912, 537298718, -1063754328, 526563934, 1064625617, -527831454, 00184 537441939, -1074883878, 537441939, 1073741824, -536870912, 537441939, -1063721205, 526394005, 1064884245, -528085806, 00185 537585666, -1075171331, 537585666, 1073741824, -536870912, 537585666, -1063679666, 526215534, 1065135536, -528333059, 00186 537730015, -1075460030, 537730015, 1073741824, -536870912, 537730015, -1063629666, 526028380, 1065379699, -528573409, 00187 537875106, -1075750212, 537875106, 1073741824, -536870912, 537875106, -1063571152, 525832396, 1065616936, -528807045, 00188 538021057, -1076042114, 538021057, 1073741824, -536870912, 538021057, -1063504065, 525627429, 1065847444, -529034151, 00189 538167989, -1076335977, 538167989, 1073741824, -536870912, 538167989, -1063428338, 525413317, 1066071412, -529254907, 00190 00191 /* Band 2, -9 dB gain */ 00192 531784976, -1055497692, 523873415, 1066213307, -529420241, 531784976, -1040357886, 509828014, 1028908252, -494627367, 00193 /* Band 2, -8 dB gain */ 00194 532357636, -1056601982, 524400080, 1066115844, -529326645, 532357636, -1040623406, 509562600, 1030462237, -496062122, 00195 532927392, -1057707729, 524931110, 1066024274, -529239070, 532927392, -1040848253, 509262081, 1031969246, -497457090, 00196 533494678, -1058816094, 525467240, 1065939047, -529157961, 533494678, -1041032161, 508925950, 1033429976, -498812573, 00197 534059929, -1059928204, 526009170, 1065860582, -529083734, 534059929, -1041174868, 508553717, 1034845124, -500128887, 00198 534623580, -1061045148, 526557561, 1065789260, -529016764, 534623580, -1041276126, 508144920, 1036215393, -501406373, 00199 535186068, -1062167969, 527113032, 1065725420, -528957385, 535186068, -1041335703, 507699125, 1037541500, -502645399, 00200 535747827, -1063297666, 527676151, 1065669351, -528905879, 535747827, -1041353386, 507215934, 1038824183, -503846368, 00201 536309295, -1064435183, 528247436, 1065621289, -528862476, 536309295, -1041328990, 506694984, 1040064203, -505009724, 00202 536870912, -1065581413, 528827349, 1065581413, -528827349, 536870912, -1041262354, 506135953, 1041262354, -506135953, 00203 537433117, -1066737194, 529416295, 1065549847, -528800610, 537433117, -1041153346, 505538564, 1042419457, -507225588, 00204 537996352, -1067903307, 530014622, 1065526651, -528782316, 537996352, -1041001864, 504902578, 1043536370, -508279208, 00205 538561061, -1069080480, 530622620, 1065511830, -528772462, 538561061, -1040807833, 504227800, 1044613981, -509297437, 00206 539127690, -1070269387, 531240527, 1065505333, -528770987, 539127690, -1040571205, 503514074, 1045653211, -510280946, 00207 539696690, -1071470656, 531868525, 1065507054, -528777778, 539696690, -1040291951, 502761277, 1046655011, -511230450, 00208 540268512, -1072684867, 532506750, 1065516837, -528792672, 540268512, -1039970063, 501969320, 1047620358, -512146700, 00209 540843613, -1073912567, 533155297, 1065534483, -528815459, 540843613, -1039605542, 501138139, 1048550251, -513030484, 00210 541422451, -1075154268, 533814224, 1065559750, -528845892, 541422451, -1039198394, 500267687, 1049445708, -513882621, 00211 542005489, -1076410460, 534483561, 1065592362, -528883686, 542005489, -1038748624, 499357932, 1050307760, -514703956, 00212 518903861, -1001986830, 486725277, 1037235801, -502367695, 518903861, -945834422, 446371043, 902366163, -400700571, 00213 520899989, -1005630916, 488289126, 1036926846, -502147311, 520899989, -946490935, 445581846, 907921945, -404936158, 00214 522893209, -1009290002, 489869792, 1036650484, -501961419, 522893209, -947006359, 444685310, 913306106, -409075225, 00215 524884763, -1012968199, 491470256, 1036407567, -501810737, 524884763, -947377809, 443679533, 918521018, -413116221, 00216 526875910, -1016669649, 493093518, 1036198712, -501695739, 526875910, -947602324, 442562672, 923569247, -417057897, 00217 528867927, -1020398503, 494742575, 1036024293, -501616651, 528867927, -947676875, 441332970, 928453558, -420899319, 00218 530862111, -1024158905, 496420407, 1035884447, -501573457, 530862111, -947598385, 439988777, 933176909, -424639872, 00219 532859778, -1027954970, 498129955, 1035779077, -501565907, 532859778, -947363742, 438528571, 937742446, -428279254, 00220 534862260, -1031790763, 499874098, 1035707863, -501593525, 534862260, -946969823, 436950987, 942153486, -431817474, 00221 536870912, -1035670279, 501655630, 1035670279, -501655630, 536870912, -946413508, 435254839, 946413508, -435254839, 00222 538887107, -1039597419, 503477238, 1035665609, -501751354, 538887107, -945691703, 433439146, 950526127, -438591937, 00223 540912240, -1043575967, 505341475, 1035692963, -501879659, 540912240, -944801359, 431503152, 954495080, -441829621, 00224 542947726, -1047609569, 507250741, 1035751307, -502039364, 542947726, -943739490, 429446349, 958324201, -444968987, 00225 544995000, -1051701717, 509207261, 1035839473, -502229165, 544995000, -942503190, 427268492, 962017400, -448011351, 00226 547055523, -1055855728, 511213065, 1035956193, -502447657, 547055523, -941089647, 424969617, 965578640, -450958226, 00227 549130774, -1060074734, 513269973, 1036100110, -502693359, 549130774, -939496155, 422550049, 969011913, -453811298, 00228 551222259, -1064361672, 515379585, 1036269804, -502964731, 551222259, -937720119, 420010407, 972321228, -456572401, 00229 553331507, -1068719280, 517543273, 1036463810, -503260192, 553331507, -935759057, 417351601, 975510582, -459243495, 00230 555460072, -1073150100, 519762181, 1036680633, -503578144, 555460072, -933610600, 414574832, 978583948, -461826644, 00231 494084017, -851422604, 404056273, 930151631, -423619864, 494084017, -673714108, 339502486, 561843007, -265801750, 00232 498713542, -859177141, 406587077, 929211656, -423786402, 498713542, -673274906, 338185129, 573719128, -272222942, 00233 503369016, -867012190, 409148384, 928362985, -424054784, 503369016, -672533059, 336693984, 585290277, -278599028, 00234 508052536, -874935599, 411746438, 927604291, -424422151, 508052536, -671478538, 335026905, 596558312, -284920289, 00235 512766286, -882955583, 414387826, 926933782, -424885216, 512766286, -670100998, 333182045, 607525792, -291177811, 00236 517512534, -891080712, 417079474, 926349262, -425440318, 517512534, -668389789, 331157902, 618195914, -297363485, 00237 522293635, -899319903, 419828635, 925848177, -426083491, 522293635, -666333963, 328953368, 628572440, -303470012, 00238 527112032, -907682405, 422642886, 925427679, -426810526, 527112032, -663922286, 326567785, 638659631, -309490882, 00239 531970251, -916177781, 425530105, 925084675, -427617023, 531970251, -661143261, 324000998, 648462180, -315420352, 00240 536870912, -924815881, 428498454, 924815881, -428498454, 536870912, -657985147, 321253420, 657985147, -321253420, 00241 541816719, -933606817, 431556352, 924617870, -429450209, 541816719, -654435997, 318326093, 667233900, -326985786, 00242 546810467, -942560921, 434712438, 924487114, -430467639, 546810467, -650483688, 315220754, 676214053, -332613816, 00243 551855042, -951688708, 437975532, 924420027, -431546101, 551855042, -646115970, 311939896, 684931422, -338134495, 00244 556953421, -961000826, 441354588, 924413001, -432680993, 556953421, -641320513, 308486839, 693391970, -343545389, 00245 562108672, -970508005, 444858642, 924462435, -433867780, 562108672, -636084967, 304865786, 701601770, -348844597, 00246 567323959, -980220994, 448496743, 924564764, -435102022, 567323959, -630397020, 301081886, 709566963, -354030710, 00247 572602539, -990150500, 452277894, 924716482, -436379394, 572602539, -624244471, 297141281, 717293726, -359102767, 00248 577947763, -1000307125, 456210977, 924914158, -437695705, 577947763, -617615296, 293051155, 724788245, -364060214, 00249 583363084, -1010701292, 460304674, 925154455, -439046908, 583363084, -610497723, 288819761, 732056685, -368902865, 00250 387379495, -506912469, 196933274, 840112184, -347208270, 387379495, 506912469, 196933274, -840112184, -347208270, 00251 401658082, -532275898, 207149427, 833765363, -343175316, 401658082, 532275898, 207149427, -833765363, -343175316, 00252 416472483, -558722695, 217902617, 827270154, -339107319, 416472483, 558722695, 217902617, -827270154, -339107319, 00253 431841949, -586290861, 229212798, 820624988, -335007540, 431841949, 586290861, 229212798, -820624988, -335007540, 00254 447786335, -615019650, 241100489, 813828443, -330879528, 447786335, 615019650, 241100489, -813828443, -330879528, 00255 464326111, -644949597, 253586805, 806879270, -326727141, 464326111, 644949597, 253586805, -806879270, -326727141, 00256 481482377, -676122557, 266693475, 799776409, -322554559, 481482377, 676122557, 266693475, -799776409, -322554559, 00257 499276882, -708581728, 280442865, 792519013, -318366296, 499276882, 708581728, 280442865, -792519013, -318366296, 00258 517732032, -742371685, 294857996, 785106465, -314167221, 517732032, 742371685, 294857996, -785106465, -314167221, 00259 536870912, -777538408, 309962566, 777538408, -309962566, 536870912, 777538408, 309962566, -777538408, -309962566, 00260 556717294, -814129313, 325780968, 769814766, -305757943, 556717294, 814129313, 325780968, -769814766, -305757943, 00261 577295658, -852193284, 342338310, 761935777, -301559360, 577295658, 852193284, 342338310, -761935777, -301559360, 00262 598631206, -891780698, 359660433, 753902014, -297373230, 598631206, 891780698, 359660433, -753902014, -297373230, 00263 620749877, -932943463, 377773927, 745714425, -293206383, 620749877, 932943463, 377773927, -745714425, -293206383, 00264 643678365, -975735041, 396706151, 737374355, -289066077, 643678365, 975735041, 396706151, -737374355, -289066077, 00265 667444134, -1020210487, 416485252, 728883588, -284960004, 667444134, 1020210487, 416485252, -728883588, -284960004, 00266 692075438, -1066426476, 437140179, 720244375, -280896294, 692075438, 1066426476, 437140179, -720244375, -280896294, 00267 717601336, -1114441339, 458700704, 711459472, -276883515, 717601336, 1114441339, 458700704, -711459472, -276883515, 00268 744051710, -1164315096, 481197437, 702532174, -272930673, 744051710, 1164315096, 481197437, -702532174, -272930673 00269 00270 }; 00271 00272 /* ---------------------------------------------------------------------- 00273 ** Desired gains, in dB, per band 00274 ** ------------------------------------------------------------------- */ 00275 00276 int gainDB[5] = {0, -3, 6, 4, -6}; 00277 00278 float32_t snr; 00279 00280 00281 /* ---------------------------------------------------------------------- 00282 * Graphic equalizer Example 00283 * ------------------------------------------------------------------- */ 00284 00285 int32_t main(void) 00286 { 00287 float32_t *inputF32, *outputF32; 00288 arm_biquad_cas_df1_32x64_ins_q31 S1; 00289 arm_biquad_cas_df1_32x64_ins_q31 S2; 00290 arm_biquad_casd_df1_inst_q31 S3; 00291 arm_biquad_casd_df1_inst_q31 S4; 00292 arm_biquad_casd_df1_inst_q31 S5; 00293 int i; 00294 int32_t status; 00295 00296 inputF32 = &testInput_f32[0]; 00297 outputF32 = &testOutput[0]; 00298 00299 /* Initialize the state and coefficient buffers for all Biquad sections */ 00300 00301 arm_biquad_cas_df1_32x64_init_q31(&S1, NUMSTAGES, 00302 (q31_t *) &coeffTable[190*0 + 10*(gainDB[0] + 9)], 00303 &biquadStateBand1Q31[0], 2); 00304 00305 arm_biquad_cas_df1_32x64_init_q31(&S2, NUMSTAGES, 00306 (q31_t *) &coeffTable[190*1 + 10*(gainDB[1] + 9)], 00307 &biquadStateBand2Q31[0], 2); 00308 00309 arm_biquad_cascade_df1_init_q31(&S3, NUMSTAGES, 00310 (q31_t *) &coeffTable[190*2 + 10*(gainDB[2] + 9)], 00311 &biquadStateBand3Q31[0], 2); 00312 00313 arm_biquad_cascade_df1_init_q31(&S4, NUMSTAGES, 00314 (q31_t *) &coeffTable[190*3 + 10*(gainDB[3] + 9)], 00315 &biquadStateBand4Q31[0], 2); 00316 00317 arm_biquad_cascade_df1_init_q31(&S5, NUMSTAGES, 00318 (q31_t *) &coeffTable[190*4 + 10*(gainDB[4] + 9)], 00319 &biquadStateBand5Q31[0], 2); 00320 00321 00322 /* Call the process functions and needs to change filter coefficients 00323 for varying the gain of each band */ 00324 00325 for(i=0; i < NUMBLOCKS; i++) 00326 { 00327 00328 /* ---------------------------------------------------------------------- 00329 ** Convert block of input data from float to Q31 00330 ** ------------------------------------------------------------------- */ 00331 00332 arm_float_to_q31(inputF32 + (i*BLOCKSIZE), inputQ31, BLOCKSIZE); 00333 00334 /* ---------------------------------------------------------------------- 00335 ** Scale down by 1/8. This provides additional headroom so that the 00336 ** graphic EQ can apply gain. 00337 ** ------------------------------------------------------------------- */ 00338 00339 arm_scale_q31(inputQ31, 0x7FFFFFFF, -3, inputQ31, BLOCKSIZE); 00340 00341 /* ---------------------------------------------------------------------- 00342 ** Call the Q31 Biquad Cascade DF1 32x64 process function for band1, band2 00343 ** ------------------------------------------------------------------- */ 00344 00345 arm_biquad_cas_df1_32x64_q31(&S1, inputQ31, outputQ31, BLOCKSIZE); 00346 arm_biquad_cas_df1_32x64_q31(&S2, outputQ31, outputQ31, BLOCKSIZE); 00347 00348 /* ---------------------------------------------------------------------- 00349 ** Call the Q31 Biquad Cascade DF1 process function for band3, band4, band5 00350 ** ------------------------------------------------------------------- */ 00351 00352 arm_biquad_cascade_df1_q31(&S3, outputQ31, outputQ31, BLOCKSIZE); 00353 arm_biquad_cascade_df1_q31(&S4, outputQ31, outputQ31, BLOCKSIZE); 00354 arm_biquad_cascade_df1_q31(&S5, outputQ31, outputQ31, BLOCKSIZE); 00355 00356 /* ---------------------------------------------------------------------- 00357 ** Convert Q31 result back to float 00358 ** ------------------------------------------------------------------- */ 00359 00360 arm_q31_to_float(outputQ31, outputF32 + (i * BLOCKSIZE), BLOCKSIZE); 00361 00362 /* ---------------------------------------------------------------------- 00363 ** Scale back up 00364 ** ------------------------------------------------------------------- */ 00365 00366 arm_scale_f32(outputF32 + (i * BLOCKSIZE), 8.0f, outputF32 + (i * BLOCKSIZE), BLOCKSIZE); 00367 }; 00368 00369 snr = arm_snr_f32(testRefOutput_f32, testOutput, TESTLENGTH); 00370 00371 if (snr < SNR_THRESHOLD_F32) 00372 { 00373 status = ARM_MATH_TEST_FAILURE; 00374 } 00375 else 00376 { 00377 status = ARM_MATH_SUCCESS; 00378 } 00379 00380 /* ---------------------------------------------------------------------- 00381 ** Loop here if the signal does not match the reference output. 00382 ** ------------------------------------------------------------------- */ 00383 00384 if( status != ARM_MATH_SUCCESS) 00385 { 00386 while(1); 00387 } 00388 00389 00390 } 00391  All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines Generated on Mon Nov 29 2010 17:19:56 for CMSIS DSP Software Library by  1.7.2

Wyszukiwarka

Podobne podstrony:
arm graphic equalizer example q31? example
arm graphic equalizer example q31? example
arm graphic equalizer example q31?
arm fir lattice init q31? source
arm cmplx dot prod q31? source
arm linear interp example ?2? source
arm fir ?cimate init q31? source
arm mat mult ?st q31? source
arm fir sparse init q31? source
arm biquad ?scade ?1 q31? source
arm cmplx mult real q31? source
arm fir interpolate init q31? source
arm fir interpolate init q31? source
arm cmplx mult cmplx q31? source
arm fir ?cimate ?st q31? source
arm signal converge example ?2? source
arm ?ft radix4 init q31? source
arm class marks example ?2? source

więcej podobnych podstron