From ca8406bdc0d7161753f8a9f2b6073a43b268a1af Mon Sep 17 00:00:00 2001 From: denny Date: Fri, 26 Feb 2016 06:35:03 -0500 Subject: [PATCH] Resolves #58 - DFT processor sample queue may fill up over time causing the spectral display to be slow to reflect changes to tuner settings. Changed the max size of the sample queue based on the highest rate tuner sample rate 10 MHz (airspy) and the lowest available spectral update frame rate (12). Sized the buffer queue based on the maximum number of buffers that should be available per DFT processing iteration. If the queue backs up, new buffers will be discarded until the DFT processor consumes the queue and catches up. --- src/spectrum/DFTProcessor.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/spectrum/DFTProcessor.java b/src/spectrum/DFTProcessor.java index ef9b745f..70c0c8a3 100644 --- a/src/spectrum/DFTProcessor.java +++ b/src/spectrum/DFTProcessor.java @@ -20,6 +20,7 @@ package spectrum; import java.util.Arrays; import java.util.Iterator; import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.BlockingQueue; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; @@ -56,8 +57,12 @@ public class DFTProcessor implements Listener, private CopyOnWriteArrayList mListeners = new CopyOnWriteArrayList(); - private ArrayBlockingQueue mQueue = - new ArrayBlockingQueue( 200 ); + //Fixed size sample queue. We set the size at 12 based on the highest + //sample rate tuner (10 MHz) producing 153 frames per second and the lowest + //DFT processing frame rate of 12 frames per second. This means that the + //maximum size needed is 153 / 12 = 11 frames per DFT processing iteration + //so we set it at 12. + private BlockingQueue mQueue = new ArrayBlockingQueue<>( 12 ); private ScheduledExecutorService mScheduler = Executors .newScheduledThreadPool( 1, new NamingThreadFactory( "spectrum dft" ) );