FastLED 3.9.15
Loading...
Searching...
No Matches

◆ _generate_kernel()

void _generate_kernel ( kiss_fft_cpx kernel[],
kiss_fftr_cfg cfg,
enum window_type window_type window_type ,
float f,
float fmin,
float fs,
int N )

Definition at line 53 of file cq_kernel.cpp.

53 {
54 // Generates window in the center and zero everywhere else
55 float factor = f/fmin;
56 int N_window = N/factor; // Scales inversely with frequency (see CQT paper)
57 kiss_fft_scalar *time_K = (kiss_fft_scalar*)calloc(N, sizeof(kiss_fft_scalar));
58
59 switch(window_type){
60 case HAMMING:
61 _generate_hamming(&time_K[(N-N_window)/2], N_window);
62 break;
63 case GAUSSIAN:
64 _generate_guassian(&time_K[(N-N_window)/2], N_window);
65 break;
66 }
67
68 // Fills window with f Hz wave sampled at fs Hz
69 for(int i = 0; i < N; i++) time_K[i] *= cos(2*M_PI*(f/fs)*(i-N/2));
70
71 #ifdef FIXED_POINT // If using fixed point, just scale inversely to N after FFT (don't normalize)
72 kiss_fftr(cfg, time_K, kernel); // Outputs garbage for Q31
73 for(int i = 0; i < N; i++){
74 kernel[i].r *= factor;
75 kernel[i].i *= factor;
76 }
77 #else // Else if floating point, follow CQT paper more exactly (normalize with N before FFT)
78 for(int i = 0; i < N; i++) time_K[i] /= N_window;
79 kiss_fftr(cfg, time_K, kernel);
80 #endif
81
82 free(time_K);
83}
void _generate_guassian(kiss_fft_scalar window[], int N)
Definition cq_kernel.cpp:42
void _generate_hamming(kiss_fft_scalar window[], int N)
Definition cq_kernel.cpp:31
window_type
Definition cq_kernel.h:26
@ HAMMING
Definition cq_kernel.h:27
@ GAUSSIAN
Definition cq_kernel.h:28
#define kiss_fft_scalar
Definition kiss_fft.h:63
kiss_fft_scalar r
Definition kiss_fft.h:73
kiss_fft_scalar i
Definition kiss_fft.h:74
void kiss_fftr(kiss_fftr_cfg st, const kiss_fft_scalar *timedata, kiss_fft_cpx *freqdata)
Definition kiss_fftr.cpp:67
#define M_PI
Definition math_macros.h:93

References _generate_guassian(), _generate_hamming(), GAUSSIAN, HAMMING, kiss_fft_cpx::i, kiss_fft_scalar, kiss_fftr(), M_PI, and kiss_fft_cpx::r.

Referenced by generate_kernels().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: