如何在Python中加速信号处理
This post is the eighth installment of the series of articles on the RAPIDS ecosystem. The series explores and discusses various aspects of RAPIDS that allow its users solve ETL (Extract, Transform, Load) problems, build ML (Machine Learning) and DL (Deep Learning) models, explore expansive graphs, process signal and system log, or use SQL language via BlazingSQL to process data.
You may or may not be aware that every bit of information your computer has received from a server miles away, every pixel your screen has shown, or every tune your speakers has produced was some form of a signal that was sent over a ‘wire’. That signal was most likely encoded by the sender end so it could carry the information and the receiver side decoded it for further usage.
本文介绍RAPIDS生态系统系列。该系列探讨并讨论了RAPIDS的各个方面,这些方面使RAPIDS的用户可以解决ETL(提取,转换,加载)问题,构建ML(机器学习)和DL(深度学习)模型,探索膨胀图,过程信号和系统日志,或者通过BlazingSQL使用SQL语言处理数据。
可能会或可能不会意识到,计算机从一英里之外的服务器接收到的每点信息,屏幕上显示的每个像素或扬声器产生的每个音调都是通过“电线”发送的某种信号。该信号最有可能是由发送方编码的,因此可以携带信息,而接收方则对其进行解码以备将来使用。
信号丰富:音频,无线电或其它电磁波(例如伽马,红外或可见光),无线通信,海浪等。这些波浪中有一些是人造的,许多是自然产生的。甚至图像或股市时间序列也可以被视为信号。
cuSignal是RAPIDS库生态系统的更新版本。旨在分析和处理任何形式的信号,并在scikit-learn信号库之后进行了紧密建模。与scikit-learn不同,cuSignal将NVIDIA GPU的功能带到信号处理中,从而导致计算速度提高了几个数量级。

Signals are abundant: audio, radio or other electromagnetic waves (like gamma, infrared or visible light), wireless communications, ocean wave, and so on. Some of these waves are man-made, many are produced naturally. Even images or stock market time series can be seen and processed as signals.
cuSignal is a newer addition to the RAPIDS ecosystem of libraries. It is aimed at analyzing and processing signals in any form and is modeled closely after the scikit-learn signal library. However, unlike scikit-learn, cuSignal brings the power of NVIDIA GPUs to signal processing resulting in orders-of-magnitude increase in speed of computations.
In this post, we will introduce and showcase the most common functionality of RAPIDS cuSignal. As with the other libraries we already discussed, to help with getting familiar with cuSignal, we provide a cheat sheet that can be downloaded here: cuSignal cheatsheet, and an interactive notebook with all the current functionality of cuSignal showcased.
本文将介绍并展示RAPIDS cuSignal的最常用功能。与已经讨论过的其它库一样,为了帮助熟悉cuSignal,提供了一个备忘单,可以下载:cuSignal备忘单,以及展示 cuSignal所有当前功能的交互式笔记本。
Frequency
One of the most fundamental properties of signals is frequency. Hertz (abbreviated Hz) is a fundamental unit of frequency defined as a single cycle per second; it was named after Heindrich Rudolf Hertz who provided conclusive proof of the existence of electromagnetic waves. Any signal we detect or store is closely related to time: you could probably safely argue that any signal is a time series with ‘slightly’ different tools to analyze it.
The Alternating Current (AC) supplied to each home is an electric current that oscillates at either 50Hz or 60Hz, audio signals normally cover roughly the spectrum between 20Hz – 20,000Hz (or 20kHz), mobile bands cover some narrow bands in 850-900MHz, 1800Mhz (1.8GHz) and 1900MHz, Wifi signals oscillate at some predefined frequencies around either 2.4GHz or 5GHz. And these are but a few examples of signals that surround us. Ever heard of radio telescopes? The Wilkinson Microwave Anisotropy Probe is capable of scanning the night sky and detecting signals centered around 5 high-frequency bands: 23 GHz, 33 GHz, 41 GHz, 61 GHz, and 94 GHz, helping us to understand the beginnings of our universe. However, this is still just in the middle of the spectrum of electromagnetic waves.
信号的最基本特性之一是频率。赫兹(缩写为Hz)是频率的基本单位,定义为每秒一个周期。以Heindrich Rudolf Hertz的名字命名,后者为电磁波的存在提供了确凿的证据。检测到或存储的任何信号都与时间密切相关:可能可以肯定地说,任何信号都是一个 时间序列, 使用“略有不同”的工具进行分析。
提供给每个家庭的交流电(AC)是一种以50Hz或60Hz振荡的电流,音频信号通常覆盖20Hz-20,000Hz(或20kHz)之间的频谱,移动频段覆盖850-900MHz的一些窄带, 1800Mhz(1.8GHz)和1900MHz,Wifi信号以2.4 GHz或5 GHz附近的一些预定义频率振荡。这些只是围绕信号的一些示例。听说过射电望远镜吗?威尔金森微波各向异性探测器能够扫描夜空和检测信号围绕着5高频带的:23千兆赫,33千兆赫,41千兆赫,61千兆赫和94千兆赫,从而帮助了解宇宙的开端。但是,仍处于电磁波频谱的中间。

Figure 1: Source: Electromagnetic spectrum, https://www.nasa.gov/directorates/heo/scan/spectrum/txt_electromagnetic_spectrum.html
Digital or analog
In the early 20th century, almost all signals we dealt with were analog. Amplifying or recording speech or music was done on tapes and through fully analog signal paths using vacuum tubes, transistors, or, nowadays, operational amplifiers. However, the storage and reproduction of signals (music or else) have changed with the advent of Digital Signal Processing (or DSP). Still, remember CDs? Even if not, the music today is stored as a string of zeros and ones. However, when you play a song, the signal that drives the speaker is analog. In order to play an MP3, the signal needs to be converted from digital to analog and this can be achieved by passing it through the Digital-to-Analog converter (DAC): then the signal can be amplified and played through the speaker. The reverse process happens when you want to save the signal in a digital format: an analog signal is passed through an Analog-to-Digital converter (ADC) that digitizes the signal.
With the emergence of the high-speed Internet and 5th Generation mobile networks, signal analysis and processing has become a vital tool in many domains. cuSignal brings the processing power of NVIDIA GPUs into this domain to help with the current and emerging demands of the field.
在20世纪初,处理几乎所有信号都是模拟信号。使用磁带,晶体管或当今的运算放大器,在磁带上通过完全模拟的信号路径来放大或记录语音或音乐。但是,随着数字信号处理(或DSP)的出现,信号(音乐或其它)的存储和再现已发生了变化。还是记得CD吗?即使不是,今天的音乐也存储为零和一串。但是,当播放歌曲时,驱动扬声器的信号是模拟信号。为了播放MP3,需要将信号从数字转换为模拟,可以将其通过数模转换器(DAC)来实现:然后可以将信号放大并通过扬声器播放。当以数字格式保存信号时,将发生相反的过程:数字化信号。
随着高速互联网和第五代移动网络的出现,信号分析和处理已成为许多领域的重要工具。cuSignal将NVIDIA GPU的处理能力带入了这一领域,以帮助满足该领域的当前和新兴需求。
Convolution
One of the most fundamental tools to analyze signals and extract meaningful information is convolution. Convolution is a mathematical operation that takes two signals and produces a third one, filtered. In the signal processing domain, convolution can be used to filter some frequencies from the spectrum of the signal to better isolate or detect some interesting properties. Just like in Convolutional Neural Networks, where the network learns different kernels to sharpen, blur or otherwise extract interesting features from an image to, for example, detect objects, the signal convolutions use different windows that help to refine the signal.
Let’s assume that we have a digital signal that looks as below.
卷积是分析信号和提取有意义的信息的最基本工具之一。卷积是一种数学运算,需要两个信号并产生第三个信号(经过滤波)。在信号处理领域,可以使用卷积从信号频谱中滤除某些频率,以更好地隔离或检测一些有趣的属性。就像在卷积神经网络中一样,该网络学习不同的内核以锐化,模糊或以其它方式从图像中提取有趣的特征以(例如)检测对象,信号卷积使用不同的窗口来帮助改善信号。
假设有一个如下所示的数字信号。

Figure 2: Sample signal with an exponentially decaying noise component.
The signal above is a 2 Vrms (Root Mean Squared) a sine wave with its frequency slowly modulated around 3kHz, corrupted by the white noise of exponentially decreasing magnitude sampled at 10 kHz. To see the effect different windows would have on this signal, we will use Hamming and Dolph-Chebyshev windows.
上面的信号是一个2 Vrms(均方根)正弦波,其频率在3kHz左右缓慢调制,并被在10 kHz采样的幅度呈指数下降的白噪声破坏。为了查看不同窗口对信号的影响,将使用 Hamming 和 Dolph-Chebyshev 窗口。
window_hamming = cusignal.hamming(51)
window_chebwin = cusignal.chebwin(51, at=100)

filtered_hamming = cusignal.convolve(
data
, window_hamming
, method=‘direct’
) / cp.sum(window_hamming)

filtered_chebwin = cusignal.convolve(
data
, window_chebwin
, method=‘direct’
) / cp.sum(window_chebwin)

Figure 3: Effects of applying Hamming and Dolph-Chebyshev windows on the original signal.
On the right, you can see the difference between the two windows. They are of similar shape but the Dolph-Chebyshev window is narrower and is effectively a more narrow band-pass filter compared to the Hamming window. Both of these methods can definitely help to find the fundamental frequency in the data.
For a full list of all the windows supported in cuSignal, refer to the cheat sheet you can download cuSignal cheatsheet, or try any of them in an interactive cuSignal notebook here.
在右侧,可以看到两个窗口之间的区别。具有相似的形状,但是与汉明窗相比,Dolph-Chebyshev窗更窄,并且实际上是更窄的带通滤波器。这两种方法绝对可以帮助找到数据中的基本频率。
有关cuSignal支持的所有窗口的完整列表,请参考备忘单,可以下载cuSignal备忘单,或在交互式cuSignal笔记本中 尝试其中的任何一种。
Spectral analysis
While filtering the signal using convolution might help to find the fundamental frequency of 3KHz, it does not show if (and how) that frequency might change over time. However, spectral analysis should allow us to do just that.
尽管使用卷积对信号进行滤波可能有助于找到3KHz的基本频率,但并未显示该频率是否(以及如何)随时间变化。但是,频谱分析应该允许做到这一点。
f, t, Sxx = cusignal.spectrogram(x, fs)
plt.pcolormesh(
cp.asnumpy(t),
cp.asnumpy(f),
cp.asnumpy(Sxx)
)
plt.ylabel(‘Frequency [Hz]’) plt.xlabel(‘Time [sec]’)
The above code produces the following chart:
Figure 4: Spectrogram of slowly 3Hz signal with a compound 0.25Hz oscillation.
We can now clearly see not only the fundamental frequency of 3kHz is slowly, at 0.25Hz, modulated slightly over time, but we can also observe the initial influence of the white noise shown as lighter blue dots.
With the introduction of cuSignal, the RAPIDS ecosystem gained another great package with a vast array of signal processing tools that can be applied in many domains. You can try the above examples and more for yourself at app.blazingsql.com, and download the cuSignal cheat sheet here!
现在可以清楚地看到,不仅3kHz的基频在0.25Hz处缓慢变化,而且随着时间的流逝略有调制,还可以观察到白噪声的初始影响,显示为较亮的蓝点。
随着cuSignal的引入,RAPIDS生态系统获得了又一个伟大的软件包,具有可应用于许多领域的大量信号处理工具。可以在app.blazingsql.com上尝试上述示例以及更多示例,并下载cuSignal备忘单!

如何在Python中加速信号处理相关推荐

  1. 如何在python中找到两个日期时间对象之间的时差?

    本文翻译自:How do I find the time difference between two datetime objects in python? 如何分辨两个datetime对象之间的时 ...

  2. 如何在Python中声明一个数组?

    如何在Python中声明数组? 我在文档中找不到任何对数组的引用. #1楼 这个怎么样... >>> a = range(12) >>> a [0, 1, 2, 3 ...

  3. 如何在Python中捕获SIGINT?

    我正在研究启动多个进程和数据库连接的python脚本. 我不时地想用Ctrl + C信号杀死脚本,我想进行一些清理. 在Perl中,我可以这样做: $SIG{'INT'} = 'exit_gracef ...

  4. 如何在Python中解析YAML文件

    如何在Python中解析YAML文件? #1楼 不依赖C标头的最简单,最纯净的方法是PyYaml( 文档 ): #!/usr/bin/env pythonimport yamlwith open(&q ...

  5. 如何在Python中反转列表?

    如何在Python中执行以下操作? array = [0, 10, 20, 40] for (i = array.length() - 1; i >= 0; i--) 我需要一个数组的元素,但是 ...

  6. python set 排序_python set 排序_如何在Python中使用sorted()和sort()

    点击"蓝字"关注我们 ?"Python基础知识" 大卫·丰达科夫斯基  著 18财税3班 李潇潇    译 日期:2019年5月6日 一. 使用sorted() ...

  7. python 参数个数 同名函数_如何在python中编写不同参数的同名方法

    我在Java背景下学习Python(3.x). 我有一个python程序,我在其中创建一个personObject并将其添加到列表中.p = Person("John") list ...

  8. python if语句多个条件-关于函数:如何在python中为一个if语句提供多个条件

    本问题已经有最佳答案,请猛点这里访问. 所以我在用python 3.1.5编写一些代码,这些代码需要有多个条件才能发生某些事情.例子: 1 2 3 4 5def example(arg1, arg2, ...

  9. python中range 10 0_如何在python中使用range方法

    如何在python中使用range方法 发布时间:2021-01-05 16:55:23 来源:亿速云 阅读:94 作者:Leah 如何在python中使用range方法?很多新手对此不是很清楚,为了 ...

最新文章

  1. 08-01-json-loggin-模块
  2. OpenStack-MitakaCentos7.2双节点搭建--(三)Glance(镜像服务)
  3. MySQL基础学习过程
  4. python3 设置默认编码_Python3的字符编码乱码问题解决思路
  5. 怎么查看页面跳转过程_faststonecapture注册码在哪?怎么获取?
  6. Entity Framework Core 5中实现批量更新、删除
  7. Mac OS 通过配置窗口来连接远程主机
  8. Struts2学习笔记1
  9. 新加坡教育(20181101)
  10. mysql 拷贝记录吗_MySQL-复制记录和复制表
  11. 测试计划剔除 log剔除_我是如何在整个公司面前被剔除的(以及为什么这样做很好)...
  12. ps2019布尔运算快捷键_设计师不会告诉你的ps布尔运算,你学会了吗?
  13. 双非二本院校,北京211,字节跳动 → 一个新秀的六年
  14. 常用验证码功能实现大全
  15. 【BottomBar】Android炫酷的底部切换
  16. AWVS下载、安装步骤教程
  17. 草莓派Raspberry3B
  18. 打印机驱动无法安装到计算机是,打印机后台程序服务没有运行,打印机驱动无法安装,打印机驱动安装失败-中关村在线...
  19. VisionPro (简单介绍)
  20. 为数字经济培育土壤:华为存储让天下没有难做的IT解决方案

热门文章

  1. 818打响,家电第一渠道苏宁下一步目标是什么?
  2. 遇见你,是最美的意外
  3. 金融 App 审核被拒原因及解决方案汇总
  4. 陕西二本计算机软件工程,高考分数不理想,仍然想报考软件工程专业,这四所二本大学不错...
  5. 天猫、淘宝商品详情、库存、价格抓包
  6. RationalDMIS 2020旋转坐标系
  7. premiere pr 自动调色对比度 用法
  8. 记录:阿里云滑动验证
  9. Codeforces Round #817 (Div. 4)
  10. 成大事必备的九种办法与能力