1 Schritt:Schritt 1:

    OpenCV DSP-Beschleunigung - GSoC 2010 Es zielt darauf ab, OpenCV-Algorithmen in OMAP3 Plattformen mit Hilfe des On-Chip-C64x + DSP beschleunigen. Es verwendet OpenCV 2,1 als Referenz und ist abhängig von der gleiche. Die erste Version von diesem Projekt demonstriert die Beschleunigung der einige der OpenCV-Algorithmen wie cvSoble (), cvIntegral (), cvCvtColor () und cvDFT (). Diese Arbeit bietet eine separate Bibliothek 'libopencvdsp.so' für diese Algorithmen. Nutzer haben die Wahl, nur ARM-basierte API oder DSP basierte API auswählen. Alle DSP-basierte API sind mit 'DSP_' vorangestellt. Der Code wurde am Beagleboard Rev C4 getestet. Diese Arbeit verwendet C6Accel Bibliothek als Präsenzbibliothek und erweitert es um OpenCV unterstützen. Diese Arbeit zeigt signifikante Beschleunigung der OpenCV-Algorithmen, indem sie asynchrone Aufruf C64x + DSP. Student: Pramod Poudel Mentoren: Katie Roberts-Hoffman, Luis Gustavo Lira Repository: http://code.google.com/p/opencv-dsp-acceleration/ Schritt 1: $(function() {$("a.lightbox").lightBox();});

      12 Schritt:Schritt 1: Teile und Werkzeug Schritt 2: Schematische und Kreisbeschreibung Schritt 3: Mikroprozessor-Pin-Funktionen Schritt 4: Target Frequency Selection Schritt 5: Nachweisgrenze Einstellung Schritt 6: Optional: Serielle Ausgabe Schritt 7: Optional: Algorithmus-Details Schritt 8: Leistungsbeeinflussende Faktoren Schritt 9: Probleme durch Aliasing Schritt 10: Leistung in Gegenwart von White Noise Schritt 11: Probleme mit Übersteuern des Eingangs Schritt 12: Source Code

      Dieses Projekt beschreibt Hardware und Software habe ich entwickelt, die ein kleines 8-Bit-PIC-Mikroprozessor als eine einzige Frequenz-Detektor oder Ton-Decoder-Funktion ermöglicht. Eine solche Schaltung kann verwendet werden, um das Vorhandensein einer bestimmten Frequenz in einem Analogsignal zu detektieren, wie zB ein Audiosignal sein. Ich konnte im Fernsteuerungsanwendungen verwendet werden, oder um Musiknoten zu erfassen, oder für jede andere Situation, wo eine spezifische Frequenz muß in ein Signal, das andere Frequenzen oder Rauschen enthalten kann, erkannt werden. Die Schaltung ist eine 8-pin PIC 12F683 auf Mikroprozessorbasis. Nur ein paar zusätzliche Widerstände und Kondensatoren werden benötigt, um eine Schaltung, die ein analoges Signal akzeptieren und fahren einen Mikroprozessor Ausgangsstift hoch, wenn die gewählte Frequenz in dem Signal vorhanden ist abzuschließen. Die Schaltung kann als frequecy Detektor-IC, die Teil eines größeren Kreislauf der Nutzer Design ist verwendet werden. Die Schritte, die detaillierter die Funktionsweise des Schaltkreises und das Programm, das auf dem Prozessor läuft folgendermaßen. Eine Beschreibung der digitalen Signalverarbeitungsalgorithmus, der von dem PIC verwendeten enthalten ist, aber es ist nicht notwendig, es zu verstehen, von dieser Schaltung zu machen. Der Code zum Programmieren des Prozessors als * HEX-Datei enthalten. Der Source-Code * .asm Datei wird ebenfalls bereitgestellt, um es einem Benutzer, die mit dem Microchip PIC Assembler-Sprache, das Programm zu modifizieren, vertraut zu ermöglichen. Diese Dateien können unter der Schritt mit dem Titel "Source Code" zu finden. Der Betrieb der Schaltung und die Funktion der verschiedenen Komponenten wird in dem Abschnitt, der schema deckt beschrieben. Schritt 1: Teile und Werkzeug Diese Schaltung kann leicht auf einem Lot weniger Steckbrett aufgebaut werden. Die Komponenten sind weit verbreitet zu geringen Kosten aus einer Reihe von Quellen, wie DigiKey, Mouser, Jameco usw., die Sie bereits mit, wenn Sie mit Elektronik arbeiten, vertraut sein zur Verfügung. Sie benötigen einen Programmierer für PIC Mikroprozessoren. Ich habe Anweisungen auf dieser Website für den Aufbau Ihrer eigenen Programmiergerät gesehen, aber ich kann nicht für jeden von ihnen zu sprechen. Der Programmierer ich benutze, ist von einer Firma namens Micro-Ingenieur Labs, Inc. an http://www.melabs.com. Es ist auch praktisch, eine Audio-Generator von einer Art sind, zum Testen und Experimentieren. Dies kann so einfach wie eine Verbindung mit der Leitung aus einem PC, CD-Player, MP3-Player usw. sein Beispielsweise, um sicherzustellen, daß die Schaltung arbeitet, um eine bestimmte Frequenz zu erfassen, eine Datei, die diese Frequenz spielen gerade mit dem Audio-Ausgang des Wiedergabegeräts mit dem Eingang der Schaltung verbunden. Ein nützliches Programm zum Erzeugen von Sound-Dateien können kostenlos heruntergeladen werden http://www.goldwave.com. Dieses Programm ermöglicht es Ihnen, * .wav-Dateien bestimmte Töne, Sweeps, usw. sehr leicht enthalten, erstellen. Schritt 2: Schematische und Kreisbeschreibung Der programmierte PIC Mikroprozessor (U1) ist in der Schaltung verwendet, wie in der schematischen gezeigt. Die Verbindung mit + 5V muss an einem geregelten 5V-Stromversorgung anschließen, wie beispielsweise dem Ausgang des LM7805 Reglerschaltung. Der A / D Wandler Spannungen zwischen 0 V und die Versorgungsspannung VDD, die in der Regel 5 Volt. Der Analogeingang kann ein Signal sein, das über und unter 0 Volt schwingt, so dass seine Wellenform positive und negative Abschnitte haben. Um die Eingangswellenform mit dem A / D-Wandlers abzutasten, muss das Eingangssignal zu verschieben ist. Der Spannungsteiler angelegt von Widerständen R1 und R2 stellt die Vorspannung an die Hälfte der 0 bis VDD A / D-Eingangsbereich. Der Kondensator C1 koppelt die Wechselstromeingangssignal an den A / D-Eingang, so dass nun die Eingangswellenform schwingt um ½ VDD statt Schwenken um 0 Volt, wie in den folgenden Graphiken gezeigt ist. R3 und R4 bilden einen Spannungsteiler verwendet, um die Zielfrequenz eingestellt. Der Prozessor liest die Spannung am Frequenzauswahlstift und verwendet den Wert auf den richtigen Koeffizienten von dem Algorithmus benötigt, um festzustellen, ob die Zielfrequenz vorliegt bestimmen. R5 und R6 bilden einen Spannungsteiler verwendet werden, um Nachweisgrenze fest. Dies ermöglicht es dem Benutzer, die Größe der algorithmische Ausgabe, die notwendig ist, damit das Programm drehen Ausgang HIGH auszuwählen. Der Prozessor liest die Spannung an der Nachweisgrenze Stift und verwendet den Wert, um den Erfassungsschwellenwert zu bestimmen. C2 ist ein Entkopplungskondensator mit dem Mikroprozessor verwendet, um die VDD-Versorgungs frei von Spannungsspitzen zu halten. Schritt 3: Mikroprozessor-Pin-Funktionen Die Funktionen der Pins auf dem Mikroprozessor U1 sind wie folgt: 1) VDD. Der Spannungseingang. Tragen Sie eine geregelte + 5V an diesen Pin 2) Serieller Ausgang. Dieser Stift gibt die Ergebnisse der Frequenzdetektionsalgorithmus. Zusätzliche Schaltungen benötigt wird, um den RS-232-Ebenen konvertieren, wenn der Ausgang ist mir von einem seriellen PC-Anschluss überwacht. 3) Nachweisgrenze Einstellung. Die Spannung an diesem Stift bestimmt die minimale Zielsignalamplitude erforderlich, um die Frequenzdetektionsausgang (Pin 5) gehen hoch zu machen. 4) Soll-Frequenz Wählen Sie Aktivieren. Dieser Pin ist erniedrigt, wenn die Zielfrequenz muss nach Prozessorstart geändert werden. Andernfalls halten Sie sie gebunden hoch, um die aktuelle Zielfrequenzeinstellung zu erhalten. 5) Frequenz Erfassung Ausgang. Dieses Signal geht hoch, wenn die Grße der Soll-Frequenz, die größer als die Erfassungsschwelle durch den Stift 3 gesetzt ist hoch, solange die Zielfrequenz vorhanden ist, und seine Größe über dem Erfassungsschwellenwert ist. 6) Zielfrequenz. Die Eingangsspannung auf diesem Stift wird verwendet, um die Zielfrequenz nachzuweisenden bestimmen. 7) Audio-Eingang. Dies ist Analogeingang, die von den Mikroprozessoren interne Analog-Digital-Wandler abgetastet wird. Dieser Stift muß ½ VDD vorgespannt werden, so dass der Audio-Wellenform kann durch den Analog-Digital-Wandler abgetastet werden. 8) VSS. Schließen Diesen Pin in den Boden. Schritt 4: Target Frequency Selection Die Mittenfrequenz wird mittels eines in den Frequenzauswahleingang angelegten Spannung ausgewählt. Die Spannung an diesem Eingang wartet der Mikroprozessoren A / D-Wandler und von diesem Lesen des Programms konfiguriert sich selbst, um die entsprechenden Frequenz dekodieren. Der Frequenzbereich, der decodiert werden kann, ist zwischen 100 Hz und 2148Hz. Das Programm liest immer die Zielfrequenzauswahleingang nach dem Einschalten. Danach wird das Zielfrequenzauswahleingang ignoriert, außer wenn die Zielfrequenzauswahlfreigabeeingang auf Niedrigpegel gelegt. So, um Änderungen an der Zielfrequenz während der Programmausführung zu machen, muss der Freigabeeingang niedrig sein. Es muss niedriger für mindestens 100 ms gehalten werden, da der Eingang zu Beginn der Programmschleife überprüft. Sobald der Eingang wieder hoch gebracht wird, wird das Programm zu ignorieren die Zielfrequenzauswahleingang und der Zielfrequenz in Wirkung, dass festgestellt werden kann, während der Freigabestift war gering. Ein Spannungsteiler wird verwendet, um die richtige Eingangsspannung auf den Stift gesetzt, um die gewünschte Zielfrequenz zu wählen. Das benötigt, um eine gewünschte Frequenz eingestellt Spannung kann wie folgt berechnet werden: V_target_frequency_select_input = VDD * (Target_Frequency -100) / 2048 VDD ist die Stromversorgungsspannung (in der Regel 5 Volt). Der gültige Bereich von Frequenzen für das Programm geschrieben ist 100 Hz bis 2148 Hz. Also, für eine Zielfrequenz von 1000 Hz und VDD von 5 Volt, um die Frequenz angelegte Spannung Wähleingang sollte: V_target_frequency_select_input = 5 * (1000 -100) / 2048 = 2,2 Volt Das Diagramm unten zeigt die Sollfrequenz als Funktion der Spannung auf dem Zielfrequenzauswahleingang für einen VDD von 5 Volt gewählt. Der einfachste Weg, um die Spannung gesetzt wird mittels eines Spannungsteilers, wie in der schematischen gezeigt. Die Spannung am Ausgang eines Spannungsteilers verbunden ist: Vout = VDD * [R4 / (R3 + R4)] Die genauen Werte der Widerstände ist nicht kritisch, nur das Verhältnis von ihren Werten. Allerdings, um Lärm von Stauchen der Frequenzauswahleingang zu vermeiden, ist es am besten, niedrigere Widerstandswerte zu wählen. Als Faustregel gilt, wählen Sie Werte, die beide weniger als 100 k Ohm sind. Es kann auch ein Potentiometer anstelle von festen Widerständen verwendet werden, um die Fähigkeit zur Veränderung oder Anpassung der Zielfrequenz bereitzustellen. Setzen Sie ein Potentiometer mit einem Widerstand von weniger als 100k Ohm. Schritt 5: Nachweisgrenze Einstellung Die Erfassungsschwelle wird mit Hilfe einer an die Erfassungsschwelle Eingang anliegenden Spannung einstellen. Die Spannung an diesem Eingang wartet der Mikroprozessoren A / D-Wandler und von diesem Lesen des Programms bestimmt die Erfassungsschwelle. Die Software wendet Hysterese zum Erfassungsschwelle. Hysterese hält den detectopm Ausgang von Hin- und Herschalten von hoch auf niedrig, wenn der Betrag des Algorithmus Ausgang wird in der Nähe des Erfassungsschwellenreiten. Falls Sie nicht mit, wie Hysterese arbeitet sind, um die nachstehende Abbildung. Man beachte, wie die oberen und unteren Schwellen zu handeln, um eine saubere digitale Ausgangssignal von einem verrauschten Signals, die um die Mitte des Fensters reitet bereitzustellen. Wenn Sie mit einer Schaltung genannt ein Schmitt-Trigger nicht vertraut sind, dann wird dies bekannt vorkommen. Der Wert aus dem Schwellenwertsetzeingangslese stellt den Mittenwert einer Hysterese-Fenster, wobei die oberen und unteren Schwellenwerte symmetrisch oberhalb und unterhalb der Mitte sitzt. Der Ausgangswert von dem Algorithmus muss die obere Schwelle zu bewirken, dass der Erfassungsausgang auf den hohen überschreitet und der Ausgangswert ist unter der unteren Schwelle fallen, bevor der Erkennungsausgang geht AUS. Die kleineren Schwankungen im Ausgangswert oberhalb und unterhalb der Mitte des Fensters nicht zum Verlust der Erkennungsausgang zu ändern. Die Software erlaubt nicht die Erfassungsschwelle um den ganzen Weg auf Null gesetzt werden, weil in diesem Fall die Erfassungsausgabe, um für jede kleine Menge an Rauschen auf dem Signaleingang hoch gehen. Der Prozessor verwendet die VDD-Stromversorgung über Pin 1 als Bezug für die A / D-Wandler. Wenn eine andere VDD für einen gegebenen Pegel des Eingangssignals verwendet, die Ausgabe des Algorithmus proportional ändern. Ein Spannungsteiler wird verwendet, um die richtige Eingangsspannung auf den Stift gesetzt, um die gewünschte Detektionsschwelle wählen Um die Spannung zu berechnen, um zu der Detektionsschwelle Eingang anzulegen, um den minimalen oberen Schwellenwert erforderlich, um ein Eingangssignal mit einer bestimmten Amplitude bei der Zielfrequenz zu erfassen, mit der folgenden Gleichung herzustellen. V_dection_threshold_input = VDD * [342 * V_signal_at_target_freq - 27] / 1024 So, um die Erkennungsschwelle für eine VDD von 5 Volt eingestellt, so dass der Erfassungsausgang hoch wird für ein Eingangssignal von 1 Volt (Spitze) oder mehr bei der Zielfrequenz, sollte die Spannung an der Detektionsschwelle eingegeben werden: V_dection_threshold_input = 5 * [342 * 1 -27] / 1024 = 1,54 Volt. Das folgende Diagramm zeigt die oberen und unteren Grenzwerte des Hysteresefenster über der Spannung auf dem Erfassungsschwelleneingang für einen VDD von 5 Volt. Der einfachste Weg, um die Spannung gesetzt wird mittels eines Spannungsteilers, wie in der schematischen gezeigt. Die Spannung am Ausgang des Spannungsteilers ist: Vout = VDD * [R6 / (R5 + R6)] Die genauen Werte der Widerstände ist nicht kritisch, nur das Verhältnis von ihren Werten. Allerdings, um Lärm von Stauchen der Wert von der Eingabe gelesen zu verhindern, ist es am besten, niedrigere Widerstandswerte zu wählen. Als Faustregel gilt, wählen Sie Werte, die beide weniger als 100 k Ohm sind. Es kann auch ein Potentiometer anstelle von festen Widerständen verwendet werden, um die Fähigkeit zur Veränderung oder Anpassung der Erfassungsschwelle bereitzustellen. Setzen Sie ein Potentiometer mit einem Widerstand von weniger als 100k Ohm. Frequenzen außerhalb des Ziel eine reduzierte Antwort vom Algorithmus zu erzeugen. Also, wenn die Erfassungsschwelle eingestellt wird, ein Eingangssignal von 1 Volt oder mehr an genau der Zielfrequenz zu erfassen, dann wird ein Signal leicht von der Zielfrequenz müssen größerer Amplitude zu detektieren. Die Reaktion des Algorithmus ist scharf, so dass auch große Amplitudensignale, die sehr weit außerhalb der Zielfrequenz sind, werden wenig oder keine Reaktion zu erzeugen. Beziehen sich auf die Grundalgorithmus Reaktion gegenüber der Frequenz in anderen Schritten gefunden. Schritt 6: Optional: Serielle Ausgabe Das serielle Ausgangsstift stellt ein Mittel zum Überwachen und Aufzeichnen der Reaktion des Algorithmus. Es ist nicht notwendig, etwas mit diesem Ausgang zu tun, sondern ermöglicht es dem Versuchsleiter Zugriff auf nützliche Informationen. Der serielle Ausgang hat das folgende Format. Die eingereichten Daten werden durch Komma getrennt. Zielfrequenz in Hertz, Oberer Grenzwert, Unterer Grenzwert, Stromschwelle, Dectection Indikation, Algorithm Magnitude ausgegeben. Unten ist ein Beispiel Zeile der Ausgabe. 01002,08394,06528,06506, X1,11063, Also aus dem obigen Beispiel zu sehen, dass die Zielfrequenz ist 1002 Hz, die obere Schwelle 8394 ist die untere Schwelle 6528 und die aktuelle Schwelle ist 6506 (das ist der Wert von der letzten Schleife). Die "X1" bedeutet, dass die Frequenz erfasst wurde. Der Betrag des Algorithmus Ausgabe von dem letzten Ausführung ist 11063. Diese Größe größer als die obere Schwelle 8394 ist, so dass die Frequenz erfasst wurde. Wird keine Frequenz erkannt wird, würde die Zeile "X0" statt "X1" enthalten. Wenn Sie einen Frequenz-Sweep, die die Zielfrequenz zu tun und beobachten Sie den Größenwert, sollten Sie sehen, es zu erhöhen, wie die Eingangsfrequenz nähert sich dem Zielfrequenz. Der Betrag wird am größten an der Zielfrequenz sein, und dann wird es wieder einmal abfallen wie die Sweep bewegt sich jenseits der Zielfrequenz. Um den seriellen Ausgang mit einem PC zu überwachen, müssen Sie die 5-Volt-Logikpegel Ausgang des Mikroprozessors auf RS-232 Levels, die von einem Computer serielle Schnittstelle ausgelesen werden kann konvertieren. Eine Schaltung mit dem MAX232 Chip kann für diesen Zweck verwendet werden. Einige serielle Ports können in der Lage, um die Ausgabe durch einfaches Umdrehen der Logikpegel zu lesen. Es gibt eine Vielzahl von Informationen über die Verwendung der seriellen Schnittstelle RS-232, die im Internet, Sie zu unterstützen, wenn nötig. Eine Zeile Ausgabe wird jedes Mal der Algorithmus läuft übertragen. Das Programm eine Schleife etwa zehnmal pro Sekunde. Dieser Ausgang kann leicht in eine Textdatei mit einem Terminalprogramm wie Hyperterminal erfasst werden und dann in Microsoft Excel importiert werden für die weitere Verarbeitung, wenn gewünscht. Bei der Konfiguration eines Terminal, um die Ausgabe zu sehen, um die Einstellungen zu verwenden sind 9600 Baud, 8N1, keine Parität, keine Flusskontrolle. Schritt 7: Optional: Algorithmus-Details Der Goertzel-Algorithmus ist ein Algorithmus zur Signalverarbeitung, die zum Detektieren einer einzelnen Frequenz verwendet wird. Es ist aus der Fourier-Transformation abgeleitet ist. Der Algorithmus dient als sehr schmale Bandpassfilter. Es ergibt sich eine sehr scharfe Antwort auf Frequenzen innerhalb des Durchlaßbandes, und eine viel geringere Reaktion bei Frequenzen außerhalb des Durchlaßbandes. Die kleinsten Details des Goertzel-Algorithmus wird hier nicht behandelt werden. Der Algorithmus Schleife tastet das Eingangs Verwendung des Mikroprozessors in A / D-Wandler aufgebaut. Die erforderlichen mathematischen Operationen werden in der Zeit zwischen aufeinanderfolgenden Proben ausgeführt wird. Die verschiedenen Variablen in dem Algorithmus verwendet werden, wie folgt definiert: Xn_sample = jüngster Probe aus dem A / D-Wandler Xn = jüngster Probe aus dem A / D-Wandlers multipliziert mit der Fensterfunktion. Y0 = Der Ausgangswert derzeit berechnet. Y1 = Die zuvor berechneten Ausgangswert. (Der Ausgabewert von der vorhergehenden Iteration der Schleife). Y2 = Der Ausgabewert von der Iteration der Iteration vor dem l vorherigen Iteration der Schleife. Die folgende Abbildung zeigt eine Liste der Variablen, die in dem Algorithmus verwendet. Beziehen sich auf das Flussdiagramm in der beigefügten PDF zu sehen, wie die Goertzel-Algorithmus Teil des Programms auf dem Prozessor ausgeführt. Sobald der Algorithmus zur Verarbeitung aller Proben (die beigefügten * HEX und * .asm Dateien 200 Proben), wobei die realen und imaginären Komponenten der Ergebnisse berechnet werden. Die realen und imaginären Teile werden dann verwendet, um den Betrag zu berechnen. Die Grße ist ein Maß für die Zielfrequenz in den abgetasteten Daten vorhanden ist. Der Betrag wird dann mit dem Schwellenwert verglichen. Wenn der Wert größer als der Schwellwert ist, wird die Frequenz als erkannt wird, und der Ausgang wird hoch eingestellt. Wenn die Größe kleiner als der Schwellenwert ist, wird der Ausgang niedrig ist. Die Schärfe der Filterantwort als Funktion der Frequenz ist proportional zu der Anzahl von Proben entnommen. Die Reaktion des Algorithmus müssen scharf genug sein, dass es eine Antwort auf die Zielfrequenz erzeugt aber viel niedriger Gang für Frequenzen außerhalb des Ziels. Ein Wert von 200 Proben wurde festgestellt, dass eine hinreichend enge Antwort in Experimente zu erzeugen. Fensterfunktion Nachdem jede Probe wird aus dem A / D-Wandler erhalten wird, wird es zuerst durch einen Fensterwert, bevor er in den nachfolgenden Berechnungen verwendet wird, multipliziert. Beziehen sich auf die Bilder unten zeigen den Frequenzgang des Algorithmus um zu sehen, die Auswirkungen des Fensters. Das Ausmaß der Reaktion ist geringer, und die Breite des Antwort breiter ist, wenn das Fenster verwendet, aber Welligkeiten nahezu eliminiert, so dass die Bestimmung, ob die Zielfrequenz vorliegende einfacher ist. Es gibt viele Arten von Fenstern, die in der digitalen Signalverarbeitung angewandt werden kann. Dieses bestimmte man nennt ein Hamming-Fenster. Die Form des Hamming-Fensters ist in einem Bild dargestellt. Die folgende Darstellung zeigt den Wert der Fensterfunktion, die für jede der Proben in der Unterroutine verwendet wird. Schritt 8: Leistungsbeeinflussende Faktoren Die Hex-Datei und Quellcode wurden für die PIC 12F683 Prozessoren entwickelt. Der Einfachheit halber wurde die Prozessoren interne 8 MHz-Oszillator für die Uhr eingesetzt. Die Befehlszyklusfrequenz beträgt ¼ der Frequenz oder 2 MHz, so dass die Befehlszykluszeit beträgt 0,5 Mikrosekunden. Da dieser Prozessor ist nicht eine echte DSP wurden Programme entwickelt, um die mathematischen Operationen erforderlich, um den Algorithmus auszuführen auszuführen. Operationen wie Multiplikation am Ende als relativ zeitaufwendig. Eine echte DSP-Prozessor wurde entwickelt, um solche Operationen bei einer erheblich höheren Geschwindigkeit durchzuführen. Der 12F683 Prozessor eine Taktfrequenz so groß wie 20 MHz zu verwenden. Diese Frequenz müssten von einem externen Kristall oder Oszillator erzeugt werden, und die Software würde konfiguriert werden, um es als eine Taktquelle anstelle des internen Oszillators zu verwenden. Verwendung eines 20-MHz-Oszillator würde es der Abtastrate um einen Faktor von 2,5 erhöht werden. Die Zeitkonstante verwendet, um die Probenperiode eingestellt müssten geändert werden, wenn die Taktfrequenz ist die Veränderung. Außerdem würde jede andere zeitkritische Routinen, wie beispielsweise die Bit schlug seriellen Port, modifiziert werden müssen, um die richtige Zeitsteuerung zu erzeugen. Schritt 9: Probleme durch Aliasing Der Algorithmus muß die gesamte erforderliche Verarbeitung zwischen Proben durchzuführen, so dass die maximale Geschwindigkeit, mit welcher das Audioeingangs abgetastet werden, wie schnell die Verarbeitung abgeschlossen werden kann, begrenzt werden. Im schlimmsten Fall nimmt der Algorithmus 420 Befehlszyklen, um jede Probe zu verarbeiten. Wenn der Prozessor auf ein 8 MHz Takt ausgeführt wird, die Abtastfrequenz wird dann auf etwa 4400Hz begrenzt. Wenn du mit DSP vertraut sind, werden Sie sich erinnern, dass die Abtastrate mindestens doppelt so hoch wie jeder Frequenz im Signal oder Aliasing auftreten wird. Aliasing wird, wenn eine höhere Frequenzsignal als ein Signal mit niedrigerer Frequenz interpretiert. Zum Beispiel, wenn Sie den Prozessor so konfigurieren, 1000Hz und die Abtastrate erfassen gesetzt ist 4400Hz, ein Signal von 3400Hz als 100 Hz erfasst werden. Finden Sie auf der folgenden Abbildung zu sehen, wie Aliasing funktioniert. Die erste Handlung in der Abbildung ist die Basisband-Spektrum des Signals Sie Probenahme werden. Der schattierte Bereich stellt die dreieckige Form des Spektrums. Die horizontale Achse ist die Frequenz. Wenn das Basisbandsignal abgetastet wird, wird das abgetastete Signal Spektrum des Basisbandsignalspektrum wiederholt an jeder ganzzahligen Vielfachen der Abtastfrequenz, wie in den nachfolgenden Parzellen in der Figur aufgeführt sind. Beachten Sie, dass keines der Spektren überlappen in der ersten Handlung. Die nächsten zwei Diagramme zeigen das Spektrum des abgetasteten Signals als die Abtastfrequenz verringert. Beachten Sie, dass die wiederholte Spektren an jeder Vielfachen der Abtastfrequenz näher zusammen als eine Folge der Reduzierung der Abtastfrequenz. Die untere Kurve zeigt, was passiert, wenn die Abtastfrequenz fällt unter die doppelte Bandbreite des Basisbandsignals. Der schraffierte Bereich des wiederholten Spektren überlappt nun die Basisbandsignalspektren. Es ist nun möglich, dass die Frequenz f2 bezeichnet in der wiederholten Spektren auf der Frequenz f1 in dem Basisbandsignal überlappen. Diese Frequenz kann nicht von einem tatsächlichen Signal mit der Frequenz f1 unterscheiden, und so wird es als Alias. Um Aliasing zu vermeiden, der das Eingangssignal zu filtern, um den Frequenzinhalt, die über der Hälfte der Abtastrate ist, in diesem Fall 2200Hz reduzieren. Schritt 10: Leistung in Gegenwart von White Noise Die beiden Figuren zeigen den Antwort des Detektors, wenn weißes Rauschen mit dem gewünschten Signal vorhanden ist. Diese Grundstücke sind aus von einer Schaltung der Ausführung des Programms auf dem PIC-Mikroprozessor erfassten Ist-Daten. Das erste Bild zeigt die tatsächlichen Formen des Sinussignal plus Rauschen angewendet. Die zweite Zahl zeigt die Reaktion des Algorithmus, wenn das Signal verarbeitet wird. Die erste Figur zeigt die Reaktion des Algorithmus, wenn ein Sinuswellen-Eingangssignal wird durch die Erhöhung des Weißrauschen begleitet. Die erste Handlung ist ohne Rauschen vorhanden, und die nachfolgenden Diagramme zeigen die Reaktion, wenn die Rauschamplitude beträgt 20%, 50% und 100% so groß wie die Signalamplitude. Auch mit einer signifikanten Menge von weißem Rauschen mit dem Signal, kann es noch zuverlässig detektiert werden. Schritt 11: Probleme mit Übersteuern des Eingangs Wenn der Signaleingang wird überfahren, wird das Signal beginnen, Clip, was zu Verzerrungen. Diese Verzerrung führt zu Oberwellen des Eingangssignals ist, von denen einige größer als die Hälfte der Abtastrate ist. Diese Oberwellen können als Aliase detektiert werden. Die folgende Darstellung zeigt die algorithmische Ausgabe für einen Frequenzdurchlauf bei der die Amplitude des Eingangssignals groß genug war, um die Sinusform zu befestigen. Beachten Sie die zusätzlichen Spitzen in der Antwort. Die Mittenfrequenz betrug etwa 1000 Hz und die Abtastfrequenz 4400Hz. Beachten Sie die kurzen Spike in der Antwort gerade über 1100Hz. Die dritte Harmonische dieser Frequenz beträgt ca. 3400Hz, die für einen 4400Hz Abtastrate würde Alias ​​als 1000Hz. Wenn Fehldetektionen aufgrund von Clipping sind ein Thema, könnte das Eingangssignal vor der Eingabe an den Prozessor gedämpft werden. Wenn der Eingang durch einen Verstärker, wie beispielsweise in einer Anwendung unter Verwendung eines Mikrofons angetrieben wird, kann die Verstärkung des Verstärkers reduziert werden müssen, um Übersteuerungen zu vermeiden. Es ist auch üblich, einen Tiefpassfilter als ein "Anti-Aliasing-Filter" vor der Abtastung des Signals beinhalten, um herauszufiltern Frequenzkomponenten größer ist als eine Hälfte der Abtastfrequenz. Schritt 12: Source Code ************************************************** ************************************************** ************************************************** ************************************************** Wichtige Update 31. Januar 2011. Bitte lesen! Ein Betrachter vor kurzem versucht, die Montage * .asm Datei, die ursprünglich in diesem instructable enthalten, aber receieved viele "118" Fehler aus der MPLAB Assembler. Dieses Problem ist auf die Tatsache, dass ich den Code auf einer älteren Version von MPLAB erstellt. Während es auf der älteren Version in Ordnung zusammengestellt, I erhalten die gleichen Fehler, wenn ich versuchte es auf eine neue Version. Es scheint, wie die zum Einrichten und Reserve Platz für Variablen im RAM geändert hat Richtlinien. Ich bemerkte auch ein paar andere Fälle, in denen die neue Version von MPLAB nicht wie die Syntax der Ausdrücke, die in älteren Versionen funktionierte gut. Auch sicher sein, um "absolute Code" wählen, wenn sie versuchen, die gelieferte * .asm Datei zusammenzusetzen. Ich habe die * .asm Datei aktualisiert und es angebracht ist hier. Die einzigen Änderungen sind diejenigen erforderlich, um fehlerfrei zu montieren. Die aktualisierte Datei "NEW" im Dateinamen. Ich habe die alte Datei auch angebracht, falls jemand sie braucht verlassen, sondern nur darauf hingewiesen werden, dass, wenn Sie mit der neuesten MPLAB sind es viele Fehler zu generieren, wenn Sie das Original-asm-Datei Ich angebracht zu verwenden. Die aus dem aktualisierten Code generiert * .hex-Datei scheint identisch mit dem ich ursprünglich befestigt sein, so dass ich nicht eine andere Datei angehängt. Das Original * .hex-Datei sollte nur für die Programmierung eines Teils mit dem Code, wie er in der mitgelieferten * .asm Datei konfiguriert funktionieren. ************************************************** ************************************************** ************************************************** ************************************************** Der Source-Code für das * .hex-Datei geliefert wird unten angehängt. Das Programm wurde geschrieben, um die PIC 12F683 Prozessoren im Oszillator als Takt gebaut zu verwenden, die bei 8 MHz. Wenn Sie den Code in einer Anwendung, wo werden Sie mit einer anderen Taktfrequenz wieder verwenden möchten, dann müssen Sie werden, um den Unterschied in der Software zu berücksichtigen. Parameter, die die Abtastrate eingestellt werden müssen, geändert werden. Wenn Sie eine Änderung der Abtastfrequenz (die 4400Hz für das Programm, wie es jetzt geschrieben ist) zu machen, dann müssen Sie generieren neue Nachschlagtabellen für die Sinus- und Kosinus-Koeffizienten, da diese abhängig von der Abtastfrequenz. Wenn Sie die Anzahl der Proben im Algorithmus verwendet verändern (die 200 für das Programm ist, wie es jetzt geschrieben wird), müssen Sie eine neue Tabelle für die Fensterfunktion zu erzeugen. Es ist relativ einfach zu portieren dieser Code in ein anderes 8-Bit-PIC-Mikroprozessor. Die wichtigsten Dinge im Auge zu behalten sind die Oszillatorfrequenz wie oben beschrieben, und die genaue Einstellung der Register mit den verwendeten Peripheriegeräten verbunden sind. Dies sind in der Regel sehr ähnlich zwischen den 8-Bit-PIC-Prozessoren, aber sie können sehr ein wenig. Müssen die gewählten einen A / D-Wandler zum Lesen der analogen Eingänge Prozessor und einen 16-Bit-Timer, um die Abtastfrequenz eingestellt.

        7 Schritt:Schritt 1: Materialien Schritt 2: Vorbereiten des Enclosure Schritt 3: Anschließen der Komponenten Schritt 4: Normalisieren der Eingabe und Ausgabe Schritt 5: Schließen Sie restlichen Komponenten Schritt 6: Hochladen von DSP-Code Schritt 7: Variationen und Hinweise

        Bit Zerkleinern, Rate reduzieren, seltsame Geräusche: DIY 10-Bit-Effekte / Gitarrenpedal mit einem Arduino für Lo-Fi-DSP. Schauen Sie sich die Demo-Video auf Vimeo . Schritt 1: Materialien Tools Arduino (Diecimila oder mit Auto-Reset) Lötkolben Heißklebepistole Drahtschneider Bohrmaschine oder Dremel Materialien Enclosure Solder Heißleim Draht Perf Bord Audio-Buchsen (I verwendet 1/8 ") (x2) Interface Eingänge, zB: 3 Potentiometer Interface Ausgänge, zB: 3 LEDs und 3 150 Ohm-Widerstände Widerstände: 1 k, 10 k, 1,2 k ( x2), 1,5 k, 390 k-Kondensatoren: 2,2 uF (x2) Doppelt so viele Widerstände und Kondensatoren für Stereo-Verkabelung. Schritt 2: Vorbereiten des Enclosure Ich habe ein "Fast-Ethernet Medienkonverter" für mein Gehäuse. Es ist nur ein Feld, um die Arduino, einige Elemente der Benutzeroberfläche, und zwei Audio-Buchsen passen passiert. Es ist ziemlich stabilen Metall, was für ein Pedal ist. Als zusätzlichen Bonus: es hat ein Scharnier an der Rückseite, die es leicht zu öffnen und zu schließen lässt. Die einzigen Änderungen hatte ich auf diese Gehäuse machen es einige Löcher für die drei Töpfe (mit Hilfe einer Bohrmaschine) und Ausschneiden einige Kunststoff für die USB connector.Step 3: Anschließen der Komponenten Sobald das Gehäuse wird hergestellt: Situieren die Arduino Installieren Sie alle Ihre Schnittstellenkomponenten, wie Töpfe oder LEDs Installieren Sie Ihre Ein- und Ausgangsbuchsen Denken Sie daran, dass die LEDs benötigen Widerstände zwischen ihnen und die Stifte auf der Arduino. Ich habe 150 Ohm Widerstände. Wir werden dem Bearbeiten der analogen Sollwert, so, wenn Sie irgendwelche Töpfe haben Sie verwenden, um sie auf die AREF Pin statt der üblichen 5 V Pin anschließen möchten. Für die 1/8 "Anschlüsse (oder alles, was nicht auf der gleichen Platte des Gehäuses wie die Arduino) sicher sein, flexible Leiter verwendet werden. Ansonsten wird es schwer sein, den Fall abzuschließen und die Gelenke können oder brechen anderen Verbindungen könnten lösen kann. Schritt 4: Normalisieren der Eingabe und Ausgabe Eingang Dies ist die einzige wirkliche "Trick", wenn es um die Hardware für das System kommt. Audio passiert, als ein Wechselstromsignal von -1 V bis +1 V, aber die Analogeingänge auf der Arduino laufen von 0 V (Masse) bis zu einem gewissen positiven Spannung genannt analoge Referenz (5 V Standard). Sie können diese positive Spannung in Code oder mit einer externen Referenz. Seit -1 V bis +1 V ist ein 2-V-Bereich, werden wir etwas kleiner als 2 V für unsere analogen Sollwert zu wählen. Es stellt sich heraus 1,1 V wird als ein in interne Referenz, die schön klappt gebaut angegeben. Von hier haben wir den -1 V bis +1 V mit 0 V bis 1,1 V. I mit einem Widerstand in Reihe, gefolgt von einer Spannungsteilerschaltung tat dies zu normalisieren. Eine Gitarre kann nicht direkt fahren diese Strecke, sie einen Vorverstärker (wie eine andere Pedal), es zu fahren braucht. Ich bin sicher, Sie könnten einen Transistor oder Operationsverstärker Vorverstärker an den perf Bord hinzufügen, so dass Sie direkt in das Pedal anschließen. Ausgabe Für die Ausgabe werden wir zu sein mit PWM. Bei einigen niedrigen Niveau Hacks in Software, können Sie ein 8-Bit-PWM-Betrieb bei 62kHz erhalten = 16 MHz / 2 8 Es gibt einige andere Verfahren zur Audioausgabe auf dem Arduino. Eine gute Übersicht finden Sie uC Hobby . Ich habe ein paar gute Ergebnisse aus einer R2R DAC, aber wenn man bedenkt es braucht rund 40 Widerstände für 10-Bit-Stereo-Ausgang, entschied ich mich dagegen. Stattdessen ging ich mit dem gewogenen Pins Technik, die Art ist wie eine Mischung aus Standard-PWM und einer Widerstandsleiter. Bau der Rennstrecke Ich baute zwei von jedem Schaltkreis auf einer perf Bord. Ich hatte einen Erdungsstreifen in der Mitte, die für die Vermittlung Dinge so sauber wie möglich geholfen. Das erste Mal habe ich die Schaltung gebaut, war es zu groß und nicht in das Gehäuse passen, also musste ich es wieder aufzubauen. Wenn Sie sich in Serie wie diese haben Kondensatoren, werden sie abgeschnitten einige Ihrer niedrigen Frequenzen. Mit einem 2,2 uF Kondensator, es ist niedrig genug, so dass es nicht wirklich Einfluss auf Geräusche in unserer Hörweite. Je größer der Wert, desto besser; aber Kondensatoren sind in der Regel physisch größer, als ihr Wert steigt auf zu bekommen. Schritt 5: Schließen Sie restlichen Komponenten Sobald Ihre Eingangs- und Ausgangsstromkreise sind auf Ihrem perf Bord gemacht, legen Sie sie in und beginnen Anbringen alle Drähte, die noch nicht angebracht werden. Der Audio-Eingang geht in die Eingangsschaltung, dann in die Arduino analogen Eingänge Die Topfhähne gehen an Analogeingänge des Arduino Zwei LEDs zur PWM-Ausgänge gehen, geht man in ein digitales Ausgangs vier PWM-Ausgänge in den 2.8-bit gewichteter DAC gehen Schaltung Der Ausgang des gewichteten DAC-Schaltung geht an den Audio-Ausgang Schritt 6: hochladen DSP-Code Laden Sie den Code, und Sie werden zwei Ordner zu finden. Eine davon ist die grundlegende DSP-Code, "ArduinoDSP", die Sie verwenden können, um Ihre eigenen Pedal zu machen. "GlitchPedal" ist der, den ich für diesen spezifischen Setup verwendet. An einem gewissen Punkt, Vimeo entfernt die Datei per-Gruppe Hosting war ich mit, um den Code zu hosten. Für eine bessere Referenz, sehen diesen Code von Tony Ivanov oder folgen Randys Instructable statt. ArduinoDSP Das beinhaltet in ArduinoDSP sind nützlich für die Einstellung der richtigen PWM Vorskalierung und analoge Ein- Vorskalieren Werte. Sie drehen den Pins 3 und 11 in den linken Ausgängen (8 und 2 Bits jeweils) und 5 und 6 in die richtigen Ausgänge, mit Fast-PWM-Einstellungen ohne Vorskalierung so die PWM ist so schnell wie möglich. Der ADC ist auch mit einer niedrigen Skalierwert, 32 gesetzt, und die analoge Referenz bis 1,1 V (die interne Referenz) gesetzt. Um die Grund ArduinoDSP Code ändern, nur Ihren eigenen Code, um die Variable "input" zwischen der Linie ändern einfügen "short Eingang = analogRead (links);" und "Ausgabe (links, input);". GlitchPedal Der Code habe ich schon geschrieben hat, ein paar Dinge. Die LEDs liefern eine visuelle Rückmeldung über die Knopfpositionen und Eingangspegel, und die Töpfe Kontrolleinstellungen für die DSP geschieht innerhalb des Mikrocontrollers. Der erste Topf steuert den Betrieb, die zweite steuert einen Parameter dieses Modus und der dritte Kontrollen eine wirksame Abtastrate. Die Modi sind: Bitcrush: Bit-Verschiebung des Eingangs nach rechts und dann nach links, Abhacken N Bits. Bitshift: Verschiebung der Eingang an der linken Seite, was zu einem seltsamen Effekt für die ersten Werte und dann schließlich Rauschen (dh die "Dithering Bits"). Overdrive: Multiplizieren Sie die Eingabe durch einen Schwimmer 1-20. Binary Impulsantwort: tun verschiedene binäre Operationen auf dem Eingang und dem letzten Ergebnis (XOR, NOR, XNOR, NAND ...) Schritt 7: Variationen und Hinweise Variations Fügen Sie ein RC-Tiefpassfilter auf den Ausgang mit wählbarer Eckfrequenz Weirder Modi: Bit Remapping? Bit-Rotation? Wiederholen letzten N Proben? Dies wird stark von der ATmega RAM begrenzt. Weglaufen 9V Steckernetzteil statt USB Power 6 8-Bit-Ausgänge laufen in ein 5.1 Lautsprechersystem? Verwenden Sie einen Arduino Mini für eine super kleine Pedal Patch-bay als Schnittstelle? Eingangslautstärkeregler Aufzeichnungen Da der ADC ist wirklich der primäre Engpass in diesem Setup, könnten etwaige alternative Methoden ADC wirklich hilfreich sein (es gibt eine große Referenz von Alternativen hier , wenn auch letztlich würde es am einfachsten, einen dedizierten Chip ADC via SPI statt verwenden Umsetzung diese manuell) . Da das System ist jetzt, ist es am besten, um Mono-Eingänge bleiben, wenn Sie ziemlich genaue Ausgang beibehalten möchten. Dank Andrew Armenien für die Hilfe bei Eingangs Normalisierung, Dane Kouttron zur Erläuterung ein paar Dinge über PWM auf ATmega168s, James Miglietta für versicherte mir, dass die Gitarre Pedale bei normalen Audio Spannungen führen, und Blair Neal für den Wunsch einer bitcrusher / Abtastrate Minderer in der ersten Ort. Aktualisierung Ein weiterer großer Technik mit einem Audiopuffer und tut "echte" Effekte durch vorgeführt worden Martin Nawrath . Ich glaube, einer der größten Vorteile von Martins Ansatz ist, dass er einen Interrupt für den ADC Probenahme. Normalerweise wird der ADC in einer Sperr Weise mit analogRead () aufgerufen (dh der Code nicht vorbei analogRead gehen (), bis die Umwandlung erfolgt). Martins Technik entlastet den Code, um andere Dinge zu tun, während der ADC getan wird.

        Seiten: