//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // 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; }
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; } }
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); } }
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; }