我想把一个SDR系统放在一起,最初调整AM,后来调整FM等.我打算用来做这个的系统将有一个正弦查找表用于直接数字合成(DDS).为了正确调谐,我希望能够精确控制馈送到混频器的正弦波频率(在这种情况下为乘法器).我预计线性插值会很接近,但认为非线性方法会提供更好的结果.
什么是用于正弦表的良好且快速的插值方法.乘法和加法在目标系统上很便宜; 分工是昂贵的.
编辑:我计划使用乘法/移位函数实现常量,以将常量标准化为缩放整数.中间值将使用宽增加,乘法将使用18或17位.可以使用浮点"预计算",但不能在目标平台上使用.当我说"划分成本很高"时,我的意思是它必须使用乘法器和大量代码来实现.这不是不可想象的,但应该避免.但是,真正的浮点IEEE方法将在此平台上占用大量资源,以及自定义实现.
任何SDR经验都会有所帮助.
interpolation trigonometry signal-processing radio nonlinear-functions
float sinx(float x)
{
static const float a[] = {-.1666666664,.0083333315,-.0001984090,.0000027526,-.0000000239};
float xsq = x*x;
float temp = x*(1 + a[0]*xsq + a[1]*xsq*xsq + a[2]* xsq*xsq*xsq+a[3]*xsq*xsq*xsq*xsq+ a[4]*xsq*xsq*xsq*xsq*xsq);
return temp;
}
Run Code Online (Sandbox Code Playgroud)
这些常数是如何计算的?如何计算cos和tan使用这种方法?我可以扩展它以获得更高的精度吗?我想我需要添加更多常量?
我被要求使用C++计算sin(x)的值而不使用任何数学库.我怎样才能进入他们(比如说2弧度)并在2时给他们一个sin函数的值?
谢谢.
在我的程序中,我需要计算总和:
.
我计算这个总和与新值2500倍C和z.
参数z可以是矢量.我编写了简单的for循环和矢量化版本代码,如下所示:
K = 200;
n_z = 40000;
C = ones(K,1); % an example, in real life the arey some coefficients (at next call will be new)
k = 0:K-1;
z = linspace(0, 2*pi, n_z); % at next call will be new
tic;
my_sum_for = zeros(1, K);
for i=1:n_z
my_sum_for(i) = C' * tan(k' * z(i));
end
toc; % Elapsed time is 1.820485 seconds.
tic;
my_sum = C' * tan(k' * z); …Run Code Online (Sandbox Code Playgroud)