本篇主要介绍,使用PYNQ板上可编程逻辑部分的IP核定制overlay,并与python自带的函数进行比较,以突出可编程逻辑部分的加速优势。
目录
前言
在前面的帖子中:https://blog.youkuaiyun.com/CSD_N_csdn/article/details/105669069,介绍了使用Vivado HLS制作了一个具有加法器功能的IP核,然后使用此IP核定制overlay,并在PYNQ上使用python调用验证功能。
本篇以前面的帖子为基础,省去了制作IP核的部分。一方面,直接调用Vivado的滤波器IP核,生成overlay,然后在jupyter-notebook上调用此overlay,实现对信号源信号的滤波,这用到了可编程逻辑部分,属于硬件加速,计算时间1。另一方面,调用python的scipy模块,scipy模块是具有滤波功能的函数,使用此函数对相同的信号源信号滤波,这属于纯软件实现滤波,计算时间2。将时间1与时间2比较,以突出硬件加速(即overlay方法)的优势。
正文
(1)使用python的scipy模块函数对信号源信号滤波
首先,在浏览器打开jupyter,新建python3文件,输入如下代码,这段代码的大致意思是定义了一个函数,将使用它来绘制数据,n_samples参数可以限制绘制的样本数量。其作用就是绘制一会儿要显示的信号。
%matplotlib notebook
import matplotlib.pyplot as plt
def plot_to_notebook(time_sec,in_signal,n_samples,out_signal=None):
plt.figure()
plt.subplot(1, 1, 1)
plt.xlabel('Time (usec)')
plt.grid()
plt.plot(time_sec[:n_samples]*1e6,in_signal[:n_samples],'y-',label='Input signal')
if out_signal is not None:
plt.plot(time_sec[:n_samples]*1e6,out_signal[:n_samples],'g-',linewidth=2,label='FIR output')
plt.legend()
再输入如下代码,用于模拟信号源生成信号,这里生成的信号是低频正弦信号,并混有高频噪声。
#模拟信号源生成输入信号
import numpy as np
T = 0.002
fs = 100e6 #采样频率
n = int(T * fs) #采样点数
t = np.linspace(0, T, n, endpoint=False)
samples = 10000*np.sin(0.2e6*2*np.pi*t) + 1500*np.cos(46e6*2*np.pi*t) + 2000*np.sin(12e6*2*np.pi*t)
#信号源为200kHz的正弦信号,46MHz和12MHz的低幅度信号作为输入的模拟噪声。
samples = samples.astype(np.int32) #将样本转换为32位整数
print('Number of samples: ',len(samples))
#输出采样点数
plot_to_notebook(t,samples,1000)
#画图
运行效果如图,即滤波前的信号:

下面调用scipy函数对上述信号进行滤波,代码如下:
代码中的coeffs为滤波器的系数向量,获取网站https://www.youtube.com/watch?v=LoLCtSzj9BU(需要翻墙),该网站是一个免费的滤波器设计网站。配置通频带、阻带和采样率,点击DESIGN FILTER,即可获取右边的系数向量。

本文详细介绍使用PYNQ板的可编程逻辑部分定制overlay,通过对比python的scipy模块函数,展示硬件加速滤波器在信号处理上的时间优势。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



