kopia lustrzana https://github.com/Dsplib/libdspl-2.0
added Mersene twister random generator
rodzic
7a66faf4e0
commit
89a3a34e42
|
@ -28,7 +28,7 @@ long_line_behaviour=1
|
||||||
long_line_column=72
|
long_line_column=72
|
||||||
|
|
||||||
[files]
|
[files]
|
||||||
current_page=43
|
current_page=29
|
||||||
FILE_NAME_0=463;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cexamples%5Csrc%5Ccheby_poly1_test.c;0;2
|
FILE_NAME_0=463;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cexamples%5Csrc%5Ccheby_poly1_test.c;0;2
|
||||||
FILE_NAME_1=507;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cexamples%5Csrc%5Ciir_test.c;0;2
|
FILE_NAME_1=507;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cexamples%5Csrc%5Ciir_test.c;0;2
|
||||||
FILE_NAME_2=80;None;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cexamples%5Cbin%5Cgnuplot%5Ciir_test.plt;0;2
|
FILE_NAME_2=80;None;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cexamples%5Cbin%5Cgnuplot%5Ciir_test.plt;0;2
|
||||||
|
@ -37,42 +37,28 @@ FILE_NAME_4=2672;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Cru%5Ccontent%5Cfourier_ser
|
||||||
FILE_NAME_5=0;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Cru%5Ccontent%5Cfourier_series%5Cc%5Cfourier_series_rec.c;0;2
|
FILE_NAME_5=0;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Cru%5Ccontent%5Cfourier_series%5Cc%5Cfourier_series_rec.c;0;2
|
||||||
FILE_NAME_6=714;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Carray.c;0;2
|
FILE_NAME_6=714;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Carray.c;0;2
|
||||||
FILE_NAME_7=163;C++;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cblas.h;0;2
|
FILE_NAME_7=163;C++;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cblas.h;0;2
|
||||||
FILE_NAME_8=56628;C++;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cinclude%5Cdspl.h;0;2
|
FILE_NAME_8=14081;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cinclude%5Cdspl.c;0;2
|
||||||
FILE_NAME_9=14081;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cinclude%5Cdspl.c;0;2
|
FILE_NAME_9=0;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cexamples%5Csrc%5Cmatrix_print.c;0;2
|
||||||
FILE_NAME_10=323;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cexamples%5Csrc%5Carray_test.c;0;2
|
FILE_NAME_10=11081;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cfft_subkernel.c;0;2
|
||||||
FILE_NAME_11=921;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cmatrix.c;0;2
|
FILE_NAME_11=0;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cfillarray.c;0;2
|
||||||
FILE_NAME_12=0;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cexamples%5Csrc%5Cmatrix_print.c;0;2
|
FILE_NAME_12=10893;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cfilter_an.c;0;2
|
||||||
FILE_NAME_13=0;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cexamples%5Csrc%5Cmatrix_transpose.c;0;2
|
FILE_NAME_13=872;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cfilter_ap.c;0;2
|
||||||
FILE_NAME_14=0;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cexamples%5Csrc%5Cmatrix_mul.c;0;2
|
FILE_NAME_14=4563;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cfilter_fir.c;0;2
|
||||||
FILE_NAME_15=523;Make;0;EUTF-8;1;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5CMakefile.dspl;0;2
|
FILE_NAME_15=888;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cfilter_ft.c;0;2
|
||||||
FILE_NAME_16=630;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cexamples%5Csrc%5Cmatrix_eig.c;0;2
|
FILE_NAME_16=5440;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cfilter_iir.c;0;2
|
||||||
FILE_NAME_17=47;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Ccheby.c;0;2
|
FILE_NAME_17=0;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cfourier_series.c;0;2
|
||||||
FILE_NAME_18=5878;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Ccomplex.c;0;2
|
FILE_NAME_18=0;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cgoertzel.c;0;2
|
||||||
FILE_NAME_19=17821;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cconv.c;0;2
|
FILE_NAME_19=0;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cmath.c;0;2
|
||||||
FILE_NAME_20=8338;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cdft.c;0;2
|
FILE_NAME_20=0;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cpolyval.c;0;2
|
||||||
FILE_NAME_21=8117;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cellipj.c;0;2
|
FILE_NAME_21=3739;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Crandgen.c;0;2
|
||||||
FILE_NAME_22=9969;None;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_dox%5Cru%5Cellipj.dox;0;2
|
FILE_NAME_22=5368;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cmt19937.c;0;2
|
||||||
FILE_NAME_23=909;None;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_dox%5Cru%5Carray.dox;0;2
|
FILE_NAME_23=48054;C++;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cinclude%5Cdspl.h;0;2
|
||||||
FILE_NAME_24=1074;C++;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cdspl_internal.h;0;2
|
FILE_NAME_24=2887;C++;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cmt19937.h;0;2
|
||||||
FILE_NAME_25=0;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cfft.c;0;2
|
FILE_NAME_25=623;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cexamples%5Csrc%5Cmatrix_eig.c;0;2
|
||||||
FILE_NAME_26=11081;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cfft_subkernel.c;0;2
|
FILE_NAME_26=490;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cverif%5Csrc%5Creadbin_verif.c;0;2
|
||||||
FILE_NAME_27=0;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cfillarray.c;0;2
|
FILE_NAME_27=361;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cexamples%5Csrc%5Cfilter_iir_test.c;0;2
|
||||||
FILE_NAME_28=11043;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cfilter_an.c;0;2
|
FILE_NAME_28=313;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cexamples%5Csrc%5Cdspl_info_test.c;0;2
|
||||||
FILE_NAME_29=872;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cfilter_ap.c;0;2
|
FILE_NAME_29=829;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cinout.c;0;2
|
||||||
FILE_NAME_30=4563;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cfilter_fir.c;0;2
|
|
||||||
FILE_NAME_31=888;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cfilter_ft.c;0;2
|
|
||||||
FILE_NAME_32=5440;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cfilter_iir.c;0;2
|
|
||||||
FILE_NAME_33=0;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cfourier_series.c;0;2
|
|
||||||
FILE_NAME_34=0;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cgoertzel.c;0;2
|
|
||||||
FILE_NAME_35=1042;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cinout.c;0;2
|
|
||||||
FILE_NAME_36=0;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cmath.c;0;2
|
|
||||||
FILE_NAME_37=0;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cpolyval.c;0;2
|
|
||||||
FILE_NAME_38=3428;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Crandgen.c;0;2
|
|
||||||
FILE_NAME_39=0;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cresampling.c;0;2
|
|
||||||
FILE_NAME_40=0;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Csignals.c;0;2
|
|
||||||
FILE_NAME_41=0;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cstatistic.c;0;2
|
|
||||||
FILE_NAME_42=0;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Ctrapint.c;0;2
|
|
||||||
FILE_NAME_43=9115;C;0;EUTF-8;0;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdspl_src%5Cwin.c;0;2
|
|
||||||
|
|
||||||
[build-menu]
|
[build-menu]
|
||||||
NF_00_LB=_Собрать
|
NF_00_LB=_Собрать
|
||||||
|
@ -91,7 +77,7 @@ EX_00_WD=%p/examples/bin
|
||||||
[prjorg]
|
[prjorg]
|
||||||
source_patterns=*.c;*.C;*.cpp;*.cxx;*.c++;*.cc;*.m;
|
source_patterns=*.c;*.C;*.cpp;*.cxx;*.c++;*.cc;*.m;
|
||||||
header_patterns=*.h;*.H;*.hpp;*.hxx;*.h++;*.hh;
|
header_patterns=*.h;*.H;*.hpp;*.hxx;*.h++;*.hh;
|
||||||
ignored_dirs_patterns=.*;CVS;
|
ignored_dirs_patterns=.*;CVS;libblas;liblapack;
|
||||||
ignored_file_patterns=*.o;*.obj;*.a;*.lib;*.so;*.dll;*.lo;*.la;*.class;*.jar;*.pyc;*.mo;*.gmo;
|
ignored_file_patterns=*.o;*.obj;*.a;*.lib;*.so;*.dll;*.lo;*.la;*.class;*.jar;*.pyc;*.mo;*.gmo;
|
||||||
generate_tag_prefs=0
|
generate_tag_prefs=0
|
||||||
external_dirs=
|
external_dirs=
|
||||||
|
|
|
@ -31,11 +31,12 @@ Print DSPL info
|
||||||
void DSPL_API dspl_info()
|
void DSPL_API dspl_info()
|
||||||
{
|
{
|
||||||
printf("\n\n D S P L - 2.0\n");
|
printf("\n\n D S P L - 2.0\n");
|
||||||
printf(" version 2.19.10.13\n");
|
printf(" version 2.19.10.20\n");
|
||||||
printf("\n Copyright (C) 2015-2019\n");
|
printf("\n Copyright (C) 2015-2019\n");
|
||||||
printf(" Sergey Bakhurin www.dsplib.org\n");
|
printf(" Sergey Bakhurin www.dsplib.org\n");
|
||||||
printf(" ---------------------------------------------
|
printf(" ---------------------------------------------\n");
|
||||||
printf(" BLAS and LAPACK ver.: 3.8.0 www.netlib.org\n")
|
printf(" BLAS and LAPACK ver.: 3.8.0 www.netlib.org\n");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,181 @@
|
||||||
|
/*
|
||||||
|
A C-program for MT19937-64 (2004/9/29 version).
|
||||||
|
Coded by Takuji Nishimura and Makoto Matsumoto.
|
||||||
|
|
||||||
|
This is a 64-bit version of Mersenne Twister pseudorandom number
|
||||||
|
generator.
|
||||||
|
|
||||||
|
Before using, initialize the state by using init_genrand64(seed)
|
||||||
|
or init_by_array64(init_key, key_length).
|
||||||
|
|
||||||
|
Copyright (C) 2004, Makoto Matsumoto and Takuji Nishimura,
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. The names of its contributors may not be used to endorse or promote
|
||||||
|
products derived from this software without specific prior written
|
||||||
|
permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
References:
|
||||||
|
T. Nishimura, ``Tables of 64-bit Mersenne Twisters''
|
||||||
|
ACM Transactions on Modeling and
|
||||||
|
Computer Simulation 10. (2000) 348--357.
|
||||||
|
M. Matsumoto and T. Nishimura,
|
||||||
|
``Mersenne Twister: a 623-dimensionally equidistributed
|
||||||
|
uniform pseudorandom number generator''
|
||||||
|
ACM Transactions on Modeling and
|
||||||
|
Computer Simulation 8. (Jan. 1998) 3--30.
|
||||||
|
|
||||||
|
Any feedback is very welcome.
|
||||||
|
http://www.math.hiroshima-u.ac.jp/~m-mat/MT/emt.html
|
||||||
|
email: m-mat @ math.sci.hiroshima-u.ac.jp (remove spaces)
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "dspl.h"
|
||||||
|
#include "mt19937.h"
|
||||||
|
|
||||||
|
#define NN RAND_MT19937_NN
|
||||||
|
#define MM 156
|
||||||
|
#define MATRIX_A 0xB5026F5AA96619E9ULL
|
||||||
|
#define UM 0xFFFFFFFF80000000ULL /* Most significant 33 bits */
|
||||||
|
#define LM 0x7FFFFFFFULL /* Least significant 31 bits */
|
||||||
|
|
||||||
|
|
||||||
|
/* initializes mt[NN] with a seed */
|
||||||
|
void mt19937_init_genrand64(unsigned long long seed, random_t* prnd)
|
||||||
|
{
|
||||||
|
unsigned long long *mt = prnd->mt19937_mt;
|
||||||
|
int mti = prnd->mt19937_mti;
|
||||||
|
|
||||||
|
mt[0] = seed;
|
||||||
|
for (mti=1; mti<NN; mti++)
|
||||||
|
mt[mti] = (6364136223846793005ULL * (mt[mti-1] ^ (mt[mti-1] >> 62)) + mti);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* initialize by an array with array-length */
|
||||||
|
/* init_key is the array for initializing keys */
|
||||||
|
/* key_length is its length */
|
||||||
|
void mt19937_init_by_array64(unsigned long long init_key[],
|
||||||
|
unsigned long long key_length,
|
||||||
|
random_t* prnd)
|
||||||
|
{
|
||||||
|
unsigned long long i, j, k;
|
||||||
|
unsigned long long *mt = prnd->mt19937_mt;
|
||||||
|
/* int mti = prnd->mt19937_mti; */
|
||||||
|
|
||||||
|
mt19937_init_genrand64(19650218ULL, prnd);
|
||||||
|
i=1; j=0;
|
||||||
|
k = (NN>key_length ? NN : key_length);
|
||||||
|
for (; k; k--) {
|
||||||
|
mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 62)) * 3935559000370003845ULL))
|
||||||
|
+ init_key[j] + j; /* non linear */
|
||||||
|
i++; j++;
|
||||||
|
if (i>=NN) { mt[0] = mt[NN-1]; i=1; }
|
||||||
|
if (j>=key_length) j=0;
|
||||||
|
}
|
||||||
|
for (k=NN-1; k; k--) {
|
||||||
|
/* non linear */
|
||||||
|
mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 62)) * 2862933555777941757ULL)) - i;
|
||||||
|
|
||||||
|
i++;
|
||||||
|
if (i>=NN)
|
||||||
|
{
|
||||||
|
mt[0] = mt[NN-1];
|
||||||
|
i=1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mt[0] = 1ULL << 63; /* MSB is 1; assuring non-zero initial array */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* generates a random number on [0, 2^64-1]-interval */
|
||||||
|
unsigned long long mt19937_genrand64_int64(random_t* prnd)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
unsigned long long x;
|
||||||
|
static unsigned long long mag01[2]={0ULL, MATRIX_A};
|
||||||
|
unsigned long long *mt = prnd->mt19937_mt;
|
||||||
|
int mti = prnd->mt19937_mti;
|
||||||
|
|
||||||
|
if (mti >= NN) { /* generate NN words at one time */
|
||||||
|
|
||||||
|
/* if init_genrand64() has not been called, */
|
||||||
|
/* a default initial seed is used */
|
||||||
|
if (mti == NN+1)
|
||||||
|
mt19937_init_genrand64(5489ULL, prnd);
|
||||||
|
|
||||||
|
for (i=0;i<NN-MM;i++) {
|
||||||
|
x = (mt[i]&UM)|(mt[i+1]&LM);
|
||||||
|
mt[i] = mt[i+MM] ^ (x>>1) ^ mag01[(int)(x&1ULL)];
|
||||||
|
}
|
||||||
|
for (;i<NN-1;i++) {
|
||||||
|
x = (mt[i]&UM)|(mt[i+1]&LM);
|
||||||
|
mt[i] = mt[i+(MM-NN)] ^ (x>>1) ^ mag01[(int)(x&1ULL)];
|
||||||
|
}
|
||||||
|
x = (mt[NN-1]&UM)|(mt[0]&LM);
|
||||||
|
mt[NN-1] = mt[MM-1] ^ (x>>1) ^ mag01[(int)(x&1ULL)];
|
||||||
|
|
||||||
|
mti = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
x = mt[mti++];
|
||||||
|
|
||||||
|
x ^= (x >> 29) & 0x5555555555555555ULL;
|
||||||
|
x ^= (x << 17) & 0x71D67FFFEDA60000ULL;
|
||||||
|
x ^= (x << 37) & 0xFFF7EEE000000000ULL;
|
||||||
|
x ^= (x >> 43);
|
||||||
|
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* generates a random number on [0, 2^63-1]-interval */
|
||||||
|
long long mt19937_genrand64_int63(random_t* prnd)
|
||||||
|
{
|
||||||
|
return (long long)(mt19937_genrand64_int64(prnd) >> 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* generates a random number on [0,1]-real-interval */
|
||||||
|
double mt19937_genrand64_real1(random_t* prnd)
|
||||||
|
{
|
||||||
|
return (mt19937_genrand64_int64(prnd) >> 11) * (1.0/9007199254740991.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* generates a random number on [0,1)-real-interval */
|
||||||
|
double mt19937_genrand64_real2(random_t* prnd)
|
||||||
|
{
|
||||||
|
return (mt19937_genrand64_int64(prnd) >> 11) * (1.0/9007199254740992.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* generates a random number on (0,1)-real-interval */
|
||||||
|
double mt19937_init_genrand64_real3(random_t* prnd)
|
||||||
|
{
|
||||||
|
return ((mt19937_genrand64_int64(prnd) >> 12) + 0.5) * (1.0/4503599627370496.0);
|
||||||
|
}
|
|
@ -0,0 +1,86 @@
|
||||||
|
/*
|
||||||
|
A C-program for MT19937-64 (2004/9/29 version).
|
||||||
|
Coded by Takuji Nishimura and Makoto Matsumoto.
|
||||||
|
|
||||||
|
This is a 64-bit version of Mersenne Twister pseudorandom number
|
||||||
|
generator.
|
||||||
|
|
||||||
|
Before using, initialize the state by using init_genrand64(seed)
|
||||||
|
or init_by_array64(init_key, key_length).
|
||||||
|
|
||||||
|
Copyright (C) 2004, Makoto Matsumoto and Takuji Nishimura,
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. The names of its contributors may not be used to endorse or promote
|
||||||
|
products derived from this software without specific prior written
|
||||||
|
permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
References:
|
||||||
|
T. Nishimura, ``Tables of 64-bit Mersenne Twisters''
|
||||||
|
ACM Transactions on Modeling and
|
||||||
|
Computer Simulation 10. (2000) 348--357.
|
||||||
|
M. Matsumoto and T. Nishimura,
|
||||||
|
``Mersenne Twister: a 623-dimensionally equidistributed
|
||||||
|
uniform pseudorandom number generator''
|
||||||
|
ACM Transactions on Modeling and
|
||||||
|
Computer Simulation 8. (Jan. 1998) 3--30.
|
||||||
|
|
||||||
|
Any feedback is very welcome.
|
||||||
|
http://www.math.hiroshima-u.ac.jp/~m-mat/MT/emt.html
|
||||||
|
email: m-mat @ math.sci.hiroshima-u.ac.jp (remove spaces)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef MT19937_H
|
||||||
|
#define MT19937_H
|
||||||
|
|
||||||
|
#include "dspl.h"
|
||||||
|
|
||||||
|
/* initializes mt[NN] with a seed */
|
||||||
|
void mt19937_init_genrand64(unsigned long long seed, random_t* prnd);
|
||||||
|
|
||||||
|
/* initialize by an array with array-length */
|
||||||
|
/* init_key is the array for initializing keys */
|
||||||
|
/* key_length is its length */
|
||||||
|
void mt19937_init_by_array64(unsigned long long init_key[],
|
||||||
|
unsigned long long key_length,
|
||||||
|
random_t* prnd);
|
||||||
|
|
||||||
|
/* generates a random number on [0, 2^64-1]-interval */
|
||||||
|
unsigned long long mt19937_genrand64_int64(random_t* prnd);
|
||||||
|
|
||||||
|
/* generates a random number on [0, 2^63-1]-interval */
|
||||||
|
long long mt19937_genrand64_int63(random_t* prnd);
|
||||||
|
|
||||||
|
/* generates a random number on [0,1]-real-interval */
|
||||||
|
double mt19937_genrand64_real1(random_t* prnd);
|
||||||
|
|
||||||
|
/* generates a random number on [0,1)-real-interval */
|
||||||
|
double mt19937_genrand64_real2(random_t* prnd);
|
||||||
|
|
||||||
|
/* generates a random number on (0,1)-real-interval */
|
||||||
|
double mt19937_genrand64_real3(random_t* prnd);
|
||||||
|
|
||||||
|
#endif
|
|
@ -25,20 +25,40 @@
|
||||||
|
|
||||||
#include "dspl.h"
|
#include "dspl.h"
|
||||||
#include "dspl_internal.h"
|
#include "dspl_internal.h"
|
||||||
|
#include "mt19937.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
random generator initialization
|
||||||
void DSPL_API random_init(random_t* prnd)
|
*******************************************************************************/
|
||||||
|
int DSPL_API random_init(random_t* prnd, int type)
|
||||||
{
|
{
|
||||||
srand(time(NULL));
|
srand(time(NULL));
|
||||||
/* MRG32k3a init */
|
switch(type)
|
||||||
prnd->mrg32k3a_x[0] = prnd->mrg32k3a_x[1] = 1.0;
|
{
|
||||||
prnd->mrg32k3a_y[0] = prnd->mrg32k3a_y[1] = prnd->mrg32k3a_y[2] = 1.0;
|
case RAND_TYPE_MRG32K3A:
|
||||||
prnd->mrg32k3a_x[2] = rand();
|
/* MRG32k3a init */
|
||||||
|
prnd->mrg32k3a_x[0] = prnd->mrg32k3a_x[1] = 1.0;
|
||||||
|
prnd->mrg32k3a_y[0] = prnd->mrg32k3a_y[1] = prnd->mrg32k3a_y[2] = 1.0;
|
||||||
|
prnd->mrg32k3a_x[2] = rand();
|
||||||
|
break;
|
||||||
|
case RAND_TYPE_MT19937:
|
||||||
|
mt19937_init_genrand64((unsigned long long)rand()*rand(), prnd);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return ERROR_RAND_TYPE;
|
||||||
|
}
|
||||||
|
prnd->type = type;
|
||||||
|
return RES_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
Uniform random generator mrg32k3a
|
||||||
|
*******************************************************************************/
|
||||||
int randu_mrg32k3a (double* u, int n, random_t* prnd)
|
int randu_mrg32k3a (double* u, int n, random_t* prnd)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -88,30 +108,51 @@ int randu_mrg32k3a (double* u, int n, random_t* prnd)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
Uniform random numbers generator
|
Uniform random numbers generator
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
int DSPL_API randu(double* x, int n, random_t* prnd)
|
int DSPL_API randu(double* x, int n, random_t* prnd)
|
||||||
{
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if(!x || !prnd)
|
||||||
|
return ERROR_PTR;
|
||||||
|
if(n < 0)
|
||||||
|
return ERROR_SIZE;
|
||||||
|
|
||||||
if(prnd)
|
if(prnd)
|
||||||
return randu_mrg32k3a(x, n, prnd);
|
{
|
||||||
|
switch(prnd->type)
|
||||||
|
{
|
||||||
|
case RAND_TYPE_MRG32K3A:
|
||||||
|
return randu_mrg32k3a(x, n, prnd);
|
||||||
|
case RAND_TYPE_MT19937:
|
||||||
|
for(i = 0; i < n; i++)
|
||||||
|
x[i] = mt19937_genrand64_real1(prnd);
|
||||||
|
return RES_OK;
|
||||||
|
default:
|
||||||
|
return ERROR_RAND_TYPE;
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(!x)
|
if(!x)
|
||||||
return ERROR_PTR;
|
return ERROR_PTR;
|
||||||
if(n<1)
|
if(n<1)
|
||||||
return ERROR_SIZE;
|
return ERROR_SIZE;
|
||||||
int i;
|
|
||||||
for(i = 0; i < n; i++)
|
for(i = 0; i < n; i++)
|
||||||
x[n] = (double)rand()/RAND_MAX;
|
x[n] = (double)rand()/RAND_MAX;
|
||||||
}
|
}
|
||||||
|
|
||||||
return RES_OK;
|
return RES_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
Gaussian random numbers generator
|
Gaussian random numbers generator
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
@ -130,30 +171,37 @@ int DSPL_API randn(double* x, int n, double mu, double sigma, random_t* prnd)
|
||||||
return ERROR_RAND_SIGMA;
|
return ERROR_RAND_SIGMA;
|
||||||
|
|
||||||
k=0;
|
k=0;
|
||||||
while(k < n)
|
|
||||||
|
while(k+128 < n)
|
||||||
{
|
{
|
||||||
res = randu(x1, 128, prnd);
|
if((res = randu(x1, 128, prnd)) != RES_OK)
|
||||||
if(res != RES_OK)
|
|
||||||
goto exit_label;
|
goto exit_label;
|
||||||
|
if((res = randu(x2, 128, prnd)) != RES_OK)
|
||||||
res = randu(x2, 128, prnd);
|
|
||||||
if(res != RES_OK)
|
|
||||||
goto exit_label;
|
goto exit_label;
|
||||||
m = 0 ;
|
|
||||||
while(k<n && m < 128)
|
for(m = 0; m < 128; m++)
|
||||||
{
|
{
|
||||||
x[k] = sqrt(-2.0*log(x1[m]))*cos(M_2PI*x2[m])*sigma + mu;
|
if(x1[m] != 0.0)
|
||||||
k++;
|
|
||||||
m++;
|
|
||||||
if(k<n && m < 128)
|
|
||||||
{
|
{
|
||||||
x[k] = sqrt(-2.0*log(x1[m]))*sin(M_2PI*x2[m])*sigma + mu;
|
x[k] = sqrt(-2.0*log(x1[m]))*cos(M_2PI*x2[m])*sigma + mu;
|
||||||
k++;
|
k++;
|
||||||
m++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
while(k < n)
|
||||||
|
{
|
||||||
|
if((res = randu(x1, 1, prnd)) != RES_OK)
|
||||||
|
goto exit_label;
|
||||||
|
if((res = randu(x2, 1, prnd)) != RES_OK)
|
||||||
|
goto exit_label;
|
||||||
|
if(x1[1] != 0.0)
|
||||||
|
{
|
||||||
|
x[k] = sqrt(-2.0*log(x1[1]))*cos(M_2PI*x2[1])*sigma + mu;
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
res = RES_OK;
|
res = RES_OK;
|
||||||
exit_label:
|
exit_label:
|
||||||
return res;
|
return res;
|
||||||
|
|
|
@ -14,7 +14,7 @@ int main()
|
||||||
random_t rnd;
|
random_t rnd;
|
||||||
int k;
|
int k;
|
||||||
|
|
||||||
random_init(&rnd); // random generator init
|
random_init(&rnd, RAND_TYPE_MT19937); // random generator init
|
||||||
linspace(0, N, N, DSPL_PERIODIC, t); // fill t vector
|
linspace(0, N, N, DSPL_PERIODIC, t); // fill t vector
|
||||||
randn(n, N, 0, 1.0, &rnd); // generate noise
|
randn(n, N, 0, 1.0, &rnd); // generate noise
|
||||||
|
|
||||||
|
@ -36,4 +36,4 @@ int main()
|
||||||
|
|
||||||
// run GNUPLOT script
|
// run GNUPLOT script
|
||||||
return system("gnuplot -p gnuplot/filter_iir.plt");
|
return system("gnuplot -p gnuplot/filter_iir.plt");
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,12 +52,23 @@ typedef struct
|
||||||
} fft_t;
|
} fft_t;
|
||||||
|
|
||||||
|
|
||||||
|
#define RAND_TYPE_MRG32K3A 0x00000001
|
||||||
|
#define RAND_TYPE_MT19937 0x00000002
|
||||||
|
|
||||||
|
#define RAND_MT19937_NN 312
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
|
||||||
double mrg32k3a_seed;
|
double mrg32k3a_seed;
|
||||||
double mrg32k3a_x[3];
|
double mrg32k3a_x[3];
|
||||||
double mrg32k3a_y[3];
|
double mrg32k3a_y[3];
|
||||||
|
|
||||||
|
/* The array for the MT19937 state vector */
|
||||||
|
unsigned long long mt19937_mt[RAND_MT19937_NN];
|
||||||
|
int mt19937_mti;
|
||||||
|
|
||||||
|
int type;
|
||||||
|
|
||||||
}random_t;
|
}random_t;
|
||||||
|
|
||||||
|
|
||||||
|
@ -129,6 +140,7 @@ typedef struct
|
||||||
/* Q 0x17xxxxxx*/
|
/* Q 0x17xxxxxx*/
|
||||||
/* R 0x18xxxxxx*/
|
/* R 0x18xxxxxx*/
|
||||||
#define ERROR_RAND_SIGMA 0x18011909
|
#define ERROR_RAND_SIGMA 0x18011909
|
||||||
|
#define ERROR_RAND_TYPE 0x18012009
|
||||||
#define ERROR_RESAMPLE_RATIO 0x18051801
|
#define ERROR_RESAMPLE_RATIO 0x18051801
|
||||||
#define ERROR_RESAMPLE_FRAC_DELAY 0x18050604
|
#define ERROR_RESAMPLE_FRAC_DELAY 0x18050604
|
||||||
/* S 0x19xxxxxx*/
|
/* S 0x19xxxxxx*/
|
||||||
|
@ -781,7 +793,8 @@ DECLARE_FUNC(int, randn, double*
|
||||||
COMMA double
|
COMMA double
|
||||||
COMMA random_t* prnd);
|
COMMA random_t* prnd);
|
||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
DECLARE_FUNC(void, random_init, random_t* prnd);
|
DECLARE_FUNC(int, random_init, random_t* prnd
|
||||||
|
COMMA int type);
|
||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
DECLARE_FUNC(int, randu, double*
|
DECLARE_FUNC(int, randu, double*
|
||||||
COMMA int
|
COMMA int
|
||||||
|
|
|
@ -22,11 +22,11 @@
|
||||||
|
|
||||||
#ifdef WIN_OS
|
#ifdef WIN_OS
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#endif //WIN_OS
|
#endif /* WIN_OS */
|
||||||
|
|
||||||
#ifdef LINUX_OS
|
#ifdef LINUX_OS
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
#endif //LINUX_OS
|
#endif /* LINUX_OS */
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -157,7 +157,7 @@ p_writetxt_cmplx_im writetxt_cmplx_im ;
|
||||||
p_writetxt_cmplx_re writetxt_cmplx_re ;
|
p_writetxt_cmplx_re writetxt_cmplx_re ;
|
||||||
|
|
||||||
|
|
||||||
#endif //BUILD_LIB
|
#endif /* BUILD_LIB */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -192,20 +192,20 @@ void* dspl_load()
|
||||||
printf("libdspl.dll loading ERROR!\n");
|
printf("libdspl.dll loading ERROR!\n");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
#endif //WIN_OS
|
#endif /* WIN_OS */
|
||||||
|
|
||||||
|
|
||||||
#ifdef LINUX_OS
|
#ifdef LINUX_OS
|
||||||
char* error;
|
char* error;
|
||||||
void *handle;
|
void *handle;
|
||||||
// open the *.so
|
/* open the *.so */
|
||||||
handle = dlopen ("./libdspl.so", RTLD_LAZY);
|
handle = dlopen ("./libdspl.so", RTLD_LAZY);
|
||||||
if (!handle)
|
if (!handle)
|
||||||
{
|
{
|
||||||
printf("libdspl.so loading ERROR!\n");
|
printf("libdspl.so loading ERROR!\n");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
#endif //LINUX_OS
|
#endif /* LINUX_OS */
|
||||||
|
|
||||||
LOAD_FUNC(acos_cmplx);
|
LOAD_FUNC(acos_cmplx);
|
||||||
LOAD_FUNC(asin_cmplx);
|
LOAD_FUNC(asin_cmplx);
|
||||||
|
@ -332,7 +332,7 @@ void* dspl_load()
|
||||||
if(handle)
|
if(handle)
|
||||||
FreeLibrary(handle);
|
FreeLibrary(handle);
|
||||||
return NULL;
|
return NULL;
|
||||||
#endif //WIN_OS
|
#endif /* WIN_OS */
|
||||||
|
|
||||||
|
|
||||||
#ifdef LINUX_OS
|
#ifdef LINUX_OS
|
||||||
|
@ -342,7 +342,7 @@ void* dspl_load()
|
||||||
if(handle)
|
if(handle)
|
||||||
dlclose(handle);
|
dlclose(handle);
|
||||||
return NULL;
|
return NULL;
|
||||||
#endif //LINUX_OS
|
#endif /* LINUX_OS */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -355,11 +355,11 @@ void dspl_free(void* handle)
|
||||||
{
|
{
|
||||||
#ifdef WIN_OS
|
#ifdef WIN_OS
|
||||||
FreeLibrary((HINSTANCE)handle);
|
FreeLibrary((HINSTANCE)handle);
|
||||||
#endif //WIN_OS
|
#endif /* WIN_OS */
|
||||||
|
|
||||||
#ifdef LINUX_OS
|
#ifdef LINUX_OS
|
||||||
dlclose(handle);
|
dlclose(handle);
|
||||||
#endif //LINUX_OS
|
#endif /* LINUX_OS */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -52,12 +52,23 @@ typedef struct
|
||||||
} fft_t;
|
} fft_t;
|
||||||
|
|
||||||
|
|
||||||
|
#define RAND_TYPE_MRG32K3A 0x00000001
|
||||||
|
#define RAND_TYPE_MT19937 0x00000002
|
||||||
|
|
||||||
|
#define RAND_MT19937_NN 312
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
|
||||||
double mrg32k3a_seed;
|
double mrg32k3a_seed;
|
||||||
double mrg32k3a_x[3];
|
double mrg32k3a_x[3];
|
||||||
double mrg32k3a_y[3];
|
double mrg32k3a_y[3];
|
||||||
|
|
||||||
|
/* The array for the MT19937 state vector */
|
||||||
|
unsigned long long mt19937_mt[RAND_MT19937_NN];
|
||||||
|
int mt19937_mti;
|
||||||
|
|
||||||
|
int type;
|
||||||
|
|
||||||
}random_t;
|
}random_t;
|
||||||
|
|
||||||
|
|
||||||
|
@ -129,6 +140,7 @@ typedef struct
|
||||||
/* Q 0x17xxxxxx*/
|
/* Q 0x17xxxxxx*/
|
||||||
/* R 0x18xxxxxx*/
|
/* R 0x18xxxxxx*/
|
||||||
#define ERROR_RAND_SIGMA 0x18011909
|
#define ERROR_RAND_SIGMA 0x18011909
|
||||||
|
#define ERROR_RAND_TYPE 0x18012009
|
||||||
#define ERROR_RESAMPLE_RATIO 0x18051801
|
#define ERROR_RESAMPLE_RATIO 0x18051801
|
||||||
#define ERROR_RESAMPLE_FRAC_DELAY 0x18050604
|
#define ERROR_RESAMPLE_FRAC_DELAY 0x18050604
|
||||||
/* S 0x19xxxxxx*/
|
/* S 0x19xxxxxx*/
|
||||||
|
@ -215,15 +227,15 @@ typedef struct
|
||||||
|
|
||||||
|
|
||||||
#ifdef BUILD_LIB
|
#ifdef BUILD_LIB
|
||||||
// Declare DSPL_API for Windows OS
|
/* Declare DSPL_API for Windows OS */
|
||||||
#ifdef WIN_OS
|
#ifdef WIN_OS
|
||||||
#define DSPL_API __declspec(dllexport)
|
#define DSPL_API __declspec(dllexport)
|
||||||
#endif // WIN_OS
|
#endif /* WIN_OS */
|
||||||
// Declare DSPL_API for LINUX OS
|
/* Declare DSPL_API for LINUX OS */
|
||||||
#ifdef LINUX_OS
|
#ifdef LINUX_OS
|
||||||
#define DSPL_API
|
#define DSPL_API
|
||||||
#endif //LINUX_OS
|
#endif /* LINUX_OS */
|
||||||
#endif //BUILD_DLL
|
#endif /* BUILD_DLL */
|
||||||
|
|
||||||
#define COMMA ,
|
#define COMMA ,
|
||||||
|
|
||||||
|
@ -781,7 +793,8 @@ DECLARE_FUNC(int, randn, double*
|
||||||
COMMA double
|
COMMA double
|
||||||
COMMA random_t* prnd);
|
COMMA random_t* prnd);
|
||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
DECLARE_FUNC(void, random_init, random_t* prnd);
|
DECLARE_FUNC(int, random_init, random_t* prnd
|
||||||
|
COMMA int type);
|
||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
DECLARE_FUNC(int, randu, double*
|
DECLARE_FUNC(int, randu, double*
|
||||||
COMMA int
|
COMMA int
|
||||||
|
@ -918,5 +931,5 @@ void dspl_free(void* handle);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif //DSPL_H
|
#endif /* DSPL_H */
|
||||||
|
|
||||||
|
|
|
@ -18,9 +18,9 @@ int main()
|
||||||
xc = (complex_t*) malloc(N * sizeof(complex_t));
|
xc = (complex_t*) malloc(N * sizeof(complex_t));
|
||||||
|
|
||||||
random_t rnd;
|
random_t rnd;
|
||||||
random_init(&rnd);
|
random_init(&rnd, RAND_TYPE_MT19937);
|
||||||
|
|
||||||
randn(xr, N, 0, 1.0,&rnd);
|
randn(xr, N, 0, 1.0, &rnd);
|
||||||
randn((double*)xc, 2*N, 0, 1.0,&rnd);
|
randn((double*)xc, 2*N, 0, 1.0,&rnd);
|
||||||
|
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue