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 @@
-
+