Hallo liebe µC Freunde, ich besitze einen µC der Famile 8051, jetzt möchte ich gerne in Assembler einen Digitalen Tiefpassfilter erstellen, falls dies möglich ist. Mein Ziel ist es z.B. ein Mp3 Titel einzuspielen und dann bei Bass eine "Lampe" leuchten lassen. Aber das ist erstmal mein ZIEL. Ich fange klein an um dieses zu erreichen. Also geht es erstmal nur um den Tiefpass. gibt es hier irgendwo ein Tutorial dazu? Oder hat jemand lust es mir zu erklären? Habe nichts gefunden, am besten wäre es natürlich wenn es auf die 8051 familie angepasst ist. Und wichtig ist, dass es in Assembler ist. Lg Jonas
Bei MP3 würde man die Daten auswerten. Die Musik ist da nämlich schon in diverse Frequenzen ausgesplittet, die jeweils eine bestimmte Amplitude haben. Deswegen hat auch (fast) jeder nch so popelige MP3 Player diese tanzende Balkenanzeige. Befasse Dich mit dem Dateiformat. Viele Leute denken: Wenn ich die Bässe anzeige, dann flackert die Lampe im Takt der Musik. Das ist aber nur selten der Fall - Bässe sind nicht gleich Rhythmus. Außer bei Ace of Base :-)
Ja danke für die Antwort, aber vielmehr geht es mir im moment darum den Teifpass in Assembler zu realisieren. Kennst du da Möglichkeiten, Tutorials oder ähnliches? Lg Jonas
Jonas schrieb: > Ich fange klein > an um dieses zu erreichen. Das glaubst du. Die Aufgabe ist gar nicht so klein: Was willst du denn tief passen? 1. Signal entkoppeln 2. Signal anpassen 3. Signal f. µC wandeln 4. irgendwie mit ASM bearbeiten 5. irgendwas ausgeben
Hallo, anfangs möchte ich mal ein lied oder einfach nur frequenzen eingeben und und halt nen tiefpass drüber laufen lassen und dann am ausgang, das gefilterte signal haben. Aber ichbrauche ja irgenwie codes wie man einen tiefpass in assembler programmieren kann. Ich weiß das ich da irgendwas berechnen muss aber was und wie? Lg Jonas
Christian M. schrieb: > Hallo Jonas, > > schau dir die Fast Fourier Transformation an. Das nutzt ihm nichts, den er weiss gar nicht wovon er spricht.
butzemann schrieb: > Christian M. schrieb: >> Hallo Jonas, >> >> schau dir die Fast Fourier Transformation an. > > Das nutzt ihm nichts, den er weiss gar nicht wovon er spricht. und Dein Kommentar hilft ihm noch weniger. Mit ASM für 8051 kann ich gern helfen, aber bei FFT ist bei mir auch Schluss. So jetzt habe ich mich auch geoutet. :)
Stephan Henning schrieb: > butzemann schrieb: >> Christian M. schrieb: >>> Hallo Jonas, >>> >>> schau dir die Fast Fourier Transformation an. >> >> Das nutzt ihm nichts, den er weiss gar nicht wovon er spricht. > > und Dein Kommentar hilft ihm noch weniger. > Mit ASM für 8051 kann ich gern helfen, aber bei FFT ist bei mir auch > Schluss. So jetzt habe ich mich auch geoutet. :) Das ehe ich anders. Die erste grosse Hürde ist doch ein Frequenzgemisch zu digitalisieren. Dann erst kommt die Zerlegung per FFT. Dafür gibt es tonnenweise Beispiele, die nur für 8051 umgeschrieben werden müssen. Also nur fleissarbeit. Sinnvoll ist das eh nicht, da der 8051 das nie in Echtzeit schaffen wird.
Bedenke, dass der klassische 8051 für sowas sehr klein ist. Er führt etwa eine Millionen Befehle pro Sekunde aus, hat dabei allerdings (bei Hi-Fi Mono) ca 44.000 tausend Samples pro Sekunde einzulesen, zu verarbeiten und wieder auszugeben. Das macht knapp mehr als 20 Befehle pro Sample - das geht also gar nicht. Dü könntest natürlich auch ein Signal einlesen, zwischenspeichern, umrechnen und dann wieder ausgeben. Dafür wiederum hat der 8051 zu wenig RAM. Du müsstest dann schon mit externem RAM arbeiten. Versuch doch erstmal einfach nur das Signal vom ADC einzulesen und über einen DAC (oder via PWM) wieder auszugeben. Ich bin sicher, dass Du damit schon eine ganze Weile beschäftigt sein wirst und warscheinlich auf einen anderen wesentlich leistungsstärkeren Controlle (z.B. aus der ARM Serie) umsteigen wirst. Und DANACH google mal nach "digitale filter programmieren fh-kl.de", da findest Du einen umfangreichen Aufsatz zur mathematischen/programmatischen implementierung. Schwerer Stoff, das sag ich Dir.
Wie so oft hier. Viele wollen sich nur selbst darstellen ohne nützliche Hinweise zu gebe. Hallo Jonas Schau dir mal die Datei an. Ein PT1-Glied ist der einfachste Tiefpass. (RC-Glied).
:
Bearbeitet durch User
So einfach wie es in diesem PDF beschrieben ist ist es leider nicht. Vielelicht hilft dir was mehr oder weniger fertiges -> http://www.ti.com/lit/an/sprabb6b/sprabb6b.pdf
hallo und guten abend, erstmal von welchen 8051 sprechen wir hier eigentlich ? wenns der AT 89S8253 ist hat der leider keinen adc und irgendwie haben alle mcs51, bis auf die T89C51CC03C PLC, keinen. Quelle Reichelt sonst nehme er einen opv baue mit diesen einen tiefpass mit aktiver gleichrichtung -> auf Comparator geben und den pin abfragen und die led schalten an/aus. Ist zwar ganz dezent übertrieben weils auch ohne µc geht aber das ist ja nicht die aufgabe. wenn jonas sich doch umentscheidet sollte ein µc mit integrierten ADC zu nehmen tiefpass als RC-Glied und das denn auf ub/2 einkoppeln und mit adc auswerten, per software eine schwelle festlegen anhand diese dann die led ein /aus geschaltet wird. VCC | | R=20K 1. 1. 2. | ----R---C----C--------pin von mc's51 welcher auch immer | | | R=20K | | GND GND 1. RC-Glied abhängig bis zu welcher frequenz du was durchlassen willst 2. ca. 1µF sollte passen kann aber auch 220-470nF sein muss man mal ausprobieren... soweit die theorie....
Also, viel ist ja bis jetzt noch nicht herumgekommen hier. Zuersteinmal solltest du dir im klaren sein wie ein digitaler Tiefpass funktioniert. Google mal nach FIR Tiefpass 1. oder 2. Ordnung. http://www.fh-kl.de/~hans.neuschwander/download_skripte/digfil/DigFilter.pdf In dem PDF steht schon mal viel über den allgemeinen Aufbau digitaler Filter. Der nächste schritt wäre dann mittels geeigneter Software(SciLab, oder diverse andere Filter design Programme) die Filterkoeffizienten zu bestimmen. Dannach musst du diese quantisieren. Beitrag "Quantisierung von FIR Filter" http://www.fh-schmalkalden.de/schmalkaldenmedia/Realisierung_Digitaler_Filter_in_C-p-419.pdf Damit solltest du dich ersteinmal eine ganze Weile beschäftigen können ;)
Hallo, erstmal Danke für die Antworten und den Aufwand. Ich glaube an dieser Stelle ist es richtig ein paar mehr Informationen zu geben. Also als µC benutze ich den 89S8253 von ATMEL. Er hat wie oben schon gesagt keine ADC. Soweit so gut ich hoffe das hilft erstmal weiter, wenn mehr infomationen erforderlich sind einfach bescheid sagen. Mit dem Signal input vergessen wir erstmal wieder. Um den ADC kann ich mich später kümmern bzw. ist es für mich erstmal unrelevant. (auch wenn es für euch komisch klingt) mir geht es hier erstmal konkret um den Tiefpass also den Filter an sich. "Wie Programmiere ich einen Digitalen Tiefpass?" Das ist die eigentliche Frage. Das mit dem Mp3 war erstmal nur ein beispiel. Tut mir leid das es ein bisschen falsch rübergekommen ist. Die links werde ich mir morgen erstmal in ruhe angucken. Hab nach der Schule gerade keine Nerven mehr und es ist schon so spät. Trotzdem vielen Dank schonmal an alle! Lg Jonas
Jonas schrieb: > "Wie Programmiere ich einen Digitalen Tiefpass?" Tiefpass 1. Ordnung (IIR Filter)
1 | Val = (Val * k) + (New * (1-k)) |
Val dein gefilterter Wert New = Eingangswert k = Filterkonstante 0 .. 0.9999 Das periodisch aufrufen.
da ich von FFT wie gesagt keine Ahnung habe und daher den Rechanaufwand wenig abschätzen kann, würde es nicht schaden sich bei Silabs nach den akuellen 8051 umzusehen. Die können bis 100MHz mit internen Oszillator bei 1 Cycle/ Takt. Das sollte auf alle Fälle reichen. Sofern die MCU nicht zwingend vorgegeben ist.
Hallo Jonas, vor einiger Zeit habe ich mal einen Tiefpass auf einem Attiny13 in C realisiert: http://www.hobby-roboter.de/forum/viewtopic.php?f=5&t=137 Der Prozessor ist damit aber schon gut ausgelastet ( FCPU=10MHz ). Für Deine Musikerkennung würde meiner Meinung nach ein VU-Meter besser funktionieren. Beitrag "Re: Musik abhängige LED-Schaltung" Gruß, chris_
Noch ein bisschen Lesestoff für heute Nacht. http://www.fh-schmalkalden.de/schmalkaldenmedia/Realisierung_Digitaler_Filter_in_C-p-419.pdf
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.