diff --git a/workspace/01_Plotting_Signals_with_LogicAnalyzer/.settings/language.settings.xml b/workspace/01_Plotting_Signals_with_LogicAnalyzer/.settings/language.settings.xml index e26db12..4e5e14e 100644 --- a/workspace/01_Plotting_Signals_with_LogicAnalyzer/.settings/language.settings.xml +++ b/workspace/01_Plotting_Signals_with_LogicAnalyzer/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/workspace/02_UART_Driver/.settings/language.settings.xml b/workspace/02_UART_Driver/.settings/language.settings.xml index e26db12..4e5e14e 100644 --- a/workspace/02_UART_Driver/.settings/language.settings.xml +++ b/workspace/02_UART_Driver/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/workspace/03_Plotting_Signals_with_SerialPlotter/.settings/language.settings.xml b/workspace/03_Plotting_Signals_with_SerialPlotter/.settings/language.settings.xml index e26db12..4e5e14e 100644 --- a/workspace/03_Plotting_Signals_with_SerialPlotter/.settings/language.settings.xml +++ b/workspace/03_Plotting_Signals_with_SerialPlotter/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/workspace/04_CMSIS_DSP/.settings/language.settings.xml b/workspace/04_CMSIS_DSP/.settings/language.settings.xml index e26db12..4e5e14e 100644 --- a/workspace/04_CMSIS_DSP/.settings/language.settings.xml +++ b/workspace/04_CMSIS_DSP/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/workspace/04_CMSIS_DSP/04_CMSIS_DSP.launch b/workspace/04_CMSIS_DSP/04_CMSIS_DSP.launch new file mode 100644 index 0000000..69cfb86 --- /dev/null +++ b/workspace/04_CMSIS_DSP/04_CMSIS_DSP.launch @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/workspace/05_CMSIS_DSP_float32/.settings/language.settings.xml b/workspace/05_CMSIS_DSP_float32/.settings/language.settings.xml index e26db12..4e5e14e 100644 --- a/workspace/05_CMSIS_DSP_float32/.settings/language.settings.xml +++ b/workspace/05_CMSIS_DSP_float32/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/workspace/06_Signal_Mean_Variance_Std/.settings/language.settings.xml b/workspace/06_Signal_Mean_Variance_Std/.settings/language.settings.xml index e26db12..4e5e14e 100644 --- a/workspace/06_Signal_Mean_Variance_Std/.settings/language.settings.xml +++ b/workspace/06_Signal_Mean_Variance_Std/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/workspace/07_Signal_Std_CMSIS_DSP/.settings/language.settings.xml b/workspace/07_Signal_Std_CMSIS_DSP/.settings/language.settings.xml index e26db12..4e5e14e 100644 --- a/workspace/07_Signal_Std_CMSIS_DSP/.settings/language.settings.xml +++ b/workspace/07_Signal_Std_CMSIS_DSP/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/workspace/08_Conv_Impulse_Response/.settings/language.settings.xml b/workspace/08_Conv_Impulse_Response/.settings/language.settings.xml index e26db12..4e5e14e 100644 --- a/workspace/08_Conv_Impulse_Response/.settings/language.settings.xml +++ b/workspace/08_Conv_Impulse_Response/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/workspace/08_Conv_Impulse_Response/Src/main.c b/workspace/08_Conv_Impulse_Response/Src/main.c index b051c34..d7d89ec 100644 --- a/workspace/08_Conv_Impulse_Response/Src/main.c +++ b/workspace/08_Conv_Impulse_Response/Src/main.c @@ -12,6 +12,7 @@ #define OFFSET2 10 extern float _5hz_signal[HZ_5_SIG_LEN]; + extern float32_t _1kHz_15kHz_f32_signal[KHZ_1_15_SIG_LEN]; extern float32_t impulse_response[IMP_RSP_LEN]; diff --git a/workspace/09_Conv_Impulse_Response_CMSIS_DSP/.settings/language.settings.xml b/workspace/09_Conv_Impulse_Response_CMSIS_DSP/.settings/language.settings.xml index e26db12..4e5e14e 100644 --- a/workspace/09_Conv_Impulse_Response_CMSIS_DSP/.settings/language.settings.xml +++ b/workspace/09_Conv_Impulse_Response_CMSIS_DSP/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/workspace/10_Dynamic_Performance_CMSIS_DSP/.settings/language.settings.xml b/workspace/10_Dynamic_Performance_CMSIS_DSP/.settings/language.settings.xml index e26db12..4e5e14e 100644 --- a/workspace/10_Dynamic_Performance_CMSIS_DSP/.settings/language.settings.xml +++ b/workspace/10_Dynamic_Performance_CMSIS_DSP/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/workspace/11_Running_Sum/.settings/language.settings.xml b/workspace/11_Running_Sum/.settings/language.settings.xml index e26db12..4e5e14e 100644 --- a/workspace/11_Running_Sum/.settings/language.settings.xml +++ b/workspace/11_Running_Sum/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/workspace/12_DFT/.settings/language.settings.xml b/workspace/12_DFT/.settings/language.settings.xml index e26db12..4e5e14e 100644 --- a/workspace/12_DFT/.settings/language.settings.xml +++ b/workspace/12_DFT/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/workspace/13_Plot_ECG/.settings/language.settings.xml b/workspace/13_Plot_ECG/.settings/language.settings.xml index e26db12..4e5e14e 100644 --- a/workspace/13_Plot_ECG/.settings/language.settings.xml +++ b/workspace/13_Plot_ECG/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/workspace/14_IDFT/.settings/language.settings.xml b/workspace/14_IDFT/.settings/language.settings.xml index e26db12..4e5e14e 100644 --- a/workspace/14_IDFT/.settings/language.settings.xml +++ b/workspace/14_IDFT/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/workspace/14_IDFT/Src/main.c b/workspace/14_IDFT/Src/main.c index b8289bb..c2be106 100644 --- a/workspace/14_IDFT/Src/main.c +++ b/workspace/14_IDFT/Src/main.c @@ -205,7 +205,6 @@ void calc_sig_dft(float32_t *sig_src_arr, void serial_plot_all(void) { for (int k = 0; k < KHZ_1_15_SIG_LEN; k++) { - printf("%f,", OFFSET1 + _1kHz_15kHz_f32_signal[k]); printf("%f\r\n", output_signal_arr[k]); pseudo_delay(9000); diff --git a/workspace/15_Clock_Config/.settings/language.settings.xml b/workspace/15_Clock_Config/.settings/language.settings.xml index e26db12..4e5e14e 100644 --- a/workspace/15_Clock_Config/.settings/language.settings.xml +++ b/workspace/15_Clock_Config/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/workspace/16_Moving_Average_Filter/.settings/language.settings.xml b/workspace/16_Moving_Average_Filter/.settings/language.settings.xml index e26db12..4e5e14e 100644 --- a/workspace/16_Moving_Average_Filter/.settings/language.settings.xml +++ b/workspace/16_Moving_Average_Filter/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/workspace/17_ADC_Driver/.settings/language.settings.xml b/workspace/17_ADC_Driver/.settings/language.settings.xml index e26db12..4e5e14e 100644 --- a/workspace/17_ADC_Driver/.settings/language.settings.xml +++ b/workspace/17_ADC_Driver/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/workspace/18_FIR_Live_Filter/.settings/language.settings.xml b/workspace/18_FIR_Live_Filter/.settings/language.settings.xml index e26db12..4e5e14e 100644 --- a/workspace/18_FIR_Live_Filter/.settings/language.settings.xml +++ b/workspace/18_FIR_Live_Filter/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/workspace/18_FIR_Live_Filter/Inc/fir_filter.h b/workspace/18_FIR_Live_Filter/Inc/fir_filter.h index 93acfa9..f0a7992 100644 --- a/workspace/18_FIR_Live_Filter/Inc/fir_filter.h +++ b/workspace/18_FIR_Live_Filter/Inc/fir_filter.h @@ -1,19 +1,43 @@ -#ifndef __FIR_FILTER_H__ -#define __FIR_FILTER_H__ +#ifndef __FIR_FILTER_H +#define __FIR_FILTER_H #include #include "stm32f4xx.h" #include "arm_math.h" +/****************************************** + +Implement a real-time FIR filter using: + +(1) A coefficient array called the kernel +(2) A circular buffer containing recent input samples +(3) The FIR convolution equation + +y[n] = sum_{i=0}^{M-1}(h[i]x[n-i]) + +x[n]: current input sample +y[n]: filtered output sample +h[k]: FIR filter coefficients +M: number of filter coefficients + +******************************************/ + typedef struct { - float32_t *buff; - uint32_t buff_idx; - float32_t *kernel; // convolution kernel, impulse response - uint32_t kernel_len; - float32_t out; + float32_t* buff; // Stores the most recent input samples + uint32_t buff_idx; // Position where the next input sample will be written + float32_t* kernel; // Convolution kernel, impulse response, h[0],h[1],...,h[M-1] + uint32_t kernel_len; // Number of coefficients + float32_t out; // Most recently calculated output } fir_filter_type; -void fir_filter_init(fir_filter_type *fir, float32_t *filter_kernel, uint32_t filter_kernel_len); -float32_t fir_filter_update(fir_filter_type *fir, float32_t curr_sample); + +void FIR_filter_init(fir_filter_type *fir, + float32_t *filter_kernel, + uint32_t filter_kernel_len); + + +float32_t FIR_filter_update(fir_filter_type *fir, + float32_t curr_sample); + #endif diff --git a/workspace/18_FIR_Live_Filter/LPF.png b/workspace/18_FIR_Live_Filter/LPF.png deleted file mode 100644 index 544de4e..0000000 Binary files a/workspace/18_FIR_Live_Filter/LPF.png and /dev/null differ diff --git a/workspace/18_FIR_Live_Filter/Src/fir_filter.c b/workspace/18_FIR_Live_Filter/Src/fir_filter.c index f207c80..048c6f3 100644 --- a/workspace/18_FIR_Live_Filter/Src/fir_filter.c +++ b/workspace/18_FIR_Live_Filter/Src/fir_filter.c @@ -1,12 +1,17 @@ #include #include "fir_filter.h" -void fir_filter_init(fir_filter_type *fir, float32_t *filter_kernel, uint32_t filter_kernel_len) { + +void FIR_filter_init(fir_filter_type *fir, + float32_t *filter_kernel, + uint32_t filter_kernel_len) { // Reset buffer index + // The first input sample will be stored at fir->buff[0] fir->buff_idx = 0; // Clear the output + // No filtering has happened yet, so the output starts at zero fir->out = 0.00f; // Set filter kernel @@ -16,12 +21,16 @@ void fir_filter_init(fir_filter_type *fir, float32_t *filter_kernel, uint32_t fi fir->kernel_len = filter_kernel_len; // Dynamically allocate buffer and initialize the buffer to zero + // Unlike malloc(), calloc() initializes all allocated bytes to zero fir->buff = (float32_t *)calloc(fir->kernel_len, sizeof(float32_t)); } + // Perform FIR filter by using convolution -float32_t fir_filter_update(fir_filter_type *fir, float32_t curr_sample) { +// This function processes one new input sample and returns one output sample +float32_t FIR_filter_update(fir_filter_type *fir, + float32_t curr_sample) { uint32_t sum_idx; @@ -46,6 +55,11 @@ float32_t fir_filter_update(fir_filter_type *fir, float32_t curr_sample) { } else { sum_idx = fir->kernel_len - 1; } + // h[0]x[n] + // h[1]x[n−1] + // h[2]x[n−2] + // sum_idx is the circular-buffer array index that + // points to the sample x[n−i] fir->out += fir->kernel[i] * fir->buff[sum_idx]; } diff --git a/workspace/18_FIR_Live_Filter/Src/main.c b/workspace/18_FIR_Live_Filter/Src/main.c index 447920e..2fa9d46 100644 --- a/workspace/18_FIR_Live_Filter/Src/main.c +++ b/workspace/18_FIR_Live_Filter/Src/main.c @@ -48,7 +48,7 @@ int main(void) { start_conversion(); // Init FIR filter - fir_filter_init(&lpf_fir, LP_1HZ_2HZ_IMPULSE_RESPONSE, IMP_RSP_LEN); + FIR_filter_init(&lpf_fir, LP_1HZ_2HZ_IMPULSE_RESPONSE, IMP_RSP_LEN); while (1) { @@ -56,7 +56,7 @@ int main(void) { float_sensor_value = (float32_t)g_sensor_value * 3.3 / 4095.0; - filtered_sensor_value = fir_filter_update(&lpf_fir, float_sensor_value); + filtered_sensor_value = FIR_filter_update(&lpf_fir, float_sensor_value); printf("%f,", float_sensor_value); printf("%f\r\n,", filtered_sensor_value); diff --git a/workspace/18_FIR_Live_Filter/Src/readme.txt b/workspace/18_FIR_Live_Filter/Src/readme.txt index b792bd0..aac43ea 100644 --- a/workspace/18_FIR_Live_Filter/Src/readme.txt +++ b/workspace/18_FIR_Live_Filter/Src/readme.txt @@ -23,12 +23,12 @@ // PD14 – LED Red // PD15 – LED Blue -#define GPIOAEN (1U<<0) // Enable clock of GPIOA -#define GPIOBEN (1U<<1) // Enable clock of GPIOB -#define GPIOCEN (1U<<2) // Enable clock of GPIOC -#define GPIODEN (1U<<3) // Enable clock of GPIOD +#define GPIOAEN (1U<<0) // Enable clock of GPIOA +#define GPIOBEN (1U<<1) // Enable clock of GPIOB +#define GPIOCEN (1U<<2) // Enable clock of GPIOC +#define GPIODEN (1U<<3) // Enable clock of GPIOD -//#define PIN12 (1U<<12) // Set PIN12 to 1 -//#define PIN13 (1U<<13) // Set PIN13 to 1 -//#define PIN14 (1U<<14) // Set PIN14 to 1 -//#define PIN15 (1U<<15) // Set PIN15 to 1 +#define PIN12 (1U<<12) // Set PIN12 to 1 +#define PIN13 (1U<<13) // Set PIN13 to 1 +#define PIN14 (1U<<14) // Set PIN14 to 1 +#define PIN15 (1U<<15) // Set PIN15 to 1 diff --git a/workspace/19_FIFO/.settings/language.settings.xml b/workspace/19_FIFO/.settings/language.settings.xml index e26db12..4e5e14e 100644 --- a/workspace/19_FIFO/.settings/language.settings.xml +++ b/workspace/19_FIFO/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/workspace/20_TIM2_Interrupt/.settings/language.settings.xml b/workspace/20_TIM2_Interrupt/.settings/language.settings.xml index e26db12..4e5e14e 100644 --- a/workspace/20_TIM2_Interrupt/.settings/language.settings.xml +++ b/workspace/20_TIM2_Interrupt/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/workspace/21_Sampling_with_TIM2/.settings/language.settings.xml b/workspace/21_Sampling_with_TIM2/.settings/language.settings.xml index e26db12..4e5e14e 100644 --- a/workspace/21_Sampling_with_TIM2/.settings/language.settings.xml +++ b/workspace/21_Sampling_with_TIM2/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/workspace/22_Sampling_with_TIM2_CMSIS__DSP_Conv/.settings/language.settings.xml b/workspace/22_Sampling_with_TIM2_CMSIS__DSP_Conv/.settings/language.settings.xml index e26db12..4e5e14e 100644 --- a/workspace/22_Sampling_with_TIM2_CMSIS__DSP_Conv/.settings/language.settings.xml +++ b/workspace/22_Sampling_with_TIM2_CMSIS__DSP_Conv/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/workspace/23_Sampling_with_TIM2_Moving_Average/.settings/language.settings.xml b/workspace/23_Sampling_with_TIM2_Moving_Average/.settings/language.settings.xml index e26db12..4e5e14e 100644 --- a/workspace/23_Sampling_with_TIM2_Moving_Average/.settings/language.settings.xml +++ b/workspace/23_Sampling_with_TIM2_Moving_Average/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/workspace/24_FIR_Filter_CMSIS_DSP/.settings/language.settings.xml b/workspace/24_FIR_Filter_CMSIS_DSP/.settings/language.settings.xml index e26db12..4e5e14e 100644 --- a/workspace/24_FIR_Filter_CMSIS_DSP/.settings/language.settings.xml +++ b/workspace/24_FIR_Filter_CMSIS_DSP/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/workspace/25_FIR_Filter_Noise_Remover/.settings/language.settings.xml b/workspace/25_FIR_Filter_Noise_Remover/.settings/language.settings.xml index e26db12..4e5e14e 100644 --- a/workspace/25_FIR_Filter_Noise_Remover/.settings/language.settings.xml +++ b/workspace/25_FIR_Filter_Noise_Remover/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/workspace/26_Rectangular_to_Polar/.settings/language.settings.xml b/workspace/26_Rectangular_to_Polar/.settings/language.settings.xml index e26db12..4e5e14e 100644 --- a/workspace/26_Rectangular_to_Polar/.settings/language.settings.xml +++ b/workspace/26_Rectangular_to_Polar/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/workspace/27_Polar_to_Rectangular/.settings/language.settings.xml b/workspace/27_Polar_to_Rectangular/.settings/language.settings.xml index e26db12..4e5e14e 100644 --- a/workspace/27_Polar_to_Rectangular/.settings/language.settings.xml +++ b/workspace/27_Polar_to_Rectangular/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/workspace/28_Recursive_Moving_Average_Filter/.settings/language.settings.xml b/workspace/28_Recursive_Moving_Average_Filter/.settings/language.settings.xml index e26db12..4e5e14e 100644 --- a/workspace/28_Recursive_Moving_Average_Filter/.settings/language.settings.xml +++ b/workspace/28_Recursive_Moving_Average_Filter/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/workspace/28_Recursive_Moving_Average_Filter/16_Moving_Average_Filter (1).launch b/workspace/28_Recursive_Moving_Average_Filter/28_Recursive_Moving_Average_Filter.launch similarity index 100% rename from workspace/28_Recursive_Moving_Average_Filter/16_Moving_Average_Filter (1).launch rename to workspace/28_Recursive_Moving_Average_Filter/28_Recursive_Moving_Average_Filter.launch diff --git a/workspace/Demo/.settings/language.settings.xml b/workspace/Demo/.settings/language.settings.xml index e26db12..4e5e14e 100644 --- a/workspace/Demo/.settings/language.settings.xml +++ b/workspace/Demo/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - +