Hi Frank,
Ill see if I can revive my Github account, havent used it for some time. Will inform overhere and upload my spaghetti when I get access again. Mind you its currently spaghetti-code since my development style will make me change/add/remove much stuff during the testing of ideas etc. Every now and then I then start a general cleanup for features that seem to be usefull enough to use and at that moment I am also adding comments to the code. But I am willing to share.
*time expansion.
Its not a recording feature that I have implemented, its a "live" feature. So you can listen to heterodyne on one channel (left or right) and to incoming time-expanded calls on another channel. When recording only heterodyne stays active so you still know if the bat is still around before (manually) stopping the recording. I have no automated recording setup yet.
*Frequency-divider. I have build in the past one of the frequency-divider style detectors and did not like its response, the sounds were too digital (on/off) since no amplitudeinfo was retained. But its possible to experiment with this I guess. Foaly started something like this but I havent seen any further development. Could be interesting to add this to the toolbox too.
-
*FFTbased, thanks for the link. Never seen that in use before. Have you seen this used in the field ? How was the audio-quality ? Havent checked if anybody has used a teensy to do FFT-IFFT at all and how fast this can be done. Thusfar my adventure using a Teensy 3.6 has just started and I am pleased with the great options this board brings (Thanks to Pauls effort on the hardware and many others on the software).
A few comments on the current status/plan, when I go out (thusfar I only have to step outside in our garden late in the evening) I use heterodyne to listen to possible bat-activitiy. I am sure that will still be the main listening mode for some time as it often gives feedback really fast. I am now adding "live" time-expansion (albeit sparse 1/10 of the time capturing) to that, so heterodyne Left and TimeExpansion on the right (or vv). Thusfar I have seen that the output of the FFT is a real great asset. I have several times detected bats/crickets and probably mice not by hearing them on the heterodyne but simply by spotting them as repeating blips on the waterfall graph.
I am planning to make a simple autodetect feature that will make the heterodyne centre-frequency jump to the peakvalue (based on FFT) of an incoming signal based on a user-set band of frequencies.
Playback and recording have been implemented, at startup the system checks for an SDcard and if available will make a listing of all *.raw files in the root. The user can select any of these and play them, during play the sample_rate can be changed between 8-44K. The TFT-screen also shows the progress of the raw-file playing. Recording is currently done using a default frequency(281k) but I am planning to make that also easy to change. When a recording is started the File will be given a name BXXX_YYY.raw where XXX is just a sequential number and YYY corresponds to the sample_rate. That makes it easier to use the recordings also outside the detector.
TFTscreen
As stated in an earlier message I have added a scrollable area since the ILI9341 allows that to be used,
Code:
void ILI9341_t3::setScrollarea(uint16_t bottom, uint16_t top)
{
SPI.beginTransaction(SPISettings(SPICLOCK, MSBFIRST, SPI_MODE0));
writecommand_cont(0x33);
writedata16_last(bottom);
writedata16_last(ILI9341_TFTHEIGHT-top-bottom);
writedata16_last(top);
SPI.endTransaction();
}
The scroll functionality than prevents the top/bottom sections to be overwritten during a scroll. In my setup the bottom shows the active menu settings for my left/right encoder. The top shows settings for volume, gain, frequency and samplerate, a simple axis for frequencies with ticks every 10Khz and a dot that corresponds to the current heterodyne centre-frequency.
Additional functions:
Denoise FFTgraph.
Although the performance and soundquality is good according to me I still see noisebands every 22500hz (and multiples). A simple function can be used to capture 1000 FFTs and calculate the average level for each bin. After a 1000 have been collected I subtract those values from the bins and the FFTgraphs (waterfall) becomes a lot cleaner and easier to use.
Encoders
I am still struggling to think of the best/most intuitive way to use the encoders. Currently they have two modes, they either allow you to select a function or they allow you to change the value of a function (left and right work independent). So you select a function, press the encoder to "lock" the function and then you can use the same encoder to change the value. Press the encoder again and you are in the menu mode. For some functions like playing files I am using both encoders as that looks easier, not sure however if I will keep it like that.
Enough to tinker on
cheers
Cor