Hi,
I am trying to make a flowgraph as given:
signal source --> stream2vector --> fft --> c2m --> msg_sink
If the size of fft is 4096, then I want to retrieve these 4096 points in
python and then do simple maths and logic based on some of the values within
these 4096 points within python.
And then based on the result, I want to initiate another flowgraph!
Currently, there is an error between the interface between c2m and msg_sink.
The code is:
class top(gr.top_block):
def __init__(self):
gr.top_block.__init__(self)
##################################################
# Variables
##################################################
self.samp_rate = samp_rate = 32000
##################################################
# Blocks
##################################################
self.sigsource = gr.sig_source_c(samp_rate, gr.GR_COS_WAVE,
1000, 10, 0)
self.sigsource1 = gr.sig_source_c(samp_rate, gr.GR_COS_WAVE,
2000, 20, 0)
self.sigadder = gr.add_vcc(1)
fftsize = 4096
mywin = window.blackmanharris(fftsize)
fft = gr.fft_vcc(fftsize, True, mywin)
c2m = gr.complex_to_mag(fftsize)
s2f1 = gr.short_to_float()
s2f2 = gr.short_to_float()
# Vector Sink/Source
ss2v = gr.stream_to_vector(gr.sizeof_gr_complex, fftsize)
v2ss = gr.vector_to_stream(gr.sizeof_float, fftsize)
# Message Settings
self.qsize = 10
self.msgq0 = gr.msg_queue(self.qsize) # queue amplitude
# Message sink
m_sink0 = gr.message_sink(gr.sizeof_float, self.msgq0, True)
self.connect((self.sigsource, 0), (self.sigadder, 0))
self.connect((self.sigsource1, 0), (self.sigadder, 1))
self.connect(self.sigadder, ss2v, fft, c2m, m_sink0)
def main ():
# Start Top Block
tb = top()
#Start Flowgraph
tb.start()
# Read first message
amsg = tb.msgq0.delete_head() # get first amplitude message
raw_a = amsg.to_string() # raw amplitude data
a_data = numpy.fromstring(raw_a, numpy.float32, count =
int(amsg.arg2())) # converted amplitude data
print "Data in sink is: ",a_data
tb.stop()
if __name__ == '__main__':
main ()
Regards,
from gnuradio import gr, gru, eng_notation, optfir, window
import numpy
class top(gr.top_block):
def __init__(self):
gr.top_block.__init__(self)
##################################################
# Variables
##################################################
self.samp_rate = samp_rate = 32000
##################################################
# Blocks
##################################################
self.sigsource = gr.sig_source_c(samp_rate, gr.GR_COS_WAVE, 1000, 10, 0)
self.sigsource1 = gr.sig_source_c(samp_rate, gr.GR_COS_WAVE, 2000, 20, 0)
self.sigadder = gr.add_vcc(1)
fftsize = 4096
mywin = window.blackmanharris(fftsize)
fft = gr.fft_vcc(fftsize, True, mywin)
c2m = gr.complex_to_mag(fftsize)
s2f1 = gr.short_to_float()
s2f2 = gr.short_to_float()
# Vector Sink/Source
ss2v = gr.stream_to_vector(gr.sizeof_gr_complex, fftsize)
v2ss = gr.vector_to_stream(gr.sizeof_float, fftsize)
# Message Settings
self.qsize = 10
self.msgq0 = gr.msg_queue(self.qsize) # queue amplitude
# Message sink
m_sink0 = gr.message_sink(gr.sizeof_float, self.msgq0, True)
self.connect((self.sigsource, 0), (self.sigadder, 0))
self.connect((self.sigsource1, 0), (self.sigadder, 1))
self.connect(self.sigadder, ss2v, fft, c2m, m_sink0)
def main ():
# Start Top Block
tb = top()
#Start Flowgraph
tb.start()
# Read first message
amsg = tb.msgq0.delete_head() # get first amplitude message
raw_a = amsg.to_string() # raw amplitude data
a_data = numpy.fromstring(raw_a, numpy.float32, count = int(amsg.arg2())) # converted amplitude data
print "Data in sink is: ",a_data
tb.stop()
if __name__ == '__main__':
main ()
_______________________________________________
Discuss-gnuradio mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/discuss-gnuradio