【FPGA-DSP】第四期:FIR滤波器IP核调用及SystemGenerator实现

目录

1. 实际开发流程

1.1 matlab 输入信号

1.1.1 matlab输入信号代码

1.1.2 输出图像

1.2 System Generator使用

1.2.1 基本使用

1.2.2  FIR IP核

1.2.3 FIR滤波器设计

         FDATool和FIR Complier构成子系统【关键】

1.3 最终结果呈现

 


参考第4期 - FIR滤波器调用流程 - 基于FPGA的数字信号处理系统开发笔记_哔哩哔哩_bilibiliicon-default.png?t=N2N8https://www.bilibili.com/video/BV16a4y1a7z6/?spm_id_from=333.788&vd_source=71acea6682c8121539b919e1e8ca93ef

第X期 - Xilinx Block使用说明合集 - 基于FPGA的数字信号处理系统开发笔记_哔哩哔哩_bilibiliicon-default.png?t=N2N8https://www.bilibili.com/video/BV1K54y1v76u/?spm_id_from=333.999.0.0&vd_source=71acea6682c8121539b919e1e8ca93ef 

本章节将进行全流程FPGA DSP开发,包括了以下几个步骤

Ok,让我们开始~

1. 实际开发流程

1.1 matlab 输入信号

1.1.1 matlab输入信号代码

clc;clear all;close all;
%--------------------------------------------------------------------------
%%  FIR 滤波器输入信号生成
%--------------------------------------------------------------------------

%% 系统参数
N = 1024;%采样点数
Fs = 10000;
Ts = 1/Fs;

%% 输入信号生成,由100Hz和2000Hz正弦信号合成
A = 3;
t = (0:N-1)*Ts;
ft_0 = 100;
vi_0 = zeros(1,N);
ft_1 = 2000;
vi_1 = zeros(1,N);
vi = zeros(1,N);

for n = 1:N
    vi_0(n) = A*sin(2*pi*ft_0*t(n));
    vi_1(n) = A*sin(2*pi*ft_1*t(n));
    vi(n) = vi_0(n) + vi_1(n);%混频
end

%% 信号图像输出
figure(1)
subplot(3,1,1)
plot(t,vi_0,'k');
subplot(3,1,2)
plot(t,vi_1,'k');
subplot(3,1,3)
plot(t,vi,'k');

Fre0 = abs(fft(vi_0)); %快速傅里叶变换的幅值
Fre1 = abs(fft(vi_1));
Fre = abs(fft(vi));
f = (0:N-1)*Fs/N;%频率离散化

figure(2)
subplot(3,1,1)
plot(f,Fre0);
xlabel('Frequency'); 
ylabel('Amplitude'); 
subplot(3,1,2)
plot(f,Fre1);
xlabel('Frequency'); 
ylabel('Amplitude'); 
subplot(3,1,3)
plot(f,Fre);
xlabel('Frequency'); 
ylabel('Amplitude'); 

%fftshift()调整0频位置
figure(3);
f1=(0:N-1)*Fs/N-Fs/2 ;%频率范围-5000Hz-5000Hz, 1024个采样点
y0=abs(fftshift(fft(vi_0)));
subplot(3,1,1)
plot(f1,y0);
xlabel('Frequency'); 
ylabel('Amplitude'); 
y1=abs(fftshift(fft(vi_1)));
subplot(3,1,2)
plot(f1,y1);
xlabel('Frequency'); 
ylabel('Amplitude');
y=abs(fftshift(fft(vi)));
subplot(3,1,3)
plot(f1,y);
xlabel('Frequency'); 
ylabel('Amplitude');

1.1.2 输出图像

三个信号的时域图 三个信号的频谱图 调整0频后的频谱图
【FPGA-DSP】第四期:FIR滤波器IP核调用及SystemGenerator实现_第1张图片 【FPGA-DSP】第四期:FIR滤波器IP核调用及SystemGenerator实现_第2张图片 【FPGA-DSP】第四期:FIR滤波器IP核调用及SystemGenerator实现_第3张图片

1.2 System Generator使用

1.2.1 基本使用

注意:必须通过xilinx的system generator打开我们的matlab

 可查阅 System Generator使用教程来辅助我们使用该软件,开发步骤按照如下视频教程

0 Platform_哔哩哔哩_bilibiliicon-default.png?t=N2N8https://www.bilibili.com/video/BV1K54y1v76u?p=2&vd_source=71acea6682c8121539b919e1e8ca93ef

首先我们需要添加System Generator这个模块,设置好系统硬件参数 

【FPGA-DSP】第四期:FIR滤波器IP核调用及SystemGenerator实现_第4张图片

接着放置我们的输入信号模块

【FPGA-DSP】第四期:FIR滤波器IP核调用及SystemGenerator实现_第5张图片

【FPGA-DSP】第四期:FIR滤波器IP核调用及SystemGenerator实现_第6张图片

特别提醒:我们要将1.1中matlab生成的混频信号等参数输入给我们的system generator模块的话,我们需要首先运行.m文件生成所需变量,然后在system generator模块中添加对应输入参数即可。而且最好Simulin文件和matlab文件放在一个父文件夹中 

【FPGA-DSP】第四期:FIR滤波器IP核调用及SystemGenerator实现_第7张图片计数器counter和存储器rom模块构成了整个系统输入,输入我们matlab生成的vi混频波形,一共1024个采样数据点。 

 

1.2.2  FIR IP核

【FPGA-DSP】第四期:FIR滤波器IP核调用及SystemGenerator实现_第8张图片

注意:我们还需要一个matlab的FDATool模块(就是图中FIR Complier7.2上面那个),这个模块给FIR滤波器提供在要求阶数下的滤波器抽头系数。

  • 点击FIR Complier7.2模块,输入xlfda_numerator('FDATool'),在1.2.3章节中将二者变成一个子系统后,即可链接一个Simulink面板上的FDATool和FIR Complier

【FPGA-DSP】第四期:FIR滤波器IP核调用及SystemGenerator实现_第9张图片

其他配置详见视频8:20

第4期 - FIR滤波器调用流程 - 基于FPGA的数字信号处理系统开发笔记_哔哩哔哩_bilibiliicon-default.png?t=N2N8https://www.bilibili.com/video/BV16a4y1a7z6/?spm_id_from=pageDriver&vd_source=71acea6682c8121539b919e1e8ca93ef 

1.2.3 FIR滤波器设计

由FDATool完成,滤波器设计要求:输入采样率为10KHz,有效信号0.1KHz,高频信号2KHz滤除

【FPGA-DSP】第四期:FIR滤波器IP核调用及SystemGenerator实现_第10张图片

  •  FDATool和FIR Complier构成子系统【关键】

鼠标框选这两个模块,鼠标右键->基于所选内容创建子系统

【FPGA-DSP】第四期:FIR滤波器IP核调用及SystemGenerator实现_第11张图片

完整的系统模型如下:

【FPGA-DSP】第四期:FIR滤波器IP核调用及SystemGenerator实现_第12张图片 

1.3 最终结果呈现

【FPGA-DSP】第四期:FIR滤波器IP核调用及SystemGenerator实现_第13张图片

 

 

你可能感兴趣的:(FPGA,fpga开发)