add data fsktonrz fsk cleaning util (#352)

add fsk cleaning / demod tool fsktonrz
- used old fskdemod for HID and adjusted it to build the tone tables for any fsk model detected or given.  using the tone tables we are able to convert the fsk to clear strong NRZ/ASK even with very weak fsk waves.
- also fixed a small textual bug in `lf search u` output
- also added more graph clearing code to help ensure the demod overlay doesn't show when it shouldn't...
- and improved strong NRZ clock detection.
- fixed bugs in places it used old static values instead of dynamic read values. and removed redundant items.
This commit is contained in:
marshmellow42 2017-07-12 01:31:42 -04:00 committed by pwpiwi
commit 0e2ddb4196
5 changed files with 223 additions and 7 deletions

View file

@ -505,13 +505,14 @@ int DetectASKClock(uint8_t dest[], size_t size, int *clock, int maxErr) {
return bestStart[best];
}
int DetectStrongNRZClk(uint8_t *dest, size_t size, int peak, int low){
int DetectStrongNRZClk(uint8_t *dest, size_t size, int peak, int low, bool *strong) {
//find shortest transition from high to low
*strong = false;
size_t i = 0;
size_t transition1 = 0;
int lowestTransition = 255;
bool lastWasHigh = false;
size_t transitionSampleCount = 0;
//find first valid beginning of a high or low wave
while ((dest[i] >= peak || dest[i] <= low) && (i < size))
++i;
@ -527,10 +528,17 @@ int DetectStrongNRZClk(uint8_t *dest, size_t size, int peak, int low){
lastWasHigh = (dest[i] >= peak);
if (i-transition1 < lowestTransition) lowestTransition = i-transition1;
transition1 = i;
} else if (dest[i] < peak && dest[i] > low) {
transitionSampleCount++;
}
}
if (lowestTransition == 255) lowestTransition = 0;
if (g_debugMode==2) prnt("DEBUG NRZ: detectstrongNRZclk smallest wave: %d",lowestTransition);
// if less than 10% of the samples were not peaks (or 90% were peaks) then we have a strong wave
if (transitionSampleCount / size < 10) {
*strong = true;
lowestTransition = getClosestClock(lowestTransition);
}
return lowestTransition;
}
@ -550,7 +558,9 @@ int DetectNRZClock(uint8_t dest[], size_t size, int clock, size_t *clockStartIdx
int peak, low;
if (getHiLo(dest, loopCnt, &peak, &low, 90, 90) < 1) return 0;
int lowestTransition = DetectStrongNRZClk(dest, size-20, peak, low);
bool strong = false;
int lowestTransition = DetectStrongNRZClk(dest, size-20, peak, low, &strong);
if (strong) return lowestTransition;
size_t ii;
uint8_t clkCnt;
uint8_t tol = 0;