I make an improvement in FFT example.
Instead of this code, in WriteData routine :
Code: Select all
tmpR := sqrt(Rer + Imr); // Amplitude of current DFT sample
Rer := tmpR*256.; // DFT is scaled down by 1/N, we need to
// take it back in order to have visible
// components on GLCD
Re := Rer;
Code: Select all
Re := sqrt_int(dword(Rer + Imr)*65536);
Code: Select all
function sqrt_int(num : dword) : dword;
var one : dword;
begin
result := 0;
one := 1 shl 30;
while one > num do one := one shr 2;
while one > 0 do
begin
if num >= (result + one) then
begin
num := num - (result + one);
result := result + (one shl 1);
end;
result := result shr 1;
one := one shr 2;
end;
end;
With this improvement, WriteData routine is 4 time faster !!!
Enjoy !