#include "mbed.h"
#define T 5 // u ms
AnalogIn x(A0);
AnalogOut y(A1);
double y0, y1; // y[0] = y[k], y1 = y[k-1]
double x0, x1; // x0 = x[k], x1 = x[k-1]
void callback(){
y0 = 5.79*y1 - 3.53*x1; // izracunaj novi uzorak
y = y0; // settovanje izlaza
x0 = x;
// update za novu iteraciju
y1 = x0;
y1 = y0;
}
Ticker t;
int main(){
// nulti pocetni uslovi
y0 = 0; y1 = 0;
x0 = 0; x1 = 0;
t.attach(&callback, T);
while(1){
wait(0.001); // moze i bez pauze
}
}
//
#include "mbed.h"
#define T 0.01 // Period uzorkovanja T=10ms
int x1(0),x2(0),x3(0),y1(0),y2(0),y3(0); // Zakašnjele vrijednosti ulaza i
// izlaza
AnalogIn x(dp9); // Ulaz
PwmOut y(dp18); // Izlaz
Ticker t; // Vrijednost izlaza se izračunava pomoću tickera
void fun() {
y=0.01*x1-0.02*x2+0.01*x3+2.82*y1-2.64*y2+0.01*y3; // Diferentna
// jednačina
y3=y2; // Pomak vrijednosti ulaza i izlaza u diskretnom vremenu
y2=y1;
y1=y;
x3=x2;
x2=x1;
x1=x;
}
int main() {
t.attach(&fun,T); // Inicijalizacija tickera
while(1);
}
//
from machine import ADC, DAC, Timer
import time
# Definisanje analognih ulaza i izlaza
x = ADC(0) # Analogni ulaz na A0
y = DAC(1) # Analogni izlaz na A1
# Inicijalizacija varijabli za obradu signala
y0 = 0.0
y1 = 0.0
x0 = 0.0
x1 = 0.0
# Vrijeme perioda u milisekundama
T = 5
def callback(timer):
global y0, y1, x0, x1
# Izračunavanje novog uzorka
y0 = 5.79 * y1 - 3.53 * x1
# Postavljanje izlazne vrijednosti
y.write(int(y0 * 255)) # Pretvaranje vrijednosti u opseg (0-255) za DAC
# Ažuriranje vrijednosti za sljedeću iteraciju
x0 = x.read_u16() / 65535.0 # Normalizacija na opseg (0.0 do 1.0)
x1 = x0
y1 = y0
# Kreiranje tajmera za prekid
timer = Timer(-1)
timer.init(period=T, mode=Timer.PERIODIC, callback=callback)
# Glavna petlja (ostavlja mjesto za dodatne operacije)
while True:
time.sleep(0.001) # Kratka pauza, može i bez nje