Volume 10
Chapter 63
356 Struggling with Database 2016-02-26
Moving a system to 64 bits is a pain in the ass. Now I find that the 64 bit compiler I use is non-deterministic, that is doesn't produce the same code exactly the same each time an application is compiled. As you can imagine this is not an acceptable property of a compiler.
355 Current Search State Machine 2016-02-10
354 Taking a Leak 2016-02-05
The software has been throwing an exception indicating a memory leak somewhere. This is a major problem because when I am using a 5,000 line setup with a 32K FFT it burns up 520 Meg of online memory normally. With the leak I have seen an overnight data collection run go up to 2.2 GBytes which freezes the application in its tracks.
I installed EurekaLog and found that the application was not releasing a dynamically sized buffer correctly. A bit of Goggling and I found that Delphi makes a copy of the original buffer when it changes the length. The following code fixes that:
- SetLength(buffer,0); // Clears the buffer
- SetLength(buffer,SizeIWant); // Set it to the desired length like 5,000
This recovers the buffer without copying it and this seems to tame the memory leak.
Testing now.
352 - Chirp Testing 2016-02-04
Now that I have the Spectrum Analyzer re-designed so that it can manage large arrays I can test the chirp function to see how well it discriminates between signals that have Earth Doppler (extraterrestrial) and those that do not (Earth based or fixed orbit).
This is the setup.
SETI Network Tone Generator with chirp controls
The tone generator is used to create a low level 10 kHz signal that is sent to the mixer
XENYX Q502USB Mixer
The mixer receives the Tone Generator output via the USB connection and mixes it with the 20 kHz wide audio from the receiver DRM converter. This shows up on the Spectrum Analyzer as a green line about 10 bins wide. This is about 13 Hz wide.
SETI Network Spectrum Analyzer
The chirp control software calculates the required bin shift for the received buffer necessary to keep an extraterrestrial signal in a limited number of bins. Notice that the system is set to collect 5,000 lines of spectral data before searching for a signal.
Corner of SETI Control Panel showing calculated Chirp
In this case the calculated Doppler due to the Earths rotation is -0.08412 Hz/Second. The number of bins shifted right when this screen capture was made is 21.
The end result is that the software was able to ignore the non-shifting output from the Tone Generator. This is a good thing.
Now I will rerun the test but set the Tone Generator to include a shift of-0.84 Hz/Sec (as close as I can) and verify that the signal is recognized as extraterrestrial.
After capture and detection of chirped Tone Generator
The chirping tone generator was detected down to the correct bin and better yet extraneous terrestrial signals were ignored.
Now that the long scan function is working I have confidence the the false positive rate will go down dramatically.
351 - Status of the Apparatus 2016-01-27
- Unify the SpecAna and Waterfall functions
- Extract the Antenna and recreate as a Remote Objects server
- Rebuild the remaining application as 64 bit exe.
350 - SETI State Search Machine 2016-01-26
Lets hope this is the last turn of this.
349 - Blasted Startup Folder 2016-01-16
I can never remember where this is located:
C:\Users\<your user name>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
348 - Remote Objects 2016-01-01
It seems auspicious to start a new volume and chapter at the start of the new year so here it is.
RemObjects SDK
I am attempting to use Remote Objects SDK as a way to solve a vexing problem with the Antenna Controller. The controller uses a DLL that was coded in a stone age version of 'C' and is no longer maintained by J.R. Kerr. It is 32 bits and can not be used with a 64 bit application. I am trying to move the entire SETI application to 64 bits to take advantage of Windows ability to handle very large arrays - I have a problem.
There are only two solutions. One is to rewrite the DLL in 64 bit Delphi or 64 bit 'C' which would be great but the 'C' code itself is obscure and difficult for me to translate.
The second solution is to leave the Antenna Controller as a 32 bit application but make it a Remote Object server so that the main application (SETI.EXE) can make calls to the antenna as a Client to the antennas Server. Since client/server relationships are bit size agnostic I could then compile the remainder of the SETI application as 64 bit and piece and harmony would rule the land.
The added advantage will be that the Antenna could be controlled remotely over the net using HTTP.
Can I get an amen brothers and sisters!