Vivado中FFT9.1 IP核的使用(3)——线性调频信号FFT

  • Post author:
  • Post category:其他


1、简述

线性调频信号FFT与之前的8点、32点FFT在IP核的使用方面并没有什么不同;唯一需要注意的就是仿真中线性调频信号如何产生,如何读取到vivado,以及数据位宽。此处以Matlab生成数据,导入到Vivado进行处理,并不代表数据只能这样产生和传入:


LFM信号产生:

Mtalab生成对应参数下的LFM信号


信号存储:

Mtalab中生成的LFM信号按照二进制存储到TXT文件(Vivado中一般按照2进制、16进制读取数据)


Vivado读取数据:

Vivado读取TXT中数据,作为FFT输入


FFT:

调用FFT核,对输入进行处理


数据输出:

FFT处理结果按照十进制存储到TXT文件,可被Matlab读出。

2、仿真设计与结果


注意1:

应注意输入信号位宽,以及输入信号对应的输出位宽;如果输入信号位宽较大,很可能导致输出位宽超过设计的输出位宽,导致错误。——这也是之前一致仿真出错的原因之一。


注意2:

应注意Vivado中处理二进制补码,而不是简单的反码。因此Matlab数据必须转换为二进制补码,才能被Vivado正确读取。


Matlab数据存储:

%% 转换为16bit 2进制数据(4-二进制补码)
size = 8;
re_y_ = floor(real(y)*2^size);
im_y_ = floor(imag(y)*2^size);
re_y = re_y_;
im_y = im_y_;
re_y(find(re_y_<0)) = (re_y_(find(re_y_<0)) )+ 2^16;
im_y(find(im_y_<0)) = (im_y_(find(im_y_<0))) + 2^16;


Vivado数据读取:

      $readmemb("F:/vivado_files/LFM_Lr.txt",data_r);
      $readmemb("F:/vivado_files/LFM_Li.txt",data_i);


处理过程:

      s_axis_config_tdata=24'b0000_0000_0000_0000_0000_0001;
      s_axis_config_tvalid=1'b1;
      #10;
      s_axis_config_tdata=24'b0000_0000_0000_0000_0000_0000;
      s_axis_config_tvalid=1'b0;
      #1005;
      repeat(1024)begin
        s_axis_data_tvalid=1'b1;
//        real_data=real_data+16'd1;
        real_data=data_r[cnt];
        imag_data=data_i[cnt];
        cnt=cnt+1;
        if(cnt==1024) s_axis_data_tlast=1'b1;
        #10;
      end
      s_axis_data_tvalid=1'b0;
      s_axis_data_tlast=1'b0;
      real_data=16'd0;
      imag_data=16'd0;
      #100000;
      $fclose(handle1);
      $stop;


处理结果输出:

可以看出,数据读入与输出均正确。



版权声明:本文为CLL_caicai原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。