Je suis en train de mettre en œuvre des simples filtres IIR (forme directe I) en C.Comment implémenter les filtres RII dans C?
Pour passe-haut (10 Hz à 256 échantillons/seconde) Je fais ceci:
int Diff = Sample - Previous_Sample;
HP_Output = ((HP_Output + Diff) * 4)/5;
Pour faible passer (10 Hz @ à 32 échantillons/seconde) Je fais ceci:
int Diff = Sample - LP_Output ;
LP_Output = ((LP_Output + Diff) * 2)/3;
maintenant, je me demandais: sont les deux implémentations mathématiquement correcte?
Et si je veux changer la fréquence d'échantillonnage d'entrée (ou fréquence de filtre), comment puis-je calculer les nouveaux facteurs?
Ce qui manque entièrement à votre code, c'est * time *. Le taux d'échantillonnage est très important. Un filtre pratique utilise de nombreux échantillons, pas un seul. Utilisez Google pour trouver des réponses, la meilleure requête est "iir calculateur de coefficient". –
@HansPassant J'appelle la fonction pour chaque échantillon (à 256 échantillons par seconde) – Muis
Pas ce que je voulais dire, il faut stocker de vieux échantillons. Enregistré à T-1, T-2, T-3, etc. Vous avez besoin d'un tableau. Ce sera très évident une fois que vous avez lu les google hits, vous devrez passer du temps. –