-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAutoFilter.h
42 lines (33 loc) · 1.58 KB
/
AutoFilter.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#ifndef AUTOFILTER_H
#define AUTOFILTER_H
#include <Arduino.h>
#include <math.h>
class AutoFilter {
public:
// Constructor
AutoFilter();
// Modulation Methods
float amplitudeModulation(float carrier, float signal);
float frequencyModulation(float carrier, float modulator, float sensitivity);
float phaseModulation(float carrier, float modulator, float sensitivity);
float quadratureAmplitudeModulation(float iSignal, float qSignal, float carrier);
// PWM
// void pulseWidthModulation(int pin, float dutyCycle, int frequency);
void pulseWidthModulation(int pin, float dutyCycle, int pwmFrequency);
void dualPulseWidthModulation(int pin1, int pin2, float dutyCycle, int frequency, int phaseShift);
// Filtering Methods
float lowPassFilter(float currentInput, float prevOutput, float alpha);
float highPassFilter(float currentInput, float prevInput, float prevOutput, float alpha);
float movingAverageFilter(float input, float *buffer, int bufferSize, int &index);
float exponentialMovingAverage(float currentInput, float prevOutput, float alpha);
float kalmanFilter(float currentMeasurement, float &prevEstimate, float &errorCovariance, float processNoise, float measurementNoise);
// Utility Functions
float normalize(float input, float inputMin, float inputMax, float outputMin, float outputMax);
// Fourier Transform (basic DFT)
void discreteFourierTransform(float *input, float *outputReal, float *outputImag, int size);
private:
// Internal variables for PWM and filters
int pwmPin;
int pwmFrequency;
};
#endif