From 9e275b7d6206ff415ac17d5a32f404ce8379e8ef Mon Sep 17 00:00:00 2001 From: Denny Date: Sat, 2 Sep 2017 06:55:58 -0400 Subject: [PATCH] WIP --- .../AbstractComplexPolyphaseChannelizer.java | 4 +--- .../ComplexPolyphaseChannelizerM2.java | 2 +- .../channelizer/PolyphaseChannelSource.java | 8 +++---- .../IPolyphaseChannelOutputProcessor.java | 4 ++-- .../output/SingleChannelOutputProcessor.java | 12 +++++----- .../complex/IComplexSampleListener.java | 24 +++++++++++++++++++ 6 files changed, 38 insertions(+), 16 deletions(-) create mode 100644 src/sample/complex/IComplexSampleListener.java diff --git a/src/dsp/filter/channelizer/AbstractComplexPolyphaseChannelizer.java b/src/dsp/filter/channelizer/AbstractComplexPolyphaseChannelizer.java index 273bf23e..fc7a0f06 100644 --- a/src/dsp/filter/channelizer/AbstractComplexPolyphaseChannelizer.java +++ b/src/dsp/filter/channelizer/AbstractComplexPolyphaseChannelizer.java @@ -92,11 +92,9 @@ public abstract class AbstractComplexPolyphaseChannelizer implements Listener mComplexChannelBuffers; + private OverflowableTransferQueue mComplexChannelBuffers; public ChannelBufferProcessor() { @@ -220,7 +220,7 @@ public class PolyphaseChannelSource extends ComplexChannelSource * * @param channelsBuffer to enqueue for processing */ - public void process(ComplexBuffer channelsBuffer) + public void process(float[] channelsBuffer) { mComplexChannelBuffers.offer(channelsBuffer); } @@ -230,7 +230,7 @@ public class PolyphaseChannelSource extends ComplexChannelSource { try { - +//TODO: implement distribution to each channel } catch(Throwable throwable) { diff --git a/src/dsp/filter/channelizer/output/IPolyphaseChannelOutputProcessor.java b/src/dsp/filter/channelizer/output/IPolyphaseChannelOutputProcessor.java index f1d1cd9f..64f911f8 100644 --- a/src/dsp/filter/channelizer/output/IPolyphaseChannelOutputProcessor.java +++ b/src/dsp/filter/channelizer/output/IPolyphaseChannelOutputProcessor.java @@ -25,10 +25,10 @@ public interface IPolyphaseChannelOutputProcessor /** * Process the channel output channel results from the polyphase channelizer filter * - * @param channelResults to process + * @param channels to process * @param listener to receive the processed channel results */ - void process(float[] channelResults, IComplexSampleListener listener); + void process(float[] channels, IComplexSampleListener listener); /** * Specifies the positive or negative frequency correction that should be applied to samples extracted from diff --git a/src/dsp/filter/channelizer/output/SingleChannelOutputProcessor.java b/src/dsp/filter/channelizer/output/SingleChannelOutputProcessor.java index c0e8eec5..a3713158 100644 --- a/src/dsp/filter/channelizer/output/SingleChannelOutputProcessor.java +++ b/src/dsp/filter/channelizer/output/SingleChannelOutputProcessor.java @@ -64,30 +64,30 @@ public class SingleChannelOutputProcessor implements IPolyphaseChannelOutputProc * Extracts the channel from the channel results array, applies frequency translation, and delivers the * extracted frequency-translated channel sample to the complex sample listener. * - * @param channelResults to process containing an array of channel I/Q sample pairs (I0,Q0,I1,Q1...In,Qn) + * @param channels to process containing an array of channel I/Q sample pairs (I0,Q0,I1,Q1...In,Qn) * @param listener to receive the extracted, frequency-translated channel results */ @Override - public void process(float[] channelResults, IComplexSampleListener listener) + public void process(float[] channels, IComplexSampleListener listener) { - if(channelResults.length >= (mChannelOffset + 1)) + if(channels.length >= (mChannelOffset + 1)) { //Only perform frequency translation if the frequency correction mixer has a non-zero frequency value if(mFrequencyCorrectionMixer.isEnabled()) { mFrequencyCorrectionMixer.rotate(); - float i = Complex.multiplyInphase(channelResults[mChannelOffset], channelResults[mChannelOffset + 1], + float i = Complex.multiplyInphase(channels[mChannelOffset], channels[mChannelOffset + 1], mFrequencyCorrectionMixer.inphase(), mFrequencyCorrectionMixer.quadrature()); - float q = Complex.multiplyQuadrature(channelResults[mChannelOffset], channelResults[mChannelOffset + 1], + float q = Complex.multiplyQuadrature(channels[mChannelOffset], channels[mChannelOffset + 1], mFrequencyCorrectionMixer.inphase(), mFrequencyCorrectionMixer.quadrature()); listener.receive(i, q); } else { - listener.receive(channelResults[mChannelOffset], channelResults[mChannelOffset + 1]); + listener.receive(channels[mChannelOffset], channels[mChannelOffset + 1]); } } } diff --git a/src/sample/complex/IComplexSampleListener.java b/src/sample/complex/IComplexSampleListener.java new file mode 100644 index 00000000..8f783c45 --- /dev/null +++ b/src/sample/complex/IComplexSampleListener.java @@ -0,0 +1,24 @@ +/******************************************************************************* + * sdrtrunk + * Copyright (C) 2014-2017 Dennis Sheirer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + * + ******************************************************************************/ +package sample.complex; + +public interface IComplexSampleListener +{ + public void receive(float i, float q); +}