Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Upsampling Algorithmus (https://www.delphipraxis.net/87688-upsampling-algorithmus.html)

igel457 4. Mär 2007 17:10


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:
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;
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?

Danke,
Igel457

Uwe.F. 8. Mär 2007 19:14

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