#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <gnuradio/io_signature.h>
#include "music_cf_impl.h"
#include <Eigen/Dense>
#include <math.h>
#include <cmath>
#include <vector>
using Eigen::VectorXf;
using std::complex;
using namespace std;
namespace gr {
namespace aoa {
music_cf::sptr
music_cf::make(float fc, float threshold, int vlen)
{
return gnuradio::get_initial_sptr
(new music_cf_impl(fc, threshold, vlen));
}
/*
* The private constructor
*/
music_cf_impl::music_cf_impl(float fc, float threshold, int vlen)
: gr::sync_decimator("music_cf",
gr::io_signature::make(4, 4, sizeof(gr_complex)),
gr::io_signature::make(1, 1, sizeof(float)*vlen), 1000),
d_fc(fc),
d_threshold(threshold),
d_vlen(vlen)
{
}
/*
* Our virtual destructor.
*/
music_cf_impl::~music_cf_impl()
{
}
int
music_cf_impl::work(int noutput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items)
{
const gr_complex *in0 = (const gr_complex *) input_items[0];
const gr_complex *in1 = (const gr_complex *) input_items[1];
const gr_complex *in2 = (const gr_complex *) input_items[2];
const gr_complex *in3 = (const gr_complex *) input_items[3];
float *out = (float *) output_items[0];
VectorXf Zf(d_vlen); // Float vector of length d_vlen from Eigen3 library
// calculations to fill Zf with data not posted here
float out_vector [d_vlen];
for(int n=0; n<d_vlen; n++)
{
if(isnan(Zf(n)))
{
out_vector[n] = 0;
cout << "isNaN" << endl;
}
else
{
out_vector[n] = Zf(n);
}
}
memcpy(out, out_vector, d_vlen*sizeof(float));
// Tell runtime system how many output items we produced.
return 1;
}
} /* namespace aoa */
} /* namespace gr */
Dear all,
I built an angle-of-arrival system using four Ettus USRP2. I'm facing a
problem when trying to display a vector containing the calculated
MUSIC-Spectrum using a "QT GUI Vector Sink". The vector sink won't
display any data for the first two minutes, and then it is starting to
show very old values. When I use the block "Vector to Stream" and a
simple "QT GUI Time Sink" instead, the values are displayed immediately
without delay.
The block "music_cf" feeding the vector sink is a sync_decimator,
generating one vector of 181 elements for every 1000 input samples. I've
provided a shortened version of my c++ code in the attachment, without
the actual mathematics.
What could be the reason for this huge delay when using the "QT GUI
Vector Sink"? Is it a buffering problem?
Best regards,
Simon
Block Diagram:
http://fs1.directupload.net/images/150903/7cnqbzup.png
No comments:
Post a Comment