void highshelf_bang(t_rbjfilter *x) { t_atom at[5]; t_float omega = e_omega(x->x_freq,x->x_rate); t_float A = e_A(x->x_gain); t_float cs = cos(omega); t_float sn = sin(omega); t_float beta = e_beta(A,x->x_bw* 0.01); t_float b0 = A*((A+1) + (A-1)*cs + beta*sn); t_float b1 =-2.*A*((A-1) + (A+1)*cs); t_float b2 = A*((A+1) + (A-1)*cs - beta*sn); t_float a0 = ((A+1) - (A-1)*cs + beta*sn); t_float a1 = 2.*((A-1) - (A+1)*cs); t_float a2 = ((A+1) - (A-1)*cs - beta*sn); /* post("bang %f %f %f",x->x_freq, x->x_gain, x->x_bw);*/ if (!check_stability(-a1/a0,-a2/a0,b0/a0,b1/a0,b2/a0)) { post("highshelf: filter unstable -> resetting"); a0=1.;a1=0.;a2=0.; b0=1.;b1=0.;b2=0.; } SETFLOAT(at,-a1/a0); SETFLOAT(at+1,-a2/a0); SETFLOAT(at+2,b0/a0); SETFLOAT(at+3,b1/a0); SETFLOAT(at+4,b2/a0); outlet_list(x->x_obj.ob_outlet,&s_list,5,at); }
void lowpass_bang(t_rbjfilter *x) { t_atom at[5]; t_float omega = e_omega(x->x_freq,x->x_rate); t_float alpha = e_alpha(x->x_bw*0.01,omega); t_float b1 = 1 - cos(omega); t_float b0 = b1/2.; t_float b2 = b0; t_float a0 = 1 + alpha; t_float a1 = -2.*cos(omega); t_float a2 = 1 - alpha; /* post("bang %f %f %f",x->x_freq, x->x_gain, x->x_bw); */ if (!check_stability(-a1/a0,-a2/a0,b0/a0,b1/a0,b2/a0)) { post("lowpass: filter unstable -> resetting"); a0=1.;a1=0.;a2=0.; b0=1.;b1=0.;b2=0.; } SETFLOAT(at,-a1/a0); SETFLOAT(at+1,-a2/a0); SETFLOAT(at+2,b0/a0); SETFLOAT(at+3,b1/a0); SETFLOAT(at+4,b2/a0); outlet_list(x->x_obj.ob_outlet,&s_list,5,at); }
void* get_result( void *ptr ) { char buf[1024]; int fd=*((int*)ptr); char* pos; int n; int pipe; char type; pos=&buf[0]; while(1){ if((n=read(fd, pos, 1))==1 ){ if(*pos=='\n'){ *pos=0; if(pos!=buf){ //接收到一个反馈 printf("feedback::%s\n",buf); fflush(stdout); calib(buf,pipe,type); check_stability(pipe,type); } pos=&buf[0]; continue; } pos++; } } }
int main() { int m, n, i, j; float **A = (float **)calloc(m, sizeof(float *)); //printf("enter the number of rows & columns: "); scanf("%d %d", &m, &n); for(i=0; i<m; i++) { A[i] = (float *)calloc(n, sizeof(float)); //printf("enter row(%d): ", i+1); for(j=0; j<n; j++) scanf("%f", &A[i][j]); } check_stability(A, m, n); return 0; }
void move(int *q, int i) { if (i == 3) { print(q); return; } for ( int j = 0; j < 3; j++) { q[i] = j; if(check_stability(q,i)) { move(q, i+1); } } }