int medianfilter5(void)
{
  int i;
  for (i = 0; i < K - 1; i++) {
    vals[i] = analogRead(BEAM);  
  }
  return median5();
}
Ejemplo n.º 2
0
//	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;
}
Ejemplo n.º 3
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;
    }