ich möchte ein audiosignal von 32kHz auf 44.1kHz "hochsamplen". Dazu habe ich ein Rechteck generiert und verwende die Funktion "resample" in Matlab/Octave. Resample wendet dabei ein Kaiser-Bessel Fenster an. Leider bekomme ich für ein Rechteck als Eingangssignal ein Ergebnis mit deutlich hörbarem Oberschwingen. Ich kann mir schon vorstellen dass das beim Resampling passiert da ja irgendwie interpoliert werden muss und durch die Impulsantwort des Fensters eben Oberschwingen entsteht, ich frage mich aber wie man das ohne Oberschwingen lösen könnte? Hier ist mein Matlab code: fs1 = 32000; fs2 = 44100; T = 0.001; nSamples = T / (1/fs1); x = [1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1]'; len = length(x); Blocks = round(nSamples / len); for n = 0:Blocks-1 x(n*len+1:n*len+len) = x(1:len); end [p,q] = rat(fs2/fs1); figure plot(x) xResample = resample(x,p,q); figure plot(xResample)
Michael schrieb: > Leider bekomme ich für ein Rechteck als Eingangssignal ein Ergebnis mit > deutlich hörbarem Oberschwingen. Ein Rechteck ist ja auch nicht bandbegrenzt. Wenn du ein bandbegrenztes Signal hast, was abgetastet zu sowas wird: x = [1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1]'; dann war das kein Rechteck. Gruss WK
was du mir sagen willst ist also, dass ich vorher bandbegrenzen muss bevor ich resample verwende?
Bin gerade draufgekommen. Man braucht nur die Funktion interp1() verwenden anstatt resample(). Mit dem Zusatz "nearest" werden die Werte direkt verbunden anstatt mit einem Fenster gefiltert. https://www.mathworks.com/help/matlab/ref/interp1.html?s_tid=doc_ta Damit ist keine Bandbegrenzung notwendig.
Michael schrieb: > was du mir sagen willst ist also, dass ich vorher bandbegrenzen muss > bevor ich resample verwende? Nein, das will ich nicht sagen. Ich will das sagen, was ich gesagt hatte. Nochmal - sowas hier als Folge von Samples: x = [1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1]'; ist kein Rechteck. Das sieht fuer dich nur grad' so aus, weil du eben nicht zwischen 2 Samples gucken kannst, wie da das Signal verlaeuft. Du siehst es nur an deinen gesampleten Zeitpunkten. Und da ist's mehr oder weniger "zufaellig" halt grad immer 1 oder -1. Das muss es zwischendrinnen nicht sein. Und das es das nicht ist, faellt dann auf, wenn du's mit einer anderen Frequenz samplest. Dann kommen nur die Buckel raus, die vorher schon drinen waren (OK, weil dein Resampler auch nicht beliebig gut ist, baut der auch noch Fehler mit ein). Gruss WK
Das ist mir alles klar und war deswegen auch nicht meine Frage. Du brauchst nicht genau lesen aber du brauchst auch keine Antworten schreiben. Ist alles freiwillig.
Michael schrieb: > Das ist mir alles klar Das glaube ich nicht, Tim. Michael schrieb: > aber du brauchst auch keine Antworten > schreiben. Ist alles freiwillig. So ist's. Ich mach' das aus reinem Jux und Dollerei - nicht weil ich muss. SCNR, WK
Resampling und Interpolation sind nicht dasselbe. Interp1 beachtet keine sampleraten oder nyquist ;) da operierst du einfach stumpf auf Datenpunkten. Wo diese herkommen ist egal, das kann auch unphysikalisch sein. Resampling betrachtet aber immer ein abgetastetes Signal unter Berücksichtigung des nyquist Theorems und sieht bei deinem 1->-1 Sprung sehr hohe Frequenzen. Dein Resampling muss aber auf die Hälfte deiner 44 kHz bandbegrenzen, damit es kein Alias gibt. Dein interp1 macht nix dergleichen sondern fügt einfach nur Daten hinzu, egal was das für Frequenzen ergeben würden.
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.