Implémenter le filtre FIR en langage Python et C

Aperçu

Les filtres sont souvent utilisés dans le traitement du signal du point de vue de la suppression du bruit. Implémentez le filtre FIR le plus simple en Python et C. On suppose que le filtre est évalué en fonction de Python, puis le résultat est incorporé dans une application basée sur le langage C.

Code Python

La mise en œuvre du filtre FIR à l'aide de scipy est illustrée ci-dessous. Le signal d'origine «x» est un nombre aléatoire et le coefficient de filtre est calculé par «scipy.signal.firwin». Comparez le signal «y» après avoir appliqué le filtre par scipy et le signal «d» après avoir appliqué le filtre par solide.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#

import numpy as np
import scipy.signal
from pylab import *
import csv
import matplotlib.pyplot as plt

#x peut être n'importe quoi
x = np.random.rand(512)
plt.plot(x)
plt.show()

fs = 512 #Fréquence d'échantillonnage
nyq = fs / 2.0  #Fréquence de Nyquist

#Conception de filtre
f1 = 1 / nyq      #Fréquence de coupure 1
f2 = 30.0 / nyq      #Fréquence de coupure 2
numtaps = 255       #Nombre de coefficients de filtre(Impair)

b = scipy.signal.firwin(numtaps, f1)                         #Passe-bas
#b = scipy.signal.firwin(numtaps, f2, pass_zero=False)        #Passe haut
#b = scipy.signal.firwin(numtaps, [f1, f2], pass_zero=False) #Passe de bande

#Sauvegarde des coefficients de filtre
with open('coeff.csv', 'w') as f:
    writer = csv.writer(f, lineterminator='\n') #Code de saut de ligne (\n) est spécifié
    writer.writerow(b)

#Filtre FIR par scipy
y = scipy.signal.lfilter(b, 1, x)     
               
#Filtre FIR par écriture solide
d = np.zeros(fs)

for i in range(len(x)):
    d[i] = 0
    for j in range(len(b)):
        if(i-j)>=0:
            d[i] += b[j]*x[i-j]
    
plt.plot(y,color='r')
plt.plot(d,color='b')
plt.show()

Signal d'origine

x.png

Après avoir appliqué le filtre (rouge: y, bleu: d)

low.png

Code C

Si le résultat solide sur Python est correct, déposez-le dans le code du langage C. C'est un peu brouillon, mais b stocke un tableau de coeff.csv généré par le code Python. Puisqu'il est enregistré au format csv, si vous l'ouvrez avec un éditeur de texte, etc., vous pouvez le coller tel quel par copier-coller.


    int sampleRate = 512

    x= //Bien que ce soit approximatif, décrivez x correctement

    float* filteredData = (float*)malloc(sizeof(float)*512);
    
    float b[] = {} //Rugueux, mais coeff écrit en Python.Insérez le contenu de csv entre parenthèses
    
    for(int i=0;i<sampleRate;i++){
        float d = 0;
        for(int j=0; j<(sizeof b)/(sizeof b[0]); j++){
            if((i-j)>=0){
                d += b[j]*x[i-j];
            }
        }
        filteredData[i]=d;
    }

    free(filteredData)

C'est très simple, mais ce n'est qu'un mémorandum, alors pardonnez-moi, comment implémentez-vous le filtre FIR? Si cela aide quelqu'un qui dit.

Recommended Posts

Implémenter le filtre FIR en langage Python et C
Ecrire le fichier O_SYNC en C et Python
Mettre en œuvre des recommandations en Python
Implémenter XENO avec python
Next Python en langage C
Implémenter sum en Python
API C en Python 3
Implémenter Traceroute dans Python 3
Étendre python en C ++ (Boost.NumPy)
Ecrire des filtres Pandec en Python
Implémenter Naive Bayes dans Python 3.3
Implémenter d'anciens chiffrements en python
Recherche binaire en Python / C ++
Pile et file d'attente en Python
Implémenter Redis Mutex en Python
Implémenter l'extension en Python
Mettre en œuvre un RPC rapide en Python
Implémenter l'algorithme de Dijkstra en python
Implémenter le bot de discussion Slack en Python
Unittest et CI en Python
Implémenter la recherche de priorité en profondeur (DFS) et la recherche de priorité de largeur (BFS) en python
Considérez si la programmation était un anime en Python et C
Orienté objet en langage C: "○ ✕ game" a été refacturé et porté en Python
Mettre en œuvre l'apprentissage de l'empilement en Python [Kaggle]
Paquets qui gèrent le MIDI avec Python midi et pretty_midi
Différence entre list () et [] en Python
Différence entre == et est en python
Afficher les photos en Python et html
Algorithme de tri et implémentation en Python
ABC166 en Python A ~ C problème
Manipuler des fichiers et des dossiers en Python
À propos de Python et Cython dtype
Implémenter le modèle Singleton en Python
Affectations et modifications des objets Python
Vérifiez et déplacez le répertoire en Python
Chiffrement avec Python: IND-CCA2 et RSA-OAEP
Hashing de données en R et Python
Résoudre ABC036 A ~ C avec Python
Comment envelopper C en Python
Synthèse de fonctions et application en Python
Exporter et exporter des fichiers en Python
Implémentez rapidement l'API REST en Python
Inverser le pseudonyme plat et le katakana en Python2.7
Résoudre ABC037 A ~ C avec Python
Lire et écrire du texte en Python
[GUI en Python] Menu PyQt5 et barre d'outils-
Ecrire un test unitaire de langage C en Python
Créer et lire des paquets de messages en Python
Chevauchement d'expressions régulières en Python et Java
J'ai essayé d'implémenter PLSA en Python
Différence d'authenticité entre Python et JavaScript
Notes utilisant cChardet et python3-chardet dans Python 3.3.1.
Résoudre ABC175 A, B, C avec Python
Les modules et packages en Python sont des "espaces de noms"
Évitez les boucles imbriquées en PHP et Python
Différences entre Ruby et Python dans la portée
Implémenter __eq__ etc. de manière générique dans la classe Python
J'ai essayé d'implémenter la permutation en Python
Implémenter et comprendre l'arborescence de recherche d'union dans Go