Mathew Swabey
/
ELEC348_Project
DSP IIR filter
main.cpp@0:a994e937bae1, 2018-11-09 (annotated)
- Committer:
- Swabey89
- Date:
- Fri Nov 09 19:18:13 2018 +0000
- Revision:
- 0:a994e937bae1
Initial
Who changed what in which revision?
User | Revision | Line number | New 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 |