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 */