Software

Software geschrieben in 80586/87 Assembler und Objekt-Pascal. Wir entwickeln Software mit speziellen Berechnungen auf Bestellung (MuPAD, Mathematica, Assembler, Object-Pascal).

Verschiedene Anwendungen mit Fourier-Transformationen:
Spektrum - eine Anwendung
SpektrumExt - eine Anwendung
SpektrumExtImag - eine Anwendung
SpektrumExtImagCep - eine Anwendung
Computergrafik - eigentlich nur zum Spaß:
Apfelmann - eine Anwendung, Darstellung der Mandelbrotmenge, beliebige Vergrößerung
KI - ChatGPT/OpenAI unterstützte Programmierung:
DCF77 - Signalverarbeitung und Dekodierung von ausgetasteter 750 Hz-AM
Bibliotheken oder Unterprogramme in Assembler zum Einbinden in Ihre Hochsprachenprogramme:
fftdll - eine Library mit 18 Procedures
specingdll - eine Library mit 18 Procedures
real32fft - eine externe Procedure zum Anlinken
invreal32fft - eine externe Procedure zum Anlinken
real64fft - eine externe Procedure zum Anlinken
invreal64fft - eine externe Procedure zum Anlinken
imag32fft - eine externe Procedure zum Anlinken
invimag32fft - eine externe Procedure zum Anlinken
imag64fft - eine externe Procedure zum Anlinken
invimag64fft - eine externe Procedure zum Anlinken


Spektrum - ein Programm für Fachleute, Version 2.7

Spektrum ist ein Programm, geschrieben in Objekt-Pascal, rund um die Problematik mit Abtastserien von Zeitfunktionen und deren Spektrum für Anwender, die wissen was eine Fouriertransformation ist. Dem Benutzer wird es ermöglicht durch simple Programmierung beliebige Abastserien von Zeitfunktionen zu erstellen, diese mit Hilfe einer FFT in den Spektralbereich zu transformieren und sich die Ergebnisse grafisch anzusehen. Darüber hinaus sind Manipulationen am Spektrum und eine anschließende Rücktransformation in den Zeitbereich möglich. Weitere Werkzeuge des Programms sind die Hanning-Bewertung und die inverse Hanning-Bewertung. Grafische Darstellung und Tabellenausgabe in linearer, logarithmischer, als Phasenspektrum und als Zeitfunktion.
Für Anwender, die sich das Spektrum von 16 Bit-Stereo-WAV-Dateien ansehen wollen ist auch gesorgt. Diese Dateien können in ihre Kanäle zerlegt, transformiert, manipuliert und wieder zurücktransformiert werden. Im Anschluß daran ist eine Synthese zu einer 16-Bit-Stereo-WAV-Datei möglich.
Definieren Sie z. B. das Feld über der Apertur einer Antenne und berechnen Sie das Richtdiagramm, oder berechnen Sie durch inverse FFT die Impulsantwort aus der Übertragungsfunktion bzw. durch vorwärts-FFT die Übertragungsfunktion aus der Impulsantwort.

Die berechnenden Unterprogramme sind in Assembler geschrieben und optimiert.

Screenshots:

     
Programmstart
     
log. Spektrum einer ZSB-AM
     
Phasenspektrum der AM
     
Tabelle der Spektralwerte
     
Spektrum des linken Stereo-Kanals des Sound-Tracks In-A-Gadda-Da-Vida
von Iron Butterfly. Dateilänge 256 MiB. Man erkennt der Track ist nicht
Gleichanteilsfrei. Auf die ganz hohen Frequenzen wurde ein Tiefpaß angewendet.
Das Musikstück wurde in seiner ganzen Länge vom Zeitbereich
in den Frequenzbereich transformiert. Berechnungen mit Spektrum 2.7
     
Zeitfunktion des linken Stereo-Kanals des selben Tracks
     
Cepstrum des linken Stereo-Kanals des selben Tracks

[Oben][Anfang]


SpektrumExt - für wissenschaftliche Berechnungen geeignet, Version 3.1

SpektrumExt arbeitet mit 8-Byte-Long-Real-Zahlen und verarbeitet Exponenten bis 324 bei einer Genauigkeit von 15+1/2 signifikanten Stellen. Aufgrund des hohen Speicherbedarfs wurde auf die Möglichkeit zur Bearbeitung von WAV-Dateien verzichtet. Ansonsten wie Spektrum.


SpektrumExtImag - für wissenschaftliche Berechnungen geeignet, Version 3.2

SpektrumExtImag arbeitet mit 8-Byte-Long-Real-Zahlen und verarbeitet Exponenten bis 324 bei einer Genauigkeit von 15+1/2 signifikanten Stellen. Komplexe Abtastserien können definiert und transformiert werden. Die Algorithmen der allgemein bekannten FFT werden verwendet. Es gibt Funktionen für die Hanning-Bewertung, inverse Hanning-Bewertung und den Spektral-Diskriminator. Dieses Programm ist am ehesten geeignet für rein mathematische Anwendung. Die FFT bzw. inverse FFT wird natürlich in Rekordzeit berechnet.

[Oben][Anfang]


SpektrumExtImagCep - eine Anwendung, für wissenschaftl. Berechnungen geeignet

SpektrumExtImagCep arbeitet mit 8-Byte-Long-Real-Zahlen und verarbeitet Exponenten bis 324 bei einer Genauigkeit von 15+1/2 signifikanten Stellen. Komplexe Abtastserien können definiert und transformiert werden. Die Algorithmen der allgemein bekannten FFT werden verwendet. Zusätzlich wurden die Funktionen CEPSTRUM und inverses CEPSTRUM implementiert, mit denen eine komplexe Logarithmierung und Rücktransformation in den Zeitbereich möglich ist und umgekehrt. Es gibt Funktionen für die Hanning-Bewertung, inverse Hanning-Bewertung und den Spektral-Diskriminator. Dieses Programm ist am ehesten geeignet für rein mathematische Anwendung. Die FFT bzw. inverse FFT wird natürlich in Rekordzeit berechnet.

[Oben][Anfang]


Apfelmann - Darstellung der Mandelbrotmenge mit beliebiger Vergrößerung

Der Apfelmann aus der Mandelbrotmenge läßt sich in verschiedenen Farben grafisch darstellen. Mit der Maus lassen sich beliebig oft (bis an die Grenzen der Zahlendarstellung der FPU) Untermengen in der Grafik markieren, vergrößern und neu berechnen. Das Ergebnis sind faszinierende Grafiken mit scheinbar unerschöpflicher Vielfalt. Berechnete Bilder können dann als BMP-Datei auswählbarer Größe gespeichert, in Paint geöffnet und gedruckt werden. Je nach Leistungsfähigkeit Ihrer Grafik-Hardware sind großformatige Berechnungen möglich.

Screenshots:

     
kompl. Mandelbrotmenge
     
Untermenge am Rande
     
stark vergrößerte Untermenge am Fuß der Mandelbrotmenge

[Download Mandelbrot Giveaway]

[Oben][Anfang]


DCF77 - Signalverarbeitung und Dekodierung von ausgetasteter 750 Hz-AM

Mit ChatGPT von OpenAI habe ich in enger Zusammenarbeit ein Mathematica-Programm entwickelt, das aus einer mit Austastlücken versehene 750 Hz-AM das Signal von DCF77 signalverarbeitet und dekodiert.

[Download Sourcefile mit Beispiel]

[Oben][Anfang]


fftdll - für wissenschaftliche Berechnungen geeignet

This fft.dll contains 18 procedures to solve problems around FFTs.
The procedures use SSE2-instructions of the Pentium and FPU-instructions.
The real-data-computations are all made within the 80-Bit-FPU-registers.
For integer-computations SSE2 instructions and XMM-registers are used.
Some procedures requires complex input-data as explained.

In Delphi this procedures will be declared as follows, for other high-level-languages refer to manual:

procedure TestHello();stdcall;external 'fft.dll';
or
procedure real32fft(lpFileName:PChar,lpError:Pointer);stdcall;external 'fft.dll'

- TestHello();
returns a message-box that the fft.dll is loaded correctly

- real32fft(lpFileNameString,lpdwErrVar);
makes a FFT of a file of 4-Byte-Short-Reals with real data
(n=2^k real numbers)

- invreal32fft(lpFileNameString,lpdwErrVar);
makes an inverse FFT of a file of 4-Byte-Short-Reals with complex data
(n=2^(k-1) real numbers and 2^(k-1) complex numbers)

- hanning32(lpFileNameString,lpdwErrVar);
valuates a file of 4-Byte-Short-Reals with the Hanning-Valuation

- invhanning32(lpFileNameString,lpdwErrVar);
makes an inverse Hanning-valuation of a file of 4-Byte-Short-Reals

- real64fft(lpFileNameString,lpdwErrVar);
makes a FFT of a file of 8-Byte-Long-Reals
(n=2^k real numbers)

- invreal64fft(lpFileNameString,lpdwErrVar);
makes an inverse FFT of a file of 8-Byte-Long-Reals
(n=2^(k-1) real numbers and 2^(k-1) complex numbers)

- hanning64(lpFileNameString,lpdwErrVar);
valuates a file of 8-Byte-Long-Reals with the Hanning-Valuation

- invhanning64(lpFileNameString,lpdwErrVar);
makes an inverse Hanning-valuation of a file of 8-Byte-Long-Reals

- imag64fft(lpFileNameString,lpdwErrVar);
makes a FFT of a file of 8-Byte-Long-Reals with complex data
(n=2^k real numbers and 2^k complex numbers)

- invimag64fft(lpFileNameString,lpdwErrVar);
makes an inverse FFT of a file of 8-Byte-Long-Reals with complex data
(n=2^k real numbers and 2^k complex numbers)

- imaghanning64(lpFileNameString,lpdwErrVar);
valuates a file of 8-Byte-Long-Reals with the Hanning-Valuation
(n=2^k real numbers and 2^k complex numbers)

- invimaghanning64(lpFileNameString,lpdwErrVar);
makes an inverse Hanning-valuation of a file of 8-Byte-Long-Reals
(n=2^k real numbers and 2^k complex numbers)

- imag80fft(lpFileNameString,lpdwErrVar);
makes a FFT of a file of 10-Byte-Reals with complex data
(n=2^k real numbers and 2^k complex numbers)

- invimag80fft(lpFileNameString,lpdwErrVar);
makes an inverse FFT of a file of 10-Byte-Reals with complex data
(n=2^k real numbers and 2^k complex numbers)

- imaghanning80(lpFileNameString,lpdwErrVar);
valuates a file of 10-Byte-Reals with the Hanning-Valuation
(n=2^k real numbers and 2^k complex numbers)

- invimaghanning80(lpFileNameString,lpdwErrVar);
valuates a file of 10-Byte-Reals with the inverse Hanning-Valuation
(n=2^k real numbers and 2^k complex numbers)

[Oben][Anfang]


specingdll - für wissenschaftliche Berechnungen geeignet

This specing.dll contains 18 procedures to solve problems around FFTs and digital signal computations.
The procedures use SSE2-instructions of the Pentium and FPU-instructions.
The real-data-computations are all made within the 80-Bit-FPU-registers.
For integer-computations SSE2 instructions and XMM-registers are used.
Some procedures requires complex input-data as explained.

In Delphi this procedures will be declared as follows, for other high-level-languages refer to manual:

procedure TestHello();stdcall;external 'fft.dll';
or
procedure real32fft(lpFileName:PChar,lpError:Pointer);stdcall;external 'fft.dll'<ßp>

- TestHello();
returns a message-box that the fft.dll is loaded correctly

- real32fft(lpFileNameString,lpdwErrVar);
makes a FFT of a file of 4-Byte-Short-Reals with real data
(n=2^k real numbers)

- invreal32fft(lpFileNameString,lpdwErrVar);
makes an inverse FFT of a file of 4-Byte-Short-Reals with complex data
(n=2^(k-1) real numbers and 2^(k-1) complex numbers)

- hanning32(lpFileNameString,lpdwErrVar);
valuates a file of 4-Byte-Short-Reals with the Hanning-Valuation

- invhanning32(lpFileNameString,lpdwErrVar);
makes an inverse Hanning-valuation of a file of 4-Byte-Short-Reals

- wavzerl(lpFileNameString,lpdwErrVar);
creates a file of 4-Byte-Short-Reals from a 16-Bit-Stereo-WAV-File

- syn(lpFileNameString1,lpFileNameString2,lpErrVar);
creates a 16-Bit-Stereo-WAV-File from 2 pc. 4-Byte-Short-Reals

- disc(lpFileNameString,lpErrVar);
a noise-discriminator for a spectrum-file

- adsim(lpFileNameSTring,lpErrVar),
simulates a adc on a mathematical computated series

- full(lpFileNameString,lpErrVar);
full amplification for 16-Bit-Stereo-WAV-Files

- filtflt(lpFileNameString,lpErrVar);
FIR (LP, BP, HP)-filter for 4-Byte-Short-Real-Series
with extra program to determine the filter-data

- ampflt(lpFileNameString,dwamp,lpErrVar);
amplification for 16-Bit-Stereo-WAV-Files

- cep32(lpFileNameString,lpErrVar);
amount/angle-CEPSTRUM computation from 4-Byte-Short-Real-spectrum-data

- lncep32(lpFileNameString,lpErrVar);
logarithm CEPSTRUM computation from 4-Byte-Short-Real-spectrum-data

- real32zerpic((lpFileNameString,lpErrVar);
creates a file of 2^k 4-Byte-Short-Reals from a known *.bmp-format

- bmp32fft(lpFileNameString,lpdwErrVar);
makes a 2-D-FFT of a file of 4-Byte-Short-Reals with real input data
(n=2^k real numbers) and creates a new file named *2dft.fft

- bmp1dfft(lpFileNameString,lpdwErrVar);
makes a 1-D-FFT of a file of 4-Byte-Short-Reals with real input data
(n=2^k real numbers) and creates a new file named *1dft.fft

- bmp32cep(lpFileNameString,lpdwErrVar);
makes a 2-D-CEPSTRUM of a file of 4-Byte-Short-Reals with real spectrum-input-data
(n=2^k real numbers) and creates a new file named *2dftit.cep

- bmp1dcep(lpFileNameString,lpdwErrVar);
makes a 1-D-CEPSTRUM of a file of 4-Byte-Short-Reals with real spectrum-input-data
(n=2^k real numbers) and creates a new file named *1dftit.cep

- bmpsyn(lpFileNameString,lpdwErrVar);
creates a *2dft.bmp-file from a *2dft.fft-file

[Oben][Anfang]


real32fft - eine Procedure zum Anlinken

real32fft.zip enthält eine readme.txt-Datei und wap32.obj. Letzteres können Sie als externe Procedure in Ihren Hochsprachenprogrammen deklarieren und anlinken. Die Procedure wird dann aus Ihrem Programm mit realfft(FileName:String, lpError) aufgerufen. Die Berechnung des Spektrums ist sowohl speicher- als auch geschwindigkeitsoptimiert und in 80586/80587-Assembler entwickelt worden. Fehlercodes werden in eine Fehlervariable vom Typ Longword in Ihrem Hochsprachenprogramm eingetragen. Die Besonderheit von realfft() liegt im verwendeten Algorithmus, der nur 75 % des üblichen Speicherbedarfs einer FFT hat. Real32fft arbeitet mit 4-Byte-Short-Real-Zahlen. Für alle Windows-Versionen ab Win 95.

[Oben][Anfang]


invreal32fft - eine Procedure zum Anlinken

invreal32fft.zip enthält eine readme.txt-Datei und wap32.obj. Letzteres können Sie als externe Procedure in Ihren Hochsprachenprogrammen deklarieren und anlinken. Die Procedure wird dann aus Ihrem Programm mit invrealfft(FileName:String, lpError) aufgerufen. Die Berechnung der Abtastwerte ist sowohl speicher- als auch geschwindigkeitsoptimiert und in 80586/80587-Assembler entwickelt worden. Fehlercodes werden in eine Fehlervariable vom Typ Longword in Ihrem Hochsprachenprogramm eingetragen. Die Besonderheit von invrealfft() liegt im verwendeten Algorithmus, der nur 75 % des üblichen Speicherbedarfs einer inversen FFT hat. Invreal32fft arbeitet mit 4-Byte-Short-Real-Zahlen. Für alle Windows-Versionen ab Win 95.

[Oben][Anfang]


real64fft - eine Procedure zum Anlinken

real64fft.zip enthält eine readme.txt-Datei und wap32.obj. Letzteres können Sie als externe Procedure in Ihren Hochsprachenprogrammen deklarieren und anlinken. Die Procedure wird dann aus Ihrem Programm mit realfft(FileName:String, lpError) aufgerufen. Die Berechnung des Spektrums ist sowohl speicher- als auch geschwindigkeitsoptimiert und in 80586/80587-Assembler entwickelt worden. Fehlercodes werden in eine Fehlervariable vom Typ Longword in Ihrem Hochsprachenprogramm eingetragen. Die Besonderheit von real64fft() liegt im verwendeten Algorithmus, der nur 75 % des üblichen Speicherbedarfs einer inversen FFT hat. Real64fft arbeitet mit 8-Byte-Long-Real-Zahlen. Für alle Windows-Versionen ab Win 95.

[Oben][Anfang]


invreal64fft - eine Procedure zum Anlinken

invreal64fft.zip enthält eine readme.txt-Datei und wap32.obj. Letzteres können Sie als externe Procedure in Ihren Hochsprachenprogrammen deklarieren und anlinken. Die Procedure wird dann aus Ihrem Programm mit invrealfft(FileName:String, lpError) aufgerufen. Die Berechnung der Abtastwerte ist sowohl speicher- als auch geschwindigkeitsoptimiert und in 80586/80587-Assembler entwickelt worden. Fehlercodes werden in eine Fehlervariable vom Typ Longword in Ihrem Hochsprachenprogramm eingetragen. Die Besonderheit von invreal64fft() liegt im verwendeten Algorithmus, der nur 75 % des üblichen Speicherbedarfs einer inversen FFT hat. Invreal64fft arbeitet mit 8-Byte-Long-Real-Zahlen. Für alle Windows-Versionen ab Win 95.

[Oben][Anfang]


imag32fft - eine Procedure zum Anlinken

imag32fft.zip enthält eine readme.txt-Datei und wap32.obj. Letzteres können Sie als externe Procedure in Ihren Hochsprachenprogrammen deklarieren und anlinken. Die Procedure wird dann aus Ihrem Programm mit imagfft(FileName:String, lpError) aufgerufen. Die Berechnung des Spektrums ist geschwindigkeitsoptimiert und in 80586/80587-Assembler entwickelt worden. Fehlercodes werden in eine Fehlervariable vom Typ Longword in Ihrem Hochsprachenprogramm eingetragen. Imag32fft arbeitet mit 4-Byte-Short-Real-Zahlen. Für alle Windows-Versionen ab Win 95.

[Oben][Anfang]


invimag32fft - eine Procedure zum Anlinken

invimag32fft.zip enthält eine readme.txt-Datei und wap32.obj. Letzteres können Sie als externe Procedure in Ihren Hochsprachenprogrammen deklarieren und anlinken. Die Procedure wird dann aus Ihrem Programm mit invimagfft(FileName:String, lpError) aufgerufen. Die Berechnung des Abtastwerte ist geschwindigkeitsoptimiert und in 80586/80587-Assembler entwickelt worden. Fehlercodes werden in eine Fehlervariable vom Typ Longword in Ihrem Hochsprachenprogramm eingetragen. Invimag32fft arbeitet mit 4-Byte-Short-Real-Zahlen. Für alle Windows-Versionen ab Win 95.

[Oben][Anfang]


imag64fft - eine Procedure zum Anlinken

Wie imag32fft, aber Verarbeitung von Double-Real-Zahlen (8-Byte-Long-Real).

[Oben][Anfang]


invimag64fft - eine Procedure zum Anlinken

Wie invimag32fft, aber Verarbeitung von Double-Real-Zahlen (8-Byte-Long-Real).

[Oben][Anfang]