DSP IIR filter

Dependencies:   mbed

Committer:
Swabey89
Date:
Fri Nov 09 19:18:13 2018 +0000
Revision:
0:a994e937bae1
Initial

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Swabey89 0:a994e937bae1 1 #include "mbed.h"
Swabey89 0:a994e937bae1 2
Swabey89 0:a994e937bae1 3 //Add more to test different setups
Swabey89 0:a994e937bae1 4 #include "filter_characteristics.h"
Swabey89 0:a994e937bae1 5
Swabey89 0:a994e937bae1 6
Swabey89 0:a994e937bae1 7 #define ON 1
Swabey89 0:a994e937bae1 8 #define OFF 0
Swabey89 0:a994e937bae1 9
Swabey89 0:a994e937bae1 10 float x[N]={0};
Swabey89 0:a994e937bae1 11 float yn;
Swabey89 0:a994e937bae1 12 Timer t;
Swabey89 0:a994e937bae1 13
Swabey89 0:a994e937bae1 14 void sampler(void); //Ticker routine PROTOTYPE
Swabey89 0:a994e937bae1 15
Swabey89 0:a994e937bae1 16 //MBED Class Instances follows
Swabey89 0:a994e937bae1 17 DigitalOut SampLED(LED1); //Digital Output (GREEN LED is PB_3, D13 You can use an Oscilloscope on This pin to confirm sample rate)
Swabey89 0:a994e937bae1 18 DigitalOut testpin(PA_10);
Swabey89 0:a994e937bae1 19
Swabey89 0:a994e937bae1 20 AnalogIn Ain(PA_1); //Analog Input (Signal Input 0 to +3 Volts)
Swabey89 0:a994e937bae1 21 AnalogOut Aout(PA_4); //Analog Output (Signal Input 0 to +3 Volts) NB PA_4 because Arduin Nano Compatability
Swabey89 0:a994e937bae1 22 //on STM32F303k8 uses I2C PA_5 to PB7
Swabey89 0:a994e937bae1 23
Swabey89 0:a994e937bae1 24 Ticker sample_timer; //Ticker class instance called sample_timer
Swabey89 0:a994e937bae1 25
Swabey89 0:a994e937bae1 26 PwmOut test(PWM_OUT);
Swabey89 0:a994e937bae1 27
Swabey89 0:a994e937bae1 28
Swabey89 0:a994e937bae1 29 int main() {
Swabey89 0:a994e937bae1 30 float duty=0.1f;
Swabey89 0:a994e937bae1 31 test.period_ms(1);
Swabey89 0:a994e937bae1 32 test=duty;
Swabey89 0:a994e937bae1 33
Swabey89 0:a994e937bae1 34 float sample_rate=(1.0/Fs)*1000000.0; //Calculate the number of uS required for a Frequency Sampling Rate
Swabey89 0:a994e937bae1 35 //Fs held in *.h
Swabey89 0:a994e937bae1 36
Swabey89 0:a994e937bae1 37 sample_timer.attach_us(&sampler,(int)sample_rate);
Swabey89 0:a994e937bae1 38 //Ticker Instance serviced by routine at a repeat rate in microseconds
Swabey89 0:a994e937bae1 39
Swabey89 0:a994e937bae1 40 while(1) {
Swabey89 0:a994e937bae1 41 sleep();
Swabey89 0:a994e937bae1 42 }
Swabey89 0:a994e937bae1 43 }
Swabey89 0:a994e937bae1 44
Swabey89 0:a994e937bae1 45 void sampler(void){ //Ticker routine
Swabey89 0:a994e937bae1 46 SampLED = ON; //LED Indicates start of sampling
Swabey89 0:a994e937bae1 47 int i; //Initialise local variable i
Swabey89 0:a994e937bae1 48 testpin = 1;
Swabey89 0:a994e937bae1 49 x[0]=Ain; //Input ADC. N.B. ADC in MBED is 0.0 to 1.0 float!!!!!!
Swabey89 0:a994e937bae1 50 yn=0.0; //output accumulation, start as zero
Swabey89 0:a994e937bae1 51
Swabey89 0:a994e937bae1 52
Swabey89 0:a994e937bae1 53 for(i=0; i<N; i++) yn+=x[i]*b[i]; //generate output from filter components FIR a=0
Swabey89 0:a994e937bae1 54 for(i=N-1; i!=0; i--) x[i]=x[i-1]; //shift data
Swabey89 0:a994e937bae1 55
Swabey89 0:a994e937bae1 56 Aout=yn; //Output resultant to DAC. Again MBED uses 0.0 to 1.0 float!!!!!!
Swabey89 0:a994e937bae1 57
Swabey89 0:a994e937bae1 58 testpin = 0;
Swabey89 0:a994e937bae1 59
Swabey89 0:a994e937bae1 60 SampLED = OFF; //LED Indicates end of sampling
Swabey89 0:a994e937bae1 61 }
Swabey89 0:a994e937bae1 62