Implementieren Sie den FIR-Filter in Python und C.

Überblick

Filter werden häufig in der Signalverarbeitung unter dem Gesichtspunkt der Rauschentfernung verwendet. Implementieren Sie den einfachsten FIR-Filter in Python und C. Es wird davon ausgegangen, dass der Filter basierend auf Python ausgewertet wird und das Ergebnis in eine auf C-Sprache basierende Anwendung integriert wird.

Python-Code

Die Implementierung des FIR-Filters mit scipy ist unten dargestellt. Das ursprüngliche Signal "x" ist eine Zufallszahl, und der Filterkoeffizient wird durch "scipy.signal.firwin" berechnet. Vergleichen Sie das Signal "y" nach dem Aufbringen des Filters mit scipy und das Signal "d" nach dem Aufbringen des Filters mit solid.

#!/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 kann alles sein
x = np.random.rand(512)
plt.plot(x)
plt.show()

fs = 512 #Abtastfrequenz
nyq = fs / 2.0  #Nyquist-Frequenz

#Filterdesign
f1 = 1 / nyq      #Grenzfrequenz 1
f2 = 30.0 / nyq      #Grenzfrequenz 2
numtaps = 255       #Anzahl der Filterkoeffizienten(Seltsam)

b = scipy.signal.firwin(numtaps, f1)                         #Tiefpass
#b = scipy.signal.firwin(numtaps, f2, pass_zero=False)        #Hochpass
#b = scipy.signal.firwin(numtaps, [f1, f2], pass_zero=False) #Bandpass

#Filterkoeffizienten speichern
with open('coeff.csv', 'w') as f:
    writer = csv.writer(f, lineterminator='\n') #Zeilenvorschubcode (\n) angegeben ist
    writer.writerow(b)

#FIR-Filter von scipy
y = scipy.signal.lfilter(b, 1, x)     
               
#FIR-Filter durch festes Schreiben
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()

Originalsignal

x.png

Nach dem Auftragen des Filters (rot: y, blau: d)

low.png

C-Code

Wenn das solide Ergebnis in Python korrekt ist, legen Sie es in C-Sprachcode ab. Es ist ein bisschen chaotisch, aber b speichert ein Array von Koeffizienten.csv, die durch Python-Code generiert wurden. Es wird im CSV-Format gespeichert. Wenn Sie es also mit einem Texteditor usw. öffnen, können Sie es kopieren und so einfügen, wie es ist.


    int sampleRate = 512

    x= //Obwohl es grob ist, beschreiben Sie x entsprechend

    float* filteredData = (float*)malloc(sizeof(float)*512);
    
    float b[] = {} //Rau, aber in Python geschrieben.Fügen Sie den Inhalt von csv in Klammern ein
    
    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)

Es ist sehr einfach, aber es ist nur ein Memorandum. Verzeihen Sie mir, wie implementieren Sie den FIR-Filter? Wenn es jemandem hilft, der sagt.

Recommended Posts

Implementieren Sie den FIR-Filter in Python und C.
Schreiben Sie die O_SYNC-Datei in C und Python
Implementieren Sie XENO mit Python
Weiter Python in C-Sprache
Implementieren Sie sum in Python
C-API in Python 3
Implementieren Sie Traceroute in Python 3
Erweitern Sie Python in C ++ (Boost.NumPy)
Schreiben Sie Pandec-Filter in Python
Implementieren Sie Naive Bayes in Python 3.3
Implementieren Sie alte Chiffren in Python
Binäre Suche in Python / C ++
Stapel und Warteschlange in Python
Implementieren Sie Redis Mutex in Python
Implementieren Sie die Erweiterung in Python
Implementieren Sie schnelles RPC in Python
Implementieren Sie den Dijkstra-Algorithmus in Python
Implementieren Sie den Slack Chat Bot in Python
Unittest und CI in Python
Implementieren Sie die Suche nach Tiefenpriorität (DFS) und die Suche nach Breitenpriorität (BFS) in Python
Überlegen Sie, ob das Programmieren in Python und C ein Anime war
Objektorientiert in C-Sprache: "○ ✕ game" wurde überarbeitet und nach Python portiert
Implementieren Sie das Stacking-Lernen in Python [Kaggle]
Pakete, die MIDI mit Python Midi und Pretty_Midi verarbeiten
Unterschied zwischen list () und [] in Python
Unterschied zwischen == und ist in Python
Zeigen Sie Fotos in Python und HTML an
Sortieralgorithmus und Implementierung in Python
ABC166 in Python A ~ C Problem
Bearbeiten Sie Dateien und Ordner in Python
Über Python und Cython dtype
Implementieren Sie das Singleton-Muster in Python
Zuweisungen und Änderungen in Python-Objekten
Überprüfen und verschieben Sie das Verzeichnis in Python
Verschlüsselung mit Python: IND-CCA2 und RSA-OAEP
Hashing von Daten in R und Python
Löse ABC036 A ~ C mit Python
So verpacken Sie C in Python
Funktionssynthese und Anwendung in Python
Exportieren und Ausgeben von Dateien in Python
Implementieren Sie die REST-API schnell in Python
Reverse Flat Pseudonym und Katakana in Python2.7
Löse ABC037 A ~ C mit Python
Lesen und Schreiben von Text in Python
[GUI in Python] PyQt5-Menü und Symbolleiste-
Schreiben Sie einen C-Sprach-Unit-Test in Python
Erstellen und lesen Sie Messagepacks in Python
Überlappende reguläre Ausdrücke in Python und Java
Ich habe versucht, PLSA in Python zu implementieren
Unterschied in der Authentizität zwischen Python und JavaScript
Hinweise zur Verwendung von cChardet und python3-chardet in Python 3.3.1.
Löse ABC175 A, B, C mit Python
Module und Pakete in Python sind "Namespaces"
Vermeiden Sie verschachtelte Schleifen in PHP und Python
Unterschiede zwischen Ruby und Python im Umfang
Implementieren Sie __eq__ usw. generisch in der Python-Klasse
Ich habe versucht, Permutation in Python zu implementieren
Implementieren und verstehen Sie den Union-Find-Baum in Go