3 from gnuradio import gr, blks2
4 from gnuradio.qtgui import qtgui
5 from PyQt4 import QtGui, QtCore
9 class dialog_box(QtGui.QWidget):
10 def __init__(self, display_tx, display_rx, channel):
11 QtGui.QWidget.__init__(self, None)
12 self.setWindowTitle('Digital Signal Examples')
14 self.control = control_panel(channel, self)
16 hlayout = QtGui.QHBoxLayout()
17 hlayout.addWidget(display_tx)
18 hlayout.addWidget(display_rx)
19 hlayout.setGeometry(QtCore.QRect(0,0,100,100))
21 vlayout = QtGui.QVBoxLayout()
22 vlayout.addLayout(hlayout)
23 vlayout.addLayout(self.control.layout, -1)
24 #vlayout.addStretch(-1)
26 self.setLayout(vlayout)
27 self.resize(1000, 1000)
29 class control_panel(QtGui.QWidget):
30 def __init__(self, channel, parent=None):
31 QtGui.QWidget.__init__(self, parent)
32 self.setWindowTitle('Control Panel')
34 self.channel = channel
36 self.layout = QtGui.QFormLayout()
39 self.noiseEdit = QtGui.QLineEdit(self)
40 self.layout.addRow("Noise Amplitude:", self.noiseEdit)
41 self.connect(self.noiseEdit, QtCore.SIGNAL("editingFinished()"),
44 # Set channel frequency offset
45 self.freqEdit = QtGui.QLineEdit(self)
46 self.layout.addRow("Frequency Offset:", self.freqEdit)
47 self.connect(self.freqEdit, QtCore.SIGNAL("editingFinished()"),
50 # Set channel timing offset
51 self.timeEdit = QtGui.QLineEdit(self)
52 self.layout.addRow("Timing Offset:", self.timeEdit)
53 self.connect(self.timeEdit, QtCore.SIGNAL("editingFinished()"),
56 self.quit = QtGui.QPushButton('Close', self)
57 self.layout.addRow(self.quit)
59 self.connect(self.quit, QtCore.SIGNAL('clicked()'),
60 QtGui.qApp, QtCore.SLOT('quit()'))
62 def set_noise(self, noise):
64 self.noiseEdit.setText(QtCore.QString("%1").arg(self.noise))
66 def set_frequency(self, freq):
68 self.freqEdit.setText(QtCore.QString("%1").arg(self.freq))
70 def set_time_offset(self, to):
71 self.timing_offset = to
72 self.timeEdit.setText(QtCore.QString("%1").arg(self.timing_offset))
74 def noiseEditText(self):
76 noise = self.noiseEdit.text().toDouble()[0]
77 self.channel.noise.set_amplitude(noise)
83 def freqEditText(self):
85 freq = self.freqEdit.text().toDouble()[0]
86 self.channel.freq_offset.set_frequency(freq)
92 def timeEditText(self):
94 to = self.timeEdit.text().toDouble()[0]
95 self.channel.timing_offset.set_interp_ratio(to)
97 self.timing_offset = to
102 class my_top_block(gr.top_block):
104 gr.top_block.__init__(self)
106 self.qapp = QtGui.QApplication(sys.argv)
114 data = scipy.random.randint(0, 255, 1000)
115 src = gr.vector_source_b(data, True)
116 mod = blks2.dqpsk_mod(sps, excess_bw, gray_code, False, False)
118 rrctaps = gr.firdes.root_raised_cosine(1, sps, 1, excess_bw, 21)
119 rx_rrc = gr.fir_filter_ccf(sps, rrctaps)
124 channel = blks2.channel_model(noise, fo, to)
126 thr = gr.throttle(gr.sizeof_gr_complex, 10*fftsize)
127 self.snk_tx = qtgui.sink_c(fftsize, gr.firdes.WIN_BLACKMAN_hARRIS, -1/2, 1/2,
128 "Tx", True, True, False, True, True)
130 self.snk_rx = qtgui.sink_c(fftsize, gr.firdes.WIN_BLACKMAN_hARRIS, -1/2, 1/2,
131 "Rx", True, True, False, True, True)
133 self.connect(src, mod, channel, self.snk_tx)
134 self.connect(channel, rx_rrc, thr, self.snk_rx)
136 pyTxQt = self.snk_tx.pyqwidget()
137 pyTx = sip.wrapinstance(pyTxQt, QtGui.QWidget)
139 pyRxQt = self.snk_rx.pyqwidget()
140 pyRx = sip.wrapinstance(pyRxQt, QtGui.QWidget)
142 self.main_box = dialog_box(pyTx, pyRx, channel)
143 self.main_box.control.set_noise(noise)
144 self.main_box.control.set_frequency(fo)
145 self.main_box.control.set_time_offset(to)
149 if __name__ == "__main__":