2007/5/3, konvak <[EMAIL PROTECTED]>:
hi all,
          I would be interested in getting and displaying some
statistical information (mean, variance...) about received signal (let's
say for educational purposes to try to determine what kind of modulation
I am receiving). Is there any way to get let's say the mean value of the
signal without writing a new block. The only thing I came across is
gr.probe_signal_f() to get the value of the signal. Is it possible to
get _every_ sample with this, somehow I don't think it would work. So do
I really need a new block?

thanks for any suggestions and help,
tomas

I have attached a patch that adds a gr_mean_XX block to gnuradio-core.
The block calculates the arithmetic mean of a single vector. The
variance block should be quite easy to create using this one as a
template. I have not added the various bits and pieces to Makefile.am
etc, but that should (in theory... :) ) not be too hard.

Cheers,

--
Trond Danielsen
Index: gr_mean_XX.cc.t
===================================================================
--- gr_mean_XX.cc.t	(revisjon 0)
+++ gr_mean_XX.cc.t	(revisjon 0)
@@ -0,0 +1,64 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2004 Free Software Foundation, Inc.
+ * 
+ * This file is part of GNU Radio
+ * 
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ * 
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+// @WARNING@
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <@[EMAIL PROTECTED]>
+#include <gr_io_signature.h>
+
[EMAIL PROTECTED]@
[EMAIL PROTECTED]@ ( size_t vlen )
+{
+	return @SPTR_NAME@ ( new @NAME@(vlen));
+}
+
[EMAIL PROTECTED]@::@NAME@( size_t vlen)
+	: gr_sync_block ( "@BASE_NAME@",
+                   gr_make_io_signature (1, 1, vlen*sizeof (@I_TYPE@)),
+                   gr_make_io_signature (1, 1, sizeof (@O_TYPE@))),
+		   d_vlen(vlen)
+{
+}
+
+int
[EMAIL PROTECTED]@::work( int noutput_items,
+	gr_vector_const_void_star &input_items,
+	gr_vector_void_star &output_items)
+{
+	const @I_TYPE@ *in;
+	@O_TYPE@ *optr = (@O_TYPE@ *) output_items[0];
+	
+	for (int i=0; i<noutput_items; i++) {
+
+		@O_TYPE@ acc = 0;
+		for (int j=0; j<d_vlen; j++ )
+			acc +=  in[i*d_vlen + j]
+
+		optr[i] = acc/d_vlen;
+	}
+	return noutput_items;
+}
+
Index: gr_mean_XX.h.t
===================================================================
--- gr_mean_XX.h.t	(revisjon 0)
+++ gr_mean_XX.h.t	(revisjon 0)
@@ -0,0 +1,51 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2004 Free Software Foundation, Inc.
+ * 
+ * This file is part of GNU Radio
+ * 
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ * 
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+// @WARNING@
+
+#ifndef @GUARD_NAME@
+#define @GUARD_NAME@
+
+#include <gr_sync_block.h>
+
+class @NAME@;
+typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
+
[EMAIL PROTECTED]@ [EMAIL PROTECTED]@ (size_t vlen);
+
+
+class @NAME@ : public gr_sync_block
+{
+  friend @SPTR_NAME@ [EMAIL PROTECTED]@ (size_t vlen);
+
+  @NAME@ (size_t vlen);
+  size_t d_vlen;
+
+ public:
+
+  int work (int noutput_items,
+            gr_vector_const_void_star &input_items,
+            gr_vector_void_star &output_items);
+};
+
+
+#endif
Index: gr_mean_XX.i.t
===================================================================
--- gr_mean_XX.i.t	(revisjon 0)
+++ gr_mean_XX.i.t	(revisjon 0)
@@ -0,0 +1,34 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2004 Free Software Foundation, Inc.
+ * 
+ * This file is part of GNU Radio
+ * 
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ * 
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+// @WARNING@
+
+GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@)
+
[EMAIL PROTECTED]@ [EMAIL PROTECTED]@ (size_t vlen);
+
+class @NAME@ : public gr_sync_block
+{
+ private:
+  @NAME@ (size_t vlen);
+  size_t d_vlen;
+};
_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
http://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to