fix_8cpp-source.html
来自「这个是关于G.726算法的源程序」· HTML 代码 · 共 709 行 · 第 1/5 页
HTML
709 行
<a name="l00441"></a>00441 <a name="l00442"></a>00442 <span class="comment">// table of values for ((2^n)-1)<<32 for n in range 0x0000.0000 to 0x0000.ff00</span><a name="l00443"></a>00443 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="group__integers.html#ga5">int32</a> Exp2TableFF00[] = <a name="l00444"></a>00444 {<a name="l00445"></a>00445 0x00000000,0x00b1afa5,0x0163da9f,0x02168143,0x02c9a3e7,0x037d42e1,0x04315e86,0x04e5f72f,<a name="l00446"></a>00446 0x059b0d31,0x0650a0e3,0x0706b29d,0x07bd42b7,0x08745187,0x092bdf66,0x09e3ecac,0x0a9c79b1,<a name="l00447"></a>00447 0x0b5586cf,0x0c0f145e,0x0cc922b7,0x0d83b233,0x0e3ec32d,0x0efa55fd,0x0fb66aff,0x1073028d,<a name="l00448"></a>00448 0x11301d01,0x11edbab5,0x12abdc06,0x136a814f,0x1429aaea,0x14e95934,0x15a98c8a,0x166a4547,<a name="l00449"></a>00449 0x172b83c7,0x17ed4869,0x18af9388,0x19726583,0x1a35beb6,0x1af99f81,0x1bbe0840,0x1c82f952,<a name="l00450"></a>00450 0x1d487316,0x1e0e75eb,0x1ed5022f,0x1f9c1843,0x2063b886,0x212be357,0x21f49917,0x22bdda27,<a name="l00451"></a>00451 0x2387a6e7,0x2451ffb8,0x251ce4fb,0x25e85711,0x26b4565e,0x2780e341,0x284dfe1f,0x291ba759,<a name="l00452"></a>00452 0x29e9df51,0x2ab8a66d,0x2b87fd0d,0x2c57e397,0x2d285a6e,0x2df961f6,0x2ecafa93,0x2f9d24ab,<a name="l00453"></a>00453 0x306fe0a3,0x31432ede,0x32170fc4,0x32eb83ba,0x33c08b26,0x3496266e,0x356c55f9,0x36431a2d,<a name="l00454"></a>00454 0x371a7373,0x37f26231,0x38cae6d0,0x39a401b7,0x3a7db34e,0x3b57fbfe,0x3c32dc31,0x3d0e544e,<a name="l00455"></a>00455 0x3dea64c1,0x3ec70df1,0x3fa4504a,0x40822c36,0x4160a21f,0x423fb270,0x431f5d95,0x43ffa3f8,<a name="l00456"></a>00456 0x44e08606,0x45c2042a,0x46a41ed1,0x4786d668,0x486a2b5c,0x494e1e19,0x4a32af0d,0x4b17dea6,<a name="l00457"></a>00457 0x4bfdad53,0x4ce41b81,0x4dcb299f,0x4eb2d81d,0x4f9b2769,0x508417f4,0x516daa2c,0x5257de83,<a name="l00458"></a>00458 0x5342b569,0x542e2f4f,0x551a4ca5,0x56070dde,0x56f4736b,0x57e27dbe,0x58d12d49,0x59c0827f,<a name="l00459"></a>00459 0x5ab07dd4,0x5ba11fba,0x5c9268a5,0x5d845909,0x5e76f15a,0x5f6a320d,0x605e1b97,0x6152ae6c,<a name="l00460"></a>00460 0x6247eb03,0x633dd1d1,0x6434634c,0x652b9feb,0x66238825,0x671c1c70,0x68155d44,0x690f4b19,<a name="l00461"></a>00461 0x6a09e667,0x6b052fa7,0x6c012750,0x6cfdcddd,0x6dfb23c6,0x6ef92985,0x6ff7df95,0x70f7466f,<a name="l00462"></a>00462 0x71f75e8e,0x72f8286e,0x73f9a48a,0x74fbd35d,0x75feb564,0x77024b1a,0x780694fd,0x790b938a,<a name="l00463"></a>00463 0x7a11473e,0x7b17b097,0x7c1ed013,0x7d26a62f,0x7e2f336c,0x7f387849,0x80427543,0x814d2add,<a name="l00464"></a>00464 0x82589994,0x8364c1eb,0x8471a462,0x857f4179,0x868d99b4,0x879cad93,0x88ac7d98,0x89bd0a47,<a name="l00465"></a>00465 0x8ace5422,0x8be05bad,0x8cf3216b,0x8e06a5e0,0x8f1ae991,0x902fed02,0x9145b0b9,0x925c353a,<a name="l00466"></a>00466 0x93737b0c,0x948b82b5,0x95a44cbc,0x96bdd9a7,0x97d829fd,0x98f33e47,0x9a0f170c,0x9b2bb4d5,<a name="l00467"></a>00467 0x9c49182a,0x9d674194,0x9e86319e,0x9fa5e8d0,0xa0c667b5,0xa1e7aed8,0xa309bec4,0xa42c9804,<a name="l00468"></a>00468 0xa5503b23,0xa674a8af,0xa799e133,0xa8bfe53c,0xa9e6b557,0xab0e5213,0xac36bbfd,0xad5ff3a3,<a name="l00469"></a>00469 0xae89f995,0xafb4ce62,0xb0e07298,0xb20ce6c9,0xb33a2b84,0xb468415b,0xb59728de,0xb6c6e29f,<a name="l00470"></a>00470 0xb7f76f2f,0xb928cf22,0xba5b030a,0xbb8e0b79,0xbcc1e904,0xbdf69c3f,0xbf2c25bd,0xc0628614,<a name="l00471"></a>00471 0xc199bdd8,0xc2d1cd9f,0xc40ab5ff,0xc544778f,0xc67f12e5,0xc7ba8898,0xc8f6d940,0xca340575,<a name="l00472"></a>00472 0xcb720dce,0xccb0f2e6,0xcdf0b555,0xcf3155b5,0xd072d4a0,0xd1b532b0,0xd2f87080,0xd43c8eac,<a name="l00473"></a>00473 0xd5818dcf,0xd6c76e86,0xd80e316c,0xd955d71f,0xda9e603d,0xdbe7cd63,0xdd321f30,0xde7d5641,<a name="l00474"></a>00474 0xdfc97337,0xe11676b1,0xe264614f,0xe3b333b1,0xe502ee78,0xe6539246,0xe7a51fbc,0xe8f7977c,<a name="l00475"></a>00475 0xea4afa2a,0xeb9f4867,0xecf482d8,0xee4aaa21,0xefa1bee6,0xf0f9c1cb,0xf252b376,0xf3ac948d,<a name="l00476"></a>00476 0xf50765b6,0xf6632798,0xf7bfdad9,0xf91d8022,0xfa7c1819,0xfbdba369,0xfd3c22b8,0xfe9d96b2<a name="l00477"></a>00477 };<a name="l00478"></a>00478 <a name="l00479"></a>00479 <span class="comment">// table of values for ((2^n)-1)<<40 for n in range 0x0000.0000 to 0x0000.00ff</span><a name="l00480"></a>00480 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="group__integers.html#ga5">int32</a> Exp2Table00FF[] =<a name="l00481"></a>00481 {<a name="l00482"></a>00482 0x00000000,0x00b17255,0x0162e525,0x02145871,0x02c5cc37,0x03774079,0x0428b535,0x04da2a6d,<a name="l00483"></a>00483 0x058ba01f,0x063d164d,0x06ee8cf5,0x07a00419,0x08517bb7,0x0902f3d1,0x09b46c65,0x0a65e575,<a name="l00484"></a>00484 0x0b175eff,0x0bc8d905,0x0c7a5386,0x0d2bce81,0x0ddd49f8,0x0e8ec5e9,0x0f404256,0x0ff1bf3e,<a name="l00485"></a>00485 0x10a33ca1,0x1154ba7e,0x120638d7,0x12b7b7ab,0x136936fa,0x141ab6c4,0x14cc3709,0x157db7c9,<a name="l00486"></a>00486 0x162f3904,0x16e0baba,0x17923ceb,0x1843bf97,0x18f542be,0x19a6c660,0x1a584a7d,0x1b09cf16,<a name="l00487"></a>00487 0x1bbb5429,0x1c6cd9b7,0x1d1e5fc1,0x1dcfe645,0x1e816d45,0x1f32f4bf,0x1fe47cb5,0x20960526,<a name="l00488"></a>00488 0x21478e11,0x21f91778,0x22aaa15a,0x235c2bb7,0x240db68f,0x24bf41e2,0x2570cdb0,0x262259f9,<a name="l00489"></a>00489 0x26d3e6bd,0x278573fd,0x283701b7,0x28e88fed,0x299a1e9d,0x2a4badc9,0x2afd3d6f,0x2baecd91,<a name="l00490"></a>00490 0x2c605e2e,0x2d11ef46,0x2dc380d9,0x2e7512e7,0x2f26a570,0x2fd83874,0x3089cbf4,0x313b5fee,<a name="l00491"></a>00491 0x31ecf464,0x329e8954,0x33501ec0,0x3401b4a7,0x34b34b09,0x3564e1e6,0x3616793e,0x36c81111,<a name="l00492"></a>00492 0x3779a95f,0x382b4228,0x38dcdb6d,0x398e752c,0x3a400f67,0x3af1aa1d,0x3ba3454e,0x3c54e0fa,<a name="l00493"></a>00493 0x3d067d21,0x3db819c3,0x3e69b6e0,0x3f1b5479,0x3fccf28c,0x407e911b,0x41303025,0x41e1cfaa,<a name="l00494"></a>00494 0x42936faa,0x43451025,0x43f6b11b,0x44a8528d,0x4559f479,0x460b96e1,0x46bd39c3,0x476edd21,<a name="l00495"></a>00495 0x482080fa,0x48d2254e,0x4983ca1e,0x4a356f68,0x4ae7152e,0x4b98bb6e,0x4c4a622a,0x4cfc0961,<a name="l00496"></a>00496 0x4dadb113,0x4e5f5941,0x4f1101e9,0x4fc2ab0d,0x507454ab,0x5125fec5,0x51d7a95a,0x5289546a,<a name="l00497"></a>00497 0x533afff5,0x53ecabfc,0x549e587d,0x5550057a,0x5601b2f2,0x56b360e5,0x57650f53,0x5816be3d,<a name="l00498"></a>00498 0x58c86da1,0x597a1d81,0x5a2bcddc,0x5add7eb2,0x5b8f3003,0x5c40e1cf,0x5cf29417,0x5da446da,<a name="l00499"></a>00499 0x5e55fa17,0x5f07add1,0x5fb96205,0x606b16b4,0x611ccbdf,0x61ce8184,0x628037a5,0x6331ee41,<a name="l00500"></a>00500 0x63e3a559,0x64955ceb,0x654714f9,0x65f8cd82,0x66aa8686,0x675c4005,0x680df9ff,0x68bfb475,<a name="l00501"></a>00501 0x69716f66,0x6a232ad2,0x6ad4e6b9,0x6b86a31b,0x6c385ff9,0x6cea1d52,0x6d9bdb26,0x6e4d9975,<a name="l00502"></a>00502 0x6eff583f,0x6fb11785,0x7062d746,0x71149782,0x71c65839,0x7278196b,0x7329db19,0x73db9d42,<a name="l00503"></a>00503 0x748d5fe6,0x753f2305,0x75f0e6a0,0x76a2aab5,0x77546f46,0x78063452,0x78b7f9da,0x7969bfdc,<a name="l00504"></a>00504 0x7a1b865a,0x7acd4d53,0x7b7f14c7,0x7c30dcb7,0x7ce2a522,0x7d946e07,0x7e463769,0x7ef80145,<a name="l00505"></a>00505 0x7fa9cb9d,0x805b9670,0x810d61be,0x81bf2d87,0x8270f9cc,0x8322c68c,0x83d493c7,0x8486617d,<a name="l00506"></a>00506 0x85382fae,0x85e9fe5b,0x869bcd83,0x874d9d27,0x87ff6d45,0x88b13ddf,0x89630ef4,0x8a14e084,<a name="l00507"></a>00507 0x8ac6b290,0x8b788517,0x8c2a5819,0x8cdc2b96,0x8d8dff8f,0x8e3fd403,0x8ef1a8f2,0x8fa37e5c,<a name="l00508"></a>00508 0x90555442,0x91072aa3,0x91b9017f,0x926ad8d6,0x931cb0a9,0x93ce88f7,0x948061c0,0x95323b05,<a name="l00509"></a>00509 0x95e414c5,0x9695ef00,0x9747c9b6,0x97f9a4e8,0x98ab8095,0x995d5cbd,0x9a0f3961,0x9ac1167f,<a name="l00510"></a>00510 0x9b72f41a,0x9c24d22f,0x9cd6b0c0,0x9d888fcc,0x9e3a6f53,0x9eec4f55,0x9f9e2fd3,0xa05010cc,<a name="l00511"></a>00511 0xa101f241,0xa1b3d430,0xa265b69b,0xa3179982,0xa3c97ce3,0xa47b60c0,0xa52d4519,0xa5df29ec,<a name="l00512"></a>00512 0xa6910f3b,0xa742f505,0xa7f4db4b,0xa8a6c20b,0xa958a947,0xaa0a90ff,0xaabc7932,0xab6e61e0,<a name="l00513"></a>00513 0xac204b09,0xacd234ae,0xad841ece,0xae360969,0xaee7f480,0xaf99e011,0xb04bcc1f,0xb0fdb8a7<a name="l00514"></a>00514 };<a name="l00515"></a>00515 <a name="l00516"></a>00516 <span class="comment">// Treat 'a' as i+j+k where i is integer part of value, j is bits 15 to 8 of </span><a name="l00517"></a>00517 <span class="comment">// the fractional part and k is bits 7 to 0 of the fractional part </span><a name="l00518"></a>00518 <span class="comment">// We calculate 2^a as 2^(i+j+k) which is (2^i)*(2^j)*(2^k)</span><a name="l00519"></a>00519 <a name="l00520"></a>00520 <span class="keywordtype">int</span> i = a>>16; <span class="comment">// i = integer part of value</span><a name="l00521"></a>00521 <a class="code" href="group__integers.html#ga2">uint32</a> x=Exp2TableFF00[(a>>8)&0xff]; <span class="comment">// x = (2^j-1) << 32</span><a name="l00522"></a>00522 <a class="code" href="group__integers.html#ga2">uint32</a> y=Exp2Table00FF[a&0xff]; <span class="comment">// y = (2^k-1) << 40</span><a name="l00523"></a>00523 <a name="l00524"></a>00524 <span class="comment">// calculate p = (x*y)>>32 = (2^j-1)(2^k-1)<<40</span><a name="l00525"></a>00525 <a class="code" href="group__integers.html#ga2">uint32</a> xl = x&0xffff;<a name="l00526"></a>00526 <a class="code" href="group__integers.html#ga2">uint32</a> yl = y&0xffff;<a name="l00527"></a>00527 <a class="code" href="group__integers.html#ga2">uint32</a> xh = x>>16;<a name="l00528"></a>00528 <a class="code" href="group__integers.html#ga2">uint32</a> yh = y>>16;<a name="l00529"></a>00529 <a class="code" href="group__integers.html#ga2">uint32</a> pl = (xl*yl+(1<<15))>>16;<a name="l00530"></a>00530 <a class="code" href="group__integers.html#ga2">uint32</a> pm1 = xh*yl+pl;<a name="l00531"></a>00531 <a class="code" href="group__integers.html#ga2">uint32</a> pm2 = xl*yh;<a name="l00532"></a>00532 <a class="code" href="group__integers.html#ga6">uint</a> p = xh*yh;<a name="l00533"></a>00533 <a class="code" href="group__integers.html#ga2">uint32</a> pm = pm1+pm2;<a name="l00534"></a>00534 <span class="keywordflow">if</span>(pm<pm2) p += (1<<16); <span class="comment">// check for carry</span><a name="l00535"></a>00535 <span class="keywordflow">if</span>(pm&(1<<15)) p += 1; <span class="comment">// round up if required</span><a name="l00536"></a>00536 p += pm>>16;<a name="l00537"></a>00537 <a name="l00538"></a>00538 <span class="comment">// calculate n = p+x+y = x*y+x+y = (x+1)(y+1)-1 = ((2^j)(2^k)-1)<<32</span><a name="l00539"></a>00539 <a class="code" href="group__integers.html#ga6">uint</a> round = ((p&0xff)+(y&0xff)+0x80)>>8;<a name="l00540"></a>00540 <a class="code" href="group__integers.html#ga6">uint</a> n = x+(y>>8)+round;<a name="l00541"></a>00541 n += p>>8;<a name="l00542"></a>00542 <a name="l00543"></a>00543 <span class="comment">// n = n>>(16-i) = 2^(i-16)*n = ((2^i)*((2^j)*(2^k)-1)<<16</span><a name="l00544"></a>00544 n >>= 15-i;<a name="l00545"></a>00545 n = (n+1)>>1;<a name="l00546"></a>00546 <a name="l00547"></a>00547 <span class="comment">// finally add 2^i to get result of 2^a</span><a name="l00548"></a>00548 n += 0x80000000>>(15-i);<a name="l00549"></a>00549 <a name="l00550"></a>00550 <span class="keywordflow">return</span> n;<a name="l00551"></a>00551 }<a name="l00552"></a>00552 <a name="l00553"></a>00553 <a name="l00554"></a><a class="code" href="classFix.html#e9">00554</a> <a class="code" href="common_8h.html#a2">EXPORT</a> <a class="code" href="group__fix.html#ga0">fix</a> <a class="code" href="classFix.html#e9">Fix::Cos</a>(<a class="code" href="group__fix.html#ga2">fixangle</a> angle)<a name="l00555"></a>00555 {<a name="l00556"></a>00556 <span class="keywordflow">return</span> <a class="code" href="classFix.html#e8">Fix::Sin</a>(angle+0x4000);<a name="l00557"></a>00557 }<a name="l00558"></a>00558 <a name="l00559"></a>00559 <a name="l00560"></a><a class="code" href="classFix.html#e8">00560</a> <a class="code" href="common_8h.html#a2">EXPORT</a> <a class="code" href="group__fix.html#ga0">fix</a> <a class="code" href="classFix.html#e8">Fix::Sin</a>(<a class="code" href="group__fix.html#ga2">fixangle</a> angle)<a name="l00561"></a>00561 {<a name="l00562"></a>00562 <span class="comment">// reduce angle to first quadrant</span><a name="l00563"></a>00563 <a class="code" href="group__integers.html#ga6">uint</a> n = angle&0x3FFF;<a name="l00564"></a>00564 <span class="keywordflow">if</span>(angle&(1<<14))<a name="l00565"></a>00565 n = 0x4000-n;<a name="l00566"></a>00566 <a name="l00567"></a>00567 <span class="comment">// calc Sin through table lookup</span><a name="l00568"></a>00568 <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="group__integers.html#ga5">int32</a> SinTable[] =<a name="l00569"></a>00569 {<a name="l00570"></a>00570 -0x000c8fb3,<a name="l00571"></a>00571 0x00000000,0x000c8fb3,0x001917a7,0x00259021,0x0031f170,0x003e33f3,0x004a5019,0x00563e6a,<a name="l00572"></a>00572 0x0061f78b,0x006d7440,0x0078ad75,0x00839c3d,0x008e39da,0x00987fc0,0x00a26799,0x00abeb4a,<a name="l00573"></a>00573 0x00b504f3,0x00bdaef9,0x00c5e403,0x00cd9f02,0x00d4db31,0x00db941a,0x00e1c598,0x00e76bd8,<a name="l00574"></a>00574 0x00ec835e,0x00f10908,0x00f4fa0b,0x00f853f8,0x00fb14be,0x00fd3aac,0x00fec46d,0x00ffb10f,<a name="l00575"></a>00575 0x01000000,0x00ffb10f,0x00ffb10f<a name="l00576"></a>00576 };<a name="l00577"></a>00577 <span class="keywordtype">int</span> r = <a class="code" href="fix_8cpp.html#a0">Interpolate</a>(SinTable,n,9);<a name="l00578"></a>00578 <a name="l00579"></a>00579 <span class="comment">// scale result to 16 bits (from the 24 bit precision used in lookup table)</span><a name="l00580"></a>00580 r = (r+(1<<(8-1)))>>8;<a name="l00581"></a>00581 <a name="l00582"></a>00582 <span class="comment">// produce correct sign for result</span>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?