diff options
author | Tom Rondeau <tom@trondeau.com> | 2014-10-23 17:30:04 -0400 |
---|---|---|
committer | Tom Rondeau <tom@trondeau.com> | 2014-10-23 17:30:04 -0400 |
commit | 6f1913bffaded16d05c475375d2048eb0432bfca (patch) | |
tree | d7af2e79519c3f31077b39857b5242fe58c264e8 | |
parent | 88944c527ae56cc94fe530c53d5846714ab77b5c (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.cc | 20 | ||||
-rw-r--r-- | gr-qtgui/lib/freq_sink_c_impl.h | 3 | ||||
-rw-r--r-- | gr-qtgui/lib/freq_sink_f_impl.cc | 19 | ||||
-rw-r--r-- | gr-qtgui/lib/freq_sink_f_impl.h | 3 |
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; |