summaryrefslogtreecommitdiff
path: root/gr-fft/lib
diff options
context:
space:
mode:
authorDoug Geiger <doug.geiger@bioradiation.net>2015-09-17 12:32:24 -0400
committerDoug Geiger <doug.geiger@bioradiation.net>2015-09-17 15:37:44 -0400
commitfacb1e1500aecbf01654b228ad8a15511f5d3eae (patch)
tree517937e3008f208182e7ec3a9675bd17f6cfa38b /gr-fft/lib
parent8e19986cd122d1b380e3d97b4ffc50540670525b (diff)
Tabs -> spaces
Diffstat (limited to 'gr-fft/lib')
-rw-r--r--gr-fft/lib/fft.cc122
-rw-r--r--gr-fft/lib/fft_vcc_fftw.cc114
-rw-r--r--gr-fft/lib/fft_vcc_fftw.h8
3 files changed, 126 insertions, 118 deletions
diff --git a/gr-fft/lib/fft.cc b/gr-fft/lib/fft.cc
index 18e54f065f..729600cb1c 100644
--- a/gr-fft/lib/fft.cc
+++ b/gr-fft/lib/fft.cc
@@ -96,11 +96,11 @@ namespace gr {
const char *filename = wisdom_filename ();
FILE *fp = fopen (filename, "r");
if (fp != 0){
- int r = fftwf_import_wisdom_from_file (fp);
- fclose (fp);
- if (!r){
- fprintf (stderr, "gr::fft: can't import wisdom from %s\n", filename);
- }
+ int r = fftwf_import_wisdom_from_file (fp);
+ fclose (fp);
+ if (!r){
+ fprintf (stderr, "gr::fft: can't import wisdom from %s\n", filename);
+ }
}
}
@@ -111,10 +111,10 @@ namespace gr {
#ifdef FFTW3F_THREADS
if (fftw_threads_inited == 0)
- {
- fftw_threads_inited = 1;
- fftwf_init_threads();
- }
+ {
+ fftw_threads_inited = 1;
+ fftwf_init_threads();
+ }
fftwf_plan_with_nthreads(nthreads);
#endif
@@ -126,12 +126,12 @@ namespace gr {
const char *filename = wisdom_filename ();
FILE *fp = fopen (filename, "w");
if (fp != 0){
- fftwf_export_wisdom_to_file (fp);
- fclose (fp);
+ fftwf_export_wisdom_to_file (fp);
+ fclose (fp);
}
else {
- fprintf (stderr, "fft_impl_fftw: ");
- perror (filename);
+ fprintf (stderr, "fft_impl_fftw: ");
+ perror (filename);
}
}
@@ -144,18 +144,19 @@ namespace gr {
assert (sizeof (fftwf_complex) == sizeof (gr_complex));
- if (fft_size <= 0)
- throw std::out_of_range ("fft_impl_fftw: invalid fft_size");
+ if (fft_size <= 0){
+ throw std::out_of_range ("fft_impl_fftw: invalid fft_size");
+ }
d_fft_size = fft_size;
d_inbuf = (gr_complex *) fftwf_malloc (sizeof (gr_complex) * inbuf_length ());
- if (d_inbuf == 0)
- throw std::runtime_error ("fftwf_malloc");
-
+ if (d_inbuf == 0) {
+ throw std::runtime_error ("fftwf_malloc");
+ }
d_outbuf = (gr_complex *) fftwf_malloc (sizeof (gr_complex) * outbuf_length ());
- if (d_outbuf == 0){
- fftwf_free (d_inbuf);
- throw std::runtime_error ("fftwf_malloc");
+ if (d_outbuf == 0) {
+ fftwf_free (d_inbuf);
+ throw std::runtime_error ("fftwf_malloc");
}
d_nthreads = nthreads;
@@ -163,14 +164,14 @@ namespace gr {
import_wisdom(); // load prior wisdom from disk
d_plan = fftwf_plan_dft_1d (fft_size,
- reinterpret_cast<fftwf_complex *>(d_inbuf),
- reinterpret_cast<fftwf_complex *>(d_outbuf),
- forward ? FFTW_FORWARD : FFTW_BACKWARD,
- FFTW_MEASURE);
+ reinterpret_cast<fftwf_complex *>(d_inbuf),
+ reinterpret_cast<fftwf_complex *>(d_outbuf),
+ forward ? FFTW_FORWARD : FFTW_BACKWARD,
+ FFTW_MEASURE);
if (d_plan == NULL) {
- fprintf(stderr, "gr::fft: error creating plan\n");
- throw std::runtime_error ("fftwf_plan_dft_1d failed");
+ fprintf(stderr, "gr::fft: error creating plan\n");
+ throw std::runtime_error ("fftwf_plan_dft_1d failed");
}
export_wisdom(); // store new wisdom to disk
}
@@ -188,8 +189,9 @@ namespace gr {
void
fft_complex::set_nthreads(int n)
{
- if (n <= 0)
- throw std::out_of_range ("gr::fft: invalid number of threads");
+ if (n <= 0) {
+ throw std::out_of_range ("gr::fft: invalid number of threads");
+ }
d_nthreads = n;
#ifdef FFTW3F_THREADS
@@ -212,18 +214,20 @@ namespace gr {
assert (sizeof (fftwf_complex) == sizeof (gr_complex));
- if (fft_size <= 0)
- throw std::out_of_range ("gr::fft: invalid fft_size");
+ if (fft_size <= 0) {
+ throw std::out_of_range ("gr::fft: invalid fft_size");
+ }
d_fft_size = fft_size;
d_inbuf = (float *) fftwf_malloc (sizeof (float) * inbuf_length ());
- if (d_inbuf == 0)
- throw std::runtime_error ("fftwf_malloc");
+ if (d_inbuf == 0) {
+ throw std::runtime_error ("fftwf_malloc");
+ }
d_outbuf = (gr_complex *) fftwf_malloc (sizeof (gr_complex) * outbuf_length ());
- if (d_outbuf == 0){
- fftwf_free (d_inbuf);
- throw std::runtime_error ("fftwf_malloc");
+ if (d_outbuf == 0) {
+ fftwf_free (d_inbuf);
+ throw std::runtime_error ("fftwf_malloc");
}
d_nthreads = nthreads;
@@ -231,13 +235,13 @@ namespace gr {
import_wisdom(); // load prior wisdom from disk
d_plan = fftwf_plan_dft_r2c_1d (fft_size,
- d_inbuf,
- reinterpret_cast<fftwf_complex *>(d_outbuf),
- FFTW_MEASURE);
+ d_inbuf,
+ reinterpret_cast<fftwf_complex *>(d_outbuf),
+ FFTW_MEASURE);
if (d_plan == NULL) {
- fprintf(stderr, "gr::fft::fft_real_fwd: error creating plan\n");
- throw std::runtime_error ("fftwf_plan_dft_r2c_1d failed");
+ fprintf(stderr, "gr::fft::fft_real_fwd: error creating plan\n");
+ throw std::runtime_error ("fftwf_plan_dft_r2c_1d failed");
}
export_wisdom(); // store new wisdom to disk
}
@@ -255,8 +259,9 @@ namespace gr {
void
fft_real_fwd::set_nthreads(int n)
{
- if (n <= 0)
- throw std::out_of_range ("gr::fft::fft_real_fwd::set_nthreads: invalid number of threads");
+ if (n <= 0) {
+ throw std::out_of_range ("gr::fft::fft_real_fwd::set_nthreads: invalid number of threads");
+ }
d_nthreads = n;
#ifdef FFTW3F_THREADS
@@ -279,18 +284,20 @@ namespace gr {
assert (sizeof (fftwf_complex) == sizeof (gr_complex));
- if (fft_size <= 0)
- throw std::out_of_range ("gr::fft::fft_real_rev: invalid fft_size");
+ if (fft_size <= 0) {
+ throw std::out_of_range ("gr::fft::fft_real_rev: invalid fft_size");
+ }
d_fft_size = fft_size;
d_inbuf = (gr_complex *) fftwf_malloc (sizeof (gr_complex) * inbuf_length ());
- if (d_inbuf == 0)
- throw std::runtime_error ("fftwf_malloc");
+ if (d_inbuf == 0) {
+ throw std::runtime_error ("fftwf_malloc");
+ }
d_outbuf = (float *) fftwf_malloc (sizeof (float) * outbuf_length ());
- if (d_outbuf == 0){
- fftwf_free (d_inbuf);
- throw std::runtime_error ("fftwf_malloc");
+ if (d_outbuf == 0) {
+ fftwf_free (d_inbuf);
+ throw std::runtime_error ("fftwf_malloc");
}
d_nthreads = nthreads;
@@ -301,13 +308,13 @@ namespace gr {
// will be called in multiple threads, we've got to ensure single
// threaded access. They are not thread-safe.
d_plan = fftwf_plan_dft_c2r_1d (fft_size,
- reinterpret_cast<fftwf_complex *>(d_inbuf),
- d_outbuf,
- FFTW_MEASURE);
+ reinterpret_cast<fftwf_complex *>(d_inbuf),
+ d_outbuf,
+ FFTW_MEASURE);
if (d_plan == NULL) {
- fprintf(stderr, "gr::fft::fft_real_rev: error creating plan\n");
- throw std::runtime_error ("fftwf_plan_dft_c2r_1d failed");
+ fprintf(stderr, "gr::fft::fft_real_rev: error creating plan\n");
+ throw std::runtime_error ("fftwf_plan_dft_c2r_1d failed");
}
export_wisdom (); // store new wisdom to disk
}
@@ -325,8 +332,9 @@ namespace gr {
void
fft_real_rev::set_nthreads(int n)
{
- if (n <= 0)
- throw std::out_of_range ("gr::fft::fft_real_rev::set_nthreads: invalid number of threads");
+ if (n <= 0) {
+ throw std::out_of_range ("gr::fft::fft_real_rev::set_nthreads: invalid number of threads");
+ }
d_nthreads = n;
#ifdef FFTW3F_THREADS
diff --git a/gr-fft/lib/fft_vcc_fftw.cc b/gr-fft/lib/fft_vcc_fftw.cc
index 778042ebf0..18ba56e1c1 100644
--- a/gr-fft/lib/fft_vcc_fftw.cc
+++ b/gr-fft/lib/fft_vcc_fftw.cc
@@ -33,21 +33,21 @@ namespace gr {
namespace fft {
fft_vcc::sptr fft_vcc::make(int fft_size, bool forward,
- const std::vector<float> &window,
- bool shift, int nthreads)
+ const std::vector<float> &window,
+ bool shift, int nthreads)
{
return gnuradio::get_initial_sptr(new fft_vcc_fftw
- (fft_size, forward, window,
- shift, nthreads));
+ (fft_size, forward, window,
+ shift, nthreads));
}
fft_vcc_fftw::fft_vcc_fftw(int fft_size, bool forward,
- const std::vector<float> &window,
- bool shift, int nthreads)
+ const std::vector<float> &window,
+ bool shift, int nthreads)
: sync_block("fft_vcc_fftw",
- io_signature::make(1, 1, fft_size * sizeof(gr_complex)),
- io_signature::make(1, 1, fft_size * sizeof(gr_complex))),
- d_fft_size(fft_size), d_forward(forward), d_shift(shift)
+ io_signature::make(1, 1, fft_size * sizeof(gr_complex)),
+ io_signature::make(1, 1, fft_size * sizeof(gr_complex))),
+ d_fft_size(fft_size), d_forward(forward), d_shift(shift)
{
d_fft = new fft_complex(d_fft_size, forward, nthreads);
if(!set_window(window))
@@ -75,17 +75,17 @@ namespace gr {
fft_vcc_fftw::set_window(const std::vector<float> &window)
{
if(window.size()==0 || window.size()==d_fft_size) {
- d_window=window;
- return true;
+ d_window=window;
+ return true;
}
else
- return false;
+ return false;
}
int
fft_vcc_fftw::work(int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items)
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
{
const gr_complex *in = (const gr_complex *) input_items[0];
gr_complex *out = (gr_complex *) output_items[0];
@@ -97,49 +97,49 @@ namespace gr {
while(count++ < noutput_items) {
- // copy input into optimally aligned buffer
- if(d_window.size()) {
- gr_complex *dst = d_fft->get_inbuf();
- if(!d_forward && d_shift) {
- unsigned int offset = (!d_forward && d_shift)?(d_fft_size/2):0;
- int fft_m_offset = d_fft_size - offset;
- for(unsigned int i = 0; i < offset; i++) // apply window
- dst[i+fft_m_offset] = in[i] * d_window[i];
- for(unsigned int i = offset; i < d_fft_size; i++) // apply window
- dst[i-offset] = in[i] * d_window[i];
- }
- else {
- for(unsigned int i = 0; i < d_fft_size; i++) // apply window
- dst[i] = in[i] * d_window[i];
- }
- }
- else {
- if(!d_forward && d_shift) { // apply an ifft shift on the data
- gr_complex *dst = d_fft->get_inbuf();
- unsigned int len = (unsigned int)(floor(d_fft_size/2.0)); // half length of complex array
- memcpy(&dst[0], &in[len], sizeof(gr_complex)*(d_fft_size - len));
- memcpy(&dst[d_fft_size - len], &in[0], sizeof(gr_complex)*len);
- }
- else {
- memcpy(d_fft->get_inbuf(), in, input_data_size);
- }
- }
-
- // compute the fft
- d_fft->execute();
-
- // copy result to our output
- if(d_forward && d_shift) { // apply a fft shift on the data
- unsigned int len = (unsigned int)(ceil(d_fft_size/2.0));
- memcpy(&out[0], &d_fft->get_outbuf()[len], sizeof(gr_complex)*(d_fft_size - len));
- memcpy(&out[d_fft_size - len], &d_fft->get_outbuf()[0], sizeof(gr_complex)*len);
- }
- else {
- memcpy (out, d_fft->get_outbuf (), output_data_size);
- }
-
- in += d_fft_size;
- out += d_fft_size;
+ // copy input into optimally aligned buffer
+ if(d_window.size()) {
+ gr_complex *dst = d_fft->get_inbuf();
+ if(!d_forward && d_shift) {
+ unsigned int offset = (!d_forward && d_shift)?(d_fft_size/2):0;
+ int fft_m_offset = d_fft_size - offset;
+ for(unsigned int i = 0; i < offset; i++) // apply window
+ dst[i+fft_m_offset] = in[i] * d_window[i];
+ for(unsigned int i = offset; i < d_fft_size; i++) // apply window
+ dst[i-offset] = in[i] * d_window[i];
+ }
+ else {
+ for(unsigned int i = 0; i < d_fft_size; i++) // apply window
+ dst[i] = in[i] * d_window[i];
+ }
+ }
+ else {
+ if(!d_forward && d_shift) { // apply an ifft shift on the data
+ gr_complex *dst = d_fft->get_inbuf();
+ unsigned int len = (unsigned int)(floor(d_fft_size/2.0)); // half length of complex array
+ memcpy(&dst[0], &in[len], sizeof(gr_complex)*(d_fft_size - len));
+ memcpy(&dst[d_fft_size - len], &in[0], sizeof(gr_complex)*len);
+ }
+ else {
+ memcpy(d_fft->get_inbuf(), in, input_data_size);
+ }
+ }
+
+ // compute the fft
+ d_fft->execute();
+
+ // copy result to our output
+ if(d_forward && d_shift) { // apply a fft shift on the data
+ unsigned int len = (unsigned int)(ceil(d_fft_size/2.0));
+ memcpy(&out[0], &d_fft->get_outbuf()[len], sizeof(gr_complex)*(d_fft_size - len));
+ memcpy(&out[d_fft_size - len], &d_fft->get_outbuf()[0], sizeof(gr_complex)*len);
+ }
+ else {
+ memcpy (out, d_fft->get_outbuf (), output_data_size);
+ }
+
+ in += d_fft_size;
+ out += d_fft_size;
}
return noutput_items;
diff --git a/gr-fft/lib/fft_vcc_fftw.h b/gr-fft/lib/fft_vcc_fftw.h
index 951602031c..375bb62a35 100644
--- a/gr-fft/lib/fft_vcc_fftw.h
+++ b/gr-fft/lib/fft_vcc_fftw.h
@@ -40,8 +40,8 @@ namespace gr {
public:
fft_vcc_fftw(int fft_size, bool forward,
- const std::vector<float> &window,
- bool shift, int nthreads=1);
+ const std::vector<float> &window,
+ bool shift, int nthreads=1);
~fft_vcc_fftw();
@@ -50,8 +50,8 @@ namespace gr {
bool set_window(const std::vector<float> &window);
int work(int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items);
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
};
} /* namespace fft */