resample in matlab

Gast #6123504
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)
Angehängte Dateien:
#6123583
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
Gast #6123595
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.
Gast #6125304
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.