AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Circular spectrum visualizer
Thema durchsuchen
Ansicht
Themen-Optionen

Circular spectrum visualizer

Ein Thema von EWeiss · begonnen am 22. Mär 2019 · letzter Beitrag vom 23. Jun 2019
Antwort Antwort
Delphi.Narium

Registriert seit: 27. Nov 2017
2.558 Beiträge
 
Delphi 7 Professional
 
#1

AW: Circular spectrum visualizer

  Alt 24. Mär 2019, 09:25
Zitat:
Ich hoffe, der ist in VB6 auch in rad, ansonsten tippe ich wieder auf ein string/Anzeige-Problem
Wie meinst du das?
Die Ausgabe der Zahlen erfolgte in Delphi mit 12 Nachkommastellen und in VB mit 7. D. h.: Bei der Ausgabe werden die weiteren Nachkommastellen auf- oder abgerundet.
Bzw. bei
Zitat:
Delphi:
Die ersten 10 einträge von Cos() sind 1
von 11 > 18 ist die Value '0,999'
wird die Anzeige auf drei Nachkommastellen gerundet.

Das die ersten 10 Werte bei Delphi in der Ausgabe als 1 erscheinen, liegt daran, dass sie sich erst ab der vierten Nachkommastelle unterscheiden. Die vierte und folgende Nachkommastellen werden bei der Ausgabe aber auf drei Nachkommastellen gerundet. Diese Rundung führt dazu, dass die Werte nicht mehr unterscheidbar sind.
Bei derartigen Zahlen, die sich nur marginal unterscheiden, führt die Ausgabe häufig zu einer fehlerhaften Anzeige der Werte. Die tatsächlichen Werte in den Variabeln sind jedoch korrekt.

Hier mal ein Pascalscript und seine Ausgabe. Hier wird recht gut deutlich, was mit
Zitat:
ansonsten tippe ich wieder auf ein string/Anzeige-Problem
gemeint ist:
Delphi-Quellcode:
program Test;
const
  pi = 3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196442881097566593344612847564823378678316527120190914564856692346034861045432664821339360726024914127372458700660631558817488152092096282925409171536436789259036001133053054882046652138414695194151160943305727036575959195309218611738193261179310511854807446237996274956735188575272489122793818301194912;
var
        i : Integer;
        x : Double;
        n : Double;
        FFFTSize : Integer;
        sl : TStringList;
begin
  sl := TStringList.Create;
  FFFTSize := 2048;
  for i := 0 to 10 do begin
    n := i;
    x := 0.53836 - 0.46164 * Cos(6.28318530717959 * n / (FFFTSize - 1));
    sl.Add(Format('%1.18f - %1.3f',[x,x]));
  end;
  sl.Add('');
  for i := 0 to FFFTSize -1 do begin
    n := i;
    x := cos(n / FFFTSize * 2.0 * pi);
    sl.Add(Format('%.4d - %1.18f - %1.3f - %1.18f - %1.3f',[i,x,x, pi,pi]));
  end;
  sl.SaveToFile('String_Anzeige-Problem.txt');
  sl.Free;
end.
Ein Auszug aus dem Ergebnis, das sich vollstänig in der anhängenden Datei befindet:
Code:
0,076719999999999949 - 0,077
0,076722174688946714 - 0,077
0,076728698735298086 - 0,077
0,076739572077587136 - 0,077
0,076754794613369869 - 0,077
0,076774366199225946 - 0,077
0,076798286650760166 - 0,077
0,076826555742603994 - 0,077
0,076859173208418010 - 0,077
0,076896138740894182 - 0,077
0,076937451991758771 - 0,077

0000 - 1,000000000000000000 - 1,000 - 3,141592653589793280 - 3,142
0001 - 0,999995293809576192 - 1,000 - 3,141592653589793280 - 3,142
0002 - 0,999981175282601088 - 1,000 - 3,141592653589793280 - 3,142
0003 - 0,999957644551963904 - 1,000 - 3,141592653589793280 - 3,142
0004 - 0,999924701839144448 - 1,000 - 3,141592653589793280 - 3,142
0005 - 0,999882347454212608 - 1,000 - 3,141592653589793280 - 3,142
0006 - 0,999830581795823360 - 1,000 - 3,141592653589793280 - 3,142
0007 - 0,999769405351215232 - 1,000 - 3,141592653589793280 - 3,142
0008 - 0,999698818696204288 - 1,000 - 3,141592653589793280 - 3,142
0009 - 0,999618822495178624 - 1,000 - 3,141592653589793280 - 3,142
0010 - 0,999529417501093120 - 1,000 - 3,141592653589793280 - 3,142
0011 - 0,999430604555461760 - 0,999 - 3,141592653589793280 - 3,142
0012 - 0,999322384588349568 - 0,999 - 3,141592653589793280 - 3,142
0013 - 0,999204758618363904 - 0,999 - 3,141592653589793280 - 3,142
0014 - 0,999077727752645376 - 0,999 - 3,141592653589793280 - 3,142
0015 - 0,998941293186856832 - 0,999 - 3,141592653589793280 - 3,142
0016 - 0,998795456205172352 - 0,999 - 3,141592653589793280 - 3,142
0017 - 0,998640218180265216 - 0,999 - 3,141592653589793280 - 3,142
0018 - 0,998475580573294720 - 0,998 - 3,141592653589793280 - 3,142
0019 - 0,998301544933892864 - 0,998 - 3,141592653589793280 - 3,142
0020 - 0,998118112900149120 - 0,998 - 3,141592653589793280 - 3,142
0021 - 0,997925286198595968 - 0,998 - 3,141592653589793280 - 3,142
0022 - 0,997723066644191616 - 0,998 - 3,141592653589793280 - 3,142
0023 - 0,997511456140303488 - 0,998 - 3,141592653589793280 - 3,142
0024 - 0,997290456678690176 - 0,997 - 3,141592653589793280 - 3,142
0025 - 0,997060070339483008 - 0,997 - 3,141592653589793280 - 3,142
...
1525 - -0,033741171851377760 - -0,034 - 3,141592653589793280 - 3,142
1526 - -0,030674803176636486 - -0,031 - 3,141592653589793280 - 3,142
1527 - -0,027608145778966163 - -0,028 - 3,141592653589793280 - 3,142
1528 - -0,024541228522912387 - -0,025 - 3,141592653589793280 - 3,142
1529 - -0,021474080275469286 - -0,021 - 3,141592653589793280 - 3,142
1530 - -0,018406729905805165 - -0,018 - 3,141592653589793280 - 3,142
1531 - -0,015339206284988122 - -0,015 - 3,141592653589793280 - 3,142
1532 - -0,012271538285719624 - -0,012 - 3,141592653589793280 - 3,142
1533 - -0,009203754782060083 - -0,009 - 3,141592653589793280 - 3,142
1534 - -0,006135884649154417 - -0,006 - 3,141592653589793280 - 3,142
1535 - -0,003067956762965594 - -0,003 - 3,141592653589793280 - 3,142
1536 - -0,000000000000000184 - 0,000 - 3,141592653589793280 - 3,142
1537 - 0,003067956762966115 - 0,003 - 3,141592653589793280 - 3,142
1538 - 0,006135884649154048 - 0,006 - 3,141592653589793280 - 3,142
1539 - 0,009203754782059716 - 0,009 - 3,141592653589793280 - 3,142
1540 - 0,012271538285720144 - 0,012 - 3,141592653589793280 - 3,142
1541 - 0,015339206284987754 - 0,015 - 3,141592653589793280 - 3,142
1542 - 0,018406729905804797 - 0,018 - 3,141592653589793280 - 3,142
1543 - 0,021474080275469805 - 0,021 - 3,141592653589793280 - 3,142
1544 - 0,024541228522912022 - 0,025 - 3,141592653589793280 - 3,142
1545 - 0,027608145778965795 - 0,028 - 3,141592653589793280 - 3,142
1546 - 0,030674803176637005 - 0,031 - 3,141592653589793280 - 3,142
1547 - 0,033741171851377402 - 0,034 - 3,141592653589793280 - 3,142
...
2022 - 0,996820299291165824 - 0,997 - 3,141592653589793280 - 3,142
2023 - 0,997060070339483008 - 0,997 - 3,141592653589793280 - 3,142
2024 - 0,997290456678690176 - 0,997 - 3,141592653589793280 - 3,142
2025 - 0,997511456140303488 - 0,998 - 3,141592653589793280 - 3,142
2026 - 0,997723066644191616 - 0,998 - 3,141592653589793280 - 3,142
2027 - 0,997925286198595968 - 0,998 - 3,141592653589793280 - 3,142
2028 - 0,998118112900149120 - 0,998 - 3,141592653589793280 - 3,142
2029 - 0,998301544933892736 - 0,998 - 3,141592653589793280 - 3,142
2030 - 0,998475580573294720 - 0,998 - 3,141592653589793280 - 3,142
2031 - 0,998640218180265216 - 0,999 - 3,141592653589793280 - 3,142
2032 - 0,998795456205172352 - 0,999 - 3,141592653589793280 - 3,142
2033 - 0,998941293186856832 - 0,999 - 3,141592653589793280 - 3,142
2034 - 0,999077727752645376 - 0,999 - 3,141592653589793280 - 3,142
2035 - 0,999204758618363904 - 0,999 - 3,141592653589793280 - 3,142
2036 - 0,999322384588349568 - 0,999 - 3,141592653589793280 - 3,142
2037 - 0,999430604555461760 - 0,999 - 3,141592653589793280 - 3,142
2038 - 0,999529417501093120 - 1,000 - 3,141592653589793280 - 3,142
2039 - 0,999618822495178624 - 1,000 - 3,141592653589793280 - 3,142
2040 - 0,999698818696204288 - 1,000 - 3,141592653589793280 - 3,142
2041 - 0,999769405351215232 - 1,000 - 3,141592653589793280 - 3,142
2042 - 0,999830581795823360 - 1,000 - 3,141592653589793280 - 3,142
2043 - 0,999882347454212608 - 1,000 - 3,141592653589793280 - 3,142
2044 - 0,999924701839144448 - 1,000 - 3,141592653589793280 - 3,142
2045 - 0,999957644551963904 - 1,000 - 3,141592653589793280 - 3,142
2046 - 0,999981175282601088 - 1,000 - 3,141592653589793280 - 3,142
2047 - 0,999995293809576192 - 1,000 - 3,141592653589793280 - 3,142
Angehängte Dateien
Dateityp: zip String_Anzeige-Problem.zip (28,5 KB, 4x aufgerufen)
  Mit Zitat antworten Zitat
Michael II
Online

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
772 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Circular spectrum visualizer

  Alt 24. Mär 2019, 15:53
Hoi EWeiss

mit Tests wie beschrieben

Delphi-Quellcode:
  for i := 0 to FFFTSize -1 do
  begin
     Dat[i].r := cos(i/FFFTSize*2*pi);
     Dat[i].i := 0;
  end;
kannst du prüfen, ob deine FFT überhaupt korrekte Resultate zurückmeldet. Du kannst deine FFT direkt mit diesem Test-Dat-Array aufrufen oder den Test-Code wie beschrieben einfügen in deine FFT.

Dann setzt du einen Breakpoint am Ende deiner FFT Prozedur und überprüfst, ob FFT korrekt rechnet (ob korrekte Werte in Dat stehen).

Wenn keine korrekten Werte drin stehen, dann
- musst du deine FFT proc checken.
oder
- du nimmst eine fertige FFT proc hier aus dem Forum.
Michael Gasser
  Mit Zitat antworten Zitat
Michael II
Online

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
772 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Circular spectrum visualizer

  Alt 24. Mär 2019, 16:07
und falls du noch daran arbeitest..

Betrifft uSpectrum.pas, TSpectrum.Draw

Im VB Code steht:
q1 = (mGain * Gain + 9) Im Delphi Code
q1 := (FGain * FGain + 9);
Michael Gasser
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Circular spectrum visualizer

  Alt 24. Mär 2019, 17:41
Zitat:
@Delphi.Narium
Danke für deine ausführliche Erklärung.

und falls du noch daran arbeitest..

Betrifft uSpectrum.pas, TSpectrum.Draw

Im VB Code steht:
q1 = (mGain * Gain + 9) Im Delphi Code
q1 := (FGain * FGain + 9);
Jo bin ich noch.
Sehe keinen Widerspruch.
Delphi-Quellcode:
property Gain: Single read GetGain write SetGain;
function TSpectrum.GetGain: Single;
begin

  Result := FGain;
end;

procedure TSpectrum.SetGain(const Value: Single);
begin

  FGain := Value;
end;
Spätestens nach dem ändern des Property über das Knob ist FGain das gleich wie Gain.
Innerhalb der FFT ändere ich den wert nicht er bleibt dort immer gleich.

also ist FGain = 4 dann ist es Gain ebenfalls
Es mag für eine Mikrosekunde ein unterschied sein danach ist es aber ausgeglichen, dreh ja nicht ständig am Knob.

Kurz um FGain ist immer Gain solange ich das Knob nicht betätige.
Warum soll ich mich also des Getter bedienen wenn die Value von FGain von außerhalb gesetzt wird.

Im Anhang 2 Shots in denen man sehen kann was "var" bei FFT bewirkt.
Volllast es wird keine Musik wiedergegeben.

gruss

Geändert von EWeiss (11. Jul 2019 um 15:56 Uhr)
  Mit Zitat antworten Zitat
Michael II
Online

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
772 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Circular spectrum visualizer

  Alt 24. Mär 2019, 18:03
Ah gut spielt Gain FGain keine Rolle.

Wegen var oder nicht var:

Es gibt schon einen Unterschied zwischen

procedure A( var x : integer )

und

procedure A( x : integer )

Michael Gasser
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Circular spectrum visualizer

  Alt 24. Mär 2019, 18:10
Ah gut spielt Gain FGain keine Rolle.

Wegen var oder nicht var:

Es gibt schon einen Unterschied zwischen

procedure A( var x : integer )

und

procedure A( x : integer )

100% gebe ich dir recht.
Das sehe ich ja auch wenn ich die beiden Bilder so betrachte.

ohne var wird Rings gar nicht angezeigt mit var in Vollausschlag. (wohlbemerkt ohne Musik) Spectrum müsste eigentlich 0 sein.
Ich glaube dir das es richtig ist habe nur jetzt ein Problem das ich herausfinden muss warum nur das var eine solch immense Veränderung hervorruft.

Das ist mein Problem

Zitat:
Ah gut spielt Gain FGain keine Rolle.
Doch schon nur ich sehe keinen sinn darin den Getter aufzurufen wenn FGain von außen gesetzt wird.
Wenn jetzt im Getter 1 Millionen von Berechnungen stattfinden würden die ich bereits außerhalb von Getter getätigt habe wäre der Code redundant..
So heißt das Wort denke ich mal.
Es wäre unnötige rechen zeit da der wert FGain = Gain schon bekannt ist. Wäre in dem Fall doppelt gemoppelt.

gruss

Geändert von EWeiss (24. Mär 2019 um 18:22 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Circular spectrum visualizer

  Alt 24. Mär 2019, 18:36
Sorry hier noch zwei shots..
Einmal mit und einmal ohne Sound..

Vielleicht muss ich den Buffer vorher nullen mit FillChar\FillMemory.

gruss

Geändert von EWeiss (11. Jul 2019 um 15:56 Uhr)
  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:13 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