matlab产生FIR IP核(Xilinx)所需要的coe文件(系数文件)

9 篇文章 5 订阅

Xilinx的FIR IP核产生的.coe文件的格式如下:

radix = RADIX;
coefdata = VECTOR;

RADIX为数据进制类型,包括十进制、二进制、十六进制。

VECTOR为数据,数据以","为间隔进行分开,最后以"; "结尾。

下面以产生匹配滤波器的系数为例:

        信号位线性调频信号,信号取反共轭(因为这里原信号为对称信号,所以只需要共轭)后得到匹配滤波器的冲激响应,取实部得到I通道的滤波器,取虚部得到Q通道的匹配滤波器,这里以Q通道的滤波器系数产生为例。

matlab代码如下:

fs = 20e6;      % sample frequency            采样率
B = 4e6;
T = 16e-6;       %时宽

C = 3e8;
K = B/T;
t_wav = ([1:T*fs]-T*fs/2)/fs;

wav_ref = exp(-1i*pi*K*t_wav.^2);       %信号取反共轭
wav_ref = wav_ref(1:2:end);

wav_ref_cos=round((2^(14-1)-1)*real(wav_ref));   %转换成定点数
wav_ref_sin=round((2^(14-1)-1)*imag(wav_ref)); 


%产生coe文件
fid = fopen('fir_q.coe','w'); 
fprintf(fid,'radix = 10;\n'); 
fprintf(fid,'coefdata =\n');
y=zeros(1,256);
for i=1:1:160
    y(i)=wav_ref_sin(i);
    if i == 160
        fprintf(fid,'%d;',y(i));
    else
        fprintf(fid,'%d,',y(i));
    end
    if mod(i,8)==0 && i ~= 0
        fprintf(fid,'\n');
    end
end
fclose(fid); 

        因为最后存入ROM的是二进制文件,所以首先将数据从浮点数转换成定点数,N_ADC为数据的位数,M_ADC为数据的个数,为了使数据更加直观,coe文件中一行有8个数据。

        得到160个系数的coe文件,如下所示:

 最后就可以利用产生的系数文件来产生想要的FIR滤波器。



        除了这种方式外,还可以用matlab中的 Filter Designer 工具直接产生coe文件来用于FIR IP核的配置。具体方式为:

matlab中的Filter Designer工具的使用方法https://blog.csdn.net/QUACK_G/article/details/124433102?spm=1001.2014.3001.5502

对于FIR IP核的使用,可以参考 该文章 

XILINX FIR ip使用方法(参数重构改变滤波器形式)icon-default.png?t=M85Bhttps://blog.csdn.net/QUACK_G/article/details/128151919?spm=1001.2014.3001.5501

  • 4
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要使用MATLAB生成XILINX FPGA的滤波器系数COE文件,可以按照以下步骤进行操作: 1. 首先,确定采样率(fs)、带宽(B)和时宽(T),并根据这些参数计算出K值。 fs = 20e6; % 采样率 B = 4e6; % 带宽 T = 16e-6; % 时宽 C = 3e8; K = B/T; 2. 接下来,使用MATLAB生成滤波器系数的信号波形。 t_wav = ([1:T*fs]-T*fs/2)/fs; % 时间序列 wav_ref = exp(-1i*pi*K*t_wav.^2); % 生成信号波形 wav_ref = wav_ref(1:2:end); % 降低采样率,以减少滤波器系数数量 wav_ref_cos=round((2^(14-1)-1)*real(wav_ref)); % 将实部转换为定点数 wav_ref_sin=round((2^(14-1)-1)*imag(wav_ref)); % 将虚部转换为定点数 3. 然后,将滤波器系数保存为COE文件。 fid = fopen('fir_q.coe','w'); % 创建COE文件 fprintf(fid,'radix = 10;\n'); % 设置COE文件的进制 fprintf(fid,'coefdata =\n'); % 设置滤波器系数的标签 y=zeros(1,256); for i=1:1:160 y(i)=wav_ref_sin(i); % 选择滤波器系数中的虚部作为输出 if i == 160 fprintf(fid,'%d;',y(i)); % 每个滤波器系数之间用逗号分隔,最后一个系数后面没有逗号 else fprintf(fid,'%d,',y(i)); end if mod(i,8)==0 && i~=0 % 每8个滤波器系数换行 fprintf(fid,'\n'); end end fclose(fid); // 关闭文件 这样就可以使用MATLAB生成适用于XILINX FPGA的滤波器系数COE文件了。请根据您的实际需求调整参数和滤波器系数的数量。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [MATLAB生成FPGA COE文件XILINX FPGA滤波器系数](https://blog.csdn.net/u014586651/article/details/109768873)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [matlab产生FIR IP核(Xilinx)所需要coe文件(系数文件)](https://blog.csdn.net/QUACK_G/article/details/124132515)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值