CHG: some average / mean functions to enhance justNoise functions.
FIX: 'lf t55xx' - verifying that collected signal is not just noise..
This commit is contained in:
@@ -1315,6 +1315,10 @@ int AquireData( uint8_t page, uint8_t block, bool pwdmode, uint32_t password ){
|
||||
return 0;
|
||||
}
|
||||
setGraphBuf(got, sizeof(got));
|
||||
|
||||
if (is_justnoise(GraphBuffer, sizeof(got)))
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -1755,12 +1759,12 @@ bool tryDetectP1(bool getData) {
|
||||
ans = fskClocks(&fc1, &fc2, (uint8_t *)&clk, false, &firstClockEdge);
|
||||
if (ans && ((fc1==10 && fc2==8) || (fc1==8 && fc2==5))) {
|
||||
if ( FSKrawDemod("0 0", false) &&
|
||||
preambleSearchEx(DemodBuffer,preamble,sizeof(preamble),&DemodBufferLen,&startIdx,false) &&
|
||||
preambleSearchEx(DemodBuffer, preamble,sizeof(preamble), &DemodBufferLen, &startIdx, false) &&
|
||||
(DemodBufferLen == 32 || DemodBufferLen == 64) ) {
|
||||
return true;
|
||||
}
|
||||
if ( FSKrawDemod("0 1", false) &&
|
||||
preambleSearchEx(DemodBuffer,preamble,sizeof(preamble),&DemodBufferLen,&startIdx,false) &&
|
||||
preambleSearchEx(DemodBuffer, preamble, sizeof(preamble), &DemodBufferLen, &startIdx, false) &&
|
||||
(DemodBufferLen == 32 || DemodBufferLen == 64) ) {
|
||||
return true;
|
||||
}
|
||||
@@ -1769,19 +1773,19 @@ bool tryDetectP1(bool getData) {
|
||||
|
||||
// try psk clock detect. if successful it cannot be any other type of modulation... (in theory...)
|
||||
clk = GetPskClock("", false, false);
|
||||
if (clk>0) {
|
||||
if (clk > 0) {
|
||||
// allow undo
|
||||
// save_restoreGB(1);
|
||||
// skip first 160 samples to allow antenna to settle in (psk gets inverted occasionally otherwise)
|
||||
//CmdLtrim("160");
|
||||
if ( PSKDemod("0 0 6", false) &&
|
||||
preambleSearchEx(DemodBuffer,preamble,sizeof(preamble),&DemodBufferLen,&startIdx,false) &&
|
||||
preambleSearchEx(DemodBuffer, preamble, sizeof(preamble), &DemodBufferLen, &startIdx, false) &&
|
||||
(DemodBufferLen == 32 || DemodBufferLen == 64) ) {
|
||||
//save_restoreGB(0);
|
||||
return true;
|
||||
}
|
||||
if ( PSKDemod("0 1 6", false) &&
|
||||
preambleSearchEx(DemodBuffer,preamble,sizeof(preamble),&DemodBufferLen,&startIdx,false) &&
|
||||
preambleSearchEx(DemodBuffer, preamble, sizeof(preamble), &DemodBufferLen, &startIdx, false) &&
|
||||
(DemodBufferLen == 32 || DemodBufferLen == 64) ) {
|
||||
//save_restoreGB(0);
|
||||
return true;
|
||||
@@ -1789,7 +1793,7 @@ bool tryDetectP1(bool getData) {
|
||||
// PSK2 - needs a call to psk1TOpsk2.
|
||||
if ( PSKDemod("0 0 6", false)) {
|
||||
psk1TOpsk2(DemodBuffer, DemodBufferLen);
|
||||
if (preambleSearchEx(DemodBuffer,preamble,sizeof(preamble),&DemodBufferLen,&startIdx,false) &&
|
||||
if (preambleSearchEx(DemodBuffer, preamble, sizeof(preamble), &DemodBufferLen, &startIdx, false) &&
|
||||
(DemodBufferLen == 32 || DemodBufferLen == 64) ) {
|
||||
//save_restoreGB(0);
|
||||
return true;
|
||||
@@ -1805,39 +1809,39 @@ bool tryDetectP1(bool getData) {
|
||||
clk = GetAskClock("", false, false);
|
||||
if (clk>0) {
|
||||
if ( ASKDemod_ext("0 0 1", false, false, 1, &st) &&
|
||||
preambleSearchEx(DemodBuffer,preamble,sizeof(preamble),&DemodBufferLen,&startIdx,false) &&
|
||||
preambleSearchEx(DemodBuffer, preamble, sizeof(preamble), &DemodBufferLen, &startIdx, false) &&
|
||||
(DemodBufferLen == 32 || DemodBufferLen == 64) ) {
|
||||
return true;
|
||||
}
|
||||
st = true;
|
||||
if ( ASKDemod_ext("0 1 1", false, false, 1, &st) &&
|
||||
preambleSearchEx(DemodBuffer,preamble,sizeof(preamble),&DemodBufferLen,&startIdx,false) &&
|
||||
(DemodBufferLen == 32 || DemodBufferLen == 64) ) {
|
||||
preambleSearchEx(DemodBuffer, preamble, sizeof(preamble), &DemodBufferLen, &startIdx, false) &&
|
||||
(DemodBufferLen == 32 || DemodBufferLen == 64) ) {
|
||||
return true;
|
||||
}
|
||||
if ( ASKbiphaseDemod("0 0 0 2", false) &&
|
||||
preambleSearchEx(DemodBuffer,preamble,sizeof(preamble),&DemodBufferLen,&startIdx,false) &&
|
||||
(DemodBufferLen == 32 || DemodBufferLen == 64) ) {
|
||||
preambleSearchEx(DemodBuffer, preamble, sizeof(preamble), &DemodBufferLen, &startIdx, false) &&
|
||||
(DemodBufferLen == 32 || DemodBufferLen == 64) ) {
|
||||
return true;
|
||||
}
|
||||
if ( ASKbiphaseDemod("0 0 1 2", false) &&
|
||||
preambleSearchEx(DemodBuffer,preamble,sizeof(preamble),&DemodBufferLen,&startIdx,false) &&
|
||||
(DemodBufferLen == 32 || DemodBufferLen == 64) ) {
|
||||
preambleSearchEx(DemodBuffer, preamble, sizeof(preamble), &DemodBufferLen, &startIdx, false) &&
|
||||
(DemodBufferLen == 32 || DemodBufferLen == 64) ) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// try NRZ clock detect. it could be another type even if successful.
|
||||
clk = GetNrzClock("", false, false); //has the most false positives :(
|
||||
if (clk>0) {
|
||||
if (clk > 0) {
|
||||
if ( NRZrawDemod("0 0 1", false) &&
|
||||
preambleSearchEx(DemodBuffer,preamble,sizeof(preamble),&DemodBufferLen,&startIdx,false) &&
|
||||
(DemodBufferLen == 32 || DemodBufferLen == 64) ) {
|
||||
preambleSearchEx(DemodBuffer, preamble, sizeof(preamble), &DemodBufferLen, &startIdx, false) &&
|
||||
(DemodBufferLen == 32 || DemodBufferLen == 64) ) {
|
||||
return true;
|
||||
}
|
||||
if ( NRZrawDemod("0 1 1", false) &&
|
||||
preambleSearchEx(DemodBuffer,preamble,sizeof(preamble),&DemodBufferLen,&startIdx,false) &&
|
||||
(DemodBufferLen == 32 || DemodBufferLen == 64) ) {
|
||||
preambleSearchEx(DemodBuffer, preamble, sizeof(preamble), &DemodBufferLen, &startIdx, false) &&
|
||||
(DemodBufferLen == 32 || DemodBufferLen == 64) ) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,14 +7,7 @@
|
||||
//-----------------------------------------------------------------------------
|
||||
// Graph utilities
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdbool.h>
|
||||
#include <string.h>
|
||||
#include "ui.h"
|
||||
#include "graph.h"
|
||||
#include "lfdemod.h"
|
||||
#include "cmddata.h" //for g_debugmode
|
||||
|
||||
int GraphBuffer[MAX_GRAPH_TRACE_LEN];
|
||||
int GraphTraceLen;
|
||||
@@ -81,13 +74,12 @@ void setGraphBuf(uint8_t *buf, size_t size) {
|
||||
return;
|
||||
}
|
||||
size_t getFromGraphBuf(uint8_t *buf) {
|
||||
|
||||
if (buf == NULL ) return 0;
|
||||
uint32_t i;
|
||||
for (i=0; i < GraphTraceLen; ++i){
|
||||
if (GraphBuffer[i] > 127) GraphBuffer[i] = 127; //trim
|
||||
if (GraphBuffer[i] < -127) GraphBuffer[i] = -127; //trim
|
||||
buf[i] = (uint8_t)(GraphBuffer[i]+128);
|
||||
buf[i] = (uint8_t)(GraphBuffer[i] + 128);
|
||||
}
|
||||
return i;
|
||||
}
|
||||
@@ -110,17 +102,19 @@ void DetectHighLowInGraph(int *high, int *low, bool addFuzz) {
|
||||
if ( loopMax > GraphTraceLen)
|
||||
loopMax = GraphTraceLen;
|
||||
|
||||
*high = -255; *low = 255;
|
||||
|
||||
for (uint8_t i = 0; i < loopMax; ++i) {
|
||||
if (GraphBuffer[i] > *high)
|
||||
*high = GraphBuffer[i];
|
||||
else if (GraphBuffer[i] < *low)
|
||||
*low = GraphBuffer[i];
|
||||
if (GraphBuffer[i] > *high) *high = GraphBuffer[i];
|
||||
if (GraphBuffer[i] < *low) *low = GraphBuffer[i];
|
||||
}
|
||||
|
||||
//12% fuzz in case highs and lows aren't clipped
|
||||
if (addFuzz) {
|
||||
*high = (int)(*high * .88);
|
||||
*low = (int)(*low * .88);
|
||||
*high *= .88;
|
||||
*low *= .88;
|
||||
//*high = (int)(*high * .88);
|
||||
//*low = (int)(*low * .88);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -272,12 +266,19 @@ uint8_t fskClocks(uint8_t *fc1, uint8_t *fc2, uint8_t *rf1, bool verbose, int *f
|
||||
}
|
||||
|
||||
// test samples are not just noise
|
||||
bool is_justnoise(int *bits, int size) {
|
||||
bool is_justnoise(int *bits, uint32_t size) {
|
||||
//might not be high enough for noisy environments
|
||||
#define THRESHOLD 15;
|
||||
#define NOICE_THRESHOLD 15;
|
||||
|
||||
// if we take the mean on the sample set and see if its
|
||||
// below the threshold, it will be a better indicator
|
||||
int32_t mean = compute_mean_int(bits, size);
|
||||
return mean < NOICE_THRESHOLD;
|
||||
|
||||
/*
|
||||
bool isNoise = true;
|
||||
for(int i=0; i < size && isNoise; i++){
|
||||
for(int i=0; i < size && isNoise; i++)
|
||||
isNoise = bits[i] < THRESHOLD;
|
||||
}
|
||||
return isNoise;
|
||||
*/
|
||||
}
|
||||
|
||||
@@ -10,7 +10,13 @@
|
||||
|
||||
#ifndef GRAPH_H__
|
||||
#define GRAPH_H__
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <string.h>
|
||||
#include "ui.h"
|
||||
#include "lfdemod.h"
|
||||
#include "cmddata.h" //for g_debugmode
|
||||
|
||||
void AppendGraph(int redraw, int clock, int bit);
|
||||
int ClearGraph(int redraw);
|
||||
@@ -21,7 +27,7 @@ uint8_t GetPskCarrier(const char str[], bool printAns, bool verbose);
|
||||
uint8_t GetNrzClock(const char str[], bool printAns, bool verbose);
|
||||
uint8_t GetFskClock(const char str[], bool printAns, bool verbose);
|
||||
uint8_t fskClocks(uint8_t *fc1, uint8_t *fc2, uint8_t *rf1, bool verbose, int *firstClockEdge);
|
||||
bool is_justnoise(int *bits, int size);
|
||||
bool is_justnoise(int *bits, uint32_t size);
|
||||
void setGraphBuf(uint8_t *buff, size_t size);
|
||||
void save_restoreGB(uint8_t saveOpt);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user