【04解调&滤波器】CPFSK调制解调的MATLAB与FPGA实现(Altera/Quartus/Verilog&VHDL)

本篇内容:
1.cpfsk解调方法。
2.如何生成滤波器系数?
3.如何调用fir核?

1.cpfsk解调方法。
本设计采用非相干解调的方式,解调思路如下:
在这里插入图片描述
2.如何生成滤波器系数?
想要生成滤波器系数,可以在 命令行窗口 输入 filterDesigner 并回车,在右侧界面中进行自定义设计,
在这里插入图片描述
下图是我随意设计了一个滤出8.75kHz信号的带通滤波器,设置好参数后,点击下方设计滤波器,点击上方 幅值响应 小图标,查看设计效果,
在这里插入图片描述
选择 文件 - 导出,
在这里插入图片描述
然后会生成下图这样一个文件,我会把这些系数(分子)存到txt文件中(根据quartus13.1版本的要求,一行一个;根据quartus新版本fir2的要求要用逗号隔开),到时候就可以直接用了。
可以看到滤波器长度很长,用到fpga上肯定会消耗很多资源,可以通过增加过渡带、减少位宽等等方式来解决,可以多尝试。
在这里插入图片描述

另外,滤波器的系数还可以通过编程生成,这里我参考了杜勇老师的代码,更改了基本参数、阶数为60阶、系数位宽为12位。输出三个文本文件和幅频响应图。
在这里插入图片描述

3.如何调用fir核?
点击Tools-megawizard plug in manager ,选择create a new,点击next。
搜索fir,选中fir,选择语言,选择保存位置(默认工程文件夹下,应该也可以建立一个子文件夹)输入名字bpf01(自己随便起),点击next,稍稍等一会。
在这里插入图片描述
点击step1,点击上方edit coefficient set,点击imported coefficient set,选择刚刚生成的滤波器系数文件,点击OK。
在这里插入图片描述
选择量化系数位宽为12位,输入数据位宽为10位,输出数据位宽自动给出为27位。
在这里插入图片描述
考虑到资源消耗问题,这里我选了全串行滤波器(并行滤波器消耗乘法器较多,分布式滤波器消耗逻辑单元较多);中间表格可以查看消耗的逻辑单元、乘法器等的数量;根据右侧提示,我将滤波器时钟频率设置为采样频率(160kHz)的12倍。
在这里插入图片描述
点击step2:
在这里插入图片描述
点击step3生成。

打开bpf01.qip下的bpf01.v,将这段话复制并粘贴到解调程序中。
在这里插入图片描述

	//声明滤波器输入接口信号
	wire signed[9:0] din;
	wire ast_sink_valid,ast_source_ready,reset_n;
	wire [1:0] ast_sink_error;
	//设置滤波器输入接口信号的值
	assign ast_source_ready=1'b1;
	assign ast_sink_valid=1'b1;
	assign ast_sink_error=2'd0;
	assign reset_n = !rst;
	
	//声明bpf1滤波器输出接口信号
	wire sink_ready_bpf1,source_valid_bpf1;
	wire [1:0] source_error_bpf1;
	wire signed [26:0]  data_bpf1;
	//实例化bpf1滤波器核
	bpf01	u1(
		.clk(firclk),
		.reset_n(reset_n),
		.ast_sink_data(din),//输入信号
		.ast_sink_valid(ast_sink_valid),
		.ast_source_ready(ast_source_ready),
		.ast_sink_error(ast_sink_error),
		.ast_source_data(data_bpf1),//输出信号
		.ast_sink_ready(sink_ready_bpf1),
		.ast_source_valid(source_valid_bpf1),
		.ast_source_error(source_error_bpf1));

至此,滤波器就搭建好了。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值