1. # coding: utf-8
  2. from pylafii import *
  3. from scipy import *
  4. class FGSIN(Logic):
  5. class Control(ControlPanelFactory):
  6. SEQUENCE = ['mag','freq','phase','bias','nums','samplerate','result']
  7. class Plot(PlotPanel): pass
  8. mag = Terminal(1.)
  9. freq = Terminal(0.01)
  10. phase = Terminal(0.)
  11. bias = Terminal(0.)
  12. nums = Terminal(2000)
  13. samplerate = Terminal(1.)
  14. @rule()
  15. def result(self):
  16. print 'updated'
  17. t = arange(self.nums) / self.samplerate
  18. w = sin(2 * pi * self.freq * t + self.phase / 180. * pi)
  19. return self.mag * w + self.bias
  20. if __name__ == '__main__':
  21. import Tkinter
  22. Equipment(Tkinter.Tk(),FGSIN)
  23. Tkinter.mainloop()
  1. # coding: utf-8
  2. from pylafii import *
  3. from scipy import *
  4. class FGSIN(Logic):
  5. mag = Terminal(1.)
  6. freq = Terminal(0.01)
  7. phase = Terminal(0.)
  8. bias = Terminal(0.)
  9. nums = Terminal(2000)
  10. samplerate = Terminal(1.)
  11. @rule('mag','freq','phase','bias','nums','samplerate')
  12. def result(self):
  13. t = arange(self.nums) / self.samplerate
  14. w = sin(2 * pi * self.freq * t + self.phase / 180. * pi)
  15. return self.mag * w + self.bias
  16. class Plot(PlotPanel): pass
  17. class Control(ControlPanelFactory):
  18. SEQUENCE = ['mag','freq','phase','bias','nums','samplerate','result']
  19. if __name__ == '__main__':
  20. import Tkinter
  21. Equipment(Tkinter.Tk(),FGSIN,auto_trig=True)
  22. Tkinter.mainloop()
  1. # coding: utf-8
  2. from pylafii import *
  3. from scipy import *
  4. class MIXER(Parts):
  5. class Control(ControlPanelFactory): SEQUENCE = ['samplerate','result']
  6. class Plot(PlotPanel): pass
  7. sig_a = Terminal(array([]))
  8. sig_b = Terminal(array([]))
  9. samplerate = Terminal(1.)
  10. @rule('sig_a','sig_b',init=array([]))
  11. def result(self):
  12. if self.sig_a.shape == self.sig_b.shape:
  13. return self.sig_a * self.sig_b
  14. else:
  15. return self.result
  16. if __name__ == '__main__':
  17. import Tkinter
  18. from s01_fgsin_autotrig import FGSIN
  19. def test(master=None):
  20. mix = Equipment(master,MIXER,auto_trig=True)
  21. fga = Equipment(Tkinter.Toplevel(master),FGSIN,auto_trig=True)
  22. fgb = Equipment(Tkinter.Toplevel(master),FGSIN,auto_trig=True)
  23. connect((mix.logic,'sig_a'),(fga.logic,'result'))
  24. connect((mix.logic,'sig_b'),(fgb.logic,'result'))
  25. connect((fga.logic,'nums'),(fgb.logic,'nums'))
  26. connect(*[(o.logic,'samplerate') for o in [mix,fga,fgb]])
  27. fga.logic.freq = 0.001
  28. fga.logic.bias = 1.
  29. fga.logic.result
  30. fgb.logic.freq = 0.05
  31. fgb.logic.result
  32. mix.panel['plot'].children['result'].panel['plot'].ax.set_title('TITLE')
  33. # mix.widget('plot.result.plot').ax.set_title('TITLE')
  34. test(Tkinter.Tk())
  35. Tkinter.mainloop()
  1. # coding: utf-8
  2. if __name__ == '__main__':
  3. import Tkinter
  4. from pylafii import *
  5. from s01_fgsin_autotrig import FGSIN
  6. from s02_mixer import MIXER
  7. def test(master=None):
  8. mix = Embed(master,MIXER,LayoutV,text='RF',auto_trig=True).grid(row=0,column=2,sticky=Tkinter.N)
  9. fga = Embed(master,FGSIN,LayoutV,text='LO',auto_trig=True).grid(row=0,column=0)
  10. fgb = Embed(master,FGSIN,LayoutV,text='IF',auto_trig=True).grid(row=0,column=1)
  11. connect((mix.logic,'sig_a'),(fga.logic,'result'))
  12. connect((mix.logic,'sig_b'),(fgb.logic,'result'))
  13. connect((fga.logic,'nums'),(fgb.logic,'nums'))
  14. connect(*[(o.logic,'samplerate') for o in [mix,fga,fgb]])
  15. fga.logic.freq = 0.05
  16. fga.logic.result
  17. fgb.logic.freq = 0.001
  18. fgb.logic.bias = 1.
  19. fgb.logic.nums = 2001
  20. fgb.logic.result
  21. mix.panel['plot'].children['result'].panel['plot'].ax.set_ylim([-2.,2.])
  22. fga.panel['plot'].children['result'].panel['plot'].ax.set_ylim([-2.,2.])
  23. fgb.panel['plot'].children['result'].panel['plot'].ax.set_ylim([-2.,2.])
  24. test(Tkinter.Tk())
  25. Tkinter.mainloop()
  1. # coding: utf-8
  2. from pylafii import *
  3. from s01_fgsin_autotrig import FGSIN
  4. from s02_mixer import MIXER
  5. class MODAM(Logic):
  6. class Plot(Panel):
  7. def __init__(self,master=None,cnf={},**kw):
  8. Panel.__init__(self,master,cnf,**kw)
  9. mix = Embed(self,MIXER,LayoutV,name='mixer',text='RF',auto_trig=True).grid(row=0,column=2,sticky=Tkinter.N)
  10. fga = Embed(self,FGSIN,LayoutV,name='sga',text='LO',auto_trig=True).grid(row=0,column=0)
  11. fgb = Embed(self,FGSIN,LayoutV,name='sgb',text='IF',auto_trig=True).grid(row=0,column=1)
  12. connect((mix.logic,'sig_a'),(fga.logic,'result'))
  13. connect((mix.logic,'sig_b'),(fgb.logic,'result'))
  14. connect((fga.logic,'nums'),(fgb.logic,'nums'))
  15. connect(*[(o.logic,'samplerate') for o in [mix,fga,fgb]])
  16. fga.logic.freq = 0.05
  17. fga.logic.result
  18. fgb.logic.freq = 0.001
  19. fgb.logic.bias = 1.
  20. fgb.logic.nums = 2001
  21. fgb.logic.result
  22. if __name__ == '__main__':
  23. import Tkinter
  24. c = Equipment(Tkinter.Tk(),MODAM)
  25. c.panel['plot'].children['mixer'].panel['plot'].children['result'].panel['plot'].ax.set_ylim([-2.,2.])
  26. c.panel['plot'].children['sga'].panel['plot'].children['result'].panel['plot'].ax.set_ylim([-2.,2.])
  27. c.panel['plot'].children['sgb'].panel['plot'].children['result'].panel['plot'].ax.set_ylim([-2.,2.])
  28. Tkinter.mainloop()
  1. # coding: utf-8
  2. from pylafii import *
  3. from s01_fgsin_autotrig import FGSIN
  4. from s02_mixer import MIXER
  5. kw = lambda **kwargs: kwargs
  6. class MODAM(Logic):
  7. lof = Terminal(.05)
  8. iff = Terminal(.001)
  9. ifm = Terminal(1.)
  10. ifb = Terminal(1.)
  11. def __init__(self,master=None,name=None):
  12. Logic.__init__(self,master,name)
  13. sga = FGSIN(self,name='sga')
  14. sgb = FGSIN(self,name='sgb')
  15. mix = MIXER(self,name='mixer')
  16. #
  17. connect((self,'lof'),(sga,'freq'))
  18. connect((self,'iff'),(sgb,'freq'))
  19. connect((self,'ifm'),(sgb,'mag'))
  20. connect((self,'ifb'),(sgb,'bias'))
  21. #
  22. for sg,name in [(sga,'sig_a'),(sgb,'sig_b')]: connect((mix,name),(sg,'result'))
  23. connect(*[(sg,'nums') for sg in [sga,sgb]])
  24. connect(*[(o,'samplerate') for o in [mix,sga,sgb]])
  25. #
  26. class Control(Panel):
  27. LAYOUT = [(Tkinter.Label,kw(text='LO Frequency [MHz]')),(Entry,kw(name='lof')),
  28. (Tkinter.Label,kw(text='IF Frequency [MHz]')),(Entry,kw(name='iff')),
  29. (Tkinter.Label,kw(text='IF Magnitude [mV]')),(Entry,kw(name='ifm')),
  30. (Tkinter.Label,kw(text='IF Bias Voltage [mV]')),(Entry,kw(name='ifb')),]
  31. class Plot(Panel):
  32. def __init__(self,master=None,cnf={},**kw):
  33. Panel.__init__(self,master,cnf,**kw)
  34. Embed(self,MIXER,LayoutV,name='mixer',text='RF',auto_trig=True,mount=False).pack(side=Tkinter.RIGHT)
  35. Embed(self,FGSIN,PlotLayout,name='sgb',text='IF',mount=False).pack(side=Tkinter.RIGHT,anchor=Tkinter.N)
  36. Embed(self,FGSIN,PlotLayout,name='sga',text='LO',mount=False).pack(side=Tkinter.RIGHT,anchor=Tkinter.N)
  37. def connect(self,logic):
  38. Panel.connect(self,logic)
  39. for name in ['sga','sgb','mixer']: self.children[name].mount(logic.children[name])
  40. class Menu(DefaultMenu):
  41. ITEMS = [
  42. #['File', ['insert', pylaf.kw(index=0,itemType='command',label='Load')],],
  43. ['File', ['add_command', kw(label='Load')],],
  44. ['Edit',
  45. ['add_command', kw(label='Copy',command='_copy')],
  46. ['add_command', kw(label='Paset')],
  47. ['Test', ['add_command', kw(label='Test2')]],
  48. ],
  49. ['Stub', ],
  50. ]
  51. def _copy(self):
  52. print '_copy was invoked !'
  53. if __name__ == '__main__':
  54. tk = Tkinter.Tk()
  55. app = Equipment(tk,MODAM,LayoutV)
  56. # spc = Embed(Tkinter.Toplevel(tk),Spectrum); spc.assign(Spectrum()); spc.pack()
  57. # spc.panel('plot').resize(dpi=50,figsize=(7,5))
  58. # spc.panel('plot').ax.figure.subplots_adjust(
  59. # left = .15,
  60. # bottom = .15,
  61. # )
  62. # spc.panel('plot').ax.set_xlim([0.095,.105])
  63. # spc.panel('plot').ax.set_ylim([-140.,0.])
  64. app.logic.children['sga'].nums = 2001
  65. for name in ['sga','sgb','mixer']:
  66. app.panel['plot'].children[name].panel['plot'].children['result'].panel['plot'].ax.set_ylim([-2.,2.])
  67. # app.panel['plot'].children[name].panel['plot'].children['result'].panel['plot'].resize(dpi=50,figsize=(5,4))
  68. Tkinter.mainloop()
  69. }}}