summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Rondeau <tom@trondeau.com>2014-10-23 17:30:04 -0400
committerTom Rondeau <tom@trondeau.com>2014-10-23 17:30:04 -0400
commit6f1913bffaded16d05c475375d2048eb0432bfca (patch)
treed7af2e79519c3f31077b39857b5242fe58c264e8
parent88944c527ae56cc94fe530c53d5846714ab77b5c (diff)
qtgui: removing malloc/free in fft function; doing once in ctor and when fftsize changes, instead.
-rw-r--r--gr-qtgui/lib/freq_sink_c_impl.cc20
-rw-r--r--gr-qtgui/lib/freq_sink_c_impl.h3
-rw-r--r--gr-qtgui/lib/freq_sink_f_impl.cc19
-rw-r--r--gr-qtgui/lib/freq_sink_f_impl.h3
4 files changed, 31 insertions, 14 deletions
diff --git a/gr-qtgui/lib/freq_sink_c_impl.cc b/gr-qtgui/lib/freq_sink_c_impl.cc
index f4614e9390..e46b9db865 100644
--- a/gr-qtgui/lib/freq_sink_c_impl.cc
+++ b/gr-qtgui/lib/freq_sink_c_impl.cc
@@ -87,6 +87,11 @@ namespace gr {
volk_get_alignment());
memset(d_fbuf, 0, d_fftsize*sizeof(float));
+ d_tmpbuflen = (unsigned int)(floor(d_fftsize/2.0));
+ d_tmpbuf = (float*)volk_malloc(sizeof(float)*(d_tmpbuflen + 1),
+ volk_get_alignment());
+
+
d_index = 0;
for(int i = 0; i < d_nconnections; i++) {
d_residbufs.push_back((gr_complex*)volk_malloc(d_fftsize*sizeof(gr_complex),
@@ -116,6 +121,7 @@ namespace gr {
}
delete d_fft;
volk_free(d_fbuf);
+ volk_free(d_tmpbuf);
delete d_argv;
}
@@ -432,12 +438,9 @@ namespace gr {
size, 1.0, size);
// Perform shift operation
- unsigned int len = (unsigned int)(floor(size/2.0));
- float *tmp = (float*)malloc(sizeof(float)*(len + 1));
- memcpy(tmp, &data_out[0], sizeof(float)*(len + 1));
- memcpy(&data_out[0], &data_out[size - len], sizeof(float)*(len));
- memcpy(&data_out[len], tmp, sizeof(float)*(len + 1));
- free(tmp);
+ memcpy(d_tmpbuf, &data_out[0], sizeof(float)*(d_tmpbuflen + 1));
+ memcpy(&data_out[0], &data_out[size - d_tmpbuflen], sizeof(float)*(d_tmpbuflen));
+ memcpy(&data_out[d_tmpbuflen], d_tmpbuf, sizeof(float)*(d_tmpbuflen + 1));
}
bool
@@ -504,6 +507,11 @@ namespace gr {
volk_get_alignment());
memset(d_fbuf, 0, d_fftsize*sizeof(float));
+ volk_free(d_tmpbuf);
+ d_tmpbuflen = (unsigned int)(floor(d_fftsize/2.0));
+ d_tmpbuf = (float*)volk_malloc(sizeof(float)*(d_tmpbuflen + 1),
+ volk_get_alignment());
+
d_last_time = 0;
set_output_multiple(d_fftsize);
diff --git a/gr-qtgui/lib/freq_sink_c_impl.h b/gr-qtgui/lib/freq_sink_c_impl.h
index dc83f96098..b5f9cd3d4d 100644
--- a/gr-qtgui/lib/freq_sink_c_impl.h
+++ b/gr-qtgui/lib/freq_sink_c_impl.h
@@ -38,7 +38,7 @@ namespace gr {
void initialize();
int d_fftsize;
- int d_outputsize;
+ int d_tmpbuflen;
float d_fftavg;
filter::firdes::win_type d_wintype;
std::vector<float> d_window;
@@ -54,6 +54,7 @@ namespace gr {
std::vector<gr_complex*> d_residbufs;
std::vector<double*> d_magbufs;
float *d_fbuf;
+ float *d_tmpbuf;
int d_argc;
char *d_argv;
diff --git a/gr-qtgui/lib/freq_sink_f_impl.cc b/gr-qtgui/lib/freq_sink_f_impl.cc
index 14c8ff403a..200b009d79 100644
--- a/gr-qtgui/lib/freq_sink_f_impl.cc
+++ b/gr-qtgui/lib/freq_sink_f_impl.cc
@@ -87,6 +87,10 @@ namespace gr {
volk_get_alignment());
memset(d_fbuf, 0, d_fftsize*sizeof(float));
+ d_tmpbuflen = (unsigned int)(floor(d_fftsize/2.0));
+ d_tmpbuf = (float*)volk_malloc(sizeof(float)*(d_tmpbuflen + 1),
+ volk_get_alignment());
+
d_index = 0;
for(int i = 0; i < d_nconnections; i++) {
d_residbufs.push_back((float*)volk_malloc(d_fftsize*sizeof(float),
@@ -116,6 +120,7 @@ namespace gr {
}
delete d_fft;
volk_free(d_fbuf);
+ volk_free(d_tmpbuf);
delete d_argv;
}
@@ -438,12 +443,9 @@ namespace gr {
size, 1.0, size);
// Perform shift operation
- unsigned int len = (unsigned int)(floor(size/2.0));
- float *tmp = (float*)malloc(sizeof(float)*(len + 1));
- memcpy(tmp, &data_out[0], sizeof(float)*(len + 1));
- memcpy(&data_out[0], &data_out[size - len], sizeof(float)*len);
- memcpy(&data_out[len], tmp, sizeof(float)*(len + 1));
- free(tmp);
+ memcpy(d_tmpbuf, &data_out[0], sizeof(float)*(d_tmpbuflen + 1));
+ memcpy(&data_out[0], &data_out[size - d_tmpbuflen], sizeof(float)*d_tmpbuflen);
+ memcpy(&data_out[d_tmpbuflen], d_tmpbuf, sizeof(float)*(d_tmpbuflen + 1));
}
bool
@@ -510,6 +512,11 @@ namespace gr {
volk_get_alignment());
memset(d_fbuf, 0, d_fftsize*sizeof(float));
+ volk_free(d_tmpbuf);
+ d_tmpbuflen = (unsigned int)(floor(d_fftsize/2.0));
+ d_tmpbuf = (float*)volk_malloc(sizeof(float)*(d_tmpbuflen + 1),
+ volk_get_alignment());
+
d_last_time = 0;
set_output_multiple(d_fftsize);
diff --git a/gr-qtgui/lib/freq_sink_f_impl.h b/gr-qtgui/lib/freq_sink_f_impl.h
index 2794942c44..1463699319 100644
--- a/gr-qtgui/lib/freq_sink_f_impl.h
+++ b/gr-qtgui/lib/freq_sink_f_impl.h
@@ -38,7 +38,7 @@ namespace gr {
void initialize();
int d_fftsize;
- int d_outputsize;
+ int d_tmpbuflen;
float d_fftavg;
filter::firdes::win_type d_wintype;
std::vector<float> d_window;
@@ -54,6 +54,7 @@ namespace gr {
std::vector<float*> d_residbufs;
std::vector<double*> d_magbufs;
float *d_fbuf;
+ float *d_tmpbuf;
int d_argc;
char *d_argv;