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

◆ generate_kernels()

struct sparse_arr * generate_kernels ( struct cq_kernel_cfg cfg)

Definition at line 88 of file cq_kernel.c.

88 {
89 float *freq = (float*)malloc(cfg.bands * sizeof(float));
90 _generate_center_freqs(freq, cfg.bands, cfg.fmin, cfg.fmax);
91
92 kiss_fftr_cfg fft_cfg = kiss_fftr_alloc(cfg.samples, 0, NULL, NULL);
93 struct sparse_arr* kernels = (struct sparse_arr*)malloc(cfg.bands*sizeof(struct sparse_arr));
94 kiss_fft_cpx *temp_kernel = (kiss_fft_cpx*)malloc(cfg.samples*sizeof(kiss_fft_cpx));
95
96 for(int i = 0; i < cfg.bands; i++){
97 // Clears temp_kernel before calling _generate_kernel on it
98 for(int i = 0; i < cfg.samples; i++) temp_kernel[i].r = temp_kernel[i].i = 0;
99
100 _generate_kernel(temp_kernel, fft_cfg, cfg.window_type, freq[i], cfg.fmin, cfg.fs, cfg.samples);
101
102 // Counts number of elements with a complex magnitude above cfg.min_val in temp_kernel
103 int n_elems = 0;
104 for(int j = 0; j < cfg.samples; j++) if(_mag(temp_kernel[j]) > cfg.min_val) n_elems++;
105
106 // Generates sparse_arr holding n_elems sparse_arr_elem's
107 kernels[i].n_elems = n_elems;
108 kernels[i].elems = (struct sparse_arr_elem*)malloc(n_elems*sizeof(struct sparse_arr_elem));
109
110 // Generates sparse_arr_elem's from complex values counted before
111 int k = 0;
112 for(int j = 0; j < cfg.samples; j++){
113 if(_mag(temp_kernel[j]) > cfg.min_val){
114 kernels[i].elems[k].val = temp_kernel[j];
115 kernels[i].elems[k].n = j;
116 k++;
117 }
118 }
119 }
120
121 free(fft_cfg);
122 free(temp_kernel);
123 free(freq);
124
125 return kernels;
126}
kiss_fft_scalar _mag(kiss_fft_cpx x)
Definition cq_kernel.c:84
void _generate_kernel(kiss_fft_cpx kernel[], kiss_fftr_cfg cfg, enum window_type window_type, float f, float fmin, float fs, int N)
Definition cq_kernel.c:52
void _generate_center_freqs(float freq[], int bands, float fmin, float fmax)
Definition cq_kernel.c:25
struct sparse_arr_elem * elems
Definition cq_kernel.h:56
kiss_fft_cpx val
Definition cq_kernel.h:52
int n_elems
Definition cq_kernel.h:55
enum window_type window_type
Definition cq_kernel.h:42
kiss_fft_scalar min_val
Definition cq_kernel.h:43
kiss_fftr_cfg kiss_fftr_alloc(int nfft, int inverse_fft, void *mem, size_t *lenmem)
Definition kiss_fftr.c:21
struct kiss_fftr_state * kiss_fftr_cfg
Definition kiss_fftr.h:26

References _generate_center_freqs(), _generate_kernel(), _mag(), cq_kernel_cfg::bands, sparse_arr::elems, cq_kernel_cfg::fmax, cq_kernel_cfg::fmin, cq_kernel_cfg::fs, kiss_fftr_alloc(), cq_kernel_cfg::min_val, sparse_arr_elem::n, sparse_arr::n_elems, cq_kernel_cfg::samples, sparse_arr_elem::val, and cq_kernel_cfg::window_type.

Referenced by fl::FFTContext::FFTContext().

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