static GstFlowReturn transform_ip (GstBaseTransform * trans, GstBuffer * buf) { UnaryComplexPow *element = UNARY_COMPLEX_POW (trans); GstAudioFilter *audiofilter = GST_AUDIO_FILTER (trans); GstAudioFormat format = audiofilter->info.finfo->format; GstMapInfo info; gst_buffer_map (buf, &info, GST_MAP_READWRITE); gpointer data = info.data; gpointer data_end = data + info.size; const double n = element->exponent; if (format >= GST_AUDIO_FORMAT_F64) { double complex *ptr, *end = data_end; for (ptr = data; ptr < end; ptr++) *ptr = cpow (*ptr, n); } else if (format >= GST_AUDIO_FORMAT_F32) { float complex *ptr, *end = data_end; for (ptr = data; ptr < end; ptr++) *ptr = cpowf (*ptr, n); } else { g_assert_not_reached (); } gst_buffer_unmap (buf, &info); return GST_FLOW_OK; }
//## Complex Complex.cpowf(); static KMETHOD Complex_cpowf(KonohaContext *kctx, KonohaStack *sfp) { kComplex *kx = (kComplex *) sfp[0].asObject; float _Complex x = (float _Complex)kx->z; float real = (float)sfp[1].floatValue; float imaginary = (float)sfp[2].floatValue; float _Complex y = real + I * imaginary; float ret = cpowf(x, y); KReturnFloatValue(ret); }
QLA_F_Complex QLA_F_cpow(QLA_F_Complex *a, QLA_F_Real b) { float _Complex ca, cr; QLA_F_c99_eq_c(ca, *a); cr = cpowf(ca, b); QLA_F_Complex r; QLA_F_c_eq_c99(r, cr); return r; }
void Oscillator::setSemi(float semi) { if(semi >= 0.5f) { semi -= 0.5f; semi *= 2.0f; semi *= g_osc_semi_range; //tempsemi should now have the amount of semitones away from center pitch m_semi = cpowf(1.05946309436f, common::croundf(semi)); } else if(semi < 0.5f) { semi = 0.5f-semi; semi *= 2.0f; semi *= g_osc_semi_range; //tempsemi should now have the amount of semitones away from center pitch m_semi = cpowf(0.94387431268f, common::croundf(semi)); } setPitch(m_pitch); }
void ansi_air_bang(t_ansi_air *x) { float fs = x->fs; float TempC = x->tempC; float Hum = x->hum; float Pressure = x->pressure; float Distance = x->dist; int i, fftlength = x->fftlength; int fftlengthhalf = x->fftlengthhalf; float f2[fftlengthhalf], air[fftlengthhalf]; float _Complex Hair[fftlengthhalf], Hair2[fftlengthhalf], H[fftlength], h[fftlength]; static float msli_pi = 3.141592653589793; fftwf_plan p_h; for(i = 0; i < fftlength; i++) { if( i < fftlengthhalf ) { f2[i] = (fs * (float)i) / ((float)fftlength); // -1.0 is to change into negative dB (attenation) air[i] = -1.0 * Distance * fnMAPPAttenuate(TempC,Pressure,Hum,f2[i]); Hair[i] = cpowf(10.0,air[i]/20.0); // delay it to middle of window for linear phase (causual) filter Hair2[i] = Hair[i] * cexpf(-I * 2.0 * msli_pi * f2[i] * (fftlength/4 * (1.0 / fs))); H[i] = Hair2[i]; } else { H[i] = conjf(Hair2[ (fftlength/2 -1) - (i-fftlengthhalf)]); } } p_h = fftwf_plan_dft_1d(fftlength,H,h,FFTW_BACKWARD,FFTW_ESTIMATE); fftwf_execute(p_h); for(i = 0; i < fftlength; i++) { h[i] = h[i] / fftlength; outlet_float((t_outlet *)x->outlet2, i); outlet_float((t_outlet *)x->outlet1, crealf(h[i])); } outlet_anything((t_outlet *)x->outinfo, gensym("done"), 0, NULL); }
void drawmandelbrot(SDL_Surface *surface) { if (SDL_MUSTLOCK(surface)) { SDL_LockSurface(surface); } Uint32 *pixels = (Uint32 *) surface->pixels; for (int i = 0; i < surface->w * surface->h; i++) { int y = i / surface->w; int x = i % surface->w; float complex c = ((3.0f * x / surface->w) - 2.0f) + I * ((2.0f * y / surface->h) - 1.0f); bool diverges = false; float complex z = 0; int it; for (it = 1; it <= max_it; it++) { /* z = z² + c */ z = cpowf(z, 2) + c; /* If |z| ever gets greater than 2, it diverges. */ if (cabsf(z) > 2) { diverges = true; break; } } Uint32 color; if (diverges) { color = outcolor(it); } else { color = incolor(); } pixels[i] = color; /* Update the screen every 10 lines. */ if (y % 10 == 0 && x == 0) { SDL_Flip(surface); } } /* Update the screen a final time. */ SDL_Flip(surface); if (SDL_MUSTLOCK(surface)) { SDL_UnlockSurface(surface); } }
ld = ctanhl(ld); TEST_TRACE(C99 7.3.7.1) d = cexp(d); f = cexpf(f); ld = cexpl(ld); TEST_TRACE(C99 7.3.7.2) d = clog(d); f = clogf(f); ld = clogl(ld); TEST_TRACE(C99 7.3.8.1) d = cabs(d); f = cabsf(f); ld = cabsl(ld); TEST_TRACE(C99 7.3.8.2) d = cpow(d, d); f = cpowf(f, f); ld = cpowl(ld, ld); TEST_TRACE(C99 7.3.8.3) d = csqrt(d); f = csqrtf(f); ld = csqrtl(ld); TEST_TRACE(C99 7.3.9.1) d = carg(d); f = cargf(f); ld = cargl(ld); TEST_TRACE(C99 7.3.9.2) d = cimag(d); f = cimagf(f); ld = cimagl(ld); TEST_TRACE(C99 7.3.9.3) d = conj(d);
static void zpow(long N, complex float* dst, const complex float* src1, const complex float* src2) { for (long i = 0; i < N; i++) dst[i] = cpowf(src1[i], src2[i]); }
void docomplexf (void) { #ifndef NO_FLOAT complex float ca, cb, cc; float f1; ca = 1.0 + 1.0 * I; cb = 1.0 - 1.0 * I; f1 = cabsf (ca); fprintf (stdout, "cabsf : %f\n", f1); cc = cacosf (ca); fprintf (stdout, "cacosf : %f %fi\n", crealf (cc), cimagf (cc)); cc = cacoshf (ca); fprintf (stdout, "cacoshf: %f %fi\n", crealf (cc), cimagf (cc)); f1 = cargf (ca); fprintf (stdout, "cargf : %f\n", f1); cc = casinf (ca); fprintf (stdout, "casinf : %f %fi\n", crealf (cc), cimagf (cc)); cc = casinhf (ca); fprintf (stdout, "casinhf: %f %fi\n", crealf (cc), cimagf (cc)); cc = catanf (ca); fprintf (stdout, "catanf : %f %fi\n", crealf (cc), cimagf (cc)); cc = catanhf (ca); fprintf (stdout, "catanhf: %f %fi\n", crealf (cc), cimagf (cc)); cc = ccosf (ca); fprintf (stdout, "ccosf : %f %fi\n", crealf (cc), cimagf (cc)); cc = ccoshf (ca); fprintf (stdout, "ccoshf : %f %fi\n", crealf (cc), cimagf (cc)); cc = cexpf (ca); fprintf (stdout, "cexpf : %f %fi\n", crealf (cc), cimagf (cc)); f1 = cimagf (ca); fprintf (stdout, "cimagf : %f\n", f1); cc = clogf (ca); fprintf (stdout, "clogf : %f %fi\n", crealf (cc), cimagf (cc)); cc = conjf (ca); fprintf (stdout, "conjf : %f %fi\n", crealf (cc), cimagf (cc)); cc = cpowf (ca, cb); fprintf (stdout, "cpowf : %f %fi\n", crealf (cc), cimagf (cc)); cc = cprojf (ca); fprintf (stdout, "cprojf : %f %fi\n", crealf (cc), cimagf (cc)); f1 = crealf (ca); fprintf (stdout, "crealf : %f\n", f1); cc = csinf (ca); fprintf (stdout, "csinf : %f %fi\n", crealf (cc), cimagf (cc)); cc = csinhf (ca); fprintf (stdout, "csinhf : %f %fi\n", crealf (cc), cimagf (cc)); cc = csqrtf (ca); fprintf (stdout, "csqrtf : %f %fi\n", crealf (cc), cimagf (cc)); cc = ctanf (ca); fprintf (stdout, "ctanf : %f %fi\n", crealf (cc), cimagf (cc)); cc = ctanhf (ca); fprintf (stdout, "ctanhf : %f %fi\n", crealf (cc), cimagf (cc)); #endif }
void init_A_TE_9p_pml(struct PML_AC *PML_AC, struct matTE *matTE, struct waveAC *waveAC){ extern int NX, NY, NONZERO; extern float DH, S; /* local variables */ int i, j, k; complex float tmp, Omega2, Omega, epse; //complex float tmpA, tmpB, tmpC; complex float dyp, dym, dxp, dxm, dx0, dy0; float a, b, c, d, e, idh2, damp, mu0; //SuiteSparse_long count; int count, ishift; damp = 0.0; /* define FD parameters */ a = 0.6287326; b = 0.3712667; c = 1 - a - b; b = 0.25 * b; c = 0.25 * c; d = 0.4382634; e = 1 - d; idh2 = 1.0/(DH*DH); /* assemble impedance matrix */ k=0; /* index of main diagonal */ count=0; /* count non-zero elements */ /* set squared complex angular frequency*/ Omega = 2.0 * M_PI * ((*waveAC).freq + S * I); Omega2 = cpowf(2.0 * M_PI * ((*waveAC).freq + S * I),2.0); /* define magnetic permeability mu0 */ mu0 = 4.0 * M_PI * 1e-7; for (j=1;j<=NY;j++){ for (i=1;i<=NX;i++){ /* store PML parameters */ dy0 = (*PML_AC).dampyr[j] + (*PML_AC).dampyi[j] * I; dx0 = (*PML_AC).dampxr[i] + (*PML_AC).dampxi[i] * I; dyp = (*PML_AC).dampyhr[j] + (*PML_AC).dampyhi[j] * I; dym = (*PML_AC).dampyhr[j-1] + (*PML_AC).dampyhi[j-1] * I; dxp = (*PML_AC).dampxhr[i] + (*PML_AC).dampxhi[i] * I; dxm = (*PML_AC).dampxhr[i-1] + (*PML_AC).dampxhi[i-1] * I; /* NW gridpoint */ if((i > 1) && (j > 1)){ epse = (*matTE).epsilon[j-1][i-1] + ((*matTE).sigma[j-1][i-1] / Omega) * I; tmp = c * (Omega2 * mu0 * epse) + d * ( 0.25 * idh2 * dy0 * dym +0.25 * idh2 * dx0 * dxm); (*waveAC).Ar[count] = creal(tmp); (*waveAC).Ai[count] = cimag(tmp); (*waveAC).irow[count] = k; (*waveAC).icol[count] = k - 1 - NX; count++; } /* N gridpoint */ if(j > 1){ epse = (*matTE).epsilon[j-1][i] + ((*matTE).sigma[j-1][i] / Omega) * I; tmp = b * (Omega2 * mu0 * epse) + d * ( 0.25 * idh2 * dy0 * (2.0*dym) +0.25 * idh2 * dx0 * (-dxp-dxm)) + e * (dy0 * idh2 * dym); tmp += - damp * tmp; (*waveAC).Ar[count] = creal(tmp); (*waveAC).Ai[count] = cimag(tmp); (*waveAC).irow[count] = k; (*waveAC).icol[count] = k - NX; count++; } /* NE gridpoint */ if((i < NX) && (j > 1)){ epse = (*matTE).epsilon[j-1][i+1] + ((*matTE).sigma[j-1][i+1] / Omega) * I; tmp = c * (Omega2 * mu0 * epse) + d * ( 0.25 * idh2 * dy0 * dym +0.25 * idh2 * dx0 * dxp); (*waveAC).Ar[count] = creal(tmp); (*waveAC).Ai[count] = cimag(tmp); (*waveAC).irow[count] = k; (*waveAC).icol[count] = k + 1 - NX; count++; } /* W gridpoint */ if(i > 1){ epse = (*matTE).epsilon[j][i-1] + ((*matTE).sigma[j][i-1] / Omega) * I; tmp = b * (Omega2 * mu0 * epse) + d * ( 0.25 * idh2 * dy0 * (-dyp-dym) +0.25 * idh2 * dx0 * (2.0*dxm)) + e * (dx0 * idh2 * dxm); tmp += - damp * tmp; (*waveAC).Ar[count] = creal(tmp); (*waveAC).Ai[count] = cimag(tmp); (*waveAC).irow[count] = k; (*waveAC).icol[count] = k-1; count++; } /* central gridpoint */ epse = (*matTE).epsilon[j][i] + ((*matTE).sigma[j][i] / Omega) * I; tmp = a * (Omega2 * mu0 * epse) + d * (-0.25 * idh2 * dy0 * (dyp + dym + dyp + dym) -0.25 * idh2 * dx0 * (dxm + dxp + dxp + dxm)) + e * (-dy0 * idh2 * (dyp + dym) - dx0 * idh2 * (dxp+dxm)); tmp += damp * 4.0 * tmp; (*waveAC).Ar[count] = creal(tmp); (*waveAC).Ai[count] = cimag(tmp); (*waveAC).irow[count] = k; (*waveAC).icol[count] = k; count++; /* E gridpoint */ if(i < NX){ epse = (*matTE).epsilon[j][i+1] + ((*matTE).sigma[j][i+1] / Omega) * I; tmp = b * (Omega2 * mu0 * epse) + d * ( 0.25 * idh2 * dy0 * (-dym-dyp) +0.25 * idh2 * dx0 * (dxp+dxp)) + e * (dx0 * idh2 * dxp); tmp += - damp * tmp; (*waveAC).Ar[count] = creal(tmp); (*waveAC).Ai[count] = cimag(tmp); (*waveAC).irow[count] = k; (*waveAC).icol[count] = k + 1; count++; } /* SW gridpoint */ if( (j < NY) && (i > 1) ){ epse = (*matTE).epsilon[j+1][i-1] + ((*matTE).sigma[j+1][i-1] / Omega) * I; tmp = c * (Omega2 * mu0 * epse) + d * ( 0.25 * idh2 * dy0 * dyp +0.25 * idh2 * dx0 * dxm); (*waveAC).Ar[count] = creal(tmp); (*waveAC).Ai[count] = cimag(tmp); (*waveAC).irow[count] = k; (*waveAC).icol[count] = k - 1 + NX; count++; } /* S gridpoint */ if(j < NY){ epse = (*matTE).epsilon[j+1][i] + ((*matTE).sigma[j+1][i] / Omega) * I; tmp = b * (Omega2 * mu0 * epse) + d * (0.25 * idh2 * dy0 * (dyp+dyp) + 0.25 * idh2 * dx0 * (-dxm-dxp)) + e * (dy0 * idh2 * dyp); tmp += -damp * tmp; (*waveAC).Ar[count] = creal(tmp); (*waveAC).Ai[count] = cimag(tmp); (*waveAC).irow[count] = k; (*waveAC).icol[count] = k + NX; count++; } /* SE gridpoint */ if((i < NX) && (j < NY)) { epse = (*matTE).epsilon[j+1][i+1] + ((*matTE).sigma[j+1][i+1] / Omega) * I; tmp = c * (Omega2 * mu0 * epse) + d * ( 0.25 * idh2 * dy0 * dyp +0.25 * idh2 * dx0 * dxp); (*waveAC).Ar[count] = creal(tmp); (*waveAC).Ai[count] = cimag(tmp); (*waveAC).irow[count] = k; (*waveAC).icol[count] = k + 1 + NX; count++; } k++; } } }