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

◆ _generate_kernel()

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

Definition at line 52 of file cq_kernel.c.

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

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: