Example #1
0
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//	Biquad::GetHipassParams()
//
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void Biquad::GetHipassParams(	float inFreq,
								float &a0,
								float &a1,
								float &a2,
								float &b1,
								float &b2  )
{
	float k;
	float k_squared;
	float inv_denom;
	GetK(inFreq, k, k_squared, inv_denom );
	
	a0 = inv_denom;
	a1 = -2 * inv_denom;
	a2 = inv_denom;
	b1 = 2*(k_squared-1) * inv_denom;
	b2 = (1 - kSquareRootOf2*k + k_squared)  * inv_denom;
}
Example #2
0
static void wpacket_write(wpacket_t w,int8_t *addr,uint32_t size)
{
	int8_t *ptr = addr;
	uint32_t copy_size;
	buffer_t tmp;
	uint8_t k;
	if(!w->writebuf)
	{
		/*wpacket是由rpacket构造的,这里执行写时拷贝,
		* 执行完后wpacket和构造时传入的rpacket不再共享buffer
		*/
		k = GetK(*w->len);
		w->factor = k;
		tmp = buffer_create_and_acquire(0,1 << k);
		wpacket_copy(w,tmp);
		w->begin_pos = 0;
		if(!w->raw)
		{
			w->len = (uint32_t*)tmp->buf;
			w->wpos = sizeof(*w->len);
		}
		w->buf = buffer_acquire(w->buf,tmp);
		w->writebuf = buffer_acquire(w->writebuf,w->buf);
	}
	while(size)
	{
		copy_size = w->buf->capacity - w->wpos;
		if(copy_size == 0)
		{
			wpacket_expand(w);//空间不足,扩展
			copy_size = w->buf->capacity - w->wpos;
		}
		copy_size = copy_size > size ? size:copy_size;
		memcpy(w->writebuf->buf + w->wpos,ptr,copy_size);
		w->writebuf->size += copy_size;
		if(w->len)
			(*w->len) += copy_size;
		w->wpos += copy_size;
		ptr += copy_size;
		size -= copy_size;
		w->data_size += copy_size;
	}
}
Example #3
0
void MOCRelief::CalcImpulse(MOCTrans &trans, double dTime)
{
    TestStatus();
    double dK = m_tranData.GeTransY(dTime,m_dKOrCv,trans.StartTime());
    dK = GetK(dK);//k= -1 表示无穷大
    if(0==ReliefStatus())
    {
        CalcStmOpen(m_dKOrCv);
    }
    else if(1==ReliefStatus())
    {
        CalcStmClose();
    }
    else
    {
        CalcStmOpen(dK);
    }

}
Example #4
0
wpacket_t wpacket_create(uint32_t size,uint8_t is_raw)
{
	uint8_t k = GetK(size);
	wpacket_t w;
	size = 1 << k;
	w = LIST_POP(wpacket_t,g_wpacket_pool);//calloc(1,sizeof(*w));
	if(!w)
	{
		printf("缓存不够了\n");
		getchar();
		exit(0);
	}
	
	//w = calloc(1,sizeof(*w));
	w->factor = k;
	w->raw = is_raw;
	w->buf = buffer_create_and_acquire(0,size);
	w->writebuf = buffer_acquire(0,w->buf);
	w->begin_pos = 0;
	if(is_raw)
	{
		w->wpos = 0;
		w->len = 0;
		w->buf->size = 0;
		w->data_size = 0;
	}
	else
	{
		w->wpos = sizeof(w->len);
		w->len = (uint32_t*)w->buf->buf;
		*(w->len) = 0;
		w->buf->size = sizeof(w->len);
		w->data_size = sizeof(*(w->len));
	}
	return w;
}