resample in matlab

Gast #6123504
Lesenswert?

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
Lesenswert?

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 #6125304
Lesenswert?

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

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