[WIP] Using different filters

This commit is contained in:
Denny
2017-02-20 20:16:38 -05:00
parent 14b844f0bd
commit fd748fec79
3 changed files with 62 additions and 31 deletions

View File

@@ -19,6 +19,9 @@
package dsp.filter.channelizer;
import dsp.filter.FilterFactory;
import dsp.filter.design.FilterDesignException;
import dsp.filter.fir.FIRFilterSpecification;
import dsp.filter.fir.remez.RemezFIRFilterDesigner;
import dsp.mixer.LowPhaseNoiseOscillator;
import dsp.mixer.Oscillator;
import net.miginfocom.swing.MigLayout;
@@ -65,7 +68,7 @@ public class ChannelizerViewer extends JFrame
{
mChannelCount = channelCount;
mSampleRate = mChannelCount * CHANNEL_BANDWIDTH;
mToneFrequency = (int)(CHANNEL_BANDWIDTH * 3); //Set to channel 1 as default
mToneFrequency = (int)(CHANNEL_BANDWIDTH * 1); //Set to channel 1 as default
init();
}
@@ -143,7 +146,7 @@ public class ChannelizerViewer extends JFrame
int maximumFrequency = mSampleRate / 2;
SpinnerNumberModel model = new SpinnerNumberModel(mToneFrequency, -maximumFrequency, maximumFrequency,
500 );
100 );
model.addChangeListener(new ChangeListener()
{
@@ -186,9 +189,38 @@ public class ChannelizerViewer extends JFrame
int symbolCount = 14;
//Alpha is the residual channel bandwidth left over from the symbol rate and samples per symbol
float alpha = ((float)CHANNEL_BANDWIDTH / (float)(symbolRate * samplesPerSymbol)) - 1.0f;
// float alpha = ((float)CHANNEL_BANDWIDTH / (float)(symbolRate * samplesPerSymbol)) - 1.0f;
float alpha = 0.8f;
// float[] taps = FilterFactory.getRootRaisedCosine(samplesPerSymbol * mChannelCount, symbolCount, alpha);
float[] taps = null;
FIRFilterSpecification specification = FIRFilterSpecification.lowPassBuilder()
.sampleRate(CHANNEL_BANDWIDTH * 2 * mChannelCount)
.gridDensity(16)
.passBandAmplitude(1.0)
.passBandCutoff(11900)
.passBandRipple(0.01)
.stopBandAmplitude(0.0)
.stopBandRipple(0.001)
.stopBandStart(13100)
.build();
try
{
RemezFIRFilterDesigner designer = new RemezFIRFilterDesigner(specification);
if(designer.isValid())
{
taps = designer.getImpulseResponse();
}
}
catch(FilterDesignException fde)
{
mLog.error("Filter design error", fde);
}
float[] taps = FilterFactory.getRootRaisedCosine(samplesPerSymbol * mChannelCount, symbolCount, alpha);
StringBuilder sb = new StringBuilder();
sb.append("\nPolyphase Channelizer\n");
@@ -224,7 +256,7 @@ public class ChannelizerViewer extends JFrame
{
setLayout(new MigLayout("insets 0 0 0 0", "fill", "fill"));
int channelsPerRow = 32;
int channelsPerRow = 16;
for(int x = 0; x < mChannelCount; x++)
{
@@ -314,7 +346,7 @@ public class ChannelizerViewer extends JFrame
public static void main(String[] args)
{
int channelCount = 512;
int channelCount = 4;
final ChannelizerViewer frame = new ChannelizerViewer(channelCount);

View File

@@ -67,7 +67,7 @@ public class PolyphaseChannelizer2 implements Listener<ComplexBuffer>
public void filter(float inphase, float quadrature)
{
int index = mFilterPointer * 2;
int index = (mChannelCount - mFilterPointer - 1) * 2;
mFilteredSamples[index] = mInphaseFilters[mFilterPointer].filter(inphase);
mFilteredSamples[index + 1] = mQuadratureFilters[mFilterPointer].filter(quadrature);

View File

@@ -40,16 +40,16 @@ public class FilterViewer extends Application
*/
private float[] getFilter()
{
// FIRFilterSpecification specification = FIRFilterSpecification.lowPassBuilder()
// .sampleRate(4000)
// .gridDensity(16)
// .passBandCutoff(950)
// .passBandAmplitude(1.0)
// .passBandRipple(0.01)
// .stopBandStart(1050)
// .stopBandAmplitude(0.0)
// .stopBandRipple(0.005)
// .build();
FIRFilterSpecification specification = FIRFilterSpecification.lowPassBuilder()
.sampleRate(100000)
.gridDensity(16)
.passBandAmplitude(1.0)
.passBandCutoff(12000)
.passBandRipple(0.01)
.stopBandAmplitude(0.0)
.stopBandRipple(0.001)
.stopBandStart(13000)
.build();
// FIRFilterSpecification specification = FIRFilterSpecification.highPassBuilder()
// .sampleRate( 24000 )
@@ -75,21 +75,20 @@ public class FilterViewer extends Application
// taps = FilterFactory.getLowPass( 16000, 2400, 73, WindowType.HANNING );
taps = FilterFactory.getRootRaisedCosine(2 * 8, 16, (12500.0f / 9600.0f - 1.0f));
// try
// {
// RemezFIRFilterDesigner designer = new RemezFIRFilterDesigner(specification);
//
// if(designer.isValid())
// {
// taps = designer.getImpulseResponse();
// }
// }
// catch(FilterDesignException fde)
// {
// mLog.error("Filter design error", fde);
// }
try
{
RemezFIRFilterDesigner designer = new RemezFIRFilterDesigner(specification);
if(designer.isValid())
{
taps = designer.getImpulseResponse();
}
}
catch(FilterDesignException fde)
{
mLog.error("Filter design error", fde);
}
return taps;
}