From 9b7969822aace4f0d69553bdaed5b4182214f978 Mon Sep 17 00:00:00 2001 From: hangpersonal Date: Thu, 10 Sep 2026 09:45:37 -0700 Subject: [PATCH] Update repo --- .../.settings/language.settings.xml | 4 +- .../.settings/language.settings.xml | 4 +- .../.settings/language.settings.xml | 4 +- .../.settings/language.settings.xml | 4 +- workspace/04_CMSIS_DSP/04_CMSIS_DSP.launch | 85 ++++++++++++++++++ .../.settings/language.settings.xml | 4 +- .../.settings/language.settings.xml | 4 +- .../.settings/language.settings.xml | 4 +- .../.settings/language.settings.xml | 4 +- workspace/08_Conv_Impulse_Response/Src/main.c | 1 + .../.settings/language.settings.xml | 4 +- .../.settings/language.settings.xml | 4 +- .../.settings/language.settings.xml | 4 +- .../12_DFT/.settings/language.settings.xml | 4 +- .../.settings/language.settings.xml | 4 +- .../14_IDFT/.settings/language.settings.xml | 4 +- workspace/14_IDFT/Src/main.c | 1 - .../.settings/language.settings.xml | 4 +- .../.settings/language.settings.xml | 4 +- .../.settings/language.settings.xml | 4 +- .../.settings/language.settings.xml | 4 +- workspace/18_FIR_Live_Filter/Inc/fir_filter.h | 42 +++++++-- workspace/18_FIR_Live_Filter/LPF.png | Bin 65885 -> 0 bytes workspace/18_FIR_Live_Filter/Src/fir_filter.c | 18 +++- workspace/18_FIR_Live_Filter/Src/main.c | 4 +- workspace/18_FIR_Live_Filter/Src/readme.txt | 16 ++-- .../19_FIFO/.settings/language.settings.xml | 4 +- .../.settings/language.settings.xml | 4 +- .../.settings/language.settings.xml | 4 +- .../.settings/language.settings.xml | 4 +- .../.settings/language.settings.xml | 4 +- .../.settings/language.settings.xml | 4 +- .../.settings/language.settings.xml | 4 +- .../.settings/language.settings.xml | 4 +- .../.settings/language.settings.xml | 4 +- .../.settings/language.settings.xml | 4 +- ...28_Recursive_Moving_Average_Filter.launch} | 0 .../Demo/.settings/language.settings.xml | 4 +- 38 files changed, 203 insertions(+), 80 deletions(-) create mode 100644 workspace/04_CMSIS_DSP/04_CMSIS_DSP.launch delete mode 100644 workspace/18_FIR_Live_Filter/LPF.png rename workspace/28_Recursive_Moving_Average_Filter/{16_Moving_Average_Filter (1).launch => 28_Recursive_Moving_Average_Filter.launch} (100%) 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 544de4e00302ef75ba7c06b3f3344fdd0b973a44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65885 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 xVCHPNN}wy9z+5CYwZY$a{ #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 @@ - +