]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - client/graph.c
apply @holiman s graph changes +
[proxmark3-svn] / client / graph.c
index a96425b91ce559e38d3d79b6e5a8a1d37c69a73a..547e9b30d8e26672ef54dc48332dfd1cc6053a13 100644 (file)
@@ -18,6 +18,9 @@
 
 int GraphBuffer[MAX_GRAPH_TRACE_LEN];
 int GraphTraceLen;
+
+int s_Buff[MAX_GRAPH_TRACE_LEN];
+
 /* write a manchester bit to the graph */
 void AppendGraph(int redraw, int clock, int bit)
 {
@@ -290,3 +293,57 @@ bool graphJustNoise(int *BitStream, int size)
        }
        return justNoise1;
 }
+int autoCorr(const int* in, int *out, size_t len, int window)
+{
+       static int CorrelBuffer[MAX_GRAPH_TRACE_LEN];
+
+       if (window == 0) {
+               PrintAndLog("needs a window");
+               return 0;
+       }
+       if (window >= len) {
+               PrintAndLog("window must be smaller than trace (%d samples)",
+               len);
+               return 0;
+       }
+
+       PrintAndLog("performing %d correlations", len - window);
+
+       for (int i = 0; i < len - window; ++i) {
+               int sum = 0;
+               for (int j = 0; j < window; ++j) {
+                       sum += (in[j]*in[i + j]) / 256;
+               }
+               CorrelBuffer[i] = sum;
+       }
+       //GraphTraceLen = GraphTraceLen - window;
+       memcpy(out, CorrelBuffer, len * sizeof (int));
+       return 0;
+}
+int directionalThreshold(const int* in, int *out, size_t len, int8_t up, int8_t down)
+{
+       int lastValue = in[0];
+       out[0] = 0; // Will be changed at the end, but init 0 as we adjust to last samples value if no threshold kicks in.
+
+       for (int i = 1; i < len; ++i) {
+               // Apply first threshold to samples heading up
+               if (in[i] >= up && in[i] > lastValue)
+               {
+                       lastValue = out[i]; // Buffer last value as we overwrite it.
+                       out[i] = 1;
+               }
+               // Apply second threshold to samples heading down
+               else if (in[i] <= down && in[i] < lastValue)
+               {
+                       lastValue = out[i]; // Buffer last value as we overwrite it.
+                       out[i] = -1;
+               }
+               else
+               {
+                       lastValue = out[i]; // Buffer last value as we overwrite it.
+                       out[i] = out[i-1];
+               }
+       }
+       out[0] = out[1]; // Align with first edited sample.
+       return 0;
+}
Impressum, Datenschutz