File indexing completed on 2024-05-12 15:27:06

0001 /***************************************************************************
0002     File                 : nsl_corr.h
0003     Project              : LabPlot
0004     Description          : NSL discrete correlation functions
0005     --------------------------------------------------------------------
0006     Copyright            : (C) 2018 by Stefan Gerlach (stefan.gerlach@uni.kn)
0007 
0008  ***************************************************************************/
0009 
0010 /***************************************************************************
0011  *                                                                         *
0012  *  This program is free software; you can redistribute it and/or modify   *
0013  *  it under the terms of the GNU General Public License as published by   *
0014  *  the Free Software Foundation; either version 2 of the License, or      *
0015  *  (at your option) any later version.                                    *
0016  *                                                                         *
0017  *  This program is distributed in the hope that it will be useful,        *
0018  *  but WITHOUT ANY WARRANTY; without even the implied warranty of         *
0019  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *
0020  *  GNU General Public License for more details.                           *
0021  *                                                                         *
0022  *   You should have received a copy of the GNU General Public License     *
0023  *   along with this program; if not, write to the Free Software           *
0024  *   Foundation, Inc., 51 Franklin Street, Fifth Floor,                    *
0025  *   Boston, MA  02110-1301  USA                                           *
0026  *                                                                         *
0027  ***************************************************************************/
0028 
0029 #ifndef NSL_CORR_H
0030 #define NSL_CORR_H
0031 
0032 #include <stdlib.h>
0033 
0034 #define NSL_CORR_TYPE_COUNT 2
0035 /* linear (zero-padded), circular */
0036 typedef enum {nsl_corr_type_linear, nsl_corr_type_circular} nsl_corr_type_type;
0037 extern const char* nsl_corr_type_name[];
0038 
0039 #define NSL_CORR_NORM_COUNT 4
0040 /* how to normalize (see octave)
0041  * biased - 1/N
0042  * unbiased - 1/(N-|m|)
0043  * coeff - 1/sqrt(R_xx(0) R_yy(0)) = 1/sqrt(sum x_i^2 sum y_i^2) [used in Origin]
0044  * */
0045 typedef enum {nsl_corr_norm_none, nsl_corr_norm_biased, nsl_corr_norm_unbiased, nsl_corr_norm_coeff} nsl_corr_norm_type;
0046 extern const char* nsl_corr_norm_name[];
0047 
0048 
0049 int nsl_corr_correlation(double s[], size_t n, double r[], size_t m, nsl_corr_type_type, nsl_corr_norm_type normalize, double out[]);
0050 
0051 /* linear/circular correlation using FFT method
0052  * s and r are untouched
0053  */
0054 int nsl_corr_fft_type(double s[], size_t n, double r[], size_t m, nsl_corr_type_type, nsl_corr_norm_type normalize, double out[]);
0055 /* actual FFT method calculation using zero-padded arrays
0056  * uses FFTW if available and GSL otherwise
0057  * s and r are overwritten
0058  */
0059 #ifdef HAVE_FFTW3
0060 int nsl_corr_fft_FFTW(double s[], double r[], size_t n, double out[]);
0061 #endif
0062 int nsl_corr_fft_GSL(double s[], double r[], size_t n, double out[]);
0063 
0064 #endif /* NSL_CORR_H */