moin, ich versuche gerade einen anc (adaptiv noise cancler) mit einem dsp zu programmieren. dazu hab ich erstmal eine simulation mit matlab geschrieben, die mit einer wav-datei arbeitet. Sprich matlab filtert die in.wav datei und speichert die gefilterte out.wav datei ab. nun hab ich ein programm für den dsp geschrieben, um zu sehen ob das programm das gleiche wie die simulation unter matlab errechent. hab ich ein c++ programm geschrieben, dass die gleiche in.wav datei die matlab bekommen hat nun an den dsp sendet und das c++ programm liesst den dsp auch wieder aus und schreibt die neue out.wav datei auf meinen pc-festplatte (so umgehe ich die analoge welt). hier stimmen dsp und matlab über ein :) (nach langen nächten und versuchen). mein problem ist, wenn ich die wav datei nicht " digital " in den dsp schreibe (mittels des c++ prog.) sondern die wav datei über meine souundkarte und den analog eingang des dsps einspeise hört sich das erbenis das aus dem dsp kommt (ich höre es über einen kopfhöer ab) leider nicht so wie die schöne simulation mit matlab/ oder die digitale dsp version an. wo kann ich nach dem fehler suchen. eventuell hat ja jemand eine idee. Thx 4 help rico
Welchen Codec benutzt du? Hat der eventuell eine andere Samplerate und passt deshalb alles nicht mehr zusammen?
codec? kenn ich nur bei video schauen... das wav foramt ist ja nun schon uralt und bekannt, daran liegt es denk ich nicht. die wav datei die ich benutze ist für die digitale übertragugn und die analoge die gleiche. in.wav 16 bit stereo 16 kHz (ein kanal als (nutz signal+störsig.) andere als reines störsignal // bei matlab biete ich die beiden kanäle getrennt als mono signal an da wavread() nur mono kann) out.wav 16 bit mono 16 khz -> gefiltertes sauberes signal noch einer ne idee. Thx 4 help
Ich glaube auch, dass es in die Richtung von Jens geht. Mit welcher Frequenz tastet dein DSP die WAV ab? Irgendwelche Filter am Audioeingang des DSP vorgeschaltet?
Hmmm, ich hab zwei unterschiedliche arten den dsp mit daten zu füttern einmal digital über die rs232 und einmal analog über einen a/d wandler der schon sozusagen mit dem dsp kam. wenn ich den dsp digital füttere kommt genau das gleicher heraus wie bei matlab also alles in ordnung. wenn ich die selbe wav datei nicht digital sondern analog an den dsp sende kommt nicht das gleiche heraus. Frage warum? analog: sieht bei mir so aus ich benutze die selbe wav datei wie für die digitale übertragung (daran solltes es also nicht liegen). dann verbinde ich den dsp über ein klinken kabel mit dem ausgang meiner pc soundkarte; füttere also meinen dsp mit analogen signalen (die wav datei wird ja von der soundkarte d/a gewandelt). der a/d wandler auf dem dsp wandelt das ganze dann zurük in digitale bits und bytes und filteret das ganze (die dsp abtastrate des a/d wandlers kann ich einstellen habe sie auf 16 Khz; genau so wie bei den wav dateien vom pc). das gefilterte signal des dsps höre ich dann am dsp mit einem kopfhörer ab. leider kommt dann eben nicht das super ergebnis wie bei der digitalen übertragung raus. zu punkt 2 Irgendwelche Filter am Audioeingang des DSP vorgeschaltet? also der dsp hat so zu sagen schon einen a/d am eingang und d/a wandler am ausgang mit drin(ist auf dem gleichen 'die' schon drauf). dazu gehören natürlich auch cut off filter die das signal in der bandbreite begrenzen damit es nicht zu alias-effekten kommt. ander filter hab ich nicht extra vorgeschaltet. thx 4 help
Hi Rico. Ich weiß nicht, ob das sonderlich nützlich ist, was ich jetzt schreibe, aber ich habe in Übertragunstechnik mal gelernt, dass die Abtastreate mindestens 2x die Maximalfrequenz betragen muss. Also, vielleicht kannst du die ja noch auf 32 khz erhöhen und das Ganze dann nochmal versuchen. Grüße... Mace
hallo matthias, jo is richtig abtastrate muss doppelt so hoch sein wie die höchste freq. die fehlerfrei abgetastet werden soll. is für mein probl. aber im moment nicht so wichtig (ist nicht der fehler den ich suche).
hallo rico, evtl. liegt der fehler im zahlenformat. die audio-codecs liefern normalerweise ein 2er-komplement. in deiner matlab simulation wirst du vermutlich in einer fließkommadarstellung rechnen. gruß jan
> jo is richtig abtastrate muss doppelt so hoch sein wie die > höchste freq. Das ist falsch. Die Abtastrate muss das Doppelte der höchsten Frequenz (bzw. der Bandbreite) übersteigen. Also: sample_rate > 2 * höchste_frequenz Ein kleiner, aber entscheidender Unterschied...
> wenn ich die selbe wav datei nicht digital sondern analog an den dsp > sende kommt nicht das gleiche heraus. Frage warum? Greif mal das vom DSP digitalisierte Analogsignal VOR dem Filter über RS232 ab und vergleich es mit der in.wav. Vielleicht ist Deine Soundkarte einfach nur schlecht/Brummschleife/schlechter Pegel/Rauschen o.ä.
Schaft dein Prozessor die Verarbeitung der Daten in Echtzeit? Schau dir mal ein funktionierendes Beispielprogramm für deinen DSP mit den gleichen AD DA Wandlern (CODEC) an. Ist deine Ansteuerung und die Initialisierung gleich? Mfg Michael
Zu: > jo is richtig abtastrate muss doppelt so hoch sein wie die > höchste freq. Du hast mit Sicherheit die Abtastrate des ADC durch den C-Code des DSPs festgelegt. Eventuell ist Die Abtastrate jetzt kleiner als die maximal mögliche. Die Abtastrate des ADCs muss zu dem Antialiasingfilter (Eingangstiefpass) des Boards passen. Der Eingangstiefpass des Boards ist mit Sicherheit auf die Höchste Abtastrate des ADCs abgestimmt. -> Abtasttheorem bzw. Toleranzschema des Tiefpassfilters Du musst durch einen geeigneten Eingangstiefpass gewährleisten, dass dein Eingangssignal für den ADC bei der halben Abtastfrequenz stärker gedämpft ist, wie die Auflösung des ADCs ist. Wenn das nicht der Fall ist, kann aus dem Abtastsignal nicht mehr das ursprüngliche Signal rekonstruiert werden. Der Eingangstiefpass ist bestimmt im Manual des DSPs beschrieben. Vielleicht hilfts! Mfg P.S. ich würde mich für den Matlab-code interessieren, kann mir da jemand etwas schicken -> juppy.schneider web .de
mist das script hat meinen text gelöscht also nun etwas kürzer. danke für die Hilfe und die Vorschläge, hatte eingendlich gar nicht erwartet hier noch mal ne Antwort zu bekommen. hab das problem selbst gelöst/gefunden. also hab nicht gescheckt, dass beim Filtern das Ergebnis in 32 bit angezeit wurde es da aber als 16 bit genaue zahl abgespeichert wurde dabei wurden einfach die letzten 16 bit (so zu sagen die nachkomma stellen) gestrichen. Es wurde also nicht gerundet sonder immer nur abgerundet. und dieser fehler summierte sich sehr schnell zu einem echten problem auf. Danke für eure Hilfe rico das nächste problem kommt bestimmt, munter bleiben. ps.: erst mal eben text kopieren bevor ich ihn abschickt :)
@Unbekanner Shannon sagt aber wa>=2*w Also kann sie auch gleich sein. Aber du solltest auf jeden fall mit der Zehnfachen Frequenz abtasten. Das wird meistens in der Praxis so gemacht. Probier es mal aus
Wenn das abgetastete Signal "online" verarbeitet werden soll, dann gilt der "verschärfte" Shannon. Gleichung hab ich zwar gerade nicht zur Hand, aber als Faustregel gilt dann fa>6,6*fmax. Mit fa=10*fmax liegt man meist auf der sicheren Seite.
Bei Online verarbeitung muss aber ein Takt verzögert werden wegen der kausalität. Halteglied 1.Ordnung ist das Stichwort
Hello Leute, Ich moechte ein WAV-File durch simulink oder matlab machen. meine Eingabe ist ein .xls file oder ein .txt file, wie kann ich es schaffen? Danke
Hi, read the friendly manual: .txt lesen mit 'load', .wav schreiben mit 'wavwrite'. Cheers Detlef
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.