dsp vs. matlab

Gast #298572
Lesenswert?

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
Gast #298574
Lesenswert?

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
Gast #298576
Lesenswert?

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
Gast #298577
Lesenswert?

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
Gast #298578
Lesenswert?

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).
Gast #298579
Lesenswert?

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
Gast #298580
Lesenswert?

> 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...
Gast #298581
Lesenswert?

> 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.ä.
Gast #298582
Lesenswert?

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
Gast #298583
Lesenswert?

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
Gast #298584
Lesenswert?

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 :)
Gast #298585
Lesenswert?

@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
Gast #298586
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren