Frage:
Bandpassfilter zum Isolieren der Musiknote "A2"
user664939
2011-12-29 22:18:32 UTC
view on stackexchange narkive permalink

Ich möchte ein Bandpassfilter entwerfen, um die Musiknote A2 (110 Hz) mit einer Genauigkeit von einem halben Schritt von den benachbarten Noten zu isolieren. Dies bedeutet, dass G2 # = 103,83 Hz und A2 # = 116,54 Hz im Stoppband liegen sollten.

Im Ideal In diesem Fall wäre 110 Hz bei 0 Verstärkung. G2 # und A2 # würden stumm sein (unendliche negative Verstärkung?) Und es würde einen reibungslosen Abfall von A2 zu jeder benachbarten Note geben.

Wie kann ich meinen Fenstertyp auswählen? Bestimmen Sie, wie viele Koeffizienten erforderlich sind, und berechnen Sie diese Koeffizienten?

Ich habe im College einige EE-Kurse belegt, bin aber weit entfernt von einem Elektrotechniker. Bitten Sie daher um Klärung, wo sich diese befinden erforderlich.

Referenzen:

Möchten Sie diese Frequenz letztendlich durchlassen oder nur ihre Anwesenheit / Amplitude erkennen?
@ChrisStratton: Im Moment möchte ich nur die Amplitude überprüfen. Möglicherweise möchte ich auch andere Eigenschaften des Signals bei dieser Frequenz bestimmen.
Möchten Sie einen digitalen Filter in einem DSP oder einer analogen Schaltung erstellen?
Fünf antworten:
Olin Lathrop
2011-12-29 22:44:04 UTC
view on stackexchange narkive permalink

Soweit ich weiß, möchten Sie die Amplitude der 110-Hz-Komponente mit einer Bandbreite von weniger als der 12. Wurzel von 2 auf beiden Seiten erfassen. Die benachbarten Noten, die nicht erkannt werden sollten, sind 103,8 Hz und 116,5 Hz, die etwa 6% von der Mittenfrequenz abweichen.

Erstens ist dies ein sehr enger Filter. Dies wird mit analoger Elektronik nicht passieren, zumindest nicht im Basisband.

Sie können dies digital tun, indem Sie das zusammengesetzte Eingangssignal abtasten und mit sin und cos von 110 Hz multiplizieren. Tiefpassfilter jedes dieser Produkte, so dass 6 Hz auf den Pegel gedämpft werden, den benachbarte Noten gedämpft werden sollen. Quadrieren Sie dann jedes der Ergebnisse und addieren Sie sie. Diese einzelne Zahl ist das Quadrat der letzten Amplitude einer beliebigen 110-Hz-Komponente im Eingangssignal. Beachten Sie, dass dieser Filter, da er eine sehr schmale Bandbreite hat, langsam reagiert. Es dauert einige 100 ms, um einen Schritt in der eingehenden 110-Hz-Amplitude zu stabilisieren.

Wenn Sie nur feststellen möchten, dass die 100-Hz-Komponente über einem bestimmten Schwellenwert liegt, können Sie den quadratischen Amplitudenwert verwenden direkt. Wenn Sie die reale Amplitude benötigen, müssen Sie die Quadratwurzel des Ergebnisses ziehen.

Ich habe etwas Ähnliches getan, um einzelne DTMF-Frequenzen in einem DTMF-Signal zu erkennen. Die Frequenzen, die Bandbreite und damit die Zeitkonstanten sind unterschiedlich, aber der Algorithmus ist identisch. Hier ist ein Ergebnis, das den Amplitudenquadratwert zeigt, den ich oben für drei aufeinanderfolgende DTMF-Frequenzen beschrieben habe, wobei der Algorithmus so eingestellt ist, dass er die mittlere erkennt:

Hier ist das Code-Snippet das über jede Eingangsabtastung lief, um die quadratische Größe (MAGSQ) und die reale Größe (MAG) zu erzeugen:

 für sampn: = 0 bis nsamp beginnen {einmal für jede Eingangsabtastung} t: = sampn * sampdt; {Zeit für dieses Beispiel festlegen} samp: = getsamp (t); {Eingabebeispiel abrufen} r: = t * freq; {Referenzfrequenzphase machen} ii: = abgeschnitten (r); r: = r - ii;
r: = r * pi2; prods: = samp * sin (r); {mix by ref Frequenz Sinus und Cosinus} prodc: = samp * cos (r); Filter (Filts, Prods); {Ergebnisse des Tiefpassfiltermischers} Filter (filtc, prodc); magsq: = sqr (filts.val) + sqr (filtc.val); {Quadrat der Größe berechnen} magsq: = magsq * 4.0; {normalisieren, so dass Eingabe 1.0 zu 1.0 führt} mag: = sqrt (magsq); {Lineare Größe berechnen} 

Die Subroutine FILTER führt auf übliche Weise ein zweipoliges Tiefpassfilter durch. Jeder Pol folgt dem Standardalgorithmus:

FILT <-- FILT + FF (NEU - FILT)

In diesem Fall ist FF 1/128. Da es sich um eine ganzzahlige Potenz von zwei handelt (in diesem Fall -7), könnte sie in einem Mikrocontroller durch eine Rechtsverschiebung von 7 Bit ausgeführt werden

Ich denke, der LM567-Tondecoder-IC verwendet grundsätzlich diese Technik. http://www.ti.com/lit/ds/symlink/lm567.pdf
Russell McMahon
2011-12-30 01:25:50 UTC
view on stackexchange narkive permalink

Wie Olin bemerkte, ist die Bandbreite für analoge sehr eng. Sehr.

Eine PLL kann sich der Herausforderung stellen.

Klingt für einen Lock-In-Verstärker sehr nach einem Job. Dies kommt wohl einer vorgeschlagenen Hardwareform der DFT nahe.

Siehe Ende für einen hervorragenden Hinweis zur Jim Williams-App.


Verstärker sperren:

Nützliche Princeton-Übersicht

Alle digitalen FPGA-Sperren im Verstärker Princeton-Projekt. Gut. Verilog.

Labview-Implementierung - gut. Viel Supportmaterial und Links. Hervorragende Leistung.

Notizen der Universität zu einem Kurs - ein nützliches Material.

Hier ist eine 26 Jahre alte App-Notiz des verstorbenen großen Jim Williams, die MAI Sei genau das, was du willst. Anwendungen für einen Baustein für Instrumente mit geschalteten Kondensatoren.

Siehe Abbildung 4 und Text auf den Seiten AN3-3 und An3-4. Wenn es von potenziellem Wert ist, sollten Sie sich wahrscheinlich viele andere Beispiele ansehen.

Ob dies zutrifft, hängt teilweise davon ab, ob Sie Zugriff auf die A2-Quelle haben, aus der die A2 hergestellt wurde, mit der gemischt wurde anderes Signal. Wenn Sie dies tun, funktioniert dies hervorragend - Sie haben eine "Homodyne". Wenn nicht, können Sie einen lokal generierten A2 für den Chopper-Treiber verwenden (Pin 16-Feed zum LTC1043), aber Sie haben keine Phasenkohärenz. Ergebnisse können immer noch nützlich sein. LTC1043-Datenblatt - auf Lager für 5,70 USD in 1 bei Digikey. Dies ist DIP18. Auch in SOIC18 erhältlich.

enter image description here

Sie sagen:

Lock-In-Verstärker Der in Abbildung 3 verwendete AC-Träger-Ansatz kann erweitert werden, um einen „Lock-In“ zu bilden. Verstärker. Ein Lock-In-Verstärker erkennt synchron den trägermodulierten Ausgang der Signalquelle. Da die gewünschte Signalinformation im Träger enthalten ist, bildet das System einen extrem schmalbandigen Verstärker. Nicht trägerbezogene Komponenten werden verworfen und der Verstärker leitet nur Signale weiter, die mit dem Träger kohärent sind. In der Praxis können Lock-In-Verstärker ein Signal 120 dB unterhalb des Rauschpegels

extrahieren

Abbildung 4 zeigt einen Lock-In-Verstärker, der einen einzelnen LTC1043-Abschnitt verwendet. In dieser Anwendung ist die Signalquelle eine Thermistorbrücke, die extrem kleine Temperaturverschiebungen in einer Reaktionskammer für biochemische Mikrokalorimetrie erfasst.

Der 500-Hz-Träger wird am Eingang von T1 angelegt (Kurve A, Abbildung 5). Der schwebende Ausgang von T1 steuert die Thermistorbrücke an, die A1 einen Single-Ended-Ausgang bietet. A1 arbeitet mit einer Wechselstromverstärkung von 1000. Eine 60-Hz-Breitbandrauschquelle wird ebenfalls absichtlich in den Eingang von A1 eingespeist (Trace B). Die Nulldurchgänge des Trägers werden von C1 erkannt. Der Ausgang von C1 taktet den LTC1043 (Trace C). Der Ausgang von A1 (Trace D) zeigt das gewünschte 500-Hz-Signal, das in der 60-Hz-Rauschquelle vergraben ist. Das nulldurchgangssynchronisierte Schalten des LTC1043 am positiven Eingang von A2 (Trace E) bewirkt, dass die Verstärkung von A2 zwischen plus und minus eins wechselt. Infolgedessen wird der Ausgang von A1 von A2 synchron demoduliert. Der Ausgang von A2 (Trace F) besteht aus demoduliertem Trägersignal und nicht kohärenten Komponenten. Die gewünschte Trägeramplituden- und Polaritätsinformation ist im Ausgang von A2 erkennbar und wird durch Filtermittelung bei A3 extrahiert. Um diese Schaltung zu trimmen, stellen Sie das Phasenpotentiometer so ein, dass C1 schaltet, wenn der Träger Null überschreitet. LT, AN3, Juli 1985:

http: //cds.linear .com / docs / Application% 20Note / an03f.pdf

JustJeff
2011-12-31 08:33:18 UTC
view on stackexchange narkive permalink

Es gibt einen sogenannten "Goertzl-Algorithmus", der häufig in DSPs verwendet wird, um einzelne Frequenzen innerhalb eines Zeitbereichssignals zu erfassen, beispielsweise um DTMF-Töne abzuspielen. Im Wesentlichen handelt es sich um eine optimierte diskrete Fourier-Transformation, die jedoch einfach zu programmieren ist. Google bietet zahlreiche Beispiele, wenn Sie interessiert sind.

Connor Wolf
2011-12-31 15:18:13 UTC
view on stackexchange narkive permalink

Hinweis: Ich poste dies eher als FYI, da die erforderlichen Komponenten nach Maß gefertigt und lächerlich teuer sein müssten.

Es ist wirklich eher ein Gedankenexperiment.


Dieses ist im analogen Bereich ziemlich einfach möglich (da das elektrische Design einfach ist. Das mechanische Design? nicht so sehr), vorausgesetzt, Sie können die richtigen Komponenten erwerben.

Was Sie wollen, ist ein niederfrequenter Kristallfilter .

Die eigentliche Herausforderung besteht darin, ausreichend niederfrequente Kristalle zu erhalten.

Ich weiß, dass es möglich ist, Quarzkristalloszillatoren unter 1000 Hz herzustellen, aber außerhalb von ELF / VLF-Militärempfängern (z. B. für U-Boot-Kommunikation) sind sie kein Markt für sie, daher sind sie im Grunde nicht verfügbar.

Wenn Sie lernen möchten, Ihre eigenen Kristalle zu mahlen, wäre dies sicherlich ein interessantes Projekt!


Eine weitere interessante Idee wäre, zu versuchen, Ihre eigenen herzustellen SAW-Filter. Ich denke, das wäre mit ein paar Piezoaktoren möglich. Sie würden eine Art Resonanzmasse benötigen (zum Teufel, vielleicht eine tatsächliche Stimmgabel verwenden), und sie würde wahrscheinlich mehrere Resonanzmoden haben, so dass Sie zusätzlich zum mechanischen Filter eine elektrische Filterung benötigen würden, aber dies wäre sicherlich einfacher Dann schleifen Sie Ihre eigenen Quarzkristalle.

Ich weiß jedoch nicht, welche Art von Abrollungen Sie erzielen könnten.

Ich dachte auch über analoge Wege nach, als eine Art Gedankenexperiment. Haben Sie von "N-Pfad" -Filtern gehört? Hier ist ein Link (Warnung, mathematisch schwer): http://www.alcatel-lucent.com/bstj/vol39-1960/articles/bstj39-5-1321.pdf Sie sind im Grunde eine Art Filter mit geschaltetem Kondensator, niedrig Mit diesen Frequenzen können Sie Bandpassfilter mit Millionen-Q-Faktoren erstellen.
@Bitrex - Interessant. Es sieht so aus, als ob sowohl das verknüpfte PDF als auch der SAW-Ansatz dasselbe tun, nämlich die Verwendung eines mechanischen Systems zur Simulation eines FIR-Systems.
@Bitrex: In diesem Fall wollen Sie kein Q in Millionenhöhe. Das würde das Durchlassband so extrem schmal machen, dass die Antwort sehr langsam wäre. Denk darüber nach. 1M Zyklen bei 110Hz sind eine lange Zeit.
@Olin Lathrop - Ich glaube nicht, dass er gesagt hat, dass Sie das in * diesem * Fall wollen würden, nur dass diese Technik solche Filterleistungen erzielen könnte.
Chris Stratton
2011-12-29 22:37:51 UTC
view on stackexchange narkive permalink

Wenn Sie nur die Note messen möchten, sollten Sie die diskrete Fourier-Transformation verwenden, die nur mit der interessierenden Frequenz ausgewertet wird (es gibt auch einige andere Algorithmen, aber dieser ist leicht zu beschreiben).

Im Wesentlichen multiplizieren Sie für einen bestimmten Zeitraum die Eingangsabtastwerte mit dem Cosinus und dem Sinus einer Variablen, die mit der gewünschten Frequenz inkrementiert werden, und akkumulieren die Ergebnisse separat als die beiden Komponenten einer komplexen Zahl. Aus den Summen können Sie die Größe (Quadratwurzel der Quadratsumme) und die Phase entnehmen.

Um die störende Erkennung anderer Frequenzen zu verringern, möchten Sie möglicherweise eine Fensterfunktion wie einen erhöhten Kosinus (Kosinus +) verwenden 1, von -pi / 2 bis pi / 2), wodurch das Signal sanft ein- und ausgeblendet wird, um die Kontamination der Analyse mit Artefakten abrupter Start- und Stoppübergänge zu verringern.

Sie haben den Teil über die Tiefpassfilterung der sin- und cos-Produkte weggelassen. So wird die schmale Bandbreite erreicht. Die Breite dieses Filters legt das Frequenzdelta um das gewünschte Signal fest, das erkannt wird.
@OlinLathrop - nein, ich habe es nicht ausgelassen, da ich sagte, dass es sich für einige Zeit ansammelt. Die Zeitdauer bestimmt die Bandbreite und ist eine Form des Tiefpassfilters. Während es möglich ist, diesen Filter in einer kontinuierlichen Form zu erstellen, ist das Konstruieren von Akkumulieren, Aufzeichnen, Speichern und Neustarten häufiger. Was angemessen ist, hängt davon ab, wie oft eine Antwort benötigt wird - wenn öfter als die für die gewünschte Schärfe erforderliche Akkumulationsperiode, dann müssen sich die Perioden überlappen, möglicherweise bis zum Äußersten kontinuierlich.
OK, ich wusste nicht, dass du das "für einige Zeit" meinst. Ja, das ist ein Tiefpassfilter, speziell ein Boxfilter. Es gibt bessere Filter, die weniger Zustand erfordern und einen besseren Frequenzgang haben und rechnerisch ungefähr gleich sind, aber das wird funktionieren. Ich bin nicht der Meinung, dass die Stapelverarbeitung von Datenblöcken häufiger vorkommt. Es gibt gute Gründe, das nicht zu tun. Ich denke, die meiste Zeit wird es gemacht, weil das alles ist, von dem jeder wusste, der die Firmware geschrieben hat.
@OlinLathrop - Nein, es ist angesichts der im letzten Absatz erwähnten Fensterfunktion kein Boxfilter. Hauptgründe für die Chunk-Verarbeitung sind der geringere Speicher- und Rechenaufwand. Um einen kontinuierlichen Filter durchzuführen, benötigen Sie etwas FIFO-ähnliches für die Verzögerungsabgriffe. Letztendlich macht es wenig Sinn, mehr Ergebnisse zu berechnen, als Sie verwenden werden.
Nein, Sie benötigen kein FIFO für "Delay Taps". Das ist für FIR-Filter. In meinem obigen Code finden Sie ein Beispiel für die kontinuierliche Verarbeitung ohne all diese Dinge. Dieses Problem ist eher für einen IIR-Filter geeignet.
Sie haben die interne Implementierung Ihres Filters nicht veröffentlicht, daher gibt es nichts zu "sehen". Und ein zeitdiskretes IIR-Filter erfordert Verzögerungselemente, wenn auch nicht so viele.
Das sollte offensichtlich sein. Ich mache dort nichts Ungewöhnliches, nur zwei Pole einfache Tiefpassfilterung. Da Sie jedoch fragen, habe ich meine Antwort ergänzt, um sie explizit anzuzeigen. Jeder Pol benötigt nur einen Zustand, und die Berechnung pro Probe ist einfach.


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...