Go to the documentation of this file.
4 #ifndef ACC_ALGORITHM_H_
5 #define ACC_ALGORITHM_H_
157 void acc_algorithm_apply_filter(
const float *a,
const float *filt_data, uint16_t filt_rows, uint16_t filt_cols,
const float *b,
158 const float *data, uint16_t data_rows, uint16_t data_cols,
float *output, uint16_t output_length);
176 const float *b,
const float complex *data, uint16_t data_rows, uint16_t data_cols,
177 float complex *output, uint16_t output_length);
191 uint16_t end_point,
float complex *sweep);
203 void acc_algorithm_rfft(
const float *data, uint16_t data_length, uint16_t length_shift,
float complex *output, uint16_t stride);
216 void acc_algorithm_rfft_matrix(
const float *data, uint16_t rows, uint16_t cols, uint16_t length_shift,
float complex *output, uint16_t axis);
228 void acc_algorithm_fft(
const float complex *data, uint16_t data_length, uint16_t length_shift,
float complex *output, uint16_t stride);
241 void acc_algorithm_fft_matrix(
const float complex *data, uint16_t rows, uint16_t cols, uint16_t length_shift,
float complex *output, uint16_t axis);
344 const uint16_t sweeps_per_frame,
345 const uint16_t num_points,
346 int32_t *work_buffer);
388 uint16_t segment_length,
389 float complex *data_buffer,
390 float complex *fft_out,
393 uint16_t length_shift,
415 uint16_t data_length,
416 uint16_t segment_length,
417 float complex *data_buffer,
418 float complex *fft_out,
421 uint16_t length_shift,
439 uint16_t data_length,
441 uint16_t cfar_win_length,
442 uint16_t cfar_guard_length,
443 float cfar_sensitivity,
471 const float *energies,
472 const uint16_t *peak_idxs,
492 const float *velocities,
493 const float *energies,
494 const uint16_t *peak_idxs,
496 float *merged_velocities,
497 float *merged_energies,
498 uint16_t merged_peaks_length,
499 uint16_t *num_merged_peaks);
550 bool acc_algorithm_find_peaks(
const float *abs_sweep,
const uint16_t data_length,
const uint32_t *threshold_check, uint16_t *peak_idxs,
551 uint16_t peak_idxs_length, uint16_t *num_peaks);
float acc_algorithm_exp_smoothing_coefficient(float fs, float tc)
Calculate exponential smoothing coefficient.
void acc_algorithm_fftshift(float *data, uint16_t data_length, uint16_t stride)
Shift the zero-frequency component to the center.
void acc_algorithm_unwrap(float *data, uint16_t data_length)
Unwraps a signal by changing elements which have an absolute difference from their predecessor of mor...
acc_config_profile_t
Profile.
float acc_algorithm_get_distance_m(uint16_t step_length, uint16_t start_point, float base_step_length_m, uint16_t idx)
Calculate distance for a point at an index.
Data type for interger-based representation of complex numbers.
void acc_algorithm_double_buffering_frame_filter(acc_int16_complex_t *frame, const uint16_t sweeps_per_frame, const uint16_t num_points, int32_t *work_buffer)
Double buffering frame filter.
void acc_algorithm_welch(const float complex *data, uint16_t data_length, uint16_t segment_length, float complex *data_buffer, float complex *fft_out, float *psd, const float *window, uint16_t length_shift, float fs, uint16_t stride)
Estimate power spectral density using Welch’s method.
float acc_algorithm_interpolate_peaks_equidistant(const float *y, float x_start, float x_delta, uint16_t peak_idx)
Interpolate equidistant peaks.
void acc_algorithm_fft_matrix(const float complex *data, uint16_t rows, uint16_t cols, uint16_t length_shift, float complex *output, uint16_t axis)
1D Fast Fourier Transform for input matrix
void acc_algorithm_roll_and_push(float *data, uint16_t data_length, float element)
Roll array elements and push new element last.
float acc_algorithm_get_peak_velocity(const float *velocities, const float *energies, const uint16_t *peak_idxs, uint16_t num_peaks, float limit)
Find the velocity of the peak with the largest amplitude, prioritizing peaks with a velocity over the...
acc_config_profile_t acc_algorithm_select_profile(int32_t start_point, float base_step_length)
Select the highest possible profile without interference of direct leakage.
float acc_algorithm_interpolate_peaks(const float *y, const float *x)
Interpolate peak.
void acc_algorithm_fftfreq(uint16_t n, float d, float *freqs)
Calculate the Fast Fourier Transform sample frequencies.
void acc_algorithm_welch_matrix(const float complex *data, uint16_t rows, uint16_t cols, uint16_t segment_length, float complex *data_buffer, float complex *fft_out, float *psds, const float *window, uint16_t length_shift, float fs)
Estimate power spectral density (PSD) using Welch’s method along row dimensions.
acc_config_prf_t
Pulse Repetition Frequency.
void acc_algorithm_fftshift_matrix(float *data, uint16_t rows, uint16_t cols)
Shift the zero-frequency component to the center along row dimensions.
bool acc_algorithm_find_peaks(const float *abs_sweep, const uint16_t data_length, const uint32_t *threshold_check, uint16_t *peak_idxs, uint16_t peak_idxs_length, uint16_t *num_peaks)
Find peaks above threshold.
void acc_algorithm_rfftfreq(uint16_t n, float d, float *freqs)
Calculate the real Fast Fourier Transform sample frequencies.
void acc_algorithm_fft(const float complex *data, uint16_t data_length, uint16_t length_shift, float complex *output, uint16_t stride)
1D Fast Fourier Transform for complex input
void acc_algorithm_butter_lowpass(float freq, float fs, float *b, float *a)
Design a 2nd order digital Butterworth lowpass filter.
uint16_t acc_algorithm_argmax(const float *data, uint16_t data_length)
Find index of largest element in the array.
void acc_algorithm_hann(uint16_t n, float *window)
Calculate non-symmetrical hann window for a specified number of points.
void acc_algorithm_rfft_matrix(const float *data, uint16_t rows, uint16_t cols, uint16_t length_shift, float complex *output, uint16_t axis)
1D Fast Fourier Transform for real input matrix
uint16_t acc_algorithm_get_distance_idx(const float *data, uint16_t cols, uint16_t rows, uint16_t middle_idx, uint16_t half_slow_zone)
Find the index of the distance column containing the largest amplitude, disregarding amplitudes prese...
void acc_algorithm_mean_sweep(const acc_int16_complex_t *frame, uint16_t num_points, uint16_t sweeps_per_frame, uint16_t start_point, uint16_t end_point, float complex *sweep)
Calculate mean sweep of a frame from start_point to end_point.
void acc_algorithm_apply_filter(const float *a, const float *filt_data, uint16_t filt_rows, uint16_t filt_cols, const float *b, const float *data, uint16_t data_rows, uint16_t data_cols, float *output, uint16_t output_length)
Apply filter coefficients to filtered data matrix and data matrix.
float acc_algorithm_fftfreq_delta(uint16_t n, float d)
Calculate delta between frequency bins in rfft.
acc_config_prf_t acc_algorithm_select_prf(int16_t breakpoint, acc_config_profile_t profile, float base_step_length)
Select a suitable PRF given a breakpoint and profile.
void acc_algorithm_lfilter_matrix(const float *b, const float *a, float *data, uint16_t rows, uint16_t cols)
Filter data along row dimension.
void acc_algorithm_roll_and_push_f32_matrix(float *data, uint16_t rows, uint16_t cols, const float *column, bool pos_shift)
Roll row elements and push a new column.
void acc_algorithm_rfft(const float *data, uint16_t data_length, uint16_t length_shift, float complex *output, uint16_t stride)
1D Fast Fourier Transform for real input
float acc_algorithm_get_fwhm(acc_config_profile_t profile)
Get the envelope Full Width Half Maximum in meters given a profile.
float complex acc_algorithm_cdiv(float complex num, float complex denom)
Divide complex number num / denum.
void acc_algorithm_butter_bandpass(float min_freq, float max_freq, float fs, float *b, float *a)
Design a 2nd order digital Butterworth bandpass filter.
float acc_algorithm_calculate_cfar(const float *data, uint16_t data_length, uint16_t middle_idx, uint16_t cfar_win_length, uint16_t cfar_guard_length, float cfar_sensitivity, uint16_t idx)
Calculate CFAR threshold.
void acc_algorithm_lfilter(const float *b, const float *a, float *data, uint16_t data_length)
Filter data with a digital filter.
void acc_algorithm_roll_and_push_f32_complex_matrix(float complex *data, uint16_t rows, uint16_t cols, const float complex *column, bool pos_shift)
Roll row elements and push a new column.
void acc_algorithm_hamming(uint16_t n, float *window)
Calculate hamming window for a specified number of points.
void acc_algorithm_apply_filter_complex(const float *a, const float complex *filt_data, uint16_t filt_rows, uint16_t filt_cols, const float *b, const float complex *data, uint16_t data_rows, uint16_t data_cols, float complex *output, uint16_t output_length)
Apply filter coefficients to filtered data matrix and data matrix.
bool acc_algorithm_merge_peaks(float max_peak_separation, const float *velocities, const float *energies, const uint16_t *peak_idxs, uint16_t num_peaks, float *merged_velocities, float *merged_energies, uint16_t merged_peaks_length, uint16_t *num_merged_peaks)
Merges peaks.