kopia lustrzana https://github.com/Dsplib/libdspl-2.0
added conv_fft_cmplx
rodzic
e225ac24c2
commit
8fd70fa80a
155
dspl/src/conv.c
155
dspl/src/conv.c
|
@ -26,42 +26,45 @@
|
|||
|
||||
|
||||
|
||||
/**************************************************************************************************
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
Real vectors linear convolution
|
||||
***************************************************************************************************/
|
||||
*******************************************************************************/
|
||||
int DSPL_API conv(double* a, int na, double* b, int nb, double* c)
|
||||
{
|
||||
int k;
|
||||
int n;
|
||||
|
||||
double *t;
|
||||
size_t bufsize;
|
||||
double *t;
|
||||
size_t bufsize;
|
||||
|
||||
if(!a || !b || !c)
|
||||
return ERROR_PTR;
|
||||
if(na < 1 || nb < 1)
|
||||
return ERROR_SIZE;
|
||||
if(!a || !b || !c)
|
||||
return ERROR_PTR;
|
||||
if(na < 1 || nb < 1)
|
||||
return ERROR_SIZE;
|
||||
|
||||
|
||||
bufsize = (na + nb - 1) * sizeof(double);
|
||||
bufsize = (na + nb - 1) * sizeof(double);
|
||||
|
||||
if((a != c) && (b != c))
|
||||
if((a != c) && (b != c))
|
||||
t = c;
|
||||
else
|
||||
t = (double*)malloc(bufsize);
|
||||
|
||||
memset(t, 0, bufsize);
|
||||
|
||||
memset(t, 0, bufsize);
|
||||
|
||||
for(k = 0; k < na; k++)
|
||||
for(n = 0; n < nb; n++)
|
||||
t[k+n] += a[k]*b[n];
|
||||
|
||||
if(t!=c)
|
||||
if(t!=c)
|
||||
{
|
||||
memcpy(c, t, bufsize);
|
||||
free(t);
|
||||
}
|
||||
return RES_OK;
|
||||
return RES_OK;
|
||||
}
|
||||
|
||||
|
||||
|
@ -77,33 +80,33 @@ int DSPL_API conv_cmplx(complex_t* a, int na, complex_t* b, int nb, complex_t* c
|
|||
int k;
|
||||
int n;
|
||||
|
||||
complex_t *t;
|
||||
complex_t *t;
|
||||
size_t bufsize;
|
||||
|
||||
if(!a || !b || !c)
|
||||
return ERROR_PTR;
|
||||
if(na < 1 || nb < 1)
|
||||
return ERROR_SIZE;
|
||||
if(!a || !b || !c)
|
||||
return ERROR_PTR;
|
||||
if(na < 1 || nb < 1)
|
||||
return ERROR_SIZE;
|
||||
|
||||
bufsize = (na + nb - 1) * sizeof(complex_t);
|
||||
bufsize = (na + nb - 1) * sizeof(complex_t);
|
||||
|
||||
if((a != c) && (b != c))
|
||||
if((a != c) && (b != c))
|
||||
t = c;
|
||||
else
|
||||
t = (complex_t*)malloc(bufsize);
|
||||
|
||||
memset(t, 0, bufsize);
|
||||
memset(t, 0, bufsize);
|
||||
|
||||
for(k = 0; k < na; k++)
|
||||
{
|
||||
{
|
||||
for(n = 0; n < nb; n++)
|
||||
{
|
||||
{
|
||||
RE(t[k+n]) += CMRE(a[k], b[n]);
|
||||
IM(t[k+n]) += CMIM(a[k], b[n]);
|
||||
}
|
||||
}
|
||||
IM(t[k+n]) += CMIM(a[k], b[n]);
|
||||
}
|
||||
}
|
||||
|
||||
if(t!=c)
|
||||
if(t!=c)
|
||||
{
|
||||
memcpy(c, t, bufsize);
|
||||
free(t);
|
||||
|
@ -116,9 +119,101 @@ int DSPL_API conv_cmplx(complex_t* a, int na, complex_t* b, int nb, complex_t* c
|
|||
|
||||
|
||||
|
||||
/**************************************************************************************************
|
||||
|
||||
/*******************************************************************************
|
||||
Complex vectors FFT linear convolution
|
||||
******************************************************************************/
|
||||
int DSPL_API conv_fft_cmplx(complex_t* a, int na, complex_t* b, int nb,
|
||||
fft_t* pfft, complex_t* c)
|
||||
{
|
||||
complex_t *pa = NULL;
|
||||
complex_t *pb = NULL;
|
||||
complex_t *pc = NULL;
|
||||
complex_t *pA = NULL;
|
||||
complex_t *pB = NULL;
|
||||
complex_t *pC = NULL;
|
||||
|
||||
int nfft, nfft2, n, npos;
|
||||
|
||||
|
||||
nfft = 4;
|
||||
n = nb-1;
|
||||
while(n>>=1)
|
||||
nfft <<= 1;
|
||||
nfft2 = nfft >> 1;
|
||||
|
||||
pa = (complex_t*)malloc(nfft * sizeof(complex_t));
|
||||
pb = (complex_t*)malloc(nfft * sizeof(complex_t));
|
||||
pc = (complex_t*)malloc(nfft * sizeof(complex_t));
|
||||
pA = (complex_t*)malloc(nfft * sizeof(complex_t));
|
||||
pB = (complex_t*)malloc(nfft * sizeof(complex_t));
|
||||
pC = (complex_t*)malloc(nfft * sizeof(complex_t));
|
||||
|
||||
npos = -nfft2;
|
||||
memset(pa, 0, nfft*sizeof(complex_t));
|
||||
memset(pb, 0, nfft*sizeof(complex_t));
|
||||
|
||||
memcpy(pa + nfft2, a, nfft2*sizeof(complex_t));
|
||||
memcpy(pb, b, nb*sizeof(complex_t));
|
||||
|
||||
fft_cmplx(pa, nfft, pfft, pA);
|
||||
fft_cmplx(pb, nfft, pfft, pB);
|
||||
for(n = 0; n < nfft2; n++)
|
||||
{
|
||||
RE(pC[n]) = CMRE(pA[n], pB[n]);
|
||||
IM(pC[n]) = -CMIM(pA[n], pB[n]);
|
||||
}
|
||||
|
||||
ifft_cmplx(pC, nfft, pfft, pc);
|
||||
memcpy(c, pc+nfft2, nfft2*sizeof(complex_t));
|
||||
|
||||
npos = 0;
|
||||
while(npos < na)
|
||||
{
|
||||
if(npos+nfft > na)
|
||||
{
|
||||
memset(pa, 0, nfft * sizeof(complex_t));
|
||||
memcpy(pa, a+npos, (na - npos) * sizeof(complex_t));
|
||||
fft_cmplx(pa, nfft, pfft, pA);
|
||||
}
|
||||
else
|
||||
fft_cmplx(a+npos, nfft, pfft, pA);
|
||||
|
||||
for(n = 0; n < nfft2; n++)
|
||||
{
|
||||
RE(pC[n]) = CMRE(pA[n], pB[n]);
|
||||
IM(pC[n]) = -CMIM(pA[n], pB[n]);
|
||||
}
|
||||
|
||||
ifft_cmplx(pC, nfft, pfft, pc);
|
||||
|
||||
if(npos+nfft <= na+nb-1)
|
||||
memcpy(c+npos+nfft2, pc+nfft2, nfft2*sizeof(complex_t));
|
||||
else
|
||||
{
|
||||
memcpy(c+npos+nfft2, pc+nfft2,
|
||||
(na+nb-1-npos-nfft2)*sizeof(complex_t));
|
||||
}
|
||||
npos+=nfft2;
|
||||
}
|
||||
|
||||
if(pa) free(pa);
|
||||
if(pb) free(pb);
|
||||
if(pc) free(pc);
|
||||
if(pA) free(pA);
|
||||
if(pB) free(pB);
|
||||
if(pB) free(pC);
|
||||
|
||||
return RES_OK;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
IIR FILTER for real vector
|
||||
**************************************************************************************************/
|
||||
*******************************************************************************/
|
||||
int DSPL_API filter_iir(double* b, double* a, int ord, double* x, int n, double* y)
|
||||
{
|
||||
double* buf = NULL;
|
||||
|
|
244
include/dspl.c
244
include/dspl.c
|
@ -35,63 +35,64 @@
|
|||
|
||||
#ifndef BUILD_LIB
|
||||
|
||||
p_acos_cmplx acos_cmplx ;
|
||||
p_asin_cmplx asin_cmplx ;
|
||||
p_butter_ap butter_ap ;
|
||||
p_butter_ap_zp butter_ap_zp ;
|
||||
p_cheby_poly1 cheby_poly1 ;
|
||||
p_cheby_poly2 cheby_poly2 ;
|
||||
p_cheby1_ap cheby1_ap ;
|
||||
p_cheby1_ap_zp cheby1_ap_zp ;
|
||||
p_cheby2_ap_zp cheby2_ap_zp ;
|
||||
p_cmplx2re cmplx2re ;
|
||||
p_concat concat ;
|
||||
p_conv conv ;
|
||||
p_conv_cmplx conv_cmplx ;
|
||||
p_cos_cmplx cos_cmplx ;
|
||||
p_dft dft ;
|
||||
p_dft_cmplx dft_cmplx ;
|
||||
p_dmod dmod ;
|
||||
p_idft_cmplx idft_cmplx ;
|
||||
p_ifft_cmplx ifft_cmplx ;
|
||||
p_dspl_info dspl_info ;
|
||||
p_farrow_lagrange farrow_lagrange ;
|
||||
p_farrow_spline farrow_spline ;
|
||||
p_filter_iir filter_iir ;
|
||||
p_filter_zp2ab filter_zp2ab ;
|
||||
p_fft fft ;
|
||||
p_fft_cmplx fft_cmplx ;
|
||||
p_fft_create fft_create ;
|
||||
p_fft_free fft_free ;
|
||||
p_fft_shift fft_shift ;
|
||||
p_fft_shift_cmplx fft_shift_cmplx ;
|
||||
p_flipip flipip ;
|
||||
p_flipip_cmplx flipip_cmplx ;
|
||||
p_fourier_series_dec fourier_series_dec ;
|
||||
p_fourier_series_rec fourier_series_rec ;
|
||||
p_freqs freqs ;
|
||||
p_freqs_resp freqs_resp ;
|
||||
p_freqs2time freqs2time ;
|
||||
p_freqz freqz ;
|
||||
p_goertzel goertzel ;
|
||||
p_goertzel_cmplx goertzel_cmplx ;
|
||||
p_linspace linspace ;
|
||||
p_log_cmplx log_cmplx ;
|
||||
p_logspace logspace ;
|
||||
p_poly_z2a_cmplx poly_z2a_cmplx ;
|
||||
p_polyval polyval ;
|
||||
p_polyval_cmplx polyval_cmplx ;
|
||||
p_randn randn ;
|
||||
p_randu randu ;
|
||||
p_re2cmplx re2cmplx ;
|
||||
p_signal_pimp signal_pimp ;
|
||||
p_sin_cmplx sin_cmplx ;
|
||||
p_sqrt_cmplx sqrt_cmplx ;
|
||||
p_trapint trapint ;
|
||||
p_trapint_cmplx trapint_cmplx ;
|
||||
p_unwrap unwrap ;
|
||||
p_writebin writebin ;
|
||||
p_writetxt writetxt ;
|
||||
p_acos_cmplx acos_cmplx ;
|
||||
p_asin_cmplx asin_cmplx ;
|
||||
p_butter_ap butter_ap ;
|
||||
p_butter_ap_zp butter_ap_zp ;
|
||||
p_cheby_poly1 cheby_poly1 ;
|
||||
p_cheby_poly2 cheby_poly2 ;
|
||||
p_cheby1_ap cheby1_ap ;
|
||||
p_cheby1_ap_zp cheby1_ap_zp ;
|
||||
p_cheby2_ap_zp cheby2_ap_zp ;
|
||||
p_cmplx2re cmplx2re ;
|
||||
p_concat concat ;
|
||||
p_conv conv ;
|
||||
p_conv_cmplx conv_cmplx ;
|
||||
p_conv_fft_cmplx conv_fft_cmplx ;
|
||||
p_cos_cmplx cos_cmplx ;
|
||||
p_dft dft ;
|
||||
p_dft_cmplx dft_cmplx ;
|
||||
p_dmod dmod ;
|
||||
p_idft_cmplx idft_cmplx ;
|
||||
p_ifft_cmplx ifft_cmplx ;
|
||||
p_dspl_info dspl_info ;
|
||||
p_farrow_lagrange farrow_lagrange ;
|
||||
p_farrow_spline farrow_spline ;
|
||||
p_filter_iir filter_iir ;
|
||||
p_filter_zp2ab filter_zp2ab ;
|
||||
p_fft fft ;
|
||||
p_fft_cmplx fft_cmplx ;
|
||||
p_fft_create fft_create ;
|
||||
p_fft_free fft_free ;
|
||||
p_fft_shift fft_shift ;
|
||||
p_fft_shift_cmplx fft_shift_cmplx ;
|
||||
p_flipip flipip ;
|
||||
p_flipip_cmplx flipip_cmplx ;
|
||||
p_fourier_series_dec fourier_series_dec ;
|
||||
p_fourier_series_rec fourier_series_rec ;
|
||||
p_freqs freqs ;
|
||||
p_freqs_resp freqs_resp ;
|
||||
p_freqs2time freqs2time ;
|
||||
p_freqz freqz ;
|
||||
p_goertzel goertzel ;
|
||||
p_goertzel_cmplx goertzel_cmplx ;
|
||||
p_linspace linspace ;
|
||||
p_log_cmplx log_cmplx ;
|
||||
p_logspace logspace ;
|
||||
p_poly_z2a_cmplx poly_z2a_cmplx ;
|
||||
p_polyval polyval ;
|
||||
p_polyval_cmplx polyval_cmplx ;
|
||||
p_randn randn ;
|
||||
p_randu randu ;
|
||||
p_re2cmplx re2cmplx ;
|
||||
p_signal_pimp signal_pimp ;
|
||||
p_sin_cmplx sin_cmplx ;
|
||||
p_sqrt_cmplx sqrt_cmplx ;
|
||||
p_trapint trapint ;
|
||||
p_trapint_cmplx trapint_cmplx ;
|
||||
p_unwrap unwrap ;
|
||||
p_writebin writebin ;
|
||||
p_writetxt writetxt ;
|
||||
|
||||
#endif //BUILD_LIB
|
||||
|
||||
|
@ -119,7 +120,7 @@ p_writetxt writetxt ;
|
|||
|
||||
void* dspl_load()
|
||||
{
|
||||
char* fname;
|
||||
char* fname;
|
||||
#ifdef WIN_OS
|
||||
HINSTANCE handle;
|
||||
handle = LoadLibrary(TEXT("libdspl.dll"));
|
||||
|
@ -128,10 +129,10 @@ void* dspl_load()
|
|||
printf("libdspl.dll loading ERROR!\n");
|
||||
return NULL;
|
||||
}
|
||||
#endif //WIN_OS
|
||||
#endif //WIN_OS
|
||||
|
||||
|
||||
#ifdef LINUX_OS
|
||||
#ifdef LINUX_OS
|
||||
char* error;
|
||||
void *handle;
|
||||
// open the *.so
|
||||
|
@ -141,68 +142,69 @@ void* dspl_load()
|
|||
printf("libdspl.so loading ERROR!\n");
|
||||
return NULL;
|
||||
}
|
||||
#endif //LINUX_OS
|
||||
#endif //LINUX_OS
|
||||
|
||||
LOAD_FUNC(acos_cmplx);
|
||||
LOAD_FUNC(asin_cmplx);
|
||||
LOAD_FUNC(butter_ap);
|
||||
LOAD_FUNC(butter_ap_zp);
|
||||
LOAD_FUNC(cheby_poly1);
|
||||
LOAD_FUNC(cheby_poly2);
|
||||
LOAD_FUNC(cheby1_ap);
|
||||
LOAD_FUNC(cheby1_ap_zp);
|
||||
LOAD_FUNC(cheby2_ap_zp);
|
||||
LOAD_FUNC(cmplx2re);
|
||||
LOAD_FUNC(concat);
|
||||
LOAD_FUNC(conv);
|
||||
LOAD_FUNC(conv_cmplx);
|
||||
LOAD_FUNC(cos_cmplx);
|
||||
LOAD_FUNC(dft);
|
||||
LOAD_FUNC(dft_cmplx);
|
||||
LOAD_FUNC(dmod);
|
||||
LOAD_FUNC(idft_cmplx);
|
||||
LOAD_FUNC(ifft_cmplx);
|
||||
LOAD_FUNC(dspl_info);
|
||||
LOAD_FUNC(farrow_lagrange);
|
||||
LOAD_FUNC(farrow_spline);
|
||||
LOAD_FUNC(filter_iir);
|
||||
LOAD_FUNC(filter_zp2ab);
|
||||
LOAD_FUNC(fft);
|
||||
LOAD_FUNC(fft_cmplx);
|
||||
LOAD_FUNC(fft_create);
|
||||
LOAD_FUNC(fft_free);
|
||||
LOAD_FUNC(fft_shift);
|
||||
LOAD_FUNC(fft_shift_cmplx);
|
||||
LOAD_FUNC(flipip);
|
||||
LOAD_FUNC(flipip_cmplx);
|
||||
LOAD_FUNC(fourier_series_dec);
|
||||
LOAD_FUNC(fourier_series_rec);
|
||||
LOAD_FUNC(freqz);
|
||||
LOAD_FUNC(freqs);
|
||||
LOAD_FUNC(freqs_resp);
|
||||
LOAD_FUNC(freqs2time);
|
||||
LOAD_FUNC(goertzel);
|
||||
LOAD_FUNC(goertzel_cmplx);
|
||||
LOAD_FUNC(linspace);
|
||||
LOAD_FUNC(log_cmplx);
|
||||
LOAD_FUNC(logspace);
|
||||
LOAD_FUNC(poly_z2a_cmplx);
|
||||
LOAD_FUNC(polyval);
|
||||
LOAD_FUNC(polyval_cmplx);
|
||||
LOAD_FUNC(randn);
|
||||
LOAD_FUNC(randu);
|
||||
LOAD_FUNC(re2cmplx);
|
||||
LOAD_FUNC(signal_pimp);
|
||||
LOAD_FUNC(sin_cmplx);
|
||||
LOAD_FUNC(sqrt_cmplx);
|
||||
LOAD_FUNC(trapint);
|
||||
LOAD_FUNC(trapint_cmplx);
|
||||
LOAD_FUNC(unwrap);
|
||||
LOAD_FUNC(writebin);
|
||||
LOAD_FUNC(writetxt);
|
||||
|
||||
|
||||
#ifdef WIN_OS
|
||||
LOAD_FUNC(acos_cmplx);
|
||||
LOAD_FUNC(asin_cmplx);
|
||||
LOAD_FUNC(butter_ap);
|
||||
LOAD_FUNC(butter_ap_zp);
|
||||
LOAD_FUNC(cheby_poly1);
|
||||
LOAD_FUNC(cheby_poly2);
|
||||
LOAD_FUNC(cheby1_ap);
|
||||
LOAD_FUNC(cheby1_ap_zp);
|
||||
LOAD_FUNC(cheby2_ap_zp);
|
||||
LOAD_FUNC(cmplx2re);
|
||||
LOAD_FUNC(concat);
|
||||
LOAD_FUNC(conv);
|
||||
LOAD_FUNC(conv_cmplx);
|
||||
LOAD_FUNC(conv_fft_cmplx);
|
||||
LOAD_FUNC(cos_cmplx);
|
||||
LOAD_FUNC(dft);
|
||||
LOAD_FUNC(dft_cmplx);
|
||||
LOAD_FUNC(dmod);
|
||||
LOAD_FUNC(idft_cmplx);
|
||||
LOAD_FUNC(ifft_cmplx);
|
||||
LOAD_FUNC(dspl_info);
|
||||
LOAD_FUNC(farrow_lagrange);
|
||||
LOAD_FUNC(farrow_spline);
|
||||
LOAD_FUNC(filter_iir);
|
||||
LOAD_FUNC(filter_zp2ab);
|
||||
LOAD_FUNC(fft);
|
||||
LOAD_FUNC(fft_cmplx);
|
||||
LOAD_FUNC(fft_create);
|
||||
LOAD_FUNC(fft_free);
|
||||
LOAD_FUNC(fft_shift);
|
||||
LOAD_FUNC(fft_shift_cmplx);
|
||||
LOAD_FUNC(flipip);
|
||||
LOAD_FUNC(flipip_cmplx);
|
||||
LOAD_FUNC(fourier_series_dec);
|
||||
LOAD_FUNC(fourier_series_rec);
|
||||
LOAD_FUNC(freqz);
|
||||
LOAD_FUNC(freqs);
|
||||
LOAD_FUNC(freqs_resp);
|
||||
LOAD_FUNC(freqs2time);
|
||||
LOAD_FUNC(goertzel);
|
||||
LOAD_FUNC(goertzel_cmplx);
|
||||
LOAD_FUNC(linspace);
|
||||
LOAD_FUNC(log_cmplx);
|
||||
LOAD_FUNC(logspace);
|
||||
LOAD_FUNC(poly_z2a_cmplx);
|
||||
LOAD_FUNC(polyval);
|
||||
LOAD_FUNC(polyval_cmplx);
|
||||
LOAD_FUNC(randn);
|
||||
LOAD_FUNC(randu);
|
||||
LOAD_FUNC(re2cmplx);
|
||||
LOAD_FUNC(signal_pimp);
|
||||
LOAD_FUNC(sin_cmplx);
|
||||
LOAD_FUNC(sqrt_cmplx);
|
||||
LOAD_FUNC(trapint);
|
||||
LOAD_FUNC(trapint_cmplx);
|
||||
LOAD_FUNC(unwrap);
|
||||
LOAD_FUNC(writebin);
|
||||
LOAD_FUNC(writetxt);
|
||||
|
||||
|
||||
#ifdef WIN_OS
|
||||
return (void*)handle;
|
||||
exit_label:
|
||||
printf("function %s loading ERROR!\n", fname);
|
||||
|
|
|
@ -271,6 +271,13 @@ DECLARE_FUNC(int, conv_cmplx, complex_t*
|
|||
COMMA int
|
||||
COMMA complex_t*);
|
||||
//------------------------------------------------------------------------------
|
||||
DECLARE_FUNC(int, conv_fft_cmplx, complex_t* a
|
||||
COMMA int na
|
||||
COMMA complex_t* b
|
||||
COMMA int nb
|
||||
COMMA fft_t* pfft
|
||||
COMMA complex_t* c);
|
||||
//------------------------------------------------------------------------------
|
||||
DECLARE_FUNC(int, cos_cmplx, complex_t*
|
||||
COMMA int
|
||||
COMMA complex_t*);
|
||||
|
|
|
@ -35,63 +35,64 @@
|
|||
|
||||
#ifndef BUILD_LIB
|
||||
|
||||
p_acos_cmplx acos_cmplx ;
|
||||
p_asin_cmplx asin_cmplx ;
|
||||
p_butter_ap butter_ap ;
|
||||
p_butter_ap_zp butter_ap_zp ;
|
||||
p_cheby_poly1 cheby_poly1 ;
|
||||
p_cheby_poly2 cheby_poly2 ;
|
||||
p_cheby1_ap cheby1_ap ;
|
||||
p_cheby1_ap_zp cheby1_ap_zp ;
|
||||
p_cheby2_ap_zp cheby2_ap_zp ;
|
||||
p_cmplx2re cmplx2re ;
|
||||
p_concat concat ;
|
||||
p_conv conv ;
|
||||
p_conv_cmplx conv_cmplx ;
|
||||
p_cos_cmplx cos_cmplx ;
|
||||
p_dft dft ;
|
||||
p_dft_cmplx dft_cmplx ;
|
||||
p_dmod dmod ;
|
||||
p_idft_cmplx idft_cmplx ;
|
||||
p_ifft_cmplx ifft_cmplx ;
|
||||
p_dspl_info dspl_info ;
|
||||
p_farrow_lagrange farrow_lagrange ;
|
||||
p_farrow_spline farrow_spline ;
|
||||
p_filter_iir filter_iir ;
|
||||
p_filter_zp2ab filter_zp2ab ;
|
||||
p_fft fft ;
|
||||
p_fft_cmplx fft_cmplx ;
|
||||
p_fft_create fft_create ;
|
||||
p_fft_free fft_free ;
|
||||
p_fft_shift fft_shift ;
|
||||
p_fft_shift_cmplx fft_shift_cmplx ;
|
||||
p_flipip flipip ;
|
||||
p_flipip_cmplx flipip_cmplx ;
|
||||
p_fourier_series_dec fourier_series_dec ;
|
||||
p_fourier_series_rec fourier_series_rec ;
|
||||
p_freqs freqs ;
|
||||
p_freqs_resp freqs_resp ;
|
||||
p_freqs2time freqs2time ;
|
||||
p_freqz freqz ;
|
||||
p_goertzel goertzel ;
|
||||
p_goertzel_cmplx goertzel_cmplx ;
|
||||
p_linspace linspace ;
|
||||
p_log_cmplx log_cmplx ;
|
||||
p_logspace logspace ;
|
||||
p_poly_z2a_cmplx poly_z2a_cmplx ;
|
||||
p_polyval polyval ;
|
||||
p_polyval_cmplx polyval_cmplx ;
|
||||
p_randn randn ;
|
||||
p_randu randu ;
|
||||
p_re2cmplx re2cmplx ;
|
||||
p_signal_pimp signal_pimp ;
|
||||
p_sin_cmplx sin_cmplx ;
|
||||
p_sqrt_cmplx sqrt_cmplx ;
|
||||
p_trapint trapint ;
|
||||
p_trapint_cmplx trapint_cmplx ;
|
||||
p_unwrap unwrap ;
|
||||
p_writebin writebin ;
|
||||
p_writetxt writetxt ;
|
||||
p_acos_cmplx acos_cmplx ;
|
||||
p_asin_cmplx asin_cmplx ;
|
||||
p_butter_ap butter_ap ;
|
||||
p_butter_ap_zp butter_ap_zp ;
|
||||
p_cheby_poly1 cheby_poly1 ;
|
||||
p_cheby_poly2 cheby_poly2 ;
|
||||
p_cheby1_ap cheby1_ap ;
|
||||
p_cheby1_ap_zp cheby1_ap_zp ;
|
||||
p_cheby2_ap_zp cheby2_ap_zp ;
|
||||
p_cmplx2re cmplx2re ;
|
||||
p_concat concat ;
|
||||
p_conv conv ;
|
||||
p_conv_cmplx conv_cmplx ;
|
||||
p_conv_fft_cmplx conv_fft_cmplx ;
|
||||
p_cos_cmplx cos_cmplx ;
|
||||
p_dft dft ;
|
||||
p_dft_cmplx dft_cmplx ;
|
||||
p_dmod dmod ;
|
||||
p_idft_cmplx idft_cmplx ;
|
||||
p_ifft_cmplx ifft_cmplx ;
|
||||
p_dspl_info dspl_info ;
|
||||
p_farrow_lagrange farrow_lagrange ;
|
||||
p_farrow_spline farrow_spline ;
|
||||
p_filter_iir filter_iir ;
|
||||
p_filter_zp2ab filter_zp2ab ;
|
||||
p_fft fft ;
|
||||
p_fft_cmplx fft_cmplx ;
|
||||
p_fft_create fft_create ;
|
||||
p_fft_free fft_free ;
|
||||
p_fft_shift fft_shift ;
|
||||
p_fft_shift_cmplx fft_shift_cmplx ;
|
||||
p_flipip flipip ;
|
||||
p_flipip_cmplx flipip_cmplx ;
|
||||
p_fourier_series_dec fourier_series_dec ;
|
||||
p_fourier_series_rec fourier_series_rec ;
|
||||
p_freqs freqs ;
|
||||
p_freqs_resp freqs_resp ;
|
||||
p_freqs2time freqs2time ;
|
||||
p_freqz freqz ;
|
||||
p_goertzel goertzel ;
|
||||
p_goertzel_cmplx goertzel_cmplx ;
|
||||
p_linspace linspace ;
|
||||
p_log_cmplx log_cmplx ;
|
||||
p_logspace logspace ;
|
||||
p_poly_z2a_cmplx poly_z2a_cmplx ;
|
||||
p_polyval polyval ;
|
||||
p_polyval_cmplx polyval_cmplx ;
|
||||
p_randn randn ;
|
||||
p_randu randu ;
|
||||
p_re2cmplx re2cmplx ;
|
||||
p_signal_pimp signal_pimp ;
|
||||
p_sin_cmplx sin_cmplx ;
|
||||
p_sqrt_cmplx sqrt_cmplx ;
|
||||
p_trapint trapint ;
|
||||
p_trapint_cmplx trapint_cmplx ;
|
||||
p_unwrap unwrap ;
|
||||
p_writebin writebin ;
|
||||
p_writetxt writetxt ;
|
||||
|
||||
#endif //BUILD_LIB
|
||||
|
||||
|
@ -119,7 +120,7 @@ p_writetxt writetxt ;
|
|||
|
||||
void* dspl_load()
|
||||
{
|
||||
char* fname;
|
||||
char* fname;
|
||||
#ifdef WIN_OS
|
||||
HINSTANCE handle;
|
||||
handle = LoadLibrary(TEXT("libdspl.dll"));
|
||||
|
@ -128,10 +129,10 @@ void* dspl_load()
|
|||
printf("libdspl.dll loading ERROR!\n");
|
||||
return NULL;
|
||||
}
|
||||
#endif //WIN_OS
|
||||
#endif //WIN_OS
|
||||
|
||||
|
||||
#ifdef LINUX_OS
|
||||
#ifdef LINUX_OS
|
||||
char* error;
|
||||
void *handle;
|
||||
// open the *.so
|
||||
|
@ -141,68 +142,69 @@ void* dspl_load()
|
|||
printf("libdspl.so loading ERROR!\n");
|
||||
return NULL;
|
||||
}
|
||||
#endif //LINUX_OS
|
||||
#endif //LINUX_OS
|
||||
|
||||
LOAD_FUNC(acos_cmplx);
|
||||
LOAD_FUNC(asin_cmplx);
|
||||
LOAD_FUNC(butter_ap);
|
||||
LOAD_FUNC(butter_ap_zp);
|
||||
LOAD_FUNC(cheby_poly1);
|
||||
LOAD_FUNC(cheby_poly2);
|
||||
LOAD_FUNC(cheby1_ap);
|
||||
LOAD_FUNC(cheby1_ap_zp);
|
||||
LOAD_FUNC(cheby2_ap_zp);
|
||||
LOAD_FUNC(cmplx2re);
|
||||
LOAD_FUNC(concat);
|
||||
LOAD_FUNC(conv);
|
||||
LOAD_FUNC(conv_cmplx);
|
||||
LOAD_FUNC(cos_cmplx);
|
||||
LOAD_FUNC(dft);
|
||||
LOAD_FUNC(dft_cmplx);
|
||||
LOAD_FUNC(dmod);
|
||||
LOAD_FUNC(idft_cmplx);
|
||||
LOAD_FUNC(ifft_cmplx);
|
||||
LOAD_FUNC(dspl_info);
|
||||
LOAD_FUNC(farrow_lagrange);
|
||||
LOAD_FUNC(farrow_spline);
|
||||
LOAD_FUNC(filter_iir);
|
||||
LOAD_FUNC(filter_zp2ab);
|
||||
LOAD_FUNC(fft);
|
||||
LOAD_FUNC(fft_cmplx);
|
||||
LOAD_FUNC(fft_create);
|
||||
LOAD_FUNC(fft_free);
|
||||
LOAD_FUNC(fft_shift);
|
||||
LOAD_FUNC(fft_shift_cmplx);
|
||||
LOAD_FUNC(flipip);
|
||||
LOAD_FUNC(flipip_cmplx);
|
||||
LOAD_FUNC(fourier_series_dec);
|
||||
LOAD_FUNC(fourier_series_rec);
|
||||
LOAD_FUNC(freqz);
|
||||
LOAD_FUNC(freqs);
|
||||
LOAD_FUNC(freqs_resp);
|
||||
LOAD_FUNC(freqs2time);
|
||||
LOAD_FUNC(goertzel);
|
||||
LOAD_FUNC(goertzel_cmplx);
|
||||
LOAD_FUNC(linspace);
|
||||
LOAD_FUNC(log_cmplx);
|
||||
LOAD_FUNC(logspace);
|
||||
LOAD_FUNC(poly_z2a_cmplx);
|
||||
LOAD_FUNC(polyval);
|
||||
LOAD_FUNC(polyval_cmplx);
|
||||
LOAD_FUNC(randn);
|
||||
LOAD_FUNC(randu);
|
||||
LOAD_FUNC(re2cmplx);
|
||||
LOAD_FUNC(signal_pimp);
|
||||
LOAD_FUNC(sin_cmplx);
|
||||
LOAD_FUNC(sqrt_cmplx);
|
||||
LOAD_FUNC(trapint);
|
||||
LOAD_FUNC(trapint_cmplx);
|
||||
LOAD_FUNC(unwrap);
|
||||
LOAD_FUNC(writebin);
|
||||
LOAD_FUNC(writetxt);
|
||||
|
||||
|
||||
#ifdef WIN_OS
|
||||
LOAD_FUNC(acos_cmplx);
|
||||
LOAD_FUNC(asin_cmplx);
|
||||
LOAD_FUNC(butter_ap);
|
||||
LOAD_FUNC(butter_ap_zp);
|
||||
LOAD_FUNC(cheby_poly1);
|
||||
LOAD_FUNC(cheby_poly2);
|
||||
LOAD_FUNC(cheby1_ap);
|
||||
LOAD_FUNC(cheby1_ap_zp);
|
||||
LOAD_FUNC(cheby2_ap_zp);
|
||||
LOAD_FUNC(cmplx2re);
|
||||
LOAD_FUNC(concat);
|
||||
LOAD_FUNC(conv);
|
||||
LOAD_FUNC(conv_cmplx);
|
||||
LOAD_FUNC(conv_fft_cmplx);
|
||||
LOAD_FUNC(cos_cmplx);
|
||||
LOAD_FUNC(dft);
|
||||
LOAD_FUNC(dft_cmplx);
|
||||
LOAD_FUNC(dmod);
|
||||
LOAD_FUNC(idft_cmplx);
|
||||
LOAD_FUNC(ifft_cmplx);
|
||||
LOAD_FUNC(dspl_info);
|
||||
LOAD_FUNC(farrow_lagrange);
|
||||
LOAD_FUNC(farrow_spline);
|
||||
LOAD_FUNC(filter_iir);
|
||||
LOAD_FUNC(filter_zp2ab);
|
||||
LOAD_FUNC(fft);
|
||||
LOAD_FUNC(fft_cmplx);
|
||||
LOAD_FUNC(fft_create);
|
||||
LOAD_FUNC(fft_free);
|
||||
LOAD_FUNC(fft_shift);
|
||||
LOAD_FUNC(fft_shift_cmplx);
|
||||
LOAD_FUNC(flipip);
|
||||
LOAD_FUNC(flipip_cmplx);
|
||||
LOAD_FUNC(fourier_series_dec);
|
||||
LOAD_FUNC(fourier_series_rec);
|
||||
LOAD_FUNC(freqz);
|
||||
LOAD_FUNC(freqs);
|
||||
LOAD_FUNC(freqs_resp);
|
||||
LOAD_FUNC(freqs2time);
|
||||
LOAD_FUNC(goertzel);
|
||||
LOAD_FUNC(goertzel_cmplx);
|
||||
LOAD_FUNC(linspace);
|
||||
LOAD_FUNC(log_cmplx);
|
||||
LOAD_FUNC(logspace);
|
||||
LOAD_FUNC(poly_z2a_cmplx);
|
||||
LOAD_FUNC(polyval);
|
||||
LOAD_FUNC(polyval_cmplx);
|
||||
LOAD_FUNC(randn);
|
||||
LOAD_FUNC(randu);
|
||||
LOAD_FUNC(re2cmplx);
|
||||
LOAD_FUNC(signal_pimp);
|
||||
LOAD_FUNC(sin_cmplx);
|
||||
LOAD_FUNC(sqrt_cmplx);
|
||||
LOAD_FUNC(trapint);
|
||||
LOAD_FUNC(trapint_cmplx);
|
||||
LOAD_FUNC(unwrap);
|
||||
LOAD_FUNC(writebin);
|
||||
LOAD_FUNC(writetxt);
|
||||
|
||||
|
||||
#ifdef WIN_OS
|
||||
return (void*)handle;
|
||||
exit_label:
|
||||
printf("function %s loading ERROR!\n", fname);
|
||||
|
|
|
@ -271,6 +271,13 @@ DECLARE_FUNC(int, conv_cmplx, complex_t*
|
|||
COMMA int
|
||||
COMMA complex_t*);
|
||||
//------------------------------------------------------------------------------
|
||||
DECLARE_FUNC(int, conv_fft_cmplx, complex_t* a
|
||||
COMMA int na
|
||||
COMMA complex_t* b
|
||||
COMMA int nb
|
||||
COMMA fft_t* pfft
|
||||
COMMA complex_t* c);
|
||||
//------------------------------------------------------------------------------
|
||||
DECLARE_FUNC(int, cos_cmplx, complex_t*
|
||||
COMMA int
|
||||
COMMA complex_t*);
|
||||
|
|
Ładowanie…
Reference in New Issue