There's already blocks that do energy calculation, so you really don't have to implement this yourself. In fact, I wrote a short answer on a similar question just yesterday. The question there was how to add a method "get_bandpower" to a C++ block, so here's the excerpt from http://stackoverflow.com/a/33901845/4433386 where I explained other ways than implementing this yourself:
> Other than that, there's already blocks that can do what you want: > > three ways to probe signal <http://i.stack.imgur.com/jdwd6.png> > > * *Probe Avg Mag²*: has a method |level()| which does the same as > your |get_bandpower| (aside from the √(.) ) > * *Complex to Mag* ⟶ *Decimating FIR Filter* ⟶ *Probe Signal*: does > the √(Re²+Im²), before passing it on to a filter with 123 (that > was just my arbitrary fixed length) taps of 1/length, and > decimating it to one value every average. Result get send to the > Signal Probe, which has a |signal()| method, which does what your > |get_bandpower| does. CPU load of this is relatively small -- it's > really just the magnitude finding for every sample, and then 123 > real multiplications + 123 real additions per 123 samples,in the > filter, all SIMD increased, so basically, less than 1 FMAC per sample. > * *Complex to Mag* ⟶ *Moving Average* ⟶ *Probe Signal*: Names say it > all. Nothing magical here. > Best regards, Marcus On 25.11.2015 16:19, Yan Huang wrote: > > Hi Marcus, > > > > I have followed the URL you recommended, but I want to use gnuradio > to do energy detection , so I follow the howto infrastructure and want > to learn more about it by building a new block. Is there any > suggestion about how to make anergy detection? > > > > Thanks, > > > > Yan > > > > *From:*[email protected] > [mailto:[email protected]] *On > Behalf Of *Marcus Müller > *Sent:* 25 November 2015 15:10 > *To:* [email protected] > *Subject:* Re: [Discuss-gnuradio] error while making detector > > > > Hi Yan, > > which tutorial exactly where you following (URL)? > I recommend using the Guided Tutorials for beginners; they are much > better illustrated, and they don't need the sometimes broken howto > infrastructure. > https://gnuradio.org/redmine/projects/gnuradio/wiki/Guided_Tutorials > > Best regards, > Marcus > > On 25.11.2015 15:45, Yan Huang wrote: > > Hey, > > I’m a new to use gnuradio and USRP B210, now I want to generate my > OOT module start with the example ‘howto_detect’, and I followed > guided tutorial in gnuradio.org. But there are still some problems > as follows. > > > > [ 6%] Building CXX object > lib/CMakeFiles/gnuradio-howto.dir/howto_detect_ff_impl.cc.o > /home/mint/Documents/gr-howto/lib/howto_detect_ff_impl.cc:32:5: > error: prototype for ‘gr::howto::howto_detect_ff::sptr > gr::howto::howto_detect_ff::make(float, int, int)’ does not match > any in class ‘gr::howto::howto_detect_ff’ > howto_detect_ff::make(float pfa, int L, int samples) > ^ > In file included from > /home/mint/Documents/gr-howto/lib/howto_detect_ff_impl.h:24:0, > from > /home/mint/Documents/gr-howto/lib/howto_detect_ff_impl.cc:26: > /home/mint/Documents/gr-howto/include/howto/howto_detect_ff.h:49:19: > error: candidate is: static gr::howto::howto_detect_ff::sptr > gr::howto::howto_detect_ff::make() > static sptr make(); > ^ > /home/mint/Documents/gr-howto/lib/howto_detect_ff_impl.cc: In > constructor > ‘gr::howto::howto_detect_ff_impl::howto_detect_ff_impl(float, int, > int)’: > /home/mint/Documents/gr-howto/lib/howto_detect_ff_impl.cc:52:24: > error: expression cannot be used as a function > d_pfa(pfa), d_L(L), d_samples(samples)) > ^ > /home/mint/Documents/gr-howto/lib/howto_detect_ff_impl.cc:52:32: > error: expression cannot be used as a function > d_pfa(pfa), d_L(L), d_samples(samples)) > ^ > /home/mint/Documents/gr-howto/lib/howto_detect_ff_impl.cc:52:52: > error: expression cannot be used as a function > d_pfa(pfa), d_L(L), d_samples(samples)) > ^ > /home/mint/Documents/gr-howto/lib/howto_detect_ff_impl.cc: In > function ‘float gr::howto::TracyWidom(float)’: > /home/mint/Documents/gr-howto/lib/howto_detect_ff_impl.cc:71:46: > error: ‘printf’ was not declared in this scope > tw = 18*(pd - (17/75)); printf("a - %f\n", tw); > ^ > /home/mint/Documents/gr-howto/lib/howto_detect_ff_impl.cc:73:47: > error: ‘printf’ was not declared in this scope > tw = 8*(pd - (179/400)); printf("b - %f\n", tw); > ^ > /home/mint/Documents/gr-howto/lib/howto_detect_ff_impl.cc:75:53: > error: ‘printf’ was not declared in this scope > tw = (87/20)*(pd - (643/870)); printf("c - %f\n", tw); > ^ > /home/mint/Documents/gr-howto/lib/howto_detect_ff_impl.cc:77:52: > error: ‘printf’ was not declared in this scope > tw = (16/5)*(pd - (287/320)); printf("d - %f\n", tw); > ^ > /home/mint/Documents/gr-howto/lib/howto_detect_ff_impl.cc:79:52: > error: ‘printf’ was not declared in this scope > tw = (17/5)*(pd - (297/340)); printf("e - %f\n", tw); > ^ > /home/mint/Documents/gr-howto/lib/howto_detect_ff_impl.cc:81:49: > error: ‘printf’ was not declared in this scope > tw = (5.2)*(pd - (0.813)); printf("f - %f\n", tw); > ^ > /home/mint/Documents/gr-howto/lib/howto_detect_ff_impl.cc:83:53: > error: ‘printf’ was not declared in this scope > tw = (53/5)*(pd - (909/1060)); printf("g - %f\n", tw); > ^ > /home/mint/Documents/gr-howto/lib/howto_detect_ff_impl.cc:85:48: > error: ‘printf’ was not declared in this scope > tw = 26*(pd - (593/650)); printf("h - %f\n", tw); > ^ > /home/mint/Documents/gr-howto/lib/howto_detect_ff_impl.cc:87:56: > error: ‘printf’ was not declared in this scope > printf ("wrong pfa value: it must be between 0 and 1\n"); > ^ > /home/mint/Documents/gr-howto/lib/howto_detect_ff_impl.cc: In > member function ‘virtual int > gr::howto::howto_detect_ff_impl::general_work(int, gr_vector_int&, > gr_vector_const_void_star&, gr_vector_void_star&)’: > /home/mint/Documents/gr-howto/lib/howto_detect_ff_impl.cc:141:9: > error: ‘gsl_matrix’ was not declared in this scope > gsl_matrix * hankel = gsl_matrix_alloc (lenght,d_L); > ^ > /home/mint/Documents/gr-howto/lib/howto_detect_ff_impl.cc:141:22: > error: ‘hankel’ was not declared in this scope > gsl_matrix * hankel = gsl_matrix_alloc (lenght,d_L); > ^ > /home/mint/Documents/gr-howto/lib/howto_detect_ff_impl.cc:141:59: > error: ‘gsl_matrix_alloc’ was not declared in this scope > gsl_matrix * hankel = gsl_matrix_alloc (lenght,d_L); > ^ > /home/mint/Documents/gr-howto/lib/howto_detect_ff_impl.cc:142:22: > error: ‘V’ was not declared in this scope > gsl_matrix * V = gsl_matrix_alloc (d_L,d_L); > ^ > /home/mint/Documents/gr-howto/lib/howto_detect_ff_impl.cc:143:9: > error: ‘gsl_vector’ was not declared in this scope > gsl_vector * S = gsl_vector_alloc (d_L); > ^ > /home/mint/Documents/gr-howto/lib/howto_detect_ff_impl.cc:143:22: > error: ‘S’ was not declared in this scope > gsl_vector * S = gsl_vector_alloc (d_L); > ^ > /home/mint/Documents/gr-howto/lib/howto_detect_ff_impl.cc:143:47: > error: ‘gsl_vector_alloc’ was not declared in this scope > gsl_vector * S = gsl_vector_alloc (d_L); > ^ > /home/mint/Documents/gr-howto/lib/howto_detect_ff_impl.cc:144:22: > error: ‘temp’ was not declared in this scope > gsl_vector * temp = gsl_vector_alloc (d_ L); > ^ > /home/mint/Documents/gr-howto/lib/howto_detect_ff_impl.cc:144:47: > error: ‘d_’ was not declared in this scope > gsl_vector * temp = gsl_vector_alloc (d_ L); > ^ > /home/mint/Documents/gr-howto/lib/howto_detect_ff_impl.cc:147:36: > error: ‘gsl_matrix_set_zero’ was not declared in this scope > gsl_matrix_set_zero (hankel); > ^ > /home/mint/Documents/gr-howto/lib/howto_detect_ff_impl.cc:156:47: > error: ‘fopen’ was not declared in this scope > story = fopen("filestory.txt", "a"); > ^ > /home/mint/Documents/gr-howto/lib/howto_detect_ff_impl.cc:159:60: > error: ‘gsl_matrix_set’ was not declared in this scope > gsl_matrix_set (hankel, p, j, vett[p+j]); > ^ > /home/mint/Documents/gr-howto/lib/howto_detect_ff_impl.cc:162:57: > error: ‘gsl_linalg_SV_decomp’ was not declared in this scope > gsl_linalg_SV_decomp (hankel, V, S, temp); > ^ > /home/mint/Documents/gr-howto/lib/howto_detect_ff_impl.cc:163:43: > error: ‘gsl_vector_get’ was not declared in this scope > lmax = gsl_vector_get(S, 0); > ^ > /home/mint/Documents/gr-howto/lib/howto_detect_ff_impl.cc:167:79: > error: ‘fprintf’ was not declared in this scope > fprintf(story, "%f - ratio=%f - soglia=%f\n ", > mem, ratio, thr); > > > ^ > /home/mint/Documents/gr-howto/lib/howto_detect_ff_impl.cc:168:29: > error: ‘fclose’ was not declared in this scope > fclose(story); > ^ > make[2]: *** > [lib/CMakeFiles/gnuradio-howto.dir/howto_detect_ff_impl.cc.o] Error 1 > make[1]: *** [lib/CMakeFiles/gnuradio-howto.dir/all] Error 2 > make: *** [all] Error 2 > > > > Any solution to sort an error will be appreciated. > > > > Thanks a lot, > > > > Yan > > > > > > > > This message and any attachment are intended solely for the addressee > > and may contain confidential information. If you have received this > > message in error, please send it back to me, and immediately delete it. > > > > Please do not use, copy or disclose the information contained in this > > message or in any attachment. Any views or opinions expressed by the > > author of this email do not necessarily reflect the views of the > > University of Nottingham. > > > > This message has been checked for viruses but the contents of an > > attachment may still contain software viruses which could damage your > > computer system, you are advised to perform your own checks. Email > > communications with the University of Nottingham may be monitored as > > permitted by UK legislation. > > > > > _______________________________________________ > > Discuss-gnuradio mailing list > > [email protected] <mailto:[email protected]> > > https://lists.gnu.org/mailman/listinfo/discuss-gnuradio > > > > > This message and any attachment are intended solely for the addressee > and may contain confidential information. If you have received this > message in error, please send it back to me, and immediately delete it. > > Please do not use, copy or disclose the information contained in this > message or in any attachment. Any views or opinions expressed by the > author of this email do not necessarily reflect the views of the > University of Nottingham. > > This message has been checked for viruses but the contents of an > attachment may still contain software viruses which could damage your > computer system, you are advised to perform your own checks. Email > communications with the University of Nottingham may be monitored as > permitted by UK legislation.
_______________________________________________ Discuss-gnuradio mailing list [email protected] https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
