Custom FIR kernels for Airspy.

This commit is contained in:
Alexandru Csete 2016-09-11 12:39:54 +02:00 committed by Dimitri Stolnikov
parent 6ea6c19028
commit 3823c8efce
2 changed files with 149 additions and 1 deletions

View File

@ -0,0 +1,101 @@
#pragma once
#define KERNEL_16_110_LEN 7
const float KERNEL_16_110[] =
{
-0.031835079193115234f,
0.000000000000000000f,
0.281831502914428710f,
0.500007271766662600f,
0.281831502914428710f,
0.000000000000000000f,
-0.031835079193115234f
};
#define KERNEL_8_100_LEN 11
const float KERNEL_8_100[] =
{
0.006633400917053223f,
0.000000000000000000f,
-0.051035523414611816f,
0.000000000000000000f,
0.294403314590454100f,
0.499997496604919430f,
0.294403314590454100f,
0.000000000000000000f,
-0.051035523414611816f,
0.000000000000000000f,
0.006633400917053223f
};
#define KERNEL_4_90_LEN 15
const float KERNEL_4_90[] =
{
-0.002474188804626465f,
0.000000000000000000f,
0.016965746879577637f,
0.000000000000000000f,
-0.067680597305297852f,
0.000000000000000000f,
0.303180575370788570f,
0.500017046928405760f,
0.303180575370788570f,
0.000000000000000000f,
-0.067680597305297852f,
0.000000000000000000f,
0.016965746879577637f,
0.000000000000000000f,
-0.002474188804626465f
};
#define KERNEL_2_80_LEN 47
const float KERNEL_2_80[KERNEL_2_80_LEN] =
{
-0.000198006629943848f,
0.000000000000000000f,
0.000576853752136230f,
0.000000000000000000f,
-0.001352190971374512f,
0.000000000000000000f,
0.002729177474975586f,
0.000000000000000000f,
-0.004988193511962891f,
0.000000000000000000f,
0.008499503135681152f,
0.000000000000000000f,
-0.013788580894470215f,
0.000000000000000000f,
0.021713137626647949f,
0.000000000000000000f,
-0.033980011940002441f,
0.000000000000000000f,
0.054944872856140137f,
0.000000000000000000f,
-0.100657463073730470f,
0.000000000000000000f,
0.316457390785217290f,
0.500000000000000000f,
0.316457390785217290f,
0.000000000000000000f,
-0.100657463073730470f,
0.000000000000000000f,
0.054944872856140137f,
0.000000000000000000f,
-0.033980011940002441f,
0.000000000000000000f,
0.021713137626647949f,
0.000000000000000000f,
-0.013788580894470215f,
0.000000000000000000f,
0.008499503135681152f,
0.000000000000000000f,
-0.004988193511962891f,
0.000000000000000000f,
0.002729177474975586f,
0.000000000000000000f,
-0.001352190971374512f,
0.000000000000000000f,
0.000576853752136230f,
0.000000000000000000f,
-0.000198006629943848f
};

View File

@ -40,6 +40,7 @@
#include <gnuradio/io_signature.h>
#include "airspy_source_c.h"
#include "airspy_fir_kernels.h"
#include "arg_helpers.h"
@ -638,12 +639,58 @@ std::string airspy_source_c::get_antenna( size_t chan )
double airspy_source_c::set_bandwidth( double bandwidth, size_t chan )
{
if (bandwidth == 0.f)
return get_bandwidth( chan );
{
int ret;
int decim;
int size;
const float *kernel;
decim = (int)(_sample_rate / bandwidth);
// if (decim < 2)
// {
// kernel = 0;
// size = 0;
// }
// else
if (decim < 4)
{
kernel = KERNEL_2_80;
size = KERNEL_2_80_LEN;
}
else if (decim < 8)
{
kernel = KERNEL_4_90;
size = KERNEL_4_90_LEN;
}
else if (decim < 16)
{
kernel = KERNEL_8_100;
size = KERNEL_8_100_LEN;
}
else
{
kernel = KERNEL_16_110;
size = KERNEL_16_110_LEN;
}
if (size)
{
std::cout << " Airspy decim:" << decim
<< " kernel size:" << size << std::endl;
ret = airspy_set_conversion_filter_float32(_dev, kernel, size);
AIRSPY_THROW_ON_ERROR(ret, "Failed to set IQ conversion filter")
}
}
return get_bandwidth( chan );
}
double airspy_source_c::get_bandwidth( size_t chan )
{
return 10e6;
return _sample_rate;
}
osmosdr::freq_range_t airspy_source_c::get_bandwidth_range( size_t chan )