int medianfilter5(void) { int i; for (i = 0; i < K - 1; i++) { vals[i] = analogRead(BEAM); } return median5(); }
// Get the median 0f 5 valid samples u8 TouchOversample(int* xx, int *yy) { #define MEDIAN_COUNT 5 u8 i = MEDIAN_COUNT*2; // get 5 valid samples from 10 reads u8 s = 0; int x[MEDIAN_COUNT]; int y[MEDIAN_COUNT]; int z[MEDIAN_COUNT]; while (i--) { u8 p = TouchSample(x+s,y+s); if (p) { z[s] = p; if (++s == MEDIAN_COUNT) // got 5 valid samples? { *xx = median5(x); *yy = median5(y); return median5(z); } } } return 0; }
int main(void) { try { glPixelStorei(GL_UNPACK_ALIGNMENT,1); glPixelStorei(GL_PACK_ALIGNMENT,1); GLWindow::Settings setts; setts.width = screenWidth; setts.height = screenHeight; setts.match_resolution_exactly=true; setts.is_fullscreen=false; setts.glversion_major= 2; setts.glversion_minor= 1.0; GLWindow win(setts); glewInit(); LDRImage noiseImg = loadImage("noise.png",1); flipVertical(noiseImg); glPixelStorei(GL_UNPACK_ALIGNMENT,1); glPixelStorei(GL_PACK_ALIGNMENT,1); GLTexture inputTex(noiseImg); int width = noiseImg.getDimensions()[1]; int height = noiseImg.getDimensions()[2]; std::cout<<"W H "<<width<<" "<<height<<std::endl; glBindTexture(GL_TEXTURE_2D, inputTex.tex); writeImage(noiseImg, "noiseOut_test.png"); GL::GLShader median2("median.vert", "medianfilter2.frag"); median2.bind(); median2.setTexture("tex", 0); median2.setUniform("invTexDimensions", 1.0f / float(width), 1.0f / float(height)); GL::GLShader median3("median.vert", "medianfilter3.frag"); median3.bind(); median3.setTexture("tex", 0); median3.setUniform("invTexDimensions", 1.0f / float(width), 1.0f / float(height)); GL::GLShader median4("median.vert", "medianfilter4.frag"); median4.bind(); median4.setTexture("tex", 0); median4.setUniform("invTexDimensions", 1.0f / float(width), 1.0f / float(height)); GL::GLShader median5("median.vert", "medianfilter5.frag"); median5.bind(); median5.setTexture("tex", 0); median5.setUniform("invTexDimensions", 1.0f / float(width), 1.0f / float(height)); median4.bind(); std::cout<<"BEGIN "<<std::endl; { while(win.isValid()) { /* #ifndef GL_ES_BUILD const GLenum buffers[]= {GL_COLOR_ATTACHMENT0, GL_BACK_LEFT}; glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); glDrawBuffers(1, &buffers[1]); #else*/ glBindFramebuffer(GL_FRAMEBUFFER, 0); //#endif glClearColor(1,0,0,1); glClear(GL_COLOR_BUFFER_BIT); screenQuad(); // checkFBOErrors(); win.update(); win.flush(); } }//scope } catch(const std::exception& e) { std::cout<<e.what()<<std::endl; } catch(const std::string& str) { std::cout<<str<<std::endl; } return 0; }
//============================================================================ //函数功能:设置存储器 //函数参数:"index"表示指标量化,作为输入参数;"nbits"表示位数,作为输入参数;" // code[]"表示创新载体,作为输入参数;"L_subfr"表示子帧长度,作为输入参 // 数;"gain_pit"表示基音增益,作为输出参数;"gain_cod"表示编码增益,作 // 为输出参数;"bfi"表示坏帧指示,作为输入参数;"prev_bfi"表示先前BF指 // 示器,作为输入参数;"state"表示BFH的状态,作为输入参数;"unusable_frame" // 表示UF指示器,作为输入参数;"vad_hist"表示非语音帧的数目,作为输入参 // 数;"mem"表示静态存储器,既作为输入参数又作为输出参数 //============================================================================ void dec_gain2_amr_wb( int16 index, /* (i) : index of quantization. */ int16 nbits, /* (i) : number of bits (6 or 7) */ int16 code[], /* (i) Q9 : Innovative vector. */ int16 L_subfr, /* (i) : Subframe lenght. */ int16 * gain_pit, /* (o) Q14 : Pitch gain. */ int32 * gain_cod, /* (o) Q16 : Code gain. */ int16 bfi, /* (i) : bad frame indicator */ int16 prev_bfi, /* (i) : Previous BF indicator */ int16 state, /* (i) : State of BFH */ int16 unusable_frame, /* (i) : UF indicator */ int16 vad_hist, /* (i) : number of non-speech frames */ int16 * mem /* (i/o) : static memory (4 words) */ ) { const int16 *p; int16 *past_gain_pit, *past_gain_code, *past_qua_en, *gbuf, *pbuf, *prev_gc; int16 *pbuf2; int16 i, tmp, exp, frac, gcode0, exp_gcode0, qua_ener, gcode_inov; int16 tmp1, g_code; int16 tmp2; int32 L_tmp; past_qua_en = mem; past_gain_pit = mem + 4; past_gain_code = mem + 5; prev_gc = mem + 6; pbuf = mem + 7; gbuf = mem + 12; pbuf2 = mem + 17; /* * Find energy of code and compute: * * L_tmp = 1.0 / sqrt(energy of code/ L_subfr) */ L_tmp = Dot_product12(code, code, L_subfr, &exp); exp -= 24; /* exp: -18 (code in Q9), -6 (/L_subfr) */ one_ov_sqrt_norm(&L_tmp, &exp); gcode_inov = extract_h(shl_int32(L_tmp, exp - 3)); /* g_code_inov in Q12 */ /* * Case of erasure. */ if (bfi != 0) { tmp = median5(&pbuf[2]); *past_gain_pit = tmp; if (*past_gain_pit > 15565) { *past_gain_pit = 15565; /* 0.95 in Q14 */ } if (unusable_frame != 0) { *gain_pit = mult_int16(pdown_unusable[state], *past_gain_pit); } else { *gain_pit = mult_int16(pdown_usable[state], *past_gain_pit); } tmp = median5(&gbuf[2]); if (vad_hist > 2) { *past_gain_code = tmp; } else { if (unusable_frame != 0) { *past_gain_code = mult_int16(cdown_unusable[state], tmp); } else { *past_gain_code = mult_int16(cdown_usable[state], tmp); } } /* update table of past quantized energies */ //更新过去的量子化的能量表 tmp = past_qua_en[3]; tmp1 = past_qua_en[2]; L_tmp = tmp; L_tmp += tmp1; past_qua_en[3] = tmp; tmp = past_qua_en[1]; tmp1 = past_qua_en[0]; L_tmp += tmp; L_tmp += tmp1; past_qua_en[2] = tmp; qua_ener = (int16)(L_tmp >> 3); past_qua_en[1] = tmp1; qua_ener -= 3072; /* -3 in Q10 */ if (qua_ener < -14336) { qua_ener = -14336; /* -14 in Q10 */ } past_qua_en[0] = qua_ener; for (i = 1; i < 5; i++) { gbuf[i - 1] = gbuf[i]; pbuf[i - 1] = pbuf[i]; } gbuf[4] = *past_gain_code; pbuf[4] = *past_gain_pit; /* adjust gain according to energy of code */ /* past_gain_code(Q3) * gcode_inov(Q12) => Q16 */ //调整增益根据能量代码 *gain_cod = mul_16by16_to_int32(*past_gain_code, gcode_inov); return; }