www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP dsp vs. matlab


Autor: rico (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welchen Codec benutzt du? Hat der eventuell eine andere Samplerate und
passt deshalb alles nicht mehr zusammen?

Autor: rico (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Carsten St. (carsten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: rico (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: rico (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Jan Lüken (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Unbekanner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Erwin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.ä.

Autor: Michael P. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johannes Sch. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: rico (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :)

Autor: micro1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: micro1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei Online verarbeitung muss aber ein Takt verzögert werden wegen der
kausalität.
Halteglied 1.Ordnung ist das Stichwort

Autor: Osman (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Detlef A (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

read the friendly manual: .txt lesen mit 'load', .wav schreiben mit
'wavwrite'.

Cheers
Detlef

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.