from PyQt4 import Qt, QtCore, QtGui
import PyQt4.Qwt5 as Qwt
from optparse import OptionParser
-from gnuradio import gr, eng_notation
+from gnuradio import gr, blks2, eng_notation
from scipy import fftpack
from pyqt_filter import Ui_MainWindow
self.connect(self.gui.designButton,
Qt.SIGNAL("released()"),
self.design)
-
- self.fltdeslpf = Ui_firlpfForm()
- self.fltdeshpf = Ui_firhpfForm()
- self.fltdeslpf.setupUi(self.gui.firlpfPage)
- self.fltdeshpf.setupUi(self.gui.firhpfPage)
+ self.connect(self.gui.tabGroup,
+ Qt.SIGNAL("currentChanged(int)"),
+ self.tab_changed)
+
+ self.gui.designButton.setShortcut("Return")
+
+ self.taps = []
+ self.gui.lpfPassBandRippleLabel.setVisible(False)
+ self.gui.lpfPassBandRippleEdit.setVisible(False)
+ self.gui.bpfPassBandRippleLabel.setVisible(False)
+ self.gui.bpfPassBandRippleEdit.setVisible(False)
+ self.gui.hpfPassBandRippleLabel.setVisible(False)
+ self.gui.hpfPassBandRippleEdit.setVisible(False)
+
# Initialize to LPF
self.gui.filterTypeWidget.setCurrentWidget(self.gui.firlpfPage)
self.freqcurve.setPen(Qt.QPen(blueBrush, 2))
self.rcurve.setPen(Qt.QPen(blueBrush, 2))
+ self.filterWindows = {"Hamming Window" : gr.firdes.WIN_HAMMING,
+ "Hann Window" : gr.firdes.WIN_HANN,
+ "Blackman Window" : gr.firdes.WIN_BLACKMAN,
+ "Rectangular Window" : gr.firdes.WIN_RECTANGULAR,
+ "Kaiser Window" : gr.firdes.WIN_KAISER,
+ "Blackman-harris Window" : gr.firdes.WIN_BLACKMAN_hARRIS}
+
self.show()
def changed_filter_type(self, ftype):
strftype = str(ftype.toAscii())
if(ftype == "Low Pass"):
self.gui.filterTypeWidget.setCurrentWidget(self.gui.firlpfPage)
+ elif(ftype == "Band Pass"):
+ self.gui.filterTypeWidget.setCurrentWidget(self.gui.firbpfPage)
elif(ftype == "High Pass"):
self.gui.filterTypeWidget.setCurrentWidget(self.gui.firhpfPage)
+
+ self.design()
def changed_filter_design_type(self, design):
- print design
-
+ if(design == "Equiripple"):
+ self.set_equiripple()
+ else:
+ self.set_windowed()
+
+ self.design()
+
+ def set_equiripple(self):
+ self.equiripple = True
+ self.gui.lpfPassBandRippleLabel.setVisible(True)
+ self.gui.lpfPassBandRippleEdit.setVisible(True)
+ self.gui.bpfPassBandRippleLabel.setVisible(True)
+ self.gui.bpfPassBandRippleEdit.setVisible(True)
+ self.gui.hpfPassBandRippleLabel.setVisible(True)
+ self.gui.hpfPassBandRippleEdit.setVisible(True)
+
+ def set_windowed(self):
+ self.equiripple = False
+ self.gui.lpfPassBandRippleLabel.setVisible(False)
+ self.gui.lpfPassBandRippleEdit.setVisible(False)
+ self.gui.bpfPassBandRippleLabel.setVisible(False)
+ self.gui.bpfPassBandRippleEdit.setVisible(False)
+ self.gui.hpfPassBandRippleLabel.setVisible(False)
+ self.gui.hpfPassBandRippleEdit.setVisible(False)
+
def design(self):
- fs = self.gui.sampleRateEdit.text().toDouble()[0]
- gain = self.gui.filterGainEdit.text().toDouble()[0]
+ ret = True
+ fs,r = self.gui.sampleRateEdit.text().toDouble()
+ ret = r and ret
+ gain,r = self.gui.filterGainEdit.text().toDouble()
+ ret = r and ret
+
+ if(ret):
+ winstr = str(self.gui.filterDesignTypeComboBox.currentText().toAscii())
+ ftype = str(self.gui.filterTypeComboBox.currentText().toAscii())
+
+ if(winstr == "Equiripple"):
+ designer = {"Low Pass" : self.design_opt_lpf,
+ "Band Pass" : self.design_opt_bpf,
+ "High Pass" : self.design_opt_hpf}
+ taps,r = designer[ftype](fs, gain)
+
+ else:
+ designer = {"Low Pass" : self.design_win_lpf,
+ "Band Pass" : self.design_win_bpf,
+ "High Pass" : self.design_win_hpf}
+ wintype = self.filterWindows[winstr]
+ taps,r = designer[ftype](fs, gain, wintype)
+
+ if(r):
+ self.update_time_curves(taps)
+ self.update_freq_curves(taps)
- ftype = self.gui.filterTypeComboBox.currentText()
- if(ftype == "Low Pass"):
- taps = self.design_win_lpf(fs, gain)
- elif(ftype == "High Pass"):
- taps = self.design_win_hpf(fs, gain)
- self.update_time_curves(taps)
- self.update_freq_curves(taps)
-
- def design_win_lpf(self, fs, gain):
- pb = self.fltdeslpf.endofPassBandEdit.text().toDouble()[0]
- sb = self.fltdeslpf.startofStopBandEdit.text().toDouble()[0]
- atten = self.fltdeslpf.stopBandAttenEdit.text().toDouble()[0]
- tb = sb - pb
-
- taps = gr.firdes.low_pass_2(gain, fs, pb, tb, atten,
- gr.firdes.WIN_BLACKMAN_hARRIS)
- return taps
+ # Filter design functions using a window
+ def design_win_lpf(self, fs, gain, wintype):
+ ret = True
+ pb,r = self.gui.endofLpfPassBandEdit.text().toDouble()
+ ret = r and ret
+ sb,r = self.gui.startofLpfStopBandEdit.text().toDouble()
+ ret = r and ret
+ atten,r = self.gui.lpfStopBandAttenEdit.text().toDouble()
+ ret = r and ret
+
+ if(ret):
+ tb = sb - pb
+
+ taps = gr.firdes.low_pass_2(gain, fs, pb, tb,
+ atten, wintype)
+ return (taps, ret)
+ else:
+ return ([], ret)
- def design_win_hpf(self, fs, gain):
- print fs
- print widget
-
+ def design_win_bpf(self, fs, gain, wintype):
+ ret = True
+ pb1,r = self.gui.startofBpfPassBandEdit.text().toDouble()
+ ret = r and ret
+ pb2,r = self.gui.endofBpfPassBandEdit.text().toDouble()
+ ret = r and ret
+ tb,r = self.gui.bpfTransitionEdit.text().toDouble()
+ ret = r and ret
+ atten,r = self.gui.bpfStopBandAttenEdit.text().toDouble()
+ ret = r and ret
+
+ if(r):
+ taps = gr.firdes.band_pass_2(gain, fs, pb1, pb2, tb,
+ atten, wintype)
+ return (taps,r)
+ else:
+ return ([],r)
+
+ def design_win_hpf(self, fs, gain, wintype):
+ ret = True
+ sb,r = self.gui.endofHpfStopBandEdit.text().toDouble()
+ ret = r and ret
+ pb,r = self.gui.startofHpfPassBandEdit.text().toDouble()
+ ret = r and ret
+ atten,r = self.gui.hpfStopBandAttenEdit.text().toDouble()
+ ret = r and ret
+
+ if(r):
+ tb = pb - sb
+ taps = gr.firdes.high_pass_2(gain, fs, pb, tb,
+ atten, wintype)
+ return (taps,r)
+ else:
+ return ([],r)
+
+
+
+ # Design Functions for Equiripple Filters
+ def design_opt_lpf(self, fs, gain, wintype=None):
+ ret = True
+ pb,r = self.gui.endofLpfPassBandEdit.text().toDouble()
+ ret = r and ret
+ sb,r = self.gui.startofLpfStopBandEdit.text().toDouble()
+ ret = r and ret
+ atten,r = self.gui.lpfStopBandAttenEdit.text().toDouble()
+ ret = r and ret
+ ripple,r = self.gui.lpfPassBandRippleEdit.text().toDouble()
+ ret = r and ret
+
+ if(ret):
+ taps = blks2.optfir.low_pass(gain, fs, pb, sb,
+ ripple, atten)
+ return (taps, ret)
+ else:
+ return ([], ret)
+
+ def design_opt_bpf(self, fs, gain, wintype=None):
+ ret = True
+ pb1,r = self.gui.startofBpfPassBandEdit.text().toDouble()
+ ret = r and ret
+ pb2,r = self.gui.endofBpfPassBandEdit.text().toDouble()
+ ret = r and ret
+ tb,r = self.gui.bpfTransitionEdit.text().toDouble()
+ ret = r and ret
+ atten,r = self.gui.bpfStopBandAttenEdit.text().toDouble()
+ ret = r and ret
+ ripple,r = self.gui.bpfPassBandRippleEdit.text().toDouble()
+ ret = r and ret
+
+ if(r):
+ sb1 = pb1 - tb
+ sb2 = pb2 + tb
+ taps = blks2.optfir.band_pass(gain, fs, sb1, pb1, pb2, sb2,
+ ripple, atten)
+ return (taps,r)
+ else:
+ return ([],r)
+
+ def design_opt_hpf(self, fs, gain, wintype=None):
+ ret = True
+ sb,r = self.gui.endofHpfStopBandEdit.text().toDouble()
+ ret = r and ret
+ pb,r = self.gui.startofHpfPassBandEdit.text().toDouble()
+ ret = r and ret
+ atten,r = self.gui.hpfStopBandAttenEdit.text().toDouble()
+ ret = r and ret
+ ripple,r = self.gui.hpfPassBandRippleEdit.text().toDouble()
+ ret = r and ret
+
+ if(r):
+ taps = blks2.optfir.high_pass(gain, fs, sb, pb,
+ atten, ripple)
+ return (taps,r)
+ else:
+ return ([],r)
+
+ def tab_changed(self, tab):
+ if(tab == 0):
+ self.update_freq_curves(self.taps)
+ if(tab == 1):
+ self.update_time_curves(self.taps)
+
def update_time_curves(self, taps):
+ self.taps = taps
ntaps = len(taps)
- self.rcurve.setData(scipy.arange(ntaps), taps)
-
- # Reset the x-axis to the new time scale
- ymax = 1.5 * max(taps)
- ymin = 1.5 * min(taps)
- self.gui.timePlot.setAxisScale(self.gui.timePlot.xBottom,
- 0, ntaps)
- self.gui.timePlot.setAxisScale(self.gui.timePlot.yLeft,
- ymin, ymax)
-
- # Set the zoomer base to unzoom to the new axis
- self.timeZoomer.setZoomBase()
-
- self.gui.timePlot.replot()
+ if(ntaps > 0):
+ self.rcurve.setData(scipy.arange(ntaps), taps)
+
+ # Reset the x-axis to the new time scale
+ ymax = 1.5 * max(taps)
+ ymin = 1.5 * min(taps)
+ self.gui.timePlot.setAxisScale(self.gui.timePlot.xBottom,
+ 0, ntaps)
+ self.gui.timePlot.setAxisScale(self.gui.timePlot.yLeft,
+ ymin, ymax)
+
+ # Set the zoomer base to unzoom to the new axis
+ rect = Qt.QRectF(0, ymin, (ntaps-0), (ymax-ymin))
+ self.timeZoomer.setZoomBase(rect)
+
+ self.gui.timePlot.replot()
def update_freq_curves(self, taps, Npts=1000):
- fftpts = fftpack.fft(taps, Npts)
- freq = scipy.arange(0, Npts)
-
- fftdB = 20.0*scipy.log10(abs(fftpts))
-
- self.freqcurve.setData(freq, fftdB)
-
- self.gui.freqPlot.setAxisScale(self.gui.freqPlot.xBottom,
- 0, Npts/2)
-
- # Set the zoomer base to unzoom to the new axis
- self.freqZoomer.setZoomBase()
-
- self.gui.freqPlot.replot()
+ if(len(taps) > 0):
+ fftpts = fftpack.fft(taps, Npts)
+ freq = scipy.arange(0, Npts)
+
+ fftdB = 20.0*scipy.log10(abs(fftpts))
+
+ self.freqcurve.setData(freq, fftdB)
+
+ # Reset the x-axis to the new time scale
+ ymax = 1.5 * max(fftdB)
+ ymin = 1.5 * min(fftdB)
+ self.gui.freqPlot.setAxisScale(self.gui.freqPlot.xBottom,
+ 0, Npts/2)
+ self.gui.timePlot.setAxisScale(self.gui.timePlot.yLeft,
+ ymin, ymax)
+
+ # Set the zoomer base to unzoom to the new axis
+ self.freqZoomer.setZoomBase()
+
+ self.gui.freqPlot.replot()
def setup_options():
# Form implementation generated from reading ui file 'pyqt_filter.ui'
#
-# Created: Tue Aug 18 22:48:21 2009
+# Created: Sun Aug 23 18:03:28 2009
# by: PyQt4 UI code generator 4.4.4
#
# WARNING! All changes made in this file will be lost!
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
- MainWindow.resize(624, 696)
+ MainWindow.resize(1124, 696)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtGui.QGridLayout(self.centralwidget)
self.gridLayout.setObjectName("gridLayout")
- self.tabGroup = QtGui.QTabWidget(self.centralwidget)
- self.tabGroup.setMinimumSize(QtCore.QSize(800, 0))
- self.tabGroup.setObjectName("tabGroup")
- self.freqTab = QtGui.QWidget()
- self.freqTab.setObjectName("freqTab")
- self.horizontalLayout_2 = QtGui.QHBoxLayout(self.freqTab)
- self.horizontalLayout_2.setObjectName("horizontalLayout_2")
- self.freqPlot = Qwt5.QwtPlot(self.freqTab)
- self.freqPlot.setObjectName("freqPlot")
- self.horizontalLayout_2.addWidget(self.freqPlot)
- self.tabGroup.addTab(self.freqTab, "")
- self.timeTab = QtGui.QWidget()
- self.timeTab.setObjectName("timeTab")
- self.horizontalLayout = QtGui.QHBoxLayout(self.timeTab)
- self.horizontalLayout.setObjectName("horizontalLayout")
- self.timePlot = Qwt5.QwtPlot(self.timeTab)
- self.timePlot.setObjectName("timePlot")
- self.horizontalLayout.addWidget(self.timePlot)
- self.tabGroup.addTab(self.timeTab, "")
- self.gridLayout.addWidget(self.tabGroup, 1, 1, 1, 1)
self.filterFrame = QtGui.QFrame(self.centralwidget)
self.filterFrame.setMinimumSize(QtCore.QSize(300, 0))
self.filterFrame.setMaximumSize(QtCore.QSize(300, 16777215))
self.filterDesignTypeComboBox.setObjectName("filterDesignTypeComboBox")
self.filterDesignTypeComboBox.addItem(QtCore.QString())
self.filterDesignTypeComboBox.addItem(QtCore.QString())
+ self.filterDesignTypeComboBox.addItem(QtCore.QString())
+ self.filterDesignTypeComboBox.addItem(QtCore.QString())
+ self.filterDesignTypeComboBox.addItem(QtCore.QString())
+ self.filterDesignTypeComboBox.addItem(QtCore.QString())
+ self.filterDesignTypeComboBox.addItem(QtCore.QString())
self.verticalLayout.addWidget(self.filterDesignTypeComboBox)
- self.formLayout_2 = QtGui.QFormLayout()
- self.formLayout_2.setFieldGrowthPolicy(QtGui.QFormLayout.AllNonFixedFieldsGrow)
- self.formLayout_2.setObjectName("formLayout_2")
+ self.globalParamsLayout = QtGui.QFormLayout()
+ self.globalParamsLayout.setFieldGrowthPolicy(QtGui.QFormLayout.AllNonFixedFieldsGrow)
+ self.globalParamsLayout.setObjectName("globalParamsLayout")
self.sampleRateLabel = QtGui.QLabel(self.filterFrame)
self.sampleRateLabel.setMaximumSize(QtCore.QSize(16777215, 30))
self.sampleRateLabel.setObjectName("sampleRateLabel")
- self.formLayout_2.setWidget(0, QtGui.QFormLayout.LabelRole, self.sampleRateLabel)
+ self.globalParamsLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.sampleRateLabel)
self.sampleRateEdit = QtGui.QLineEdit(self.filterFrame)
self.sampleRateEdit.setMaximumSize(QtCore.QSize(16777215, 30))
self.sampleRateEdit.setObjectName("sampleRateEdit")
- self.formLayout_2.setWidget(0, QtGui.QFormLayout.FieldRole, self.sampleRateEdit)
+ self.globalParamsLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.sampleRateEdit)
self.filterGainLabel = QtGui.QLabel(self.filterFrame)
self.filterGainLabel.setObjectName("filterGainLabel")
- self.formLayout_2.setWidget(1, QtGui.QFormLayout.LabelRole, self.filterGainLabel)
+ self.globalParamsLayout.setWidget(1, QtGui.QFormLayout.LabelRole, self.filterGainLabel)
self.filterGainEdit = QtGui.QLineEdit(self.filterFrame)
self.filterGainEdit.setObjectName("filterGainEdit")
- self.formLayout_2.setWidget(1, QtGui.QFormLayout.FieldRole, self.filterGainEdit)
- self.verticalLayout.addLayout(self.formLayout_2)
+ self.globalParamsLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.filterGainEdit)
+ self.verticalLayout.addLayout(self.globalParamsLayout)
self.filterTypeWidget = QtGui.QStackedWidget(self.filterFrame)
self.filterTypeWidget.setObjectName("filterTypeWidget")
self.firlpfPage = QtGui.QWidget()
self.firlpfPage.setObjectName("firlpfPage")
+ self.formLayout = QtGui.QFormLayout(self.firlpfPage)
+ self.formLayout.setObjectName("formLayout")
+ self.endofLpfPassBandLabel = QtGui.QLabel(self.firlpfPage)
+ self.endofLpfPassBandLabel.setObjectName("endofLpfPassBandLabel")
+ self.formLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.endofLpfPassBandLabel)
+ self.endofLpfPassBandEdit = QtGui.QLineEdit(self.firlpfPage)
+ self.endofLpfPassBandEdit.setObjectName("endofLpfPassBandEdit")
+ self.formLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.endofLpfPassBandEdit)
+ self.startofLpfStopBandLabel = QtGui.QLabel(self.firlpfPage)
+ self.startofLpfStopBandLabel.setObjectName("startofLpfStopBandLabel")
+ self.formLayout.setWidget(1, QtGui.QFormLayout.LabelRole, self.startofLpfStopBandLabel)
+ self.startofLpfStopBandEdit = QtGui.QLineEdit(self.firlpfPage)
+ self.startofLpfStopBandEdit.setObjectName("startofLpfStopBandEdit")
+ self.formLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.startofLpfStopBandEdit)
+ self.lpfStopBandAttenLabel = QtGui.QLabel(self.firlpfPage)
+ self.lpfStopBandAttenLabel.setObjectName("lpfStopBandAttenLabel")
+ self.formLayout.setWidget(2, QtGui.QFormLayout.LabelRole, self.lpfStopBandAttenLabel)
+ self.lpfStopBandAttenEdit = QtGui.QLineEdit(self.firlpfPage)
+ self.lpfStopBandAttenEdit.setObjectName("lpfStopBandAttenEdit")
+ self.formLayout.setWidget(2, QtGui.QFormLayout.FieldRole, self.lpfStopBandAttenEdit)
+ self.lpfPassBandRippleEdit = QtGui.QLineEdit(self.firlpfPage)
+ self.lpfPassBandRippleEdit.setObjectName("lpfPassBandRippleEdit")
+ self.formLayout.setWidget(3, QtGui.QFormLayout.FieldRole, self.lpfPassBandRippleEdit)
+ self.lpfPassBandRippleLabel = QtGui.QLabel(self.firlpfPage)
+ self.lpfPassBandRippleLabel.setObjectName("lpfPassBandRippleLabel")
+ self.formLayout.setWidget(3, QtGui.QFormLayout.LabelRole, self.lpfPassBandRippleLabel)
self.filterTypeWidget.addWidget(self.firlpfPage)
+ self.firbpfPage = QtGui.QWidget()
+ self.firbpfPage.setObjectName("firbpfPage")
+ self.formLayout_2 = QtGui.QFormLayout(self.firbpfPage)
+ self.formLayout_2.setObjectName("formLayout_2")
+ self.startofBpfPassBandLabel = QtGui.QLabel(self.firbpfPage)
+ self.startofBpfPassBandLabel.setObjectName("startofBpfPassBandLabel")
+ self.formLayout_2.setWidget(0, QtGui.QFormLayout.LabelRole, self.startofBpfPassBandLabel)
+ self.startofBpfPassBandEdit = QtGui.QLineEdit(self.firbpfPage)
+ self.startofBpfPassBandEdit.setObjectName("startofBpfPassBandEdit")
+ self.formLayout_2.setWidget(0, QtGui.QFormLayout.FieldRole, self.startofBpfPassBandEdit)
+ self.endofBpfPassBandLabel = QtGui.QLabel(self.firbpfPage)
+ self.endofBpfPassBandLabel.setObjectName("endofBpfPassBandLabel")
+ self.formLayout_2.setWidget(1, QtGui.QFormLayout.LabelRole, self.endofBpfPassBandLabel)
+ self.endofBpfPassBandEdit = QtGui.QLineEdit(self.firbpfPage)
+ self.endofBpfPassBandEdit.setObjectName("endofBpfPassBandEdit")
+ self.formLayout_2.setWidget(1, QtGui.QFormLayout.FieldRole, self.endofBpfPassBandEdit)
+ self.bpfStopBandAttenEdit = QtGui.QLineEdit(self.firbpfPage)
+ self.bpfStopBandAttenEdit.setObjectName("bpfStopBandAttenEdit")
+ self.formLayout_2.setWidget(3, QtGui.QFormLayout.FieldRole, self.bpfStopBandAttenEdit)
+ self.bpfStopBandAttenLabel = QtGui.QLabel(self.firbpfPage)
+ self.bpfStopBandAttenLabel.setObjectName("bpfStopBandAttenLabel")
+ self.formLayout_2.setWidget(3, QtGui.QFormLayout.LabelRole, self.bpfStopBandAttenLabel)
+ self.bpfTransitionLabel = QtGui.QLabel(self.firbpfPage)
+ self.bpfTransitionLabel.setObjectName("bpfTransitionLabel")
+ self.formLayout_2.setWidget(2, QtGui.QFormLayout.LabelRole, self.bpfTransitionLabel)
+ self.bpfTransitionEdit = QtGui.QLineEdit(self.firbpfPage)
+ self.bpfTransitionEdit.setObjectName("bpfTransitionEdit")
+ self.formLayout_2.setWidget(2, QtGui.QFormLayout.FieldRole, self.bpfTransitionEdit)
+ self.bpfPassBandRippleEdit = QtGui.QLineEdit(self.firbpfPage)
+ self.bpfPassBandRippleEdit.setObjectName("bpfPassBandRippleEdit")
+ self.formLayout_2.setWidget(4, QtGui.QFormLayout.FieldRole, self.bpfPassBandRippleEdit)
+ self.bpfPassBandRippleLabel = QtGui.QLabel(self.firbpfPage)
+ self.bpfPassBandRippleLabel.setObjectName("bpfPassBandRippleLabel")
+ self.formLayout_2.setWidget(4, QtGui.QFormLayout.LabelRole, self.bpfPassBandRippleLabel)
+ self.filterTypeWidget.addWidget(self.firbpfPage)
self.firhpfPage = QtGui.QWidget()
self.firhpfPage.setObjectName("firhpfPage")
+ self.formLayout_3 = QtGui.QFormLayout(self.firhpfPage)
+ self.formLayout_3.setObjectName("formLayout_3")
+ self.endofHpfStopBandLabel = QtGui.QLabel(self.firhpfPage)
+ self.endofHpfStopBandLabel.setObjectName("endofHpfStopBandLabel")
+ self.formLayout_3.setWidget(0, QtGui.QFormLayout.LabelRole, self.endofHpfStopBandLabel)
+ self.endofHpfStopBandEdit = QtGui.QLineEdit(self.firhpfPage)
+ self.endofHpfStopBandEdit.setObjectName("endofHpfStopBandEdit")
+ self.formLayout_3.setWidget(0, QtGui.QFormLayout.FieldRole, self.endofHpfStopBandEdit)
+ self.startofHpfPassBandLabel = QtGui.QLabel(self.firhpfPage)
+ self.startofHpfPassBandLabel.setObjectName("startofHpfPassBandLabel")
+ self.formLayout_3.setWidget(1, QtGui.QFormLayout.LabelRole, self.startofHpfPassBandLabel)
+ self.startofHpfPassBandEdit = QtGui.QLineEdit(self.firhpfPage)
+ self.startofHpfPassBandEdit.setObjectName("startofHpfPassBandEdit")
+ self.formLayout_3.setWidget(1, QtGui.QFormLayout.FieldRole, self.startofHpfPassBandEdit)
+ self.hpfStopBandAttenLabel = QtGui.QLabel(self.firhpfPage)
+ self.hpfStopBandAttenLabel.setObjectName("hpfStopBandAttenLabel")
+ self.formLayout_3.setWidget(2, QtGui.QFormLayout.LabelRole, self.hpfStopBandAttenLabel)
+ self.hpfStopBandAttenEdit = QtGui.QLineEdit(self.firhpfPage)
+ self.hpfStopBandAttenEdit.setObjectName("hpfStopBandAttenEdit")
+ self.formLayout_3.setWidget(2, QtGui.QFormLayout.FieldRole, self.hpfStopBandAttenEdit)
+ self.hpfPassBandRippleLabel = QtGui.QLabel(self.firhpfPage)
+ self.hpfPassBandRippleLabel.setObjectName("hpfPassBandRippleLabel")
+ self.formLayout_3.setWidget(3, QtGui.QFormLayout.LabelRole, self.hpfPassBandRippleLabel)
+ self.hpfPassBandRippleEdit = QtGui.QLineEdit(self.firhpfPage)
+ self.hpfPassBandRippleEdit.setObjectName("hpfPassBandRippleEdit")
+ self.formLayout_3.setWidget(3, QtGui.QFormLayout.FieldRole, self.hpfPassBandRippleEdit)
self.filterTypeWidget.addWidget(self.firhpfPage)
self.verticalLayout.addWidget(self.filterTypeWidget)
self.designButton = QtGui.QPushButton(self.filterFrame)
self.designButton.setMinimumSize(QtCore.QSize(0, 0))
self.designButton.setMaximumSize(QtCore.QSize(200, 16777215))
+ self.designButton.setAutoDefault(True)
+ self.designButton.setDefault(True)
self.designButton.setObjectName("designButton")
self.verticalLayout.addWidget(self.designButton)
self.gridLayout.addWidget(self.filterFrame, 1, 0, 1, 1)
+ self.tabGroup = QtGui.QTabWidget(self.centralwidget)
+ self.tabGroup.setMinimumSize(QtCore.QSize(800, 0))
+ self.tabGroup.setObjectName("tabGroup")
+ self.freqTab = QtGui.QWidget()
+ self.freqTab.setObjectName("freqTab")
+ self.horizontalLayout_2 = QtGui.QHBoxLayout(self.freqTab)
+ self.horizontalLayout_2.setObjectName("horizontalLayout_2")
+ self.freqPlot = Qwt5.QwtPlot(self.freqTab)
+ self.freqPlot.setObjectName("freqPlot")
+ self.horizontalLayout_2.addWidget(self.freqPlot)
+ self.tabGroup.addTab(self.freqTab, "")
+ self.timeTab = QtGui.QWidget()
+ self.timeTab.setObjectName("timeTab")
+ self.horizontalLayout = QtGui.QHBoxLayout(self.timeTab)
+ self.horizontalLayout.setObjectName("horizontalLayout")
+ self.timePlot = Qwt5.QwtPlot(self.timeTab)
+ self.timePlot.setObjectName("timePlot")
+ self.horizontalLayout.addWidget(self.timePlot)
+ self.tabGroup.addTab(self.timeTab, "")
+ self.gridLayout.addWidget(self.tabGroup, 1, 1, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
- self.menubar.setGeometry(QtCore.QRect(0, 0, 624, 25))
+ self.menubar.setGeometry(QtCore.QRect(0, 0, 1124, 25))
self.menubar.setObjectName("menubar")
self.menu_File = QtGui.QMenu(self.menubar)
self.menu_File.setObjectName("menu_File")
self.menubar.addAction(self.menu_File.menuAction())
self.retranslateUi(MainWindow)
+ self.filterTypeWidget.setCurrentIndex(2)
self.tabGroup.setCurrentIndex(0)
QtCore.QObject.connect(self.action_exit, QtCore.SIGNAL("activated()"), MainWindow.close)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
MainWindow.setTabOrder(self.filterTypeComboBox, self.filterDesignTypeComboBox)
MainWindow.setTabOrder(self.filterDesignTypeComboBox, self.sampleRateEdit)
MainWindow.setTabOrder(self.sampleRateEdit, self.filterGainEdit)
- MainWindow.setTabOrder(self.filterGainEdit, self.designButton)
+ MainWindow.setTabOrder(self.filterGainEdit, self.endofLpfPassBandEdit)
+ MainWindow.setTabOrder(self.endofLpfPassBandEdit, self.startofLpfStopBandEdit)
+ MainWindow.setTabOrder(self.startofLpfStopBandEdit, self.lpfStopBandAttenEdit)
+ MainWindow.setTabOrder(self.lpfStopBandAttenEdit, self.lpfPassBandRippleEdit)
+ MainWindow.setTabOrder(self.lpfPassBandRippleEdit, self.startofBpfPassBandEdit)
+ MainWindow.setTabOrder(self.startofBpfPassBandEdit, self.endofBpfPassBandEdit)
+ MainWindow.setTabOrder(self.endofBpfPassBandEdit, self.bpfTransitionEdit)
+ MainWindow.setTabOrder(self.bpfTransitionEdit, self.bpfStopBandAttenEdit)
+ MainWindow.setTabOrder(self.bpfStopBandAttenEdit, self.bpfPassBandRippleEdit)
+ MainWindow.setTabOrder(self.bpfPassBandRippleEdit, self.endofHpfStopBandEdit)
+ MainWindow.setTabOrder(self.endofHpfStopBandEdit, self.startofHpfPassBandEdit)
+ MainWindow.setTabOrder(self.startofHpfPassBandEdit, self.hpfStopBandAttenEdit)
+ MainWindow.setTabOrder(self.hpfStopBandAttenEdit, self.hpfPassBandRippleEdit)
+ MainWindow.setTabOrder(self.hpfPassBandRippleEdit, self.designButton)
MainWindow.setTabOrder(self.designButton, self.tabGroup)
def retranslateUi(self, MainWindow):
- MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
- self.tabGroup.setTabText(self.tabGroup.indexOf(self.freqTab), QtGui.QApplication.translate("MainWindow", "Frequency Domain", None, QtGui.QApplication.UnicodeUTF8))
- self.tabGroup.setTabText(self.tabGroup.indexOf(self.timeTab), QtGui.QApplication.translate("MainWindow", "Time Domain", None, QtGui.QApplication.UnicodeUTF8))
+ MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "GNU Radio Filter Design Tool", None, QtGui.QApplication.UnicodeUTF8))
self.filterTypeComboBox.setItemText(0, QtGui.QApplication.translate("MainWindow", "Low Pass", None, QtGui.QApplication.UnicodeUTF8))
self.filterTypeComboBox.setItemText(1, QtGui.QApplication.translate("MainWindow", "Band Pass", None, QtGui.QApplication.UnicodeUTF8))
self.filterTypeComboBox.setItemText(2, QtGui.QApplication.translate("MainWindow", "Complex Band Pass", None, QtGui.QApplication.UnicodeUTF8))
self.filterTypeComboBox.setItemText(4, QtGui.QApplication.translate("MainWindow", "High Pass", None, QtGui.QApplication.UnicodeUTF8))
self.filterTypeComboBox.setItemText(5, QtGui.QApplication.translate("MainWindow", "Root Raised Cosine", None, QtGui.QApplication.UnicodeUTF8))
self.filterTypeComboBox.setItemText(6, QtGui.QApplication.translate("MainWindow", "Gaussian", None, QtGui.QApplication.UnicodeUTF8))
- self.filterDesignTypeComboBox.setItemText(0, QtGui.QApplication.translate("MainWindow", "Windowed", None, QtGui.QApplication.UnicodeUTF8))
- self.filterDesignTypeComboBox.setItemText(1, QtGui.QApplication.translate("MainWindow", "Equiripple", None, QtGui.QApplication.UnicodeUTF8))
+ self.filterDesignTypeComboBox.setItemText(0, QtGui.QApplication.translate("MainWindow", "Hamming Window", None, QtGui.QApplication.UnicodeUTF8))
+ self.filterDesignTypeComboBox.setItemText(1, QtGui.QApplication.translate("MainWindow", "Hann Window", None, QtGui.QApplication.UnicodeUTF8))
+ self.filterDesignTypeComboBox.setItemText(2, QtGui.QApplication.translate("MainWindow", "Blackman Window", None, QtGui.QApplication.UnicodeUTF8))
+ self.filterDesignTypeComboBox.setItemText(3, QtGui.QApplication.translate("MainWindow", "Rectangular Window", None, QtGui.QApplication.UnicodeUTF8))
+ self.filterDesignTypeComboBox.setItemText(4, QtGui.QApplication.translate("MainWindow", "Kaiser Window", None, QtGui.QApplication.UnicodeUTF8))
+ self.filterDesignTypeComboBox.setItemText(5, QtGui.QApplication.translate("MainWindow", "Blackman-harris Window", None, QtGui.QApplication.UnicodeUTF8))
+ self.filterDesignTypeComboBox.setItemText(6, QtGui.QApplication.translate("MainWindow", "Equiripple", None, QtGui.QApplication.UnicodeUTF8))
self.sampleRateLabel.setText(QtGui.QApplication.translate("MainWindow", "Sample Rate (sps)", None, QtGui.QApplication.UnicodeUTF8))
self.filterGainLabel.setText(QtGui.QApplication.translate("MainWindow", "Filter Gain", None, QtGui.QApplication.UnicodeUTF8))
+ self.endofLpfPassBandLabel.setText(QtGui.QApplication.translate("MainWindow", "End of Pass Band (Hz)", None, QtGui.QApplication.UnicodeUTF8))
+ self.startofLpfStopBandLabel.setText(QtGui.QApplication.translate("MainWindow", "Start of Stop Band (Hz)", None, QtGui.QApplication.UnicodeUTF8))
+ self.lpfStopBandAttenLabel.setText(QtGui.QApplication.translate("MainWindow", "Stop Band Attenuation (dB)", None, QtGui.QApplication.UnicodeUTF8))
+ self.lpfPassBandRippleLabel.setText(QtGui.QApplication.translate("MainWindow", "Pass Band Ripple (dB)", None, QtGui.QApplication.UnicodeUTF8))
+ self.startofBpfPassBandLabel.setText(QtGui.QApplication.translate("MainWindow", "Start of Pass Band (Hz)", None, QtGui.QApplication.UnicodeUTF8))
+ self.endofBpfPassBandLabel.setText(QtGui.QApplication.translate("MainWindow", "End of Pass Band (Hz)", None, QtGui.QApplication.UnicodeUTF8))
+ self.bpfStopBandAttenLabel.setText(QtGui.QApplication.translate("MainWindow", "Stop Band Attenuation (dB)", None, QtGui.QApplication.UnicodeUTF8))
+ self.bpfTransitionLabel.setText(QtGui.QApplication.translate("MainWindow", "Transition Width (Hz)", None, QtGui.QApplication.UnicodeUTF8))
+ self.bpfPassBandRippleLabel.setText(QtGui.QApplication.translate("MainWindow", "Pass Band Ripple (dB)", None, QtGui.QApplication.UnicodeUTF8))
+ self.endofHpfStopBandLabel.setText(QtGui.QApplication.translate("MainWindow", "End of Stop Band (Hz)", None, QtGui.QApplication.UnicodeUTF8))
+ self.startofHpfPassBandLabel.setText(QtGui.QApplication.translate("MainWindow", "Start of Pass Band (Hz)", None, QtGui.QApplication.UnicodeUTF8))
+ self.hpfStopBandAttenLabel.setText(QtGui.QApplication.translate("MainWindow", "Stop Band Attenuation (dB)", None, QtGui.QApplication.UnicodeUTF8))
+ self.hpfPassBandRippleLabel.setText(QtGui.QApplication.translate("MainWindow", "Pass Band Ripple (dB)", None, QtGui.QApplication.UnicodeUTF8))
self.designButton.setText(QtGui.QApplication.translate("MainWindow", "Design", None, QtGui.QApplication.UnicodeUTF8))
+ self.tabGroup.setTabText(self.tabGroup.indexOf(self.freqTab), QtGui.QApplication.translate("MainWindow", "Frequency Domain", None, QtGui.QApplication.UnicodeUTF8))
+ self.tabGroup.setTabText(self.tabGroup.indexOf(self.timeTab), QtGui.QApplication.translate("MainWindow", "Time Domain", None, QtGui.QApplication.UnicodeUTF8))
self.menu_File.setTitle(QtGui.QApplication.translate("MainWindow", "&File", None, QtGui.QApplication.UnicodeUTF8))
self.action_open.setText(QtGui.QApplication.translate("MainWindow", "&Open", None, QtGui.QApplication.UnicodeUTF8))
self.action_open.setShortcut(QtGui.QApplication.translate("MainWindow", "Ctrl+O", None, QtGui.QApplication.UnicodeUTF8))
<rect>
<x>0</x>
<y>0</y>
- <width>624</width>
+ <width>1124</width>
<height>696</height>
</rect>
</property>
<property name="windowTitle">
- <string>MainWindow</string>
+ <string>GNU Radio Filter Design Tool</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout">
- <item row="1" column="1">
- <widget class="QTabWidget" name="tabGroup">
- <property name="minimumSize">
- <size>
- <width>800</width>
- <height>0</height>
- </size>
- </property>
- <property name="currentIndex">
- <number>0</number>
- </property>
- <widget class="QWidget" name="freqTab">
- <attribute name="title">
- <string>Frequency Domain</string>
- </attribute>
- <layout class="QHBoxLayout" name="horizontalLayout_2">
- <item>
- <widget class="QwtPlot" name="freqPlot"/>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="timeTab">
- <attribute name="title">
- <string>Time Domain</string>
- </attribute>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <widget class="QwtPlot" name="timePlot"/>
- </item>
- </layout>
- </widget>
- </widget>
- </item>
<item row="1" column="0">
<widget class="QFrame" name="filterFrame">
<property name="minimumSize">
<widget class="QComboBox" name="filterDesignTypeComboBox">
<item>
<property name="text">
- <string>Windowed</string>
+ <string>Hamming Window</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Hann Window</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Blackman Window</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Rectangular Window</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Kaiser Window</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Blackman-harris Window</string>
</property>
</item>
<item>
</widget>
</item>
<item>
- <layout class="QFormLayout" name="formLayout_2">
+ <layout class="QFormLayout" name="globalParamsLayout">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
</property>
</item>
<item>
<widget class="QStackedWidget" name="filterTypeWidget">
- <widget class="QWidget" name="firlpfPage"/>
- <widget class="QWidget" name="firhpfPage"/>
+ <property name="currentIndex">
+ <number>2</number>
+ </property>
+ <widget class="QWidget" name="firlpfPage">
+ <layout class="QFormLayout" name="formLayout">
+ <item row="0" column="0">
+ <widget class="QLabel" name="endofLpfPassBandLabel">
+ <property name="text">
+ <string>End of Pass Band (Hz)</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLineEdit" name="endofLpfPassBandEdit"/>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="startofLpfStopBandLabel">
+ <property name="text">
+ <string>Start of Stop Band (Hz)</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLineEdit" name="startofLpfStopBandEdit"/>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="lpfStopBandAttenLabel">
+ <property name="text">
+ <string>Stop Band Attenuation (dB)</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QLineEdit" name="lpfStopBandAttenEdit"/>
+ </item>
+ <item row="3" column="1">
+ <widget class="QLineEdit" name="lpfPassBandRippleEdit"/>
+ </item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="lpfPassBandRippleLabel">
+ <property name="text">
+ <string>Pass Band Ripple (dB)</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="firbpfPage">
+ <layout class="QFormLayout" name="formLayout_2">
+ <item row="0" column="0">
+ <widget class="QLabel" name="startofBpfPassBandLabel">
+ <property name="text">
+ <string>Start of Pass Band (Hz)</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLineEdit" name="startofBpfPassBandEdit"/>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="endofBpfPassBandLabel">
+ <property name="text">
+ <string>End of Pass Band (Hz)</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLineEdit" name="endofBpfPassBandEdit"/>
+ </item>
+ <item row="3" column="1">
+ <widget class="QLineEdit" name="bpfStopBandAttenEdit"/>
+ </item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="bpfStopBandAttenLabel">
+ <property name="text">
+ <string>Stop Band Attenuation (dB)</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="bpfTransitionLabel">
+ <property name="text">
+ <string>Transition Width (Hz)</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QLineEdit" name="bpfTransitionEdit"/>
+ </item>
+ <item row="4" column="1">
+ <widget class="QLineEdit" name="bpfPassBandRippleEdit"/>
+ </item>
+ <item row="4" column="0">
+ <widget class="QLabel" name="bpfPassBandRippleLabel">
+ <property name="text">
+ <string>Pass Band Ripple (dB)</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="firhpfPage">
+ <layout class="QFormLayout" name="formLayout_3">
+ <item row="0" column="0">
+ <widget class="QLabel" name="endofHpfStopBandLabel">
+ <property name="text">
+ <string>End of Stop Band (Hz)</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLineEdit" name="endofHpfStopBandEdit"/>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="startofHpfPassBandLabel">
+ <property name="text">
+ <string>Start of Pass Band (Hz)</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLineEdit" name="startofHpfPassBandEdit"/>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="hpfStopBandAttenLabel">
+ <property name="text">
+ <string>Stop Band Attenuation (dB)</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QLineEdit" name="hpfStopBandAttenEdit"/>
+ </item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="hpfPassBandRippleLabel">
+ <property name="text">
+ <string>Pass Band Ripple (dB)</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <widget class="QLineEdit" name="hpfPassBandRippleEdit"/>
+ </item>
+ </layout>
+ </widget>
</widget>
</item>
<item>
<property name="text">
<string>Design</string>
</property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
</widget>
</item>
</layout>
</widget>
</item>
+ <item row="1" column="1">
+ <widget class="QTabWidget" name="tabGroup">
+ <property name="minimumSize">
+ <size>
+ <width>800</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="currentIndex">
+ <number>0</number>
+ </property>
+ <widget class="QWidget" name="freqTab">
+ <attribute name="title">
+ <string>Frequency Domain</string>
+ </attribute>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <widget class="QwtPlot" name="freqPlot"/>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="timeTab">
+ <attribute name="title">
+ <string>Time Domain</string>
+ </attribute>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QwtPlot" name="timePlot"/>
+ </item>
+ </layout>
+ </widget>
+ </widget>
+ </item>
</layout>
</widget>
<widget class="QMenuBar" name="menubar">
<rect>
<x>0</x>
<y>0</y>
- <width>624</width>
+ <width>1124</width>
<height>25</height>
</rect>
</property>
<tabstop>filterDesignTypeComboBox</tabstop>
<tabstop>sampleRateEdit</tabstop>
<tabstop>filterGainEdit</tabstop>
+ <tabstop>endofLpfPassBandEdit</tabstop>
+ <tabstop>startofLpfStopBandEdit</tabstop>
+ <tabstop>lpfStopBandAttenEdit</tabstop>
+ <tabstop>lpfPassBandRippleEdit</tabstop>
+ <tabstop>startofBpfPassBandEdit</tabstop>
+ <tabstop>endofBpfPassBandEdit</tabstop>
+ <tabstop>bpfTransitionEdit</tabstop>
+ <tabstop>bpfStopBandAttenEdit</tabstop>
+ <tabstop>bpfPassBandRippleEdit</tabstop>
+ <tabstop>endofHpfStopBandEdit</tabstop>
+ <tabstop>startofHpfPassBandEdit</tabstop>
+ <tabstop>hpfStopBandAttenEdit</tabstop>
+ <tabstop>hpfPassBandRippleEdit</tabstop>
<tabstop>designButton</tabstop>
<tabstop>tabGroup</tabstop>
</tabstops>