File indexing completed on 2024-05-12 03:47:50

0001 /*
0002     File                 : nsl_dft.h
0003     Project              : LabPlot
0004     Description          : NSL discrete Fourier transform functions
0005     --------------------------------------------------------------------
0006     SPDX-FileCopyrightText: 2016 Stefan Gerlach <stefan.gerlach@uni.kn>
0007     SPDX-License-Identifier: GPL-2.0-or-later
0008 */
0009 
0010 #ifndef NSL_DFT_H
0011 #define NSL_DFT_H
0012 
0013 #include "nsl_sf_window.h"
0014 #include <stdlib.h>
0015 
0016 /* DFT result type:
0017     real = x
0018     imag = y
0019     magnitude = sqrt(x^2+y^2)
0020     amplitude = magnitude/n
0021     power = (x^2+y^2)/n aka periodigram, SSA
0022     phase = atan(y/x)
0023     dB = 20.*log_10(amplitude)
0024     normdB = dB - max(dB)
0025     squaremagnitude = magnitude^2
0026     squareamplitude = amplitude^2 aka MSA
0027     raw = halfcomplex GSL output (also for FFTW)
0028     TODO: PSD (aka TISA)
0029  */
0030 #define NSL_DFT_RESULT_TYPE_COUNT 11
0031 typedef enum {
0032     nsl_dft_result_magnitude,
0033     nsl_dft_result_amplitude,
0034     nsl_dft_result_real,
0035     nsl_dft_result_imag,
0036     nsl_dft_result_power,
0037     nsl_dft_result_phase,
0038     nsl_dft_result_dB,
0039     nsl_dft_result_normdB,
0040     nsl_dft_result_squaremagnitude,
0041     nsl_dft_result_squareamplitude,
0042     nsl_dft_result_raw
0043 } nsl_dft_result_type;
0044 extern const char* nsl_dft_result_type_name[];
0045 /* x axis scaling */
0046 #define NSL_DFT_XSCALE_COUNT 3
0047 typedef enum { nsl_dft_xscale_frequency, nsl_dft_xscale_index, nsl_dft_xscale_period } nsl_dft_xscale;
0048 extern const char* nsl_dft_xscale_name[];
0049 
0050 /* transform data of size n. result in data
0051     calculates the two-sided DFT
0052 */
0053 int nsl_dft_transform(double data[], size_t stride, size_t n, int two_sided, nsl_dft_result_type type);
0054 /* windowed version */
0055 int nsl_dft_transform_window(double data[], size_t stride, size_t n, int two_sided, nsl_dft_result_type type, nsl_sf_window_type window);
0056 
0057 #endif /* NSL_DFT_H */