Ignoring bearings from certain directions

We have a fixed installation and due to the location, there are consistent strong reflections from a nearby object that are giving a false primary bearing. The true direction is a secondary bearing which is still quite distinct. I would like to tell the kraken to ignore any signal coming from certain general direction, for example 0º to 60º. Is there any way to do that?


Hi, nothing like that is currently implemented. I’ll make a note of this and see if we can implement something in the near future.

This has a filter you can apply to ignore transmitters by direction

Thanks for the reference SignalMedic. Reviewing the code, this looks like this basically a filtering proxy.
Have you used this successfully as a proxy between the Pi software and either the Kraken Android app or the Kraken Pro mapping service? Clearly the code is not that complicate and it would be best implemented on either the sending (Kraken Pi) or receiving (Kraken App or Kraken Pro Mapping Service). Hopefully Carl is tracking this conversation…


It is made to be used with the map application ATAK or iTAK and other TAK products.

So I have been looking over the code… It looks like the strongest bearing provided by the returned bearing here (as theta_0) from two locations depending on the algorithm in use.
doas is an array of signal strength sorted with strongest last. We would need a chunk of code in the _ui tree as well to allow us to select an arc (or arcs) to ignore.

Does this seem like a reasonable analysis of this code, and a plausible path for implementing this feature. There is probably some aspect I have missed, so feedback welcome.


diff --git a/_sdr/_signal_processing/kraken_sdr_signal_processor.py b/_sdr/_signal_processing/kraken_sdr_signal_processor.py
index edb550f..8877c88 100755
--- a/_sdr/_signal_processing/kraken_sdr_signal_processor.py
+++ b/_sdr/_signal_processing/kraken_sdr_signal_processor.py
@@ -1025,6 +1025,9 @@ class SignalProcessor(threading.Thread):
             # since roots are sorted based on how close they are to the unit circle,
             # which in turn is proportional to SNR,
             # then the last element should correspond to the strongest signal
+            #
+            # TODO(dpk): add filtering
+            # If filtering out part of circle, do that here by scanning back to the first value not in the filtered range.
             theta_0 = doas[-1]

         # ULA Array, choose bewteen the full omnidirecitonal 360 data, or forward/backward data only
@@ -1041,6 +1044,8 @@ class SignalProcessor(threading.Thread):
                 self.DOA[thetas[270:360].astype(int)] = min_val

         if self.DOA_algorithm != "ROOT-MUSIC":
+            # TODO(dpk): add filtering
+            # If filtering out part of circle, do that here by scanning back to the first value not in the filtered range.
             theta_0 = self.DOA_theta[np.argmax(self.DOA)]

         return theta_0

Yes you could simply set the data in the angles you wish to ignore as close to zero, so they have no effect on the mapper.

And yes you would need to implement code in the _ui tree to input the arcs you want.