Jump to content
nikellanjilo

Cordic Или Профан В Вычислениях На Плис

Recommended Posts

Доброго времени суток, уважаемые форумчане. Вопрос у меня следующего рода - мне нужно считать угол между двумя векторами.

Координаты у меня известны. Решил пойти путем нахождения косинуса угла как описано тут. Так вот, для того, чтобы мне вычислить угол (то бишь арккосинус), мне нужно посчитать арктангенс(потому что кордик мне может посчитать только его).

В общем начал реализововать - все у меня считается в пределах приемлемых погрешностей (и корни, и деления), но вот с разбросом параметров при вычислении арктангенса беда.

Потому что, насколько я понял из даташита для угол(рад) = arctg(y/x), у и х - входные в корку параметры и при этом они меньше 1.

Ну, к примеру, нужно мне найти arctg(1/7) (именно эти значения я получаю после выполнения операций, что приведены в ссылке выше) я переделываю под arctg (0.1/0.7). А чтобы мне значения меньше 1 бахнуть по даташиту делаю (для 8-битных данных) 00.000001 (это 1/64, которая примерно равна 0.1) и 00.111000 (0.875). То есть ошибка уже колоссальна.

Может существует нормальный метод решения?

Я гуглил как умопомраченный - ничего не нашел (((

Share this post


Link to post
Share on other sites

Покажи свой код и пример его работы.

И не понятно как ты делаешь 0.1 и 0.7.

Share this post


Link to post
Share on other sites
... для того, чтобы мне вычислить угол (то бишь арккосинус), мне нужно посчитать арктангенс(потому что кордик мне может посчитать только его).

Кордик обязателен? Может достаточно использовать таблицу арккосинусов? Даже "тупой" вариант из 512 значений, даст шаг угла в 0,176 градуса (10'33").

Share this post


Link to post
Share on other sites

Как управлять SiС-транзистором?

Преимущества карбид-кремниевых транзисторов (SiC MOSFET) – высокий КПД, повышенная, по сравнению с биполярными транзисторами с изолированным затвором (IGBT), частота переключения, экономия места на печатной плате. Для управления SiC MOSFET используются специализированные драйверы: как изолированные от транзистора, так и неизолированные. Выбор драйвера и расчет оптимального режима его работы играет ключевую роль в эффективной работе всего устройства на базе SiC MOSFET.

Подробнее

Покажи свой код и пример его работы.

И не понятно как ты делаешь 0.1 и 0.7.

`include "cordic_v4_0.v"
`include "divider_gen.v"
`include "atang.v"
module anglesssss (
input clk,
input [22:0] vektor_of_speed,
input [22:0] sat_ab,
output reg [18:0] angles
);
// model variables

//counts
reg [3:0] cnt = 0;
reg [3:0] cnt1 = 0;
reg [3:0] cnt2 = 0;
//RAM
reg [22:0] a [2:0];
reg [22:0] b [2:0];
reg [23:0] sat_speed_dop; //satellite speed Vsat*cos(alpha)
//flags
reg full = 1;
reg ded_sqrt = 1;
//registers
reg [47:0] tta; //a1b1+a2b2+a3b3
reg [95:0] q_tta; // tta^2
reg [95:0] kap; //(a1^2 + a2^2 + a3^2)*(b1^2 + b2^2 + b3^2)
reg [95:0] delta; // kap - q_tta;
reg [24:0] sqrt_out;
reg [23:0] atan_in;
//IPCORE's variables
//square
reg nd_sq = 0;
wire rdy_sq;
wire [24:0] out_sq;
//divider
wire rdy_dv;
reg nd_dv = 0;
wire [47:0] quotient;
wire [23:0] fractional;
//atang
wire rdy_tg;
reg nd_tg = 0;
wire [15:0] phase_out;

always @ (posedge clk)
begin
if (full)
begin
cnt <= cnt + 1;
a[cnt-1] <= vektor_of_speed;
b[cnt-1] <= sat_ab;
if (cnt==3)
begin
full <=0;
cnt <= 0;
end
end
end

always @ (posedge clk)
begin
if (~full)
begin
if (ded_sqrt)
begin
cnt1 <= cnt1 + 1;
case (cnt1)
0: begin
tta <= $signed(a[0])*$signed(b[0]) + $signed(a[1])*$signed(b[1]) + $signed(a[2])*$signed(b[2]);
q_tta <= $signed($signed(a[0])*$signed(b[0]) + $signed(a[1])*$signed(b[1]) + $signed(a[2])*$signed(b[2]))*$signed($signed(a[0])*$signed(b[0]) + $signed(a[1])*$signed(b[1]) + $signed(a[2])*$signed(b[2]));
kap <= $signed($signed(a[0])*$signed(a[0]) + $signed(a[1])*$signed(a[1]) + $signed(a[2])*$signed(a[2]))*$signed($signed(b[0])*$signed(b[0]) + $signed(b[1])*$signed(b[1]) + $signed(b[2])*$signed(b[2]));
end
1: begin
delta <= $signed(kap) - $signed (q_tta);
nd_sq <= 1;
end
5: nd_sq <= 0;
endcase
end
if (rdy_sq)
begin
ded_sqrt <= 0;
sqrt_out <= out_sq;
nd_dv <= 1;
end
if (rdy_dv)
begin
nd_tg <= 1;
atan_in <= (fractional >> 2);
nd_dv <= 0;
end
if (rdy_tg)
begin
angles <= (phase_out*360>>16);
end
end
end
cordic_v4_0 sqrt(
 .nd(nd_sq),
 .clk(clk),
 .rdy(rdy_sq),
 .x_in(delta),
 .x_out(out_sq)
 );
divider_gen divider(
 .rfd(),
 .rdy(rdy_dv),
 .nd(nd_dv),
 .clk(clk),
 .dividend(tta),
 .quotient(quotient),
 .divisor(sqrt_out),
 .fractional(fractional)
);
atang arctang(
 .nd(nd_tg),
 .clk(clk),
 .rdy(rdy_tg),
 .rfd(),
 .x_in(),
 .y_in(atan_in),
 .phase_out(phase_out)
);
endmodule

Share this post


Link to post
Share on other sites
                     

Как упростить выбор ИП для промышленного применения?

Компания Mean Well выпускает широкий перечень встраиваемых источников питания с креплением на шасси, имеющих, на первый взгляд, схожие характеристики. Статья расскажет о ключевых особенностях выпускаемых семейств и упростит выбор источника питания для промышленного применения.

Подробнее

Покажи свой код и пример его работы.

И не понятно как ты делаешь 0.1 и 0.7.

Я так-то все решил. Вот только теперь другая проблема. Я получаю ответ на выходе из кордика(арктангенса) в виде числа с дробной частью вида хххууууууу (где ххх - три числа, указывающую целую часть вычисления в радианах, а ууууу - дробную часть вычисления в радианах). Как мне эти значения привести к нормальному виду, чтобы на выходе число означало градусы, например angles = 16'd45.

Share this post


Link to post
Share on other sites
                     

Преимущества новых высоковольтных SOI-драйверов Infineon

При производстве драйверов силовых транзисторов компания Infineon использует различные технологии: JI, SOI, CT. Драйверы, выполненные с применением технологии SOI, имеют целый ряд преимуществ по сравнению с классическими JI-драйверами. В статье рассматриваются эти преимущества на примере новых семейств драйверов 650 В 2ED210x и 2ED218x.

Подробнее

...ответ на выходе из кордика(арктангенса) в виде числа с дробной частью вида хххууууууу (где ххх - три числа, указывающую целую часть вычисления в радианах, а ууууу - дробную часть вычисления в радианах). Как мне эти значения привести к нормальному виду, чтобы на выходе число означало градусы, например angles = 16'd45.
Скорее всего xxx- три бита, а не числа, т.к. 360 гр= 2*Пи = 6,28 и трех бит более чем достаточно для отображения целой части любого угла.Что касается перевода, то можно пойти таким путем: назначьте каждому биту вес равный i*180/(2^(m-n) ), где i - значение бита, m - число бит, n - позиция текущего бита начиная справа.Например есть код 1110010000 в котором 10 бит (m=10). Угол, соответствующий коду будет равен 1*180/(2^(10-10))+1*180/(2^(10-9))+1*180/(2^(10-8))+0*180/(2^(10-7))+0*180/(2^(10-6))+1*180/(2^(10-5))+0*180/(2^(10-4))+0*180/(2^(10-3))+0*180/(2^(10-2))+0*180/(2^(10-1))=1*180/1+1*180/2+1*180/4+0*180/8+0*180/16+1*180/32+0*(180/64+180/128+180/256+180/512)=180+90+45++0+11.25+0=326.25 Edited by Meteor77

Share this post


Link to post
Share on other sites

Да, все верно, оговорился. А я делал более геморойно... Из тех 10 бит, что мне даны делал так - отсекал первые два бита (так как они указывают по-сути на четверти 360-градусной окружности). И делал так - сначала для целых чисел - а(8)*57 + а(7)*28 + а(6)*13 + ....., затем для нецелых числе с 3 знаками после запятой - а(8)*300 + a(7)*647... Как только они становятся больше 1000 - прибавлял к целой части 1... В итоге получалось вот так... Геморойной, в лоб, но это первое дельное что пришло на ум))

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • Чего-то вы слишком путанно выражаетесь. Наверное поэтому и поисковики вас "не понимают". Куда уж проще: Папа со штырём, мама с дыркой.
    • Ну зачем ты так Слава?  Ну ты ж на Датагоре всё верно  изложил в конце, когда привёл ИСКАЖЕНИЯ при одинаковой  мощности выходной. И триод  сразу  сдулся перед пентодом.  Сравнивать  пентод и триод надо при одинаковой выходной  мощности  2-3 ватта и введением в  пентод  местной ОС  с анода в сетку управляющую через  резистор и конденсатор , величиной как у триода 12-14dB . И всё становится  ясно. Триод  сразу проигрывает по искажениям при 1м,2х,3х ваттах  и тем  более проигрывает на 4х,5ти ваттах  выходной  мощности.
    • Есть же готовые расчёты IRAUDAMP 7S
    • патамушта ломится держать связь по безпроводке и постоянно ее опрашивает, а за стеной сидит такой же обладатель чудо мыши с кучей роутеров, блюпупов и беспроводных ушей и прочей херней возьми нормальную мышь на шнурке и не морочь пространство между ушами.
    • Исключительно бесполезная конструкция, даже при наличии правильного излучателя, а не какого-то ВЧ динамика. Ибо не действует на подопытных. И, вообще, зачем вы в старой чужой теме пишете? Создайте свою.
    • Прям в точку, @Falconist Вам же говорят, что добавление резисторов не снижает усиление, значит надо сравнить сигнал на пульте с установленными дополнительными резисторами R12, R13 и сигнал на пульте без них. А Вы "болтаете чепухой" и сравниваете сигналы на резистивном делителе.
  • Similar Content

    • By bugway
      Требуется инженер-программист ПЛИС для проектирования плат и написания прошивок для нескольких проектов.

      Требования к кандидату:

      - Опыт работы с различными типами ПЛИС не менее 3 лет
      - Опыт работы с микроконтроллерами STM32 и другими не менее 3 лет
      - Опыт работы с Altium Designer, Quartus и другими средами.
      - Опыт видеообработки с помощью ПЛИС
      - Опыт работы в команде
      - Умение разбираться в чужих проектах
      - Проживание в Москве, желательно поближе к Люберецкому району

      Немного общей информации по проектам:

      1. Видеообработка (2 проекта) - ключевые моменты: сглаживание изображений, работа с видеобуфером, работа с MIPI, PAL/SECAM видеовыходом, работа ПЛИС в паре с микроконтроллером
      2. Обработка сигналов (1 проект) - ключевые моменты: работа ПЛИС в паре с микроконтроллером, работа с таймером, точные временные измерения, детектирование аналоговых и цифровых сигналов, работа с оптическими датчиками

      Оплата договорная
      Есть перспектива трудоустройства на штатную должность.

      Контакты:
      E-mail: vbug2 (собака) yandex.ru
      Вконтакте: vk.com/bugway
    • By владислав соломенцев
      сгенерировал файл в QSYS и вставил в top-level файл проекта Quartus2 (17.0) для De10-nano(cyclone5)
      запускаю tcl скрипт из tools/tcl scripts/hps_sdram_p0_pin_assignments.tcl  чтобы назначить пины HPS
      вылезают такие вот строки, как поправить?
      Error:    while executing Error:"exec $cmd -t [ info script ] $project_name " Error:    invoked from within Error:"if { ![info exists quartus(nameofexecutable)] || ($quartus(nameofexecutable) != "quartus_sta" && $quartus(nameofexecutable) != "quartus_map") } { Error:    pos..." Error:    (file "D:/FPGA/project/try/unsaved/synthesis/submodules/hps_sdram_p0_pin_assignments.tcl" line 110) Error:    invoked from within Error:"_source D:/FPGA/project/try/unsaved/synthesis/submodules/hps_sdram_p0_pin_assignments.tcl" Error:    ("uplevel" body line 1) Error:    invoked from within Error:"uplevel 1 $cmd " Error:    (procedure "source" line 5) Error:    invoked from within Error:"source "D:/FPGA/project/try/unsaved/synthesis/submodules/hps_sdram_p0_pin_assignments.tcl""
       
    • By Катерина
      Очень-очень нужны инженеры по схемотехнике!!! 
      АО «НПО «Орион» сейчас находится в поиске крутых и грамотных специалистов для разных проектов! Мы занимаемся разработкой микрофотоэлектроники как на гражданку, так и на оборонку. Это и  тепловизоры, и SWIR-камеры, инфракрасные термосканы и конструктор Smart Blocks на базе Ардуино, а также фотоприемные устройства, лазерные целеуказатели, очки ночного виденья, микрокриогенные системы и другое.
      Нам нужен такой человек, который по сформулированному техническому заданию сможет с нуля разработать и спроектировать схему «на железе» для того или иного проекта. Также создать макет электронной схемы, протестировать и испытать его. Ну и естественно сопроводить процесс производства от опытного до серийного. Работа в паре с инженером-конструктором. Очень круто, если вы уже проектировали ПЛИС и микроконтроллеры.
      Наши плюшки:
      Интересные проекты, некоторые из них в России еще никогда не разрабатывались. У вас будет возможность для творчества, новых разработок и предложений. Стабильность и гарантию! Не смотря на наши проекты и разработки в гражданском направлении, предприятие у нас государственное и соблюдает все нормы трудового законодательства. Очень вкусную столовую на территории с завтраками и обедами (средняя стоимость ~ 150 рублей). Уникальную возможность – увидеть производство матриц фоточувствительных элементов от подложки до готовой матрицы, которую потом Вы и будете разводить на схеме. Множество спортивных и культурных мероприятий в большом и дружном коллективе. А также для пешеходов – доступность от метро Выхино (7 минут пешком или 1 остановка на автобусе). Бонусом водителям автомобилей - две бесплатные корпоративные парковки. Локация: Москва, ст. метро Выхино;
      График работы: 5/2 с 9:00 до 17:45 (+/- час);
      З/п по результатам собеседования
      Контакты: hr@npo-orion.ru
      +7 499 786 3669 (Екатерина) 
    • Guest Rijiko
      By Guest Rijiko
      Привет всем! 

      Мы - команда разработчиков, занимающиеся исследованием и апробацией способов, алгоритмов и программ контроля целостности данных в процессе передачи или хранения. 
      В рамках преакселерационной программы по гранту "УМНИК" нам необходимо найти контакты лиц, заинтересованных в применении результатов наших разработок. 

      На данный момент имеются реализации на ПЛИС циклического метода декодирования для кодов БЧХ(15,7,5) и (15,5,7), а также для кодов, исправляющих пакетные ошибки (аналог кодов Рида-Соломона).


      Есть ли заинтересованные лица в разработках по данной области исследования (реализация контроля целостности данных при передаче по каналу связи с помехами, или при хранении данных)?
    • By zontoo
      Нужен программист ПЛИС для создания прошивки шагового двигателя
      чип xilinx (драйвер и программатор предоставлю).
      Начать нужно немедленно.
      Укажите примерную стоимость, скайп, опыт по ПЛИС. 
      Пишите на почту yanbotalov (собака) gmail.com с резюме и портфолио по ПЛИС
×
×
  • Create New...