void pre_emphasis(fract16 data[], int arr_length, struct Coef shelving_coef) { fract16 xBuffer[BUFFER_SIZE]; // input buffer fract16 yBuffer[BUFFER_SIZE]; // output buffer int current; for (current = 0; current < BUFFER_SIZE; ++current) { xBuffer[current] = yBuffer[current] = float_to_fr16(0.0); } current = 0; int index; for (index = 0; index < arr_length; index++) { fract16 temp_b0 = mult_fr1x16(shelving_coef.b0, data[index]); fract16 temp_b1 = mult_fr1x16(shelving_coef.b1, xBuffer[INDEX(current-1)]); fract16 temp_b2 = mult_fr1x16(shelving_coef.b2, xBuffer[INDEX(current-2)]); fract16 temp_a1 = mult_fr1x16(shelving_coef.a1, yBuffer[INDEX(current-1)]); fract16 temp_a2 = mult_fr1x16(shelving_coef.a2, yBuffer[INDEX(current-2)]); fract16 temp_b = add_fr1x16(add_fr1x16(temp_b0, temp_b1), temp_b2); fract16 temp_a = add_fr1x16(temp_a1, temp_a2); fract16 temp = sub_fr1x16(temp_b, temp_a); yBuffer[current] = shl_fr1x16(temp, 2); xBuffer[current] = data[index]; //input data[index] = yBuffer[current]; //output current++; current %= BUFFER_SIZE; } }
void adder_unit(void) { error_sig = sub_fr1x16(echo_output, out_fir); }