fixed point taylor sine/cosine approximation model
5 views (last 30 days)
Show older comments
Can anybody share sine/cosine taylor approx model which is compatible with hdl coder?
2 Comments
Walter Roberson
on 19 Jun 2022
is there a reason why you are not using https://www.mathworks.com/help/fixedpoint/ref/cordicsin.html
Answers (2)
Sulaymon Eshkabilov
on 19 Jun 2022
WHy not to use matlab's built-in taylor() expansion fcn: https://www.mathworks.com/help/symbolic/sym.taylor.html?s_tid=doc_ta
E.g.:
syms x
taylor(sin(x), x, pi)
taylor(cos(x), x, pi/2)
20 Comments
Walter Roberson
on 22 Jun 2022
You need order 22 (x^21) to have an error of less than 1/1000
syms x
f = sin(x);
target = 1/1000;
for order = 2:50
t = taylor(f, x, 0, 'order', order);
val_at_end = subs(t, x, 2*pi);
if abs(val_at_end) < target; break; end
end
order
t
fplot([t, f], [0 2*pi])
fplot(t-f, [0 2*pi])
Kiran Kintali
on 4 Jul 2022
HDL Coder supports code generation for single precision trigonometric functions.
Getting Started with HDL Coder Native Floating-Point Support
Taylor series approximation using HDL Coder
If you want to build Taylor series approximation by youself you could build using basic Math operations and sufficient amount of fixed-point conversion.
syms x
f = sin(x);
T2sin = taylor(f, x, 'Order', 2); % T2sin = x
T4sin = taylor(f, x, 'Order', 4); % T4sin = -x^3/6 + x
T6sin = taylor(f, x, 'Order', 6); % T6sin = x^5/120 - x^3/6 + x
On you build such a model you can further use optimizations such as multiplier partitioning, resource sharing and pipelining options to optimize the model for area/performance/latency/power.
2 Comments
Walter Roberson
on 4 Jul 2022
They were already using a model with basic math blocks to calculate Taylor series of sine and cosine. I showed, however, that in their target range 0 to 2π that the error for their model was unacceptable, and that to bring the error to 1/1000 you need taylor order 21.
See Also
Categories
Find more on Data Types in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!