在上篇文章中,设置的输入角度范围是[0,2*pi)。但根据三角函数公式,其实我们可以将[0,2*pi)分成4段,这样就能将输入角度范围缩小到[0,pi/2)了。

1、修改matlab代码
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Zheng Wei, 2022/12/05
%%
%% 输入角度范围:[0,pi/2); 输入数据量化位数:10bit;
%% 输出结果范围:[0,1]; 输出数据量化位数:16bit;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc; % 清理命令行
close all; % 关闭所有图形窗口
clear all; % 清理所有工作区变量
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 参数定义
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
in_quantify_bit = 10; % 输入数据量化位数(无符号数)
alpha = 0:(pi/2/2^in_quantify_bit):(pi/2-pi/2/2^in_quantify_bit); % 弧度
out_quantify_bit = 16; % 输出数据量化位数(有符号数)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 获取三角函数值
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
cos_alpha = cos(alpha); % 获得cos函数值
sin_alpha = sin(alpha); % 获得sin函数值
cos_alpha_q = round(cos_alpha *(2^(out_quantify_bit-1)-1)); % 16bit量化
sin_alpha_q = round(sin_alpha *(2^(out_quantify_bit-1)-1)); % 16bit量化
% figure(1); subplot(2,1,1);plot(alpha,cos_alpha);subplot(2,1,2);plot(alpha,cos_alpha_q);
% figure(2); subplot(2,1,1);plot(alpha,sin_alpha);subplot(2,1,2);plot(alpha,sin_alpha_q);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 生成coe文件,第一行定义数据格式, 16代表ROM的数据格式为16进制。
%% 高16bit代表sin值,低16bit代表cos值,各自最高的1b

本文介绍如何使用FPGA通过查表法实现正弦和余弦函数。通过将输入角度范围限定在[0,pi/2),利用10比特量化并生成相应COE文件加载到ROM中。随后通过仿真验证了该方法的有效性。
5308

被折叠的 条评论
为什么被折叠?



