| 695 | void carlson_fastC(int16 *difz, int16 *xp, int16 *Ch, int16 *C, int16 *R, unsigned int16 dimy, unsigned int16 dimx ) { |
| 696 | int16 alpha,beta,gamma; |
| 697 | int16 delta, eta,epsilon,zeta,sigma,tau; |
| 698 | int16 i,j,iy; |
| 699 | int16 w[5]; |
| 700 | int32 tmp_long; |
| 701 | |
| 702 | int16 *Ch_ij, *w_i, *x_i, *C_yi; |
| 703 | |
| 704 | |
| 705 | for (iy=0; iy<dimy; iy++) |
| 706 | { |
| 707 | alpha=R[iy]; |
| 708 | delta = difz[iy]; |
| 709 | |
| 710 | for (j=0;j<dimx;j++) |
| 711 | { |
| 712 | C_yi = C+iy*dimx; |
| 713 | sigma = 0; |
| 714 | Ch_ij=Ch+j; |
| 715 | for (i=0;i<=j;i++){ |
| 716 | sigma += ((int32)*Ch_ij**C_yi)>>15; //sigma in qCh |
| 717 | Ch_ij+=dimx; |
| 718 | C_yi++; |
| 719 | } |
| 720 | |
| 721 | //sigma=Ch[iy*dimx+j]; |
| 722 | beta=alpha; |
| 723 | // alpha+=((long)sigma*sigma)>>15; |
| 724 | alpha=(((int32)alpha<<15)+(int32)sigma*sigma)>>15; // vyssi presnost |
| 725 | // gamma= qsqrt(((long)alpha*beta)); // verze pro DSP |
| 726 | gamma= (int16)(sqrt((double)((int32)alpha*beta))); // verze pro PC |
| 727 | |
| 728 | w[j]=0; |
| 729 | |
| 730 | Ch_ij=Ch+j; |
| 731 | w_i=w; |
| 732 | |
| 733 | for (i=0;i<=j;i++) |
| 734 | { |
| 735 | // tau=Ch[i*dimx+j]; |
| 736 | tau=*Ch_ij; |
| 737 | // tmp_long=((long)beta*Ch[i*dimx+j] -(long)sigma*w[i])/gamma; |
| 738 | tmp_long=((int32)beta**Ch_ij -(int32)sigma**w_i)/gamma; |
| 739 | |
| 740 | if (tmp_long>32767) |
| 741 | tmp_long=32767; |
| 742 | if (tmp_long<-32768) |
| 743 | tmp_long=-32768; |
| 744 | *Ch_ij=tmp_long; |
| 745 | |
| 746 | // w_i+=((long)tau*sigma)>>15; |
| 747 | *w_i=(((int32)*w_i<<15)+(int32)tau*sigma)>>15; |
| 748 | |
| 749 | w_i++; |
| 750 | Ch_ij+=dimx; |
| 751 | } |
| 752 | } |
| 753 | |
| 754 | x_i=xp; |
| 755 | w_i=w; |
| 756 | for (i=0;i<dimx;i++) { |
| 757 | // xp[i]+=((long)w[i]*delta)/alpha; |
| 758 | // *x_i+=((long)*w_i*delta)/alpha; |
| 759 | *x_i=((int32)*x_i*alpha+(int32)*w_i*delta)/alpha; // vyssi presnost |
| 760 | x_i++; |
| 761 | w_i++; |
| 762 | } |
| 763 | } |
| 764 | } |
| 765 | |