Überblick-
Ich mache eine Bank mit analogen Sinusoszillatoren und bin daran interessiert, das Design kompakt zu halten.
Ich habe damit begonnen, einen Wien-Brücken-Oszillator zu bauen. Da ich mit einer einzigen Stromversorgung arbeite und versuche, das Design klein zu halten, habe ich den LM386n-1 IC verwendet.
Ich werde die Oszillatoren verwenden, um etwas additive Audiosynthese zu machen, vielleicht etwas FM, und ich werde wahrscheinlich einige der Oszillatoren als LFOs brauchen.
Meine Fragen sind-
Ist dies ein geeigneter Ansatz, um einen kompakten analogen Sinusoszillator herzustellen?
Wie würden Sie außerdem vorschlagen, dass ich die Frequenz steuere, welcher Komponentenwert sollte geändert werden, um dies zu erreichen? - Ich habe versucht, mit allen Widerständen herumzuspielen, um die Tonhöhe zu ändern, aber sie scheinen alle voneinander abhängig zu sein.
Hier ist die Schaltung, mit der ich gearbeitet habe, sie stammt aus dem Datenblatt des Niederspannungs-Audioleistungsverstärkers LM386 von National Semiconductor.
Und so sieht meine Implementierung aus, ich habe keine geeignete Glühlampe, also habe ich sie gerade durch einen 1-kΩ-Topf ersetzt. Ich bin mir immer noch nicht sicher, was ich in der endgültigen Schaltung als AGC verwenden werde, Vorschläge sind willkommen.
Dies beantwortet nicht Ihre Frage, aber ich denke, das Problem wird relevant angesprochen.
Heutzutage ist es albern, dies analog zu tun, außer vielleicht für einige sehr spezialisierte oder Hochfrequenzanwendungen. Sie haben erwähnt, dass dies eine Audioanwendung ist, daher kann ich mir keinen guten Grund für all das Analoge vorstellen. Ihr erster Satz erwähnt, dass Sie eine ganze Bank dieser Dinge wollen, und Sie wollen das Design kompakt. Der analoge Ansatz wird definitiv nicht kompakt sein. Ein weiteres Problem beim analogen Ansatz besteht darin, dass die Frequenzen und Amplituden driften.
Ein viel besserer Weg, dies zu tun, besteht darin, alle Sinuswellen in einem Prozessor zu erzeugen und sie digital zu addieren. Sie können alle dieselbe 1/4-Wellen-Sinustabelle verwenden, indexieren Sie sie einfach in unterschiedlichen Schritten pro Sample, um die verschiedenen Frequenzen zu erhalten.
Dies liegt sogar innerhalb der Leistungsfähigkeit von Low-End-DSPs wie der dsPIC-Reihe von Microchip. Ein dsPIC33F klingt wie eine gute Passform. Bei 40 MIPS haben Sie 1000 Befehlszyklen pro Abtastung bei einer Abtastrate von 40 kHz. Das ist viel und ermöglicht das Hinzufügen vieler verschiedener Sinusse zu jedem Sample. Die DSP-Multiplizier-Akkumulations-Hardware wird es ermöglichen, dass jeder Beitrag einfach mit seiner eigenen Verstärkung hinzugefügt wird.
Digital abgeleitete Signale wie dieses driften nicht in Frequenz oder Amplitude und haben ein besseres Signal-Rausch-Verhältnis. Bei 16-Bit-Zahlen erhalten Sie 96 dB. Das ist analog machbar, wenn Sie vorsichtig sind. Die Genauigkeit des digitalen Signals wird jedoch weitaus größer sein. Es besteht überhaupt keine Chance, dass die analogen Sinusgeneratoren innerhalb von 1 Teil von 65000 pro Sample liegen, nur aufgrund der Unvorhersehbarkeit der Amplitude. Die Frequenz der digitalen Signale kann ebenfalls sehr genau eingestellt werden, und der digitale Sinus-Synthesizer braucht nicht ein paar Zyklen, um sich zu stabilisieren, bevor seine Ausgabe Ihren Erwartungen entspricht.
Ich sehe einige Nachteile der Sinusgenerierung für die Tabellensuche, die in anderen Antworten erwähnt werden, die falsch sind, daher füge ich hier weitere Erläuterungen zur Methode hinzu. Zwei Einwände wurden vorgebracht, Genauigkeit und Frequenzauflösung.
Lassen Sie mich zunächst die normale Struktur einer Sinus-Suche erklären. Beachten Sie, dass eine Sinuswelle vierfach symmetrisch ist. Sie brauchen also nur 1/4 Zyklus zu speichern. Die grundlegende Wellenform des ersten Quadranten wird entweder umgekehrt, negiert oder beides in den verbleibenden drei 1/4 Zyklen wiederholt. Ein netter Trick, um dies zu vereinfachen, besteht darin, den Winkel so auszudrücken, dass ein vollständiger Kreis eine Zweierpotenz ist, vorzugsweise unter Verwendung des gesamten Worts der Maschine, auf der der Code ausgeführt wird. Das bedeutet, dass Winkeladditionen und -subtraktionen automatisch ohne expliziten Code für diesen Zweck um den Kreis gewickelt werden, wenn Sie die Winkelberechnung in vorzeichenloser Ganzzahlarithmetik durchführen. Diese Darstellung macht auch das Nachschlagen in der 1/4-Wellentabelle sehr einfach.
Die beiden hohen Bits des Winkels geben den Quadranten an, sodass nur die verbleibenden unteren Bits verwendet werden, um in die Tabelle zu indizieren. Wenn das höchste Winkelbit gesetzt ist, wird das Tabellenergebnis negiert. Wenn das nächsthöhere Bit gesetzt ist, wird die Tabelle rückwärts indiziert. Das ist so einfach wie das Komplementieren der verbleibenden niedrigen Bits, bevor sie als Index verwendet werden. Die Tabelle muss nicht so groß sein, dass alle niedrigen Bits als Index verwendet werden können. Beispielsweise wäre es auf einer 16-Bit-Maschine wie einem dsPIC natürlich, 16 Bit für den Winkel zu verwenden. Damit bleiben 14 Bits übrig, um in die Tabelle zu indizieren, was eine sehr große Tabelle wäre. Typischerweise und in diesem Fall wird eine so große Tabelle nicht benötigt. Eine vernünftige Größe könnten 1024 Segmente sein, was 10 Indexbits verwenden würde. Die verbleibenden 4 Indexbits (in diesem Beispiel) können entweder ignoriert oder verwendet werden, um zwischen benachbarten Einträgen zu interpolieren. Die Tabelle hätte eigentlich 1025 Einträge, also 1024 Segmente. Eine Sinuswelle angenähert mit 4096 (die Tabelle wird 4 mal über die ganze Sinuswelle verwendet) Schritten wäre ganz gut. Wenn die zusätzlichen Bits verwendet werden, um zwischen benachbarten Tabelleneinträgen zu interpolieren, ist es sogar noch besser. Stellen Sie sich eine Sinuswelle vor, die mit 4096 linearen Segmenten pro Zyklus angenähert wird. Es wäre sehr schwierig, einen Fehler zu erkennen.
Was die Genauigkeit betrifft, rechnen Sie nach. Eine Sinuswelle ändert sich am schnellsten bei einem Winkel von Null, daher ist es einfach, den schlimmsten Fehler aus nur einem dummen Nachschlagen in einer 1024-Punkte-Tabelle zu berechnen. Der erste Tabellenwert wäre 0 und der zweite Sinus (Pi/2048) = 0,00153. Der Worst-Case-Fehler ist daher die Hälfte davon oder 0,000767. Das entspricht einem Signal-Rausch-Verhältnis von 62 dB, und das nur aus der Auswahl eines Tabellenwerts ohne Interpolation. Die Verwendung der verbleibenden 4 Indexbits zum Interpolieren erhöht das Signal-Rausch-Verhältnis auf 86 dB. Wenn das nicht gut genug ist, verwenden Sie eine größere Zahl für den Winkel und interpolieren Sie mit den zusätzlichen Bits.
Auch die Frequenzauflösung ist kein Problem. Anscheinend denken einige, dass das Winkelinkrement pro Abtastung ein Vielfaches des Winkelschritts pro Tabelleneintrag sein muss. Das stimmt überhaupt nicht. Wenn Sie nur einen 16-Bit-Winkel und eine Tabelle mit 1024 Segmenten verwenden, erhalten Sie bereits eine 16-mal höhere Winkelauflösung als jeder Tabelleneintrag. In der Praxis würde ich wahrscheinlich zwei Wörter (in diesem Beispiel 32 Bit) für die Winkel und Winkelinkremente verwenden. Das bietet eine sehr hohe Frequenzauflösung und gibt Ihnen auch mehr Interpolationsbits, um das Signal-Rausch-Verhältnis zu erhöhen. Bei einer Abtastrate von 40 kHz würde ein 20-Hz-Ton (der schlimmste Fall) ein Winkelinkrement von 1/2000 Kreis pro Abtastung erfordern. Das ist ein Teil von 33, der 16-Bit-Winkel verwendet. Das allein könnte für viele Anwendungen ausreichen. Bei Verwendung eines 32-Bit-Winkels beträgt die Frequenzauflösung bei 20 Hz mehr als 1 Teil von 2 Millionen.
Lassen Sie uns also die Lookup-basierte Sinusgenerierung in der Firmware nicht so schnell verwerfen. Lassen Sie es uns zumindest nicht aus den falschen Gründen abtun. Beachten Sie, dass keines der Dinge, die ich beschrieben habe, für einen dsPIC schwierig wäre. Dies schließt Interpolation ein, da ein dsPIC in einem einzigen Befehlszyklus eine 16 x 16 in 32 Bit multiplizieren kann.
Der Grund für die Verwendung einer kleinen Glühlampe ist, dass sie einen positiven Temperaturkoeffizienten (PTC) hat, den der Oszillator benötigt, um die Amplitude zu stabilisieren. Das Potmeter geht nicht.
Der Gegenkopplungswiderstand sollte mindestens doppelt so hoch sein wie der PTC-Widerstand.
Die Oszillatorfrequenz wird durch die beiden Widerstände und zwei Kondensatoren am nichtinvertierenden Pin bestimmt, und der Schaltplan scheint einen Fehler zu haben: Beide Widerstände sollten gleich sein (entweder 4k7 oder 47k), ebenso wie die Kondensatoren. Die Frequenz ist
Sie können also die Frequenz steuern, indem Sie ein Stereo-Potmeter für die Widerstände verwenden. Beide Kanäle sollten ein gutes Tracking haben.
Nach den Vorschlägen habe ich eine separate Antwort zu DDS gegeben , daher beziehen sich die Kommentare dazu tatsächlich auf diese Antwort.
Einige Leute haben vorgeschlagen, dass ich eine separate Antwort zum DDS hinzufüge. Also habe ich es aus meiner anderen Antwort extrahiert.
Olins Antwort ist vernünftig: Wir leben im digitalen Zeitalter. Wie er sagt, wird Ihr Signal viel stabiler sein (Kristallpräzision), aber die Verwendung eines Mikrocontrollers ist nicht die Lösung. Ihre Sinus-Nachschlagetabelle ist festgelegt und die Frequenzschritte sind möglicherweise zu grob.
Eine bessere Lösung ist DDS , Direct Digital Synthesis. Dies geschieht häufig mit speziellen DDS-ICs, wie dem AD9851 , und ermöglicht eine sehr hohe Frequenzsteuerung (je nach Takt bis zu einer Millihertz-Auflösung). Sie benötigen einen Mikrocontroller, um den Synthesizer zu steuern, daher ist dies weder die einfachste noch die billigste Anwendung. Aber es gibt gute Alternativen: Jesper Hansen entwarf eine einfache DDS-Implementierung auf Basis eines AVR-Controllers.
Ich würde Stevens und Olins Argumente an zweiter (oder dritter) Stelle nehmen. Obwohl es durchaus möglich ist, einen analogen Synthesizer zu bauen, stellt er uns vor erhebliche Herausforderungen. Ganz oben auf der Liste steht die Temperaturstabilität - Oszillatoren häufig neu abstimmen zu müssen, macht keinen Spaß, und ich schreibe aus persönlicher Erfahrung beim Bau eines traditionellen (subtraktiven) Synthesizers mit nur zwei Oszillatoren vor einigen Jahren.
Und wenn Sie sich für additive Synthese interessieren, vergessen Sie es! Sie werden mit viel zu vielen Oszillatoren jonglieren und mit der Frequenzdrift nicht Schritt halten können. Jetzt weiß ich, dass einige Leute wegen ihres fetten, freiphasigen Sounds immer noch analoge Synthesizer gegenüber digitalen bevorzugen, aber ich bin nicht überzeugt.
Es gibt einen Typen namens Doug Curtis, der 1979 eine Firma namens Curtis Electromusic Specialties gründete, um dedizierte ICs für die traditionellen Funktionen von VCOs, VCFs usw. herzustellen, und diese verlängerten wahrscheinlich die Lebensdauer analoger Synthesizer-Designs um einige Jahre, da sie weit weniger anfällig für driften (und Designs billiger machen), aber auch er erlag 1988 der digitalen Revolution. Es gibt immer noch alte Bestände seiner Chips, die bei eBay zu Spitzenpreisen verkauft werden!
Zum Thema FM-Klangsynthese war dies das Thema meiner BSc-Dissertation im Jahr 1981, und obwohl es mir gelang, eine analoge FM-Klang-„Engine“ zu entwickeln, kam ich zu dem Schluss, dass sie nicht mit einer digitalen Synthese-Engine mithalten konnte – und das war 30 vor Jahren!
Hier ist ein Software-DDS-Ansatz, den ich verwendet habe, basierend auf Jesper Hansens MiniDDS, der eine Sinuswelle von bis zu 200 kHz oder so erzeugt. Filtern wäre in einigen Anwendungen nützlich.
Jim
Jim
Endolith
Jim
stevenvh
Jim
Jim
richieqianle
Olin Lathrop
richieqianle
Olin Lathrop
richieqianle
Olin Lathrop