内容介绍
内容介绍
1 实现功能介绍
这回根据硬禾的要求, 实现了FM收音机的功能. 使用soapysdr驱动 plutosdr, 使用radio-core进行解调, 使用pyqt5实现界面. 同时学 习了gnuradio的使用, 利用gnuradio companion根据设计的 flowchart生成了python控制代码. 收音机能够收听fm广播, 能够调 节音量, 能够切换调频电台.
主要代码片段:
1. 从sdr设备获取频率信号滤波后解调.def run(self): print("[DEMOD] Starting.") self.running = True self.safed = False buff = np.zeros([self.dsp_buff], dtype=np.complex64) self.soapy.start() with self.sd.OutputStream(blocksize=self.dsp_out - 1, callback=self.router, samplerate=self.afs, channels=2): while self.running: count = 0 while count < self.dsp_buff: count += self.soapy.read([buff[count:]], self.sdr_buff) self.que.put(buff.astype(np.complex64)) with self.que.mutex: self.que.queue.clear() self.soapy.stop() self.safed = True def router(self, outdata, f, t, s): if self.que.qsize() < 1: time.sleep(0.1) try: inp = self.que.get(timeout=0.5) except queue.Empty: raise self.sd.CallbackAbort finally: if not self.running: raise self.sd.CallbackAbort if self.mode == 0: L, R = self.wbfm.run(self.dec.run(inp)) if self.wbfm.freq >= 19010 and self.wbfm.freq <= 18990: R = L mydstack = np.dstack((R, L)) outdata[:] = ( mydstack * self.vol) if self.mode == 1: LR = np.zeros((self.dsp_out*2), dtype=np.float32) outdata[:] = LR.reshape(self.dsp_out, 2)
class MainWindow(QMainWindow): def __init__(self, appctxt): super(MainWindow, self).__init__() ... uic.loadUi(self.appctxt.get_resource('mainwindow.ui'), self) ... def handlePower(self): if not self.handleDevice(): return if self.running: ... self.demod.stop() else: ... self.demod.start(QThread.TimeCriticalPriority) ... self.running = not self.running
2 心得体会和建议
- plutosdr文档完善, 开发友好, 代码齐全, 技术开放是入门sdr之 好物.
- gnuradio安装方便, 使用简单, 开源免费, 支持广泛是入门sdr之 佳品
- 本人发现funpack活动中善用python和github两大利器, 总能够开 阔视野, 化繁为简.
- sdr算是刚刚入门, 后面会继续充分利用plutosdr进一步学习.
3 Code
https://github.com/picospuch/eetree-funpack-workshop/tree/phase-five
新年快乐, 祝funpack活动越办越好.
团队介绍
james
评论
0 / 100
查看更多
猜你喜欢
Funpack第五期使用ADI PLUTO实现FM播放器使用ADI PLUTO与GNU Radio 实现FM播放器。
geekxw
1144
Funpack第五期基于ADI PLUTO实现FM播放器本期板卡为ADI公司的ADALM-PLUTO口袋仪器,具有独立的接收和发射通道,可在全双工模式下工作,可以在70MHz至6000MHz频率范围内以最高每秒61.44MSPS产生或捕获RF模拟信号.
xinshuwei
1403
「Funpack第五期」「ADI PLUTO」FM播放器拓展ADALM-PLUTO的频段,替换ADALM-PLUTO天线,实现从87~108M频段的调频广播的解调,完成常见FM收音机的功能。
Lithium
1187