----------------------------------------------------------------------------------------------------------- IT++ version 3.8.0 ================== Changes of interface ==================== * Changed vqtrain function interface (Thomas Eriksson) * All long in vq.h and lpcfunc.h functions have been changed to int (Tony Ottosson) * Removed audiodev interface since it is not working for all architectures (Tony Ottosson) * Removed ls_solve(const mat &L, const mat &U, const vec &b), ls_solve_chol(const mat &A, int p, const vec &b), and ls_solve(const mat &L, int p, const mat &U, int q, const vec &b). (Tony Ottosson) * Removed banded version of cholesky. (Tony Ottosson) * Cholesky decomposition now only possible when using LAPACK. (Tony Ottosson) * LU factorization now only possible when using LAPACK. (Tony Ottosson) * Some functions in the BPSK and PAM classes have changed due to the introduction of a common base class (Tony Ottosson) * sum(Mat) and sum_sqr(Mat) is now returning a vector with sum over each column for matlab compatibility (Tony Ottosson) * Changed product() to prod(). And prod(Mat) returns a vector with product of each column for matlab compatibility (Tony Ottosson) * max() and min() of matrices now return a vector for matlab compatibility (Tony Ottosson) * The Channel classes has been completely revised for increased functionality and reusability (Tony Ottosson) * Changed member variables from private to protected in Turbo_Codec. This was requested by Ola Wintzell (Pål Frenger) New features ============ * Added exist(string) member to the Parser class (Pål Frenger) * Requested feature [961362]: When the Parser cannot find a variable name in the input, it now indicates the expected variable name in the error message. (Johan Bergman) * Added Parser::get() method that can handle any type, e.g. Arrays. If the variable is not found, the old value is kept instead of terminating with an error message. The old get methods are still supported, for backwards compatibility. (Johan Bergman) * Added set_submatrix() functions to Sparse_Mat class * Added Gaussian Mixture Models (Thomas Eriksson) * Add get() and set() methods to access and modify vectors and matrix data (it is useful with poiters: v_ptr->get(i) rather than (*v_ptr)(i)) (Thomas Lemaire) * New matrix member functions: del_row(), ins_row(), append_row(), del_col(), ins_col(), append_col() (Thomas Lemaire) * Added support for Fast Independent Component Analysis (FastICA) (François Cayre and Teddy Furon) * Added an experimental Plot_PDF class. Use with care! (Tony Ottosson) * Added fixed-point data types (including vectors, matrices, and arrays). Thanks to Fredrik Huss and Kenneth Hilmersson for valuable ideas. (Johan Bergman) * The Vec and Mat classes have been opened up for non-built-in numeric type, such as the new fixed-point data types or a user-defined numeric type. The Array, Vec and Mat constructors can take an object factory as an optional argument. (Johan Bergman) * Added pentium3 and pentium4 flags in config script for more efficient code (Tony Ottosson) * Added set(const char*) methods for cvec and cmat. (Johan Bergman) * Added istream operator for Array, compatible with the ostream operator. (Johan Bergman) * Added function set(Array &a, const char*) that uses the new istream operator. (Johan Bergman) * The istream operators for Vec and Mat can now handle output from the corresponding ostream operators. They are also backwards compatible with one exception: it is necessary to enter [] in order to input an empty vector or matrix, instead of just a newline character. (Johan Bergman, Erik Stoy) * A redefined istream operator for complex was added in itconfig.h, which can handle input on the format 1+2i beside the standard format (1,2). (Johan Bergman) * Linear system solvers now use LAPACK routines for speed and accuracy. (Tony Ottosson) * Added ls_solve() and backslash() functions for complex linear systems. (Tony Ottosson) * Added QR factorization using LAPACK. (Tony Ottosson) * FFT routines now use FFTW version 3.0.1 (Simon Wood) * A virtual base class Modulator is created for the modulator classes (Tony Ottosson) * Added encode(in, out) and decode(in, out) functions in the BCH and Hamming_Code classes (Tony Ottosson) * Added test program for BCH. (Tony Ottosson) * Added a toeplitz() function that computes the hermitian Toeplitz matrix (Adam Piatyszek) * Added kronecker product for matrices (Adam Piatyszek) * Added functions moment(), skewness() and kurtosis() (Tony Ottosson) * Added image read/write functionality (Francois Cayre and Tony Ottosson) * Added norm() for matrices (Tony Ottosson) * Added cumsum() for matrices (Tony Ottosson) * Added max(x, index) and min(x, index) to get both min/max and index. Works for both vectors and matrices (Tony Ottosson) * Added round_i(vec) and round_i(mat) (Tony Ottosson) * Added numerical integration routines quad() and quadl() (Tony Ottosson) Bugfixes ======== * Fixed bug [1055133] Bug in LOGMAX Turbo decoding (Pål Frenger) * Fixed bug [1055562] Incorrect normalization of beta in LOGMAP Decoding (Pål Frenger) * Fixed bug [917861] in Mat::set_submatrix(r,c,mat) (Thomas Lemaire) * Fixed a bug in Block_Interleaver. The "keep_zeros" parameter did not work as expected. Thanks to Matts-Ola Wessman for finding the bug. (Pål Frenger) * Fixed a bug in Mat::hermitian_transpose() (Tony Ottosson) * Mat::set("1 2 ") i.e. with tailing space characters is now possible. (Johan Bergman) * Fixed bug in ls_solve_od(). (Tony Ottosson) * Vec::ins() can now insert elements in the end of a vector. (Johan Bergman) * Partly fixed "bug" [991856] regarding MinGW support. Define compiler flag MINGW when compiling for MinGW. (Johan Bergman, following proposal written by Omid Rouhani) * Fixed bug [995399] in product() (now named prod()). (Tony Ottosson) * Fixed bug [986554] in divgfx() and modgfx() functions. Thanks to Balazs Simon for finding and solving this bug. (Tony Ottosson) * Fixed bug in Hamming_Code (Tony Ottosson) * Fixed bug [982590] when too few samples in fft version. Thanks to Oliver for finding and solving this bug (Tony Ottosson) * Fixed bug [982325] in to_imat(mat). Thanks to Michael Kreeger for finding the bug. (Tony Ottosson) * Fixed bug [1032692] in turbo decoder initialization. (Johan Bergman) * Fixed bug in demodulate_soft_bits() for high SNRs (Tony Ottosson) * Fixed bug in vec(char *) for negative steps (e.g. "0:-5:-20") (Thomas Eriksson) * Fixed bug [896173] cannot read read-only using it_file and it_ifile (Tony Ottosson) Internal changes ================ * Dropped supporting Visual C++ .Net and older. Will not compile for these versions. Only support for Visual C++ .Net 2003 or newer versions (Tony Ottosson) * Changes in haru (see separate file in haru dir) * Removed specialization for double of to_str. Changed template of to_str to include formatting and precision. * inline of abs() in elmatfunc.h removed since not inline (Tony Ottosson) * Comparison operations on Vec<> are now const functions (Tony Ottosson) * Changed declaration of log2() for better precision on linux and Cygwin. log2() is part of itpp namespace. (Tony Ottosson) * Changed logb(2.0,) to log2() in several places (Tony Ottosson) * det() now uses LAPACK routines. * Updated FFTW support to version 3.0.1 (Simon Wood) * Removed internal support code for FFTW 2.0. FFTW should now be used as an external library. (Simon Wood). * Moved copy_vector.cpp to copy_vector.h (Tony Ottosson) * Moved sort functions from matfunc.h/.cpp to sort.h (Tony Ottosson) * Moved statistics functions from matfunc.h/.cpp to stat.h/.cpp (Tony Ottosson) * Moved the documentation of the matfunc.h functions to matrix_functions (Tony Ottosson) * Speed-up of Normal_RNG of about 30% (Tony Ottosson) * Made all randx() functions inline for increased speed (Tony Ottosson) * Updates for compliance with gcc 3.4 (Johan Bergman) * Made functions const if possible in modulator.h/.cpp (Tony Ottosson) ----------------------------------------------------------------------------------------------------------- IT++ version 3.7.3 ================== New features ============ * Automatic detection of Apple Darwin and alitvec support in the processor. If so, the BLAS and LAPACK support is enabled and the it-config script modified accordingly. * Added new function set_submatrix (int r, int c, const Mat< Num_T > &m) with simpler interface than the old function. Bugfixes ======== * Fixed bug [873935] in documentation (Tony Ottosson). * Fixed bug that gave errors on SunOS CC compiler (the round functions) (Tony Ottosson) * Fixed a bug/limitation of the Parser class that limited the line length to 160 characters. Thanks to Rikard Thomasson for providing the solution (Pål Frenger) * Fixed the file tests/turbo_test.ref (Pål Frenger) * Fixed bug in Hamming_Code::decode() that was introduced when orientation of vectors changed (Tony Ottosson) * Fixed bug [885574] error in output of cvec (Tony Ottosson) * Fixed bug [889630] Mat constructor with a char* (And a simmilar bug in Vec) (Pål Frenger) * Fixed a documentation bug in the BCH class (Pål Frenger) * Fixed partly the bug [896183]. Open a file with it_ifile now works. It is, however, a temporary fix in the it_ifile::open() function. The second bug is still open. Internal changes ================ * Changed index operators in Vec<> and Array<> to return "const Num_T &". This is much faster. Reported as bug [875473] (Tony Ottosson). * All transpose operations on vectors and matrices (including hermitian_transpose) have been changed into const functions (Tony Ottosson) * Changed testprograms eigen_test and svd_test. Hopefully the small diffs on different architectures are gone (Tony Ottosson) * Small fixes to make IT++ compile on Visual C++ .Net 2003 (Peter Klotz and Tony Ottosson) ----------------------------------------------------------------------------------------------------------- IT++ version 3.7.2 ================== Changes of interface ==================== * timing.h, timing.cpp: toc() changed. It does not print anything on screen anymore. Instead it returns the elapsed time (in seconds). Previously, the timer was stopped when toc was called. This is different from the matlab behaviour, so this has been changed. (Thomas Eriksson) * Added toc_print() function that prints the results as toc() previously did. (Tony Ottosson) * parser.h, parser.cpp: No warning is issued when a variable is defined twice. This should be allowed and common, for example when the settings in the setup file is overridden by command line arguments (Thomas Eriksson) * Removed the function "double round(double)" from IT++. This function lives in math.h. (Pål Frenger) * A new output parameter to the function Turbo_Codec::decode_block was added. The new parmeter (nrof_used_iterations) returns the number of used iterations in the decoding of the block. (Pål Frenger) New features ============ * Added gamma and lgamma for Visual C++. These were previously not implemented. * Added Parser::get_bool member (Pål frenger) * Parser: Added the possibility to use single-fnutts strings (i.e. 'Hello world') as well as double-fnutt strings (i.e. "Hello World"). This was needed for Matlab compatibility reasons. (Pål Frenger) * Added "bool all(const Vec &)" and "bool any(const Vec &)" in elmatfunc.h/.cpp (Thanks to Anders Stjernman) * parser.h, parser.cpp: Parser class: added a possibility to avoid screen printout, by calling p.set_silentmode(true) (Thomas Eriksson) * matfunc.h: Added function cumsum (Thomas Eriksson) * added vqtrain.h, vqtrain.cpp. Includes functionality for training of vector quantizers (Thomas Eriksson) * timing.h, timing.cpp: added function pause(double t=-1) similar to matlab's pause. (Thomas Eriksson) * Added a new decode member function to Turbo_Codec. The new decode member returns the number of used iterations. The old decode member is kept for backwards copatibility reasons. (Pål Frenger) Bugfixes ======== * Fixed a serious bug in Multipath_Rayleigh_Channel (src/base/channel.cpp). In the methods operator() and create_channel the power delay profile was scaled incorrectly. The power vector was used instead of the square root of the power vector for scaling the individual taps. Thanks to David Astély for finding and correcting the bug. To see the changed lines search for DAy in the file. (Pål Frenger) * Removed the definition for Mac OS of std::max and std::min in itconfig.h (Thanks to David Astély) * Lot of fixes to make Visual C++ work out of the box (Thomas Eriksson and Tony Ottosson) * elmatfunc.h line 123: changed std::erf to ::erf and std::erfc to ::erfc (Pål Frenger) * converters.cpp: Added template specializations for to_cvec(bvec) and to_cmat(bmat) (Pål Frenger) * operators.h: Removed inline definitions for code that is in the .cpp file (Pål Frenger) * elmatfunc.h: "using ::erf" and "using ::erfc" is now performed for all compilers. (Thomas Eriksson) * scalfunc.h: removed unecessary stuff (Thomas Eriksson) * Several calls to random functions on the same code line were executed in different orders on different platforms. This resulted in different results on Solaris, Linux, Mac OS etc. There were five places in channel.cpp where this occured. Thanks to Johan Bergman for pointing this out. (Pål Frenger) * Fixed [ 803072 ] 'bad' examples in user's guide (Pål Frenger) * Fixed [847228] svec.h: Fixed the bug for nnz(), where it did not always return the correct number, this because non-zero elements which are set to zero (e.g. after add_elem()) where not removed. (Tobias Tynderfeldt) - Added the function remove_small_elements() to remove all small (zero) elements. For complexity reasons, this is done before using e.g. the functions nnz(), compact(), get_nz_data() etc. - Removed the 'const' declaration for the functions nnz(), density(), get_nz(), get_nz_data(), get_nz_index(), operator==() - Removed the functions add_nz_elem(), zero_nz_elem(), clear_nz_elem() and int& get_nz_index(int) - Changed function interface: T& get_nz_data(int) to void get_nz_data(int,T&) * smat.h: Fixed the bug for nnz(), where it did not always return the correct number. See comments above for svec.h. (Tobias Tynderfeldt) * Fix [ 847224 ] problem with the multiplication of Sparse_Mat and Vec (Pål Frenger) * Closed [ 701359 ] about gamma function (Thomas Eriksson) * turbo_test.cpp: Changed the number of added tailbits from 12 to 8 (Thanks to David Astély) Internal changes ================ * Changed "make clean" so that object files and target files are removed (Pål Frenger) * Changed static_cast<> to call of constructor in converters.cpp. Experimental, may change. (Tony Ottosson) * changed from "(int) round(double)" to "round_i(double) in elmatfunc.h, interleave.h, channel.cpp, sequence.cpp, reedsolomon.cpp, hammcode.cpp, and specmat.cpp (Pål Frenger) ----------------------------------------------------------------------------------------------------------- IT++ version 3.7.1 ================== Changes of interface ==================== * Removed long_long, llvec, and llmat since these types are not ISO C++ compliant. Some functions in the Convolutional_Code and Punctured_Convolutional_Code classes was changed. (Tony Ottosson) * Changed HAVE_LAPACK and HAVE_CBLAS to NO_LAPACK and NO_CBLAS. Hence, using CBLAS and LAPACK you should NOT define these variables. (Tony Ottosson) * Vectors are now always treated as column-vectors. Even when multipling from left with a matrix "operator(vec, mat)". (Tony Ottosson) * Made the decode and decode_block members of Turbo_Codec virtual (Pål Frenger) * Made the decode_tail, decode_tailbite, and decode members of Convolutional_Code virtual (Pål Frenger) * Made the map_decode, log_decode, and log_decode_n2 members of Rec_Syst_Conv_Code virtual (Pål Frenger) * Changed so that the test programs link with the debug library instead of the optimized library (Pål Frenger) * Added the posibility to use Array::operator=(T e) when the size of the array is 0. The size of the array will be set to 1 and the (only) element in the array will be equal to e. (Pål Frenger) * double_complex and float_complex have been removed. Instead use complex and complex. (Tony Ottosson) * Added "namespace itpp" (Pål Frenger) * long double removed in binary fileformats (bifstream and bofstream). (Tony Ottosson and David Astely) New features ============ * Added test-program in tests of size of basic types (char, short, int, long, float, double, ...). (Tony Ottosson) * Added a few operators for double_complex with int and float (+, -, /, *). (Tony Ottosson) * Added a templated Stack class. (Thomas Eriksson) * Added a Vector Quantizer class. (Thomas Eriksson) * Added functions for linear prediction coefficient (LPC) calculations and analysis. Main application is speech processing.(Thomas Eriksson) * Fixed so that float_complex and double_complex variables can be read into matlab using load_it. * Added abs(ivec) and abs(imat). (Tony Ottosson) * Added transpose(), hermitian_transpose(), and the short versions T() and H() on vectors and matries. A transpose of a vector results in a matrix. (Tony Ottosson) * Added two parameters to Turbo_Codec::setup: logmax_scaling_factor and adaptive_stop. The first parameters allows for down-scaling of the logmax metric before passing it on to the next decoder, which will provide better performance. For backward compatible reasons this parameter is set to 1.0 but around 0.7 is actually a better choice. The second parameter will, if set to true, adaptively stop the decoding process as soon as the decoded bits after one full iteration equals the bits from the previous iteration. By default this adaptive_stop parameter is set to false. (Pål Frenger) * Added a itpp_version() function that returns the version number as a string. (Tony Ottosson) * Added "vec rem(vec,double)", "vec rem(double,vec)", "mat rem(mat,double)", "mat rem(double,mat)" in elmatfunc.h (Pål Frenger) * Added max_lag parameter to the two xcorr functions in sigfun.cpp and a sigfun_test.cpp file (Tobias Tynderfeldt) * Added set_metric and set_iterations members to Turbo_Codec (Pål Frenger) * Added a new templated Circular_Buffer class (Tobias Tynderfeldt) * Added "scaleopt" parameter to the two xcorr functions in sigfun.cpp (Pål Frenger) * Added two new xcorr void functions: "void xcorr(x,out,maxlag,scaleopt)" and "void xcorr(x,y,out,maxlag,scaleopt)" (Pål Frenger) * Added "Array::operator==" and "Array::operator!=" for "T" and "Array" (Pål Frenger) * Added "Sparse_Vec" and "Sparse_Mat" functionality: (Tobias Tynderfeldt) - set_size(int,int=-1): New default setting: no reallocation of memory when changing the vector/matrix size (also for Sparse_Mat) - zeros() & clear(): Remove all non-zero elements (also for Sparse_Mat) - zero_elem(int), zero_nz_elem(int), clear_elem(int) & clear_nz_elem(int): set element to zero (also for Sparse_Mat) - add_elem(int i,T v), add_nz_elem(int i,T v): add v to element/non-zero element i - operator+=(Sparse_Vec), operator+=(Vec), operator+=(Sparse_Vec) & operator+=(Vec): Addition and subtraction with another Vec/Sparse_Vec (also for Sparse_Mat) - operator*=(T) & operator/=(T): Multiplication and division by a scalar (also for Sparse_Mat) - operator*=(T) & operator/=(T): Multiplication and division by a scalar (also for Sparse_Mat) - set(ivec,Vec) & set_new(ivec,Vec) : set a whole vector of elements * Added a "string to_str(const T &)" function that converts anything to a string (Håkan Eriksson) * Added Sparse_Vec::add(const ivec& index_vec, Vec& v) that adds the vector v to the elements specifyed in index_vec. (Tobias Tynderfeldt) Bugfixes ======== * Added "#ifdef HAVE_LAPACK" in inv.cpp so that IT++ can be compiled even without LAPACK. (Tony Ottosson) * Added header bessel_internal.h in chebevl.cpp so that it is possible to use it++ as a shared library. (Tony Ottosson) * Fixed so that operator/(cvec, double) works. Was defined inline, which is not correct. (Tony Ottosson) * Fixed bug [685435] in VQ::encode(vec, long). (Tony Ottosson) * Fixed so that all test programs compile and run even without LAPACK and CBLAS (tests that require LAPACK and CBLAS are ignored) (Pål Frenger) * Added #include "base/sigfun.h" to itbase.h (Pål Frenger) * Fixed bug in "vec xcorr(x,y)" (Pål Frenger) * Fixed bug in "Sparse_Vec operator==(Sparse_Vec)" (Tobias Tynderfeldt) * Fixed minor setup bug in Pulse_Shape (Håkan Eriksson) * BUG 723546: Changed log2(x) to logb(2.0,x) in modulator.cpp, specmat.cpp, transforms.cpp, and galois.cpp (because log2 does not work in Cygwin) (Pål Frenger) * BUG 723078: Fixed the bug in matfunc.cpp (lininterp) (Pål Frenger) * Fixed bug in eig(mat, cvec, cmat) that made program crash in some rare cases (Tony Ottosson) Internal changes ================ * Removed use of "using namespace std". Instead expicitly stating the used entities. (Tony Ottosson) * Changed Vec and Mat to Vec and Mat to avoid collision with T() function. (Tony Ottosson) * Updates to egolay.cpp, hamming.cpp, and spread.cpp to match change of operator*(vec, mat). (Tony Ottosson) * Moved templated code in vec.x from the .cpp file to the .h file (Pål Frenger) * Moved templated code in mat.x from the .cpp file to the .h file (Pål Frenger) * Moved templated code in svec.x from the .cpp file to the .h file (Pål Frenger) * Moved templated code in smat.x from the .cpp file to the .h file (Pål Frenger) * Moved templated code in matfunc.x from the .cpp file to the .h file (Pål Frenger) * Moved templated code in filter.x from the .cpp file to the .h file (Pål Frenger) * Moved templated code in interleaver.x from the .cpp file to the .h file (Pål Frenger) * Moved templated code in pulse_shape.x from the .cpp file to the .h file (Pål Frenger) * Speed-up by approximately 120% in the decode_tail() and decode_tailbite() of Convolutional_Code for large constraint-lengths. For small constraint-lengths and low code rate the gain is less. Memory may be a problem for very low rates (<1/10). (Tony Ottosson) * Fixes for Mac OSX (David Astely): - src/Makefile: always exeute a ranlib on the created archive libxxx.a - base/include/vec.h: add "using std::complex;" since complex is defined in this namespace in g++-v3 header files - base/include/mat.h: add "using std::complex;" since complex is defined in this namespace in g++-v3 header files - src/base/lapack.h: put everything inside a #ifndef NO_LAPACK, typedef of double_complex has been removed from itconfig.h - include/base/elmatfunc.h: on my mac, erf, erfc, asinh, acosh, atanh are defined in math.c, and therefore not defined in std namespace, they are defined in math.h (and not in cmath), changed std::erf into ::erf etc - src/base/random.cpp: change double_complex into complex - src/base/bessel/hyperg.cpp: changed std::gamma to ::gamma, since gamma is defined in math.h on mac - include/comm/interleave.h: changed std::pow(order,2) into std::pow(double(order),2) to resolve typecast, is this apple gcc 3.1 specific, or gcc 3.1 specific? seems to work fine with gcc 3.3 - src/comm/spread.cpp: changed std::floor(symbols.length()/L) to std::floor(double(symbols.length()/L)) on line 131 * Added "using std::complex" in copy_vector.cpp (David Astely) * tests/audiodev_test.cpp: modified to #if defined(__CYGWIN__) || defined(__APPLE__) and printed that IT++ does not support sound in the Cygwin and Apple Environments... (David Astely) * tests/limits_test.cpp: comment away line with test of long double... (David Astely) ----------------------------------------------------------------------------------------------------------- IT++ version 3.7.0 ================== Changes of interface ==================== * Changed order of high and low arguments in the randi() functions. Now "int randi(low, high)". * Removed old srccode library. Totally revised. * SVD now only available when using LAPACK * Removed levinson(), lerouxguegen(), lpc(). Not well-tested and not documented. * Filter classes and functions are now templated * Pulse-shaping classes interface has been templated and the behavior is changed slightly so that it is possible to pulse-shape a continuous signal. * Changed the options of the configure script for LAPACK and CBLAS from opt-in to opt-out. New features ============ * LU, SVD, Cholesky and eigenvalues/vectors for real and complex matrices using LAPACK * Added new test programs in tests directory * Added upsample() and lininterp() functions. * Added determinant calculation for complex matrices using LAPACK * Added matrix inverse of complex matrices using LAPACK * Added operations (+, -, *, /) between ivec and double and double_complex * The configure script now autodetects if atlapack (the IT++ ATLAS and LAPACK distribution) is present in it++/lib. * Added support for Array in it_file for types T1={int, long_long, float, double, float_complex, double_complex}. T2={vec, ivec, llvec, bvec, cvec, mat, imat, llmat, bmat, cmat, string}. load_it.m is also modified to be able to read the T1 types into matlab vectors. * Filter classes and functions are now templated making possible e.g. to filter complex data in a real filter. * The functionality of the Parser class have been significantly improved. * Added support for vectors for bessel functions. Bugfixes ======== * Fixed bug in mat::operator!=(mat) and mat::operator==(mat) * Fixed bugs in test-programs * Fixed bug in determinant calculation * Fixed bug in modgfx(GFX, GFX) * Fixed bug in modulator_1d::set(). * Fixed bugs in Array::shift_left() and Array::swap() * Fixed bug in save_it.m for saving complex matrices * Fixed compilation error caused in galois.h using VC++. * Fixed bugs in it_file. Problems when saving as float and reading as double and vice versa. Removed reading a double into a float. The same for double_complex if saved as float_complex. * Fixed bug in operator<<(ostream &, Mat) so that it works also for other streams than stdout. * Fixed so that vec::split() can split a vector at final position and return an empty vector. * Fixed so that svec<> and smat<> works for double_complex using VC++. * Closed bug [ 667439 ] Calculation of branch metrics for MAP * Closed bug [ 664984 ] Undeclared variable "j" in insertion_sort() * Closed bug [ 667710 ] Bug in Cross_Interleave Internal changes ================ * Changed storage order for matrices form Row Major to Column Major. The main reason is to simplify efficient use of LAPACK. * Added instantiations in smat.cpp * Moved determinant functions from matfunc.h/.cpp to separate file det.h/.cpp * Moved matrix inverse routines from matfunc.h/.cpp to separate file inv.h/.cpp * Some small fixes so that it++ compile out of the box with g++3.2 (mainly in vec.cpp and mat.cpp changing from strstream to stringstream). * Small restructuring of bessel functions internally to better support VC++. ----------------------------------------------------------------------------------------------------------- IT++ version 3.6.6 ================== New features ============ * Added the functions "cvec exp(cvec)" and "cmat exp(cmat)" * Added concat functions with 4 and 5 vector arguments. * Added the "operator/(T, Vec)" operator and the "Vec elem_div(T, Vec)" function. * Added modulate/demodulate functions in OFDM with a return variable as argument. Bugfixes ======== * Fixed a bug in CRC_Code::CRC_Code(string). Introduced in version 3.6.5. * Fixed a stupid bug in src/comm/turbo.cpp that caused only the first coding block was decoded and the others were ignored (introduced in version 3.6.5). * Fixed a bug in bmat(string) that caused bmat("1 1;0 0;0 0,0 0;0 0;0 0;0 0;0 0;0 0") to hang the computer. Other changes ============= * Significantly improved reading speed in "load_it.m" matlab function when reading cvec and cmat types. * Normalization of OFDM now includes the cyclic prefix. ----------------------------------------------------------------------------------------------------------- IT++ version 3.6.5 ================== Changes of interface ==================== * Changed order of High and Low arguments in the randi() functions. Bugfixes ======== * Fixed a bug in the CRC_Code class. * Reversed the order of the CRC parity bits for WCDMA CRC polynomials in the CRC_Code class in order to comply with the 3GPP standard. * Small fix in median(). Other changes ============= * Turbo decoder speed improvement of about 20% for R=1/3. The decoder soft values have also been verified against two independent implementations. ----------------------------------------------------------------------------------------------------------- IT++ version 3.6.4 ================== Bugfixes ======== * Fixed bug in mat::set_submatrix(int,int,int,int, T) * Fixed bug in wcdma_turbo_interleaver_sequence ----------------------------------------------------------------------------------------------------------- IT++ version 3.6.3 ================== Changes of interface ==================== * The metric classes for convolutional decoders are removed. It is now assumed that the signal fed to the decoder is of log-MAP (or ML) form. For BPSK and AWGN channel this means as before that the received signal can be fed through directly. Otherwise use the new demodulate_soft_bits() functions found in the modulator classes. Bugfixes ======== * Bugfix in Punctured_Convolutional_Code in functions decode() and decode_tail(). * Updated Visual C++ project file so that include paths are set correctly. Should now compile directly out of the box. New features ============ * The function reshape() was added to be able to reshape vectors and matrices (similar to matlab) * Added lots of new operators to ease the use of different types. E.g. "cmat operator*(cmat, mat)" * Added possibility to modulate and demodulate to cvec using BPSK modulator class. * Added demodulate_soft_bits() functions to BPSK, QPSK, PSK and QAM calculating the log-MAP bit estimate. Other changes ============= * Speed improvment of 25-30% in decoding of convolutional codes. * Improved support for CBLAS in it-config script and internally for vectors and matrices. * Added beginning support for LAPACK. ----------------------------------------------------------------------------------------------------------- IT++ version 3.6.2 ================== Bugfixes ======== * mat::set_submatrix() didn't always work correctly (Tony Ottosson) * mod(k,n) in scalfunc.cpp now works when n==0 (Pål Frenger) New features ============ * Added "int size(Vec)" function in matfunc.h (Pål Frenger) * Added "elem_mult(vec,vec,vec)" and "elem_mult(vec,vec,vec,vec)" in vec.h and vec.cpp (Pål Frenger) ----------------------------------------------------------------------------------------------------------- IT++ version 3.6.1 ================== Bugfixes ======== * Fixed definition of sgn() and sign() * Fixed export declaration that caused linking problems using libit++.so * Improved configuration of Visual C++ project file. ----------------------------------------------------------------------------------------------------------- IT++ version 3.6.0 ================== Changes of interface ==================== * The code tree has been restructured. Most code in ./misc ./math and ./sigproc is now included in ./base. Furthermore is most code in ./image ./audio and ./quantize included in ./srccode. ./comm has not changed. The include files has been renamed accordingly. Thus use itbase.h, itcomm.h or itsrccode.h. * shallow of vec and mat removed. That is, not possible to write a(0,10)=b anymore. Still possible to write b=a(0,10) though. * rand(), randn(), randn_c(), and randu() have modified interface. They all produce the standard (0,1) random variables. In most cases (if not all) the compiler will warn for the changes. * QPSK_45 changed name to QPSK and old QPSK removed. This will give different behavior if using the QPSK class. * ifft() is now normalized with 1/N. * Nused is removed in the OFDM class. * Removed load_bin, save_bin, load_ascii, and save_ascii (i.e. deleted matvecfile.h/.cpp). * base/svec.h and base svec.cpp: Changed subvec to get_subvector * base/smat.h and base/smat.cpp: Changed submat to get_submatrix, and submat_cols to get_submatrix_cols * rec_syst_conv_code.h and rec_syst_conv_code.cpp: Revised implementation and interface. Several bug fixes. Added log-MAP and log-MAX decoding. * turbo.h and turbo.cpp: Revised implementation and interface. Removed puncturing operations from the class. * Removed roots() (in poly.h) * Removed srccode/lsp.h functions completely. * Cleaned-up srccode/spcfun.h and srccode/spcfun.cpp and removed som very specific functions at the same time. * Removed eigenvalue routines due to license conflict. Other changes ============= * Improved speed in random number generation. * Improved speed in BPSK and QPSK modulators. * in configure script: Changed -fpic to -fPIC New features ============ * FFTW package now included. Faster FFTs and of arbitrary sizes. * CBLAS enabled code (if configured with the cblas flag) for faster linear algebra. * CRC_Code class added in comm. * A new block error rate counter class (BLERC) added. * Added "long mod(long k, long n)" and "long gcd(long a, long b)" in scalfunc.h/.cpp. * Added WCDMA spreading codes: "smat wcdma_spreading_codes(int SF)" in sequence.h/.cpp. * Added several more bessel functions. * complex variables now print as in matlab. * Added pow2() and pow10(). * Added _elem() member function in Vec<> and Mat<> to access elements without boundary check. Mostly for internal use. * Added RNG_get_state() and RNG_set_state() to be able to better control the random generator kernel. Internal Changes ================ * Moved content in berc.h and berc.cpp to error_counters.h and error_counters.cpp.