Registriert seit: 19. Sep 2021
Ort: Schwarzwald
17 Beiträge
Delphi 10.4 Sydney
|
AW: Integer (1 Byte) Datentransformation DCT (FFT) gesucht
27. Okt 2021, 19:51
Guten Tag zusammen
Also ich hab mal ein bisschen die Bücher gewälzt und so. Bin hier auf eine alternative orthogonale Transformation gestossen.
Die Walsh-Hadamard Transformation. Die funktioniert bestens mit Integer Werten.
Hier der Code falls das ma jemand brauchen könnte:
Delphi-Quellcode:
class procedure AClass.WalshHadamardTransform(var Data: TIDatas);
var
i, j, n, m, x, y: UInt64;
Output: TIDatas;
begin
SetLength(Output, Length(Data));
Output := Copy(Data, 0, Length(Data));
n := Length(Data);
m := 1;
while 2 * m <= n do
begin
i := 0;
while i < n do
begin
for j := i to i + m - 1 do
begin
x := Output[j];
y := Output[j + m];
Output[j] := y;
Output[j + m] := x + y;
end;
i := i + 2 * m;
end;
m := m * 2;
end;
Data := Copy(Output, 0, Length(Output));
end;
class procedure AClass.InvWalshHadamardTransform(var Data: TIDatas);
var
i, j, n, m, x, y: UInt64;
Output: TIDatas;
begin
SetLength(Output, Length(Data));
Output := Copy(Data, 0, Length(Data));
n := Length(Data);
m := 1;
while 2 * m <= n do
begin
i := 0;
while i < n do
begin
for j := i to i + m - 1 do
begin
x := Output[j];
y := Output[j + m];
Output[j] := -x + y;
Output[j + m] := x;
end;
i := i + 2 * m;
end;
m := m * 2;
end;
Data := Copy(Output, 0, Length(Output));
end;
Reto Crameri
|
|
Zitat
|