AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Upsampling Algorithmus
Thema durchsuchen
Ansicht
Themen-Optionen

Upsampling Algorithmus

Ein Thema von igel457 · begonnen am 4. Mär 2007 · letzter Beitrag vom 8. Mär 2007
Antwort Antwort
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#1

Upsampling Algorithmus

  Alt 4. Mär 2007, 18:10
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
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Uwe.F.

Registriert seit: 19. Apr 2005
56 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Upsampling Algorithmus

  Alt 8. Mär 2007, 20:14
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
Uwe
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz