添加带通滤波器

This commit is contained in:
hua buduo 2024-11-15 01:19:21 +08:00
parent 3c75d5db9c
commit 279feb13a9
3 changed files with 150 additions and 0 deletions

File diff suppressed because one or more lines are too long

72
Drivers/Filter/FIR.c Normal file
View File

@ -0,0 +1,72 @@
#include "FIR.h"
////const int16_t pCoeffs[numTaps] = {
//// 328, -27, -96, -175, -226, -219, -157, -71, -11,
//// -21, -109, -231, -304, -232, 41, 492, 1002, 1379,
//// 1423, 1009, 147, -981, -2064, -2748, -2758, -2001, -621,
//// 1034, 2504, 3366, 3366, 2504, 1034, -621, -2001, -2758,
//// -2748, -2064, -981, 147, 1009, 1423, 1379, 1002, 492,
//// 41, -232, -304, -231, -109, -21, -11, -71, -157,
//// -219, -226, -175, -96, -27, 328
////};
//
//const int16_t pCoeffs[numTaps] = {
// 1, 0, 0, -1, -1, -1, -1, 0, 0, 0, 0, -1,
// -1, -1, 0, 2, 4, 5, 6, 4, 1, -4, -8, -11,
// -11, -8, -2, 4, 10, 13, 13, 10, 4, -2, -8, -11,
// -11, -8, -4, 1, 4, 6, 5, 4, 2, 0, -1, -1,
// -1, 0, 0, 0, 0, -1, -1, -1, -1, 0, 0, 1
//};
//
//
//arm_fir_instance_q15 bpf_s;
//
//int16_t pState[ADC_VAL_LEN+numTaps-1];
//
//void firFilterInit(void)
//{
// arm_fir_init_q15(&bpf_s,numTaps,pCoeffs,pState,ADC_VAL_LEN);
//}
//
//void firBPFFilter(int16_t *rawValue,int16_t *outData,uint32_t len)
//{
// arm_fir_q15(&bpf_s,rawValue,outData,len);
//}
const float pCoeffs[numTaps] = {
0.01000739448,-0.0008298238972,-0.002934818622,-0.005351484753,-0.006882067304,
-0.006692492869,-0.004794952925,-0.002162534744,-0.000337747857,-0.0006400240236,
-0.003314057132,-0.007060859352, -0.00928321667,-0.007090434898, 0.001251851092,
0.01502577588, 0.03057955019, 0.04208169878, 0.04344128817, 0.03078254126,
0.004476505332, -0.02993877046, -0.06297727674, -0.08384874463, -0.08415342867,
-0.06107503176, -0.01894705743, 0.03154437244, 0.07641164213, 0.1027124152,
0.1027124152, 0.07641164213, 0.03154437244, -0.01894705743, -0.06107503176,
-0.08415342867, -0.08384874463, -0.06297727674, -0.02993877046, 0.004476505332,
0.03078254126, 0.04344128817, 0.04208169878, 0.03057955019, 0.01502577588,
0.001251851092,-0.007090434898, -0.00928321667,-0.007060859352,-0.003314057132,
-0.0006400240236,-0.000337747857,-0.002162534744,-0.004794952925,-0.006692492869,
-0.006882067304,-0.005351484753,-0.002934818622,-0.0008298238972, 0.01000739448
};
arm_fir_instance_f32 bpf_s;
float32_t pState[ADC_VAL_LEN+numTaps-1];
void firFilterInit(void)
{
arm_fir_init_f32(&bpf_s,numTaps,pCoeffs,pState,ADC_VAL_LEN);
}
void firBPFFilter(float32_t *rawValue,float32_t *outData,uint32_t len)
{
arm_fir_f32(&bpf_s,rawValue,outData,len);
}

41
Drivers/Filter/FIR.h Normal file
View File

@ -0,0 +1,41 @@
#ifndef _FIR__H_
#define _FIR__H_
#include "main.h"
#include "math.h"
#include "anemometer_dev.h"
#define numTaps 60
//const float B[numTaps] = {
// 0.01000739448,-0.0008298238972,-0.002934818622,-0.005351484753,-0.006882067304,
// -0.006692492869,-0.004794952925,-0.002162534744,-0.000337747857,-0.0006400240236,
// -0.003314057132,-0.007060859352, -0.00928321667,-0.007090434898, 0.001251851092,
// 0.01502577588, 0.03057955019, 0.04208169878, 0.04344128817, 0.03078254126,
// 0.004476505332, -0.02993877046, -0.06297727674, -0.08384874463, -0.08415342867,
// -0.06107503176, -0.01894705743, 0.03154437244, 0.07641164213, 0.1027124152,
// 0.1027124152, 0.07641164213, 0.03154437244, -0.01894705743, -0.06107503176,
// -0.08415342867, -0.08384874463, -0.06297727674, -0.02993877046, 0.004476505332,
// 0.03078254126, 0.04344128817, 0.04208169878, 0.03057955019, 0.01502577588,
// 0.001251851092,-0.007090434898, -0.00928321667,-0.007060859352,-0.003314057132,
// -0.0006400240236,-0.000337747857,-0.002162534744,-0.004794952925,-0.006692492869,
// -0.006882067304,-0.005351484753,-0.002934818622,-0.0008298238972, 0.01000739448
//};
//const int BL = 60;
void firFilterInit(void);
void firBPFFilter(float32_t *rawValue,float32_t *outData,uint32_t len);
//void firBPFFilter(int16_t *rawValue,int16_t *outData,uint32_t len);
#endif