![]() |
Upsampling Algorithmus
Hallo,
ich möchte bei einer Wav Datei die Abtastfrequenz von 32000 Hz auf 44100 Hz erhöhen. Dazu habe ich mir folgenden Code zusammengebastelt:
Delphi-Quellcode:
Leider entsteht dabei ein hochfrequentes Rauschen. Ich habe leider nur wenig Informationen zum Upsampling im Internet gefunden. Gibt es irgendwo eine Beschreibung, wie man da am besten ran geht? Oder sieht jemand direkt was ich verändern muss?
procedure TWaveTransformer.TransformTo44100Hz;
var ms2:TMemoryStream; smpl1,smpl2,smpl3:TWaveSample; i,i2:int64; alength:int64; begin if SampleRate <> 44100 then begin Memory.Position := 0; alength := round((Memory.Size / sizeof(TWaveSample))*(44100 / SampleRate))+1; i := 0; ms2 := TMemoryStream.Create; while i < alength do begin i2 := round(i*(SampleRate/44100)) * sizeof(TWaveSample); Memory.Position := i2; Memory.Read(smpl1,sizeof(TWaveSample)); smpl2.l := smpl1.l; smpl2.r := smpl1.r; ms2.Write(smpl2,sizeof(TWaveSample)); i := i + 1; end; Memory.Clear; Memory.LoadFromStream(ms2); Memory.SaveToFile('out.raw'); ms2.Free; end; end; Danke, Igel457 |
Re: Upsampling Algorithmus
Du must ein steiles Digitalfilter mit einer Grenzfrequenz von kleiner 16 kHz dahinter schalten. Bei 16 kHz muss das Filter eine möglichst hohe Sperrdämfung haben.
Oder Du interpolierst die Werte zwischen den 32kHz-Abtastpunkten (Spline oder quadratisch), und nimmst für die neuen Abtastpunkte (44,1 kHz) die interpolierten Werte. Das ist zwar schlechter als das erstgenannte Verfahren, aber einfacher und dürfte das Rauschen auch deutlich reduzieren. Hope it helps. Gruss, Uwe |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz