大前提:用matlab生成需要滤波的信号,matlab中的fdatool生成滤波器参数,并将信号和参数导入FPGA,实现滤波功能。
1.信号的导入
matlab生成的信号如下图
具体到芯片内部,上边的小数是没法存的,需要先转化成二进制或16进制(为什么是这两种进制,因为据目前我所知,Verilog中带有$readmemh
和$readmemb
两个指令,读取的数据要求是十六进制和二进制),我这里转化成二进制。
由于matlab中的dec2bin
函数无法转换负数,所以上边的信号的值我先加了1。
再考虑量化精度,就是信号值是用8位二进制还是16位二进制表示,当然位数越多,表达的信号就越准确,我选择了8位。上边信号的范围是(0-2),8位的范围(0-255),所以我最大可以给信号乘上约127倍的系数,我在仿真时乘上了10倍。不乘系数行不行?不行! 不乘的话,信号值量化之后,就四个数(00、01、10、11),这显然不对。
下面附上信号构造、进制转换、以及保存到txt文件中的matlab代码。