Changeset 34:ee0188025de8 in roaraudio


Ignore:
Timestamp:
06/22/08 03:31:39 (16 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

added some polynom approxy code

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libroardsp/poly.c

    r31 r34  
    33#include "libroar.h" 
    44 
    5 int roar_math_mkpoly (float * poly, float * data, int len); 
     5int roar_math_mkpoly (float * poly, float * data, int len) { 
     6 if ( len == 2 ) 
     7  return roar_math_mkpoly_2x2(poly, data); 
     8 if ( len == 3 ) 
     9  return roar_math_mkpoly_3x3(poly, data); 
     10 if ( len == 4 ) 
     11  return roar_math_mkpoly_4x4(poly, data); 
     12 if ( len == 5 ) 
     13  return roar_math_mkpoly_5x5(poly, data); 
    614 
    7 int roar_math_mkpoly_2x2 (float * poly, float * data); 
    8 int roar_math_mkpoly_3x3 (float * poly, float * data); 
    9 int roar_math_mkpoly_4x4 (float * poly, float * data); 
     15 return -1; 
     16} 
     17 
     18int roar_math_mkpoly_2x2 (float * poly, float * data) { 
     19/* 
     20 A B 
     21 0 1 x 
     22 1 1 y 
     23 
     24B = x 
     25A = y - x 
     26*/ 
     27 
     28 poly[0] =           data[0]; 
     29 poly[1] = data[1] - data[0]; 
     30 
     31 return 0; 
     32} 
     33 
     34int roar_math_mkpoly_3x3 (float * poly, float * data) { 
     35/* 
     36 A B C 
     37 0 0 1 x 
     38 1 1 1 y 
     39 4 2 1 z 
     40*/ 
     41 
     42 poly[0] = data[0]; 
     43 poly[1] = 2*data[1] - 2*data[0] - (data[2]-data[0])/2; 
     44 poly[2] = (data[2]-data[0])/2 - data[1] + data[0]; 
     45 
     46 
     47 return 0; 
     48} 
     49 
     50int roar_math_mkpoly_4x4 (float * poly, float * data) { 
     51/* 
     52   a    b    c    d 
     53   0    0    0    1  A X 0 
     54   1    1    1    1  B Y 1 
     55   8    4    2    1  C Z 2 
     56  27    9    3    1  D Q 3 
     57*/ 
     58 
     59 
     60// { a = -(3z-3y+x-q)/6, b = (4z-5y+2x-q)/2, c = -(9z-18y+11x-2q)/6, d = x }. 
     61 
     62 poly[0] =      data[0]; 
     63 poly[1] = -(11*data[0] - 18*data[1] + 9*data[2] - 2*data[3])/6; 
     64 poly[2] =  (2 *data[0] -  5*data[1] + 4*data[2] -   data[3])/2; 
     65 poly[3] = -(   data[0] -  3*data[1] + 3*data[2] -   data[3])/6; 
     66 
     67 return 0; 
     68} 
     69 
    1070int roar_math_mkpoly_5x5 (float * poly, float * data); 
    1171 
Note: See TracChangeset for help on using the changeset viewer.