Portability: Do not use glibc-specific sincosf

pull/4/merge
pabr 2017-05-12 13:02:26 +02:00
rodzic 2a598a4c44
commit da7ac42e89
3 zmienionych plików z 17 dodań i 13 usunięć

Wyświetl plik

@ -253,8 +253,8 @@ namespace leansdr {
float current_freq;
void set_freq(float f) {
for ( int i=0; i<ncoeffs; ++i ) {
float c, s;
sincosf(2*M_PI*f*(i-ncoeffs/2), &s, &c);
float a = 2*M_PI * f * (i-ncoeffs/2);
float c=cosf(a), s=sinf(a);
// TBD Support T=complex
shifted_coeffs[i].re = coeffs[i] * c;
shifted_coeffs[i].im = coeffs[i] * s;
@ -336,8 +336,8 @@ namespace leansdr {
float current_freq;
void set_freq(float f) {
for ( int i=0; i<ncoeffs; ++i ) {
float c, s;
sincosf(2*M_PI*f*i, &s, &c);
float a = 2*M_PI * f * i;
float c=cosf(a), s=sinf(a);
// TBD Support T=complex
shifted_coeffs[i].re = coeffs[i] * c;
shifted_coeffs[i].im = coeffs[i] * s;

Wyświetl plik

@ -72,8 +72,11 @@ namespace leansdr {
struct trig16 {
complex<float> lut[65536]; // TBD static and shared
trig16() {
for ( int a=0; a<65536; ++a )
sincosf(a*2*M_PI/65536, &lut[a].im, &lut[a].re);
for ( int a=0; a<65536; ++a ) {
float af = a * 2*M_PI / 65536;
lut[a].re = cosf(af);
lut[a].im = sinf(af);
}
}
inline const complex<float> &expi(unsigned short a) const {
return lut[a];

Wyświetl plik

@ -873,15 +873,16 @@ namespace leansdr {
s.im = (int)(p0r->im + (p1r->im-p0r->im)*mu);
symbol_arg = fast_arg(s);
#else // Linear floating-point, for reference
float cosph, sinph;
sincosf(-(int)phase*M_PI/32768, &sinph, &cosph);
float a0 = -(int)phase*M_PI/32768;
float cosa0=cosf(a0), sina0=sinf(a0);
complex<float>
p0r(((float)pin[0].re-128)*cosph - ((float)pin[0].im-128)*sinph,
((float)pin[0].re-128)*sinph + ((float)pin[0].im-128)*cosph);
sincosf(-(int)(phase+freqw)*M_PI/32768, &sinph, &cosph);
p0r(((float)pin[0].re-128)*cosa0 - ((float)pin[0].im-128)*sina0,
((float)pin[0].re-128)*sina0 + ((float)pin[0].im-128)*cosa0);
float a1 = -(int)(phase+freqw)*M_PI/32768;
float cosa1=cosf(a1), sina1=sinf(a1);
complex<float>
p1r(((float)pin[1].re-128)*cosph - ((float)pin[1].im-128)*sinph,
((float)pin[1].re-128)*sinph + ((float)pin[1].im-128)*cosph);
p1r(((float)pin[1].re-128)*cosa1 - ((float)pin[1].im-128)*sina1,
((float)pin[1].re-128)*sina1 + ((float)pin[1].im-128)*cosa1);
s.re = (int)(128 + p0r.re + (p1r.re-p0r.re)*mu);
s.im = (int)(128 + p0r.im + (p1r.im-p0r.im)*mu);
symbol_arg = fast_arg(s);