数字信号处理器和通信包。

scikit-dsp-comm的Python项目详细描述


logo

SCIKIT数字信号处理器通信

pypidocs

背景

这个软件包的来源是wiley在2013年出版的《假人信号和系统》一书。本书的原始模块名为ssd.py。在scikit dsp comm中,该模块被重命名为sigsys.py,以更好地反映信号处理和通信理论建立在信号与系统这一电气工程课程的传统学科中的事实。

包装高级概述

该软件包是一个支持信号处理和通信理论教学和研究的功能和类集合。这个软件包的基础是代码> SISPY。尤其是目前运行在python2.7x3.6x下的代码。

我们正在努力改进文档,并举例说明。小错误正在修复中。计划了新功能,特别是GPS_helper模块和同步模块的新增功能。我们还希望改进fec conv,将开发速度提高1/3,并使用编译后的代码来提高性能。

pyaudio_helper的实时音频dsp功能允许在运行于jupyter笔记本电脑时,通过ipywidgets启用实时用户控制的双通道算法开发。

最后,有一个强烈的愿望是利用实时数字信号处理器的能力pyaudio\u helper来允许从rtlsdr\u helper到解调算法和通过pyaudio接口输出的复杂基带(iq)信号的实时流。

目前有10个模块组成SCIKIT DSP通信:

  1. sigsys.py用于基本信号和系统功能,包括连续时间和离散时间,包括图形显示工具,如极零图、上采样和下采样。

  2. digitalcomm.py用于数字调制理论组件,包括异步重采样和可变延时功能,这两种功能在高级调制解调器测试中都很有用。

  3. synchronization.py包含锁相环模拟功能和数字通信波形的载波和相位同步功能。

  4. fec_conv.py用于生成率为一半的卷积码和软判决viterbi算法解码,包括网格和网格回溯显示功能。

  5. fir_design_helper.py用于使用kaiser窗口和等波纹设计轻松设计低通、高通、带通和带阻滤波器,还包括一个列表绘制功能,用于轻松比较幅度、相位和群延迟频率响应。

  6. iir_design_helper.py用于使用scipy.signal butterworth、chebyshev i和ii和椭圆设计的低通、高通、带通和带阻滤波器的简单设计,包括使用scipy.signal的二阶截面(sos)拓扑级联,还包括一个列表绘制功能,便于比较震级,相位和群延迟频率响应。

  7. multirate.py将数字滤波器封装到对象中进行滤波、整数因子插值和整数因子抽取。

  8. < IIR > Cy/2>代码> >写>代码> C/C++< /COD> FIR和IIR滤波器的头文件,使用"二阶截面表示法"实现了在<代码> C/C++<代码>中的应用。最后一个模块在嵌入式系统的实时信号处理中得到了应用,但在C+C++< /C> >中,可以用于仿真模型。

目前,模块集合包含大约125个函数和类。作者/维护人员正在努力获取更详细的文档。

额外费用

这个包包含helper模块rtlsdr_helperpyaudio_helper这两个模块需要包pyrtlsdrpyaudio。要使用这些帮助程序的全部功能,请从scikit dsp comm文件夹安装软件包,如下所示:\

pip install -e .[helpers]

下面将更详细地介绍安装过程。

  1. <代码> PydiooHyelHelp.Py < /C> >围绕<代码> PyOdio< <代码>所需的代码包装类(包装C++库<代码> PARTUUDIO < /代码>)以建立非阻塞音频输入/输出流。用户只需编写回调函数,就可以使用平台上可用的任何输入/输出设备来实现实时的dsp处理。这个结果对象还包含一个用于后处理的捕获缓冲区和一个用于评估回调函数使用的处理时间的计时标记。在jupyter笔记本中开发应用程序时,支持ipywidgets和线程。

  2. rtl sdr_helper.pypyrtldsr接口,为来自低成本(约20美元)rtl-sdr usb硬件加密狗的复杂基带软件定义无线电(sdr)样本提供简单的捕获方法。此模块中的其余功能支持调频调制解调器的实现,以及调频单声道、调频立体声完整接收机的示例,以及用于fsk解调的工具,包括位同步。

文档

文档现在位于readthedocs中,您可以通过单击此readme顶部附近的docs徽章来访问这些文档。示例笔记本可以在github页面上查看。及时地,更多的笔记本文章将从wickert博士的信息中心中提取出来。

在系统上进行设置

使用此软件包的最佳方法是克隆此存储库,然后安装它。

git clone https://github.com/mwickert/scikit-dsp-comm.git

有些模块的包依赖关系可能需要避免。尤其是当涉及到硬件接口时。具体的硬件和软件配置细节在wiki页面中讨论。对于windows用户,pip安装几乎可以解决所有问题。下面我假设您的路径上有python,因此,例如使用anaconda,我建议让安装程序为您设置这些路径。

带依赖项的可编辑安装

使用克隆的repo根目录中的终端执行可编辑的pip安装

pip install -e .[helpers]

无依赖项的可编辑安装

要在不依赖pyaudio和rtl-sdr的情况下安装,因此无法使用这些模块,

pip install -e .

在windows上,应该安装pyaudio所需的二进制文件,但在其他平台上,您将拥有o做更多的工作(conda forge安装在2017年scipy sprint结束时等待)。该软件包的所有功能都是可用的,除了pyaudio和rtl-sdr收音机外,还可以进行任何特殊安装。有关详细信息,请参见wiki页面。

为什么是可编辑安装?

可编辑的pip安装的优点是很容易让scikit dsp comm保持最新。如果您知道已将更新推送到主分支,只需转到本地repo文件夹并

git pull origin master

这将更新本地repo并自动更新python安装,而无需再次运行pip注意:如果运行任何python内核,例如jupyter笔记本,则需要重新启动内核以确保重新加载任何模块更改。


特点:实时数字信号处理器,带pyaudio_helper

实时的数字信号处理器体验在Jupyter笔记本电脑中是可能的。Fall 1017更新到pyaudio_helper使使用ipywidgets进行双声道音频(立体声)和包括交互成为可能。下面给出了一个简单循环的回调函数。注意:并非所有代码都显示在这里,但在这里可以使用

查找可用音频设备的索引

importsk_dsp_comm.pyaudio_helperaspah# Check system audio devices availablepah.available_devices()
Index 0 device name= Built-in Microphone, inputs=2, outputs=0
Index 1 device name= Built-in Output, inputs=0, outputs=2
Index 2 device name= iMic USB audio system, inputs=2, outputs=2

您可以将设备索引视为音频接线板上的插孔号。

编写一个简单的回调函数

这里使用ndarrays处理每个帧,并在帧级别应用增益缩放。一般情况下,加工必须逐样进行。pythonglobals可用于保持给定dsp算法的状态,例如fir或iir滤波器。

# Scale right and left channels independentlydefcallback(in_data,frame_count,time_info,status):DSP_IO.DSP_callback_tic()# convert byte data to ndarrayin_data_nda=np.fromstring(in_data,dtype=np.int16)# separate left and right datax_left,x_right=DSP_IO.get_LR(in_data_nda.astype(float32))#***********************************************# DSP operations herey_left=volume_scale_left.value*x_lefty_right=volume_scale_right.value*x_right#***********************************************# Pack left and right data togethery=DSP_IO.pack_LR(y_left,y_right)# Typically more DSP code here     #***********************************************# Save data for later analysis# accumulate a new frame of samplesDSP_IO.DSP_capture_add_samples_stereo(y_left,y_right)#***********************************************# Convert from float back to int16y=y.astype(int16)DSP_IO.DSP_callback_toc()# Convert ndarray back to bytes#return (in_data_nda.tobytes(), pyaudio.paContinue)returny.tobytes(),pah.pyaudio.paContinue

dsp-io对象创建和流媒体

回拨到位后,我们现在可以创建一个dsp io对象并开始流媒体。

N_FRAME=512# Create streaming object: use Built-in mic (idx = 0) and output (idx = 1)DSP_IO=pah.DSP_io_stream(callback,in_idx=0,out_idx=1,fs=44100,frame_length=N_FRAME,Tcapture=10)# use thread stream so widget can be used; Tsec = 0 <==> infinite streamDSP_IO.interactive_stream(Tsec=20,numChan=2)# 20 Second stereo stream# display volume control widgetswidgets.HBox([volume_dB_left,volume_dB_right])

juypter Notebook Cell Output

MacBook麦克风输入的一部分捕获缓冲区

通过降低扬声器捕捉麦克风输入以避免反馈


欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
与ReentrantLock相比,java ReentrantReadWriteLock的性能非常差   java如何使用Maven Android Studio正确导入?   安卓将ADB添加到我的Java PC应用程序   反射Java getDeclaredConstructor失败,来自JUnit的NoSuchMethodException   JSP上siteedit标记库的java替代   JavaSpring环境概要文件和JPA   java中是否有一个类似于StringBuilder的类,唯一的区别是它具有固定的长度?   JavaMathContext。小数点32 vs MathContext。小数点64,使用哪一个,为什么?   java使用spring在Ibm Websphere MQ中实现重试逻辑   java调用SpriteBatch。开始()和结束()   java有一种从文本中读取文本的方法。文件,并将其设置为pom中的maven属性。xml专家?   java让sitemesh使用struts2   Java Swing:在现有窗口上定位对话框   使用带有MemSql的JPA本机查询的java Select json列