当前位置:   article > 正文

滤波器之matlab与vivado的联合仿真_vivado与matlab联合仿真

vivado与matlab联合仿真

一、目录

    1、matlab产生滤波器

    2、matlab进行仿真

    3、搭建vivado测试电路

    4、vivado仿真

二、matlab产生滤波器

    本文采用FIR低通滤波器,在命令行输入fdatool进入滤波器配置页面,如下配置

    

    

        导出滤波器函数

        

    设置名字为filter_3_4M

    

三、matlab进行仿真

    1、产生两个信号2.5MHz和5MHz,然后对其进行混频,注意matlab中混频有两种方法,一种是两个信号相加,另一种是两个信号相乘,这两种混频结果是不同的

    2、加法混频

        

  1. dt=100000000;%采样点数
  2. x=0:1/dt:0.00001;
  3. f1=0.5*10^6;
  4. f2=5*10^6;
  5. s1=sin(2*pi*f1*x);
  6. s2=sin(2*pi*f2*x);
  7. s3=s1+s2;
  8. figure(1);
  9. subplot(3,1,1);
  10. plot(s1);
  11. title("0.5MHz")
  12. subplot(3,1,2);
  13. plot(s2);
  14. title("5MHz")
  15. subplot(3,1,3);
  16. plot(s3);
  17. title("加法混频信号")
  18. Hd=filter_3_4M;
  19. s4=filter(Hd,s3);
  20. figure(2);
  21. title("信号对比")
  22. plot(x,s1,'g');%将0.5MHz与滤波后信号对比
  23. hold on;
  24. plot(x,s3,'y');
  25. plot(x,s4,'r');
  26. legend("0.5MHz","加法混频信号","滤波后信号")

结果图

3、乘法混频

    乘法混频输入信号为0.5MHz和5MHz,采用积化和差转换后的输出信号有两个输出频率,分别为4.5MHz和5.5MHz,由于之前设置的截止频率为4MHz,故理论上是不会产生滤波信号,接下来进行仿真验证

  1. dt=100000000;%采样点数
  2. x=0:1/dt:0.00001;
  3. f1=0.5*10^6;
  4. f2=5*10^6;
  5. s1=sin(2*pi*f1*x);
  6. s2=sin(2*pi*f2*x);
  7. s3=s1.*s2;
  8. figure(1);
  9. subplot(3,1,1);
  10. plot(s1);
  11. title("0.5MHz")
  12. subplot(3,1,2);
  13. plot(s2);
  14. title("5MHz")
  15. subplot(3,1,3);
  16. plot(s3);
  17. title("乘法混频信号")
  18. Hd=filter_3_4M;
  19. s4=filter(Hd,s3);
  20. figure(2);
  21. title("信号对比")
  22. plot(x,s1,'g');%将0.5MHz与滤波后信号对比
  23. hold on;
  24. plot(x,s3,'y');
  25. plot(x,s4,'r');
  26. legend("0.5MHz","乘法混频信号","滤波后信号")

结果图

采用2.5MHz和5MHz信号进行乘法混频,可知混频后的频率为2.5MHz和7.5MHz,故经过滤波后应可获得2.5MHz的滤波结果

  1. dt=100000000;%采样点数
  2. x=0:1/dt:0.00001;
  3. f1=2.5*10^6;
  4. f2=5*10^6;
  5. s1=sin(2*pi*f1*x);
  6. s2=sin(2*pi*f2*x);
  7. s3=s1.*s2;
  8. figure(1);
  9. subplot(3,1,1);
  10. plot(s1);
  11. title("2.5MHz")
  12. subplot(3,1,2);
  13. plot(s2);
  14. title("5MHz")
  15. subplot(3,1,3);
  16. plot(s3);
  17. title("乘法混频信号")
  18. Hd=filter_3_4M;
  19. s4=filter(Hd,s3);
  20. figure(2);
  21. title("信号对比")
  22. plot(x,s1,'g');%将2.5MHz与滤波后信号对比
  23. hold on;
  24. plot(x,s3,'y');
  25. plot(x,s4,'r');
  26. legend("2.5MHz","乘法混频信号","滤波后信号")

结果图

四、搭建vivado测试电路

1、产生vivado中filter IP核所需的滤波器参数coe文件

    

    点击上面方框,按照下面进行配置

        

        

    生成.coe文件

2、搭建电路

    本电路采用2.5MHz和5MHz进行乘法混频,整体电路如下

    

3、IP核作用

    DDS_compiler:产生测试所需正弦波

    Multiolier:乘法器,用于将2.5MHz和5MHz进行混频

    Utility Vector Logic:与门,两个信号输出同时有效时fir滤波器输入有效

    RAM-based Shift Register:延时作用,乘法器计算需要1个时钟周期,为保持时序所用

    Slice:截取信号,DDS产生的15位数据中低八位和高八位分别表示正余弦波,只用其中一个即可

    FIR Compiler:滤波器IP

4、说明:由于IP核配置页面较多,此处不再一一截图,vivado工程文档链接为: 阿里云盘分享https://www.aliyundrive.com/s/Qm44pYvFNvx

五、vivado仿真

    由于block design已经完成信号的输入和输出,故此仿真只需要添加时钟信号即可

    

  1. module filter_tb();
  2.    reg clk;
  3.    wire [15:0] data_2_5m;
  4.    wire [15:0] data_5m;
  5.    wire [39:0] tdata;
  6.    wire [15:0] tdata_pre;
  7.    wire tdata_valid;
  8.    wire [7:0] wave_5m;
  9.    wire [7:0] wave_2_5m;
  10.    filter_wrapper filter_wrapper_inst(
  11.     .clk_100MHz(clk),
  12.     .data_2_5m(data_2_5m),
  13.     .data_5m(data_5m),
  14.     .tdata(tdata),
  15.     .tdata_pre(tdata_pre),
  16.     .tdata_valid(tdata_valid),
  17.     .wave_5m(wave_5m),
  18.     .wave_2_5m(wave_2_5m)
  19.    );
  20.    initial begin
  21.    clk=1'b0;
  22.    end
  23.    always #1  clk=~clk;
  24. endmodule

仿真结果:

    

附:

       

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/592026
推荐阅读
相关标签
  

闽ICP备14008679号