Аппроксимация полярно-декартова преобразования на основе CORDIC
[x,y] = cordicpol2cart(theta,r)
[x,y] = cordicpol2cart(theta,r,niters)
[x,y] = cordicpol2cart(theta,r,Name,Value)
[x,y] = cordicpol2cart(theta,r,niters,Name,Value)
возвращает декартовы координаты xy [x,y] = cordicpol2cart(theta,r)r* e ^ (j *theta) с использованием аппроксимации алгоритма CORDIC.
выступает [x,y] = cordicpol2cart(theta,r,niters)niters итерации алгоритма.
масштабирует выходные данные в зависимости от логического значения [x,y] = cordicpol2cart(theta,r,Name,Value)b.
задает как количество итераций, так и [x,y] = cordicpol2cart(theta,r,niters,Name,Value)Name,Value для определения необходимости масштабирования выходных данных.
|
|
|
|
|
|
Необязательные пары, разделенные запятыми Name,Value аргументы, где Name является именем аргумента и Value - соответствующее значение. Name должно отображаться внутри отдельных кавычек ('').
|
Значение по умолчанию: true |
|
Когда вход Когда вход |
Выполните следующий код и оцените точность полярно-декартового преобразования на основе CORDIC.
wrdLn = 16;
theta = fi(pi/3, 1, wrdLn);
u = fi( 2.0, 1, wrdLn);
fprintf('\n\nNITERS\tX\t\t ERROR\t LSBs\t\tY\t\t ERROR\t LSBs\n');
fprintf('------\t-------\t ------\t ----\t\t-------\t ------\t ----\n');
for niters = 1:(wrdLn - 1)
[x_ref, y_ref] = pol2cart(double(theta),double(u));
[x_fi, y_fi] = cordicpol2cart(theta, u, niters);
x_dbl = double(x_fi);
y_dbl = double(y_fi);
x_err = abs(x_dbl - x_ref);
y_err = abs(y_dbl - y_ref);
fprintf('%d\t%1.4f\t %1.4f\t %1.1f\t\t%1.4f\t %1.4f\t %1.1f\n',...
niters,x_dbl,x_err,(x_err * pow2(x_fi.FractionLength)),...
y_dbl,y_err,(y_err * pow2(y_fi.FractionLength)));
end
fprintf('\n');
NITERS X ERROR LSBs Y ERROR LSBs
------ ------- ------ ---- ------- ------ ----
1 1.4142 0.4142 3392.8 1.4142 0.3178 2603.8
2 0.6324 0.3676 3011.2 1.8973 0.1653 1354.2
3 1.0737 0.0737 603.8 1.6873 0.0448 366.8
4 0.8561 0.1440 1179.2 1.8074 0.0753 617.2
5 0.9672 0.0329 269.2 1.7505 0.0185 151.2
6 1.0214 0.0213 174.8 1.7195 0.0126 102.8
7 0.9944 0.0056 46.2 1.7351 0.0031 25.2
8 1.0079 0.0079 64.8 1.7274 0.0046 37.8
9 1.0011 0.0011 8.8 1.7313 0.0007 5.8
10 0.9978 0.0022 18.2 1.7333 0.0012 10.2
11 0.9994 0.0006 5.2 1.7323 0.0003 2.2
12 1.0002 0.0002 1.8 1.7318 0.0002 1.8
13 0.9999 0.0002 1.2 1.7321 0.0000 0.2
14 0.9996 0.0004 3.2 1.7321 0.0000 0.2
15 0.9998 0.0003 2.2 1.7321 0.0000 0.2 |