A szinuszos hangminta torzítása

A hanggenerátor programban előállított szinuszos hangminta semmilyen extra fogást nem tartalmazott, középiskolai matematikai ismeretek elegendőek hozzá. Foglalkoztatott azonban a kérdés, hogy lehetne-e jobb, kisebb torzítású jelet előállítani. Két irányban próbáltam tapogatózni:

A programban kiszámolt hangmintát 2 mp hosszú *.wav formátumban lemezre mentettem, majd a SpectraLAB programmal vizsgáltam (FFT 65536 pts). Így az analízis tisztán matematika jellegű volt. A 4 változó típus és 3 féle egész képzés adta 12 féle lehetőség torzítási eredményeit táblázatba foglaltam:

Csonkítás
(Truncate)
Kerekítés
(Round)
Zajmoduláció
(Dithering)
Single 0,00108 % 0,00053 % 0,00098 %
Real48 0,00163 % 0,00133 % 0,00099 %
Double 0,00174 % 0,00133 % 0,00099 %
Extended 0,00174 % 0,00122 % 0,00099 %

A Delphi kódban eredetileg kerekítést alkalmaztam, és sima "Real" típust használtam, ami egyenértékű a "Double" változattal. A kerekítés módszere továbbra is megmaradt, de a változó típusa "Single" lett. Ezzel a fogással 0,00133 % helyett csupán 0,00053 % lett a hangminta torzítása.

Tapasztaltam egy érdekességet, miszerint a tört-egész átalakításnál, ha zajmodulációt alkalmazok, változik a spektrum képe is. A "Single" típus három módon történő egész képzése adta spektrum: