Перейти к содержанию
    

Rst7

Модератор
  • Постов

    4 619
  • Зарегистрирован

  • Победитель дней

    2

Сообщения, опубликованные Rst7


  1. 43 minutes ago, razrab83 said:

    Где? Как обычно - пустослов. Дайте пруфлинк или копипаст.  Понимаете в чем ваша проблема? Какая проблема в вашем общении?.... вы ни когда не можете дать конкретный ответ/совет.

    Уважаемый, у Вас тоже явная проблема в общении. И бан в гугле выписан, как я посмотрю.

    43 minutes ago, razrab83 said:

    я внимательно посмотрел описание ТСР.

    И во внимательности и вообще в способности ориентироваться в RFC, относящихся к TCP, например. Потому что есть еще RFC1122 "Requirements for Internet Hosts -- Communication Layers".

     

    Ну и так желаемый Вами пруф - https://tools.ietf.org/html/rfc1122#page-101

     

    И вообще там раздел 4.2 говорит очень многие вещи, которых нет в RFC793.

  2. 22 minutes ago, Dmitry Dubrovenko said:

    Это - протокол МИДИ.

    Причем тут протокол?

    Еще раз.

    а) Абсолютное большинство современных MIDI-гитар отдают ноты на отдельных струнах, используя номер канала. Без этого нет смысла по нынешним временам.

    б)  Современные VST-синтезаторы (да и железные синтюки тоже) умеют работать, например, в режиме "использовать данные из таких-то каналов". Но при этом никто не мешает на другие каналы повесить другой синтезатор/семплер.

    в) MIDI-маршрутизация в современных DAW весьма разнообразна, и жесткие привязки Mono/Poly/Omni - это никому не нужно.

  3. 52 minutes ago, Dmitry Dubrovenko said:

    А третью строчку сил не хватило прочитать?

    Не надо понтов. Причем тут Mono, если дальше Вы по надобности действуете - можно, например, в DAW повесить один синтюк на три верхних струны, другой - на три нижних. 

  4. А текст по ссылке Вы читали?

    Quote

    The most likely operation would use the inner three gimbals to drive the stabilizing gyro error signals to zero while the fourth is driven so as to keep the middle gimbal near zero and away from the gimbal lock orientation. This can be done by generating a redundant gimbal rate command by expressions similar to

    A(redundant) = k sin A(middle) / cos A(outer)

    so that a negative feedback on middle angle occurs to drive middle angle towards zero.

    ....

    The redundant gimbal must be accelerated if it is to do its job even when middle gimbal angle is near zero, In fact a situation like gimbal lock occurs for outer angles near 90 degrees as can be seen in the above equation. Close to 90 degrees outer gimbal angle, the redundant gimbal must be driven at a very fast rate to hold middle at zero.

    Это такая же вырожденная точка. Когда на их рисунке внешняя рамка (outer gimbal) близка к 90 градусам, то нужен очень быстрый переброс 4й рамки для устранения блокировки. Это как раз когда cos A(outer) становится близок к 0.

  5. 2 hours ago, Mikhail_015 said:

    Для этого и нужна 4-я ось.

    Что-то чем дальше в лес, тем вообще какой-то туман с этой четвертой осью. А можете вообще ссылку на какое-нибудь описание предоставить (именно про четырехосвевые дела с удержанием в перпендикуляре к рамке 2)? А то я что-то совсем разучился в гугл, ничего не могу найти.

  6. 43 minutes ago, Mikhail_015 said:

    а иметь возможность В ЛЮБОЙ ТОЧКЕ иметь возможность двигаться в ЛЮБОМ направлении...

    У Вас и с тремя рамками есть возможность двигаться в любом направлении. Три угла Эйлера (суть положения трех рамок) однозначно определяют положение тела в пространстве. Еще раз, не путайте проблему блокировки гироскопа с проблемой позиционирования рамок. Блокировка гироскопа из-за того, что моменты вращения он сам создает, и на наружные рамки они передаются через внутренние, а значит в вырожденных точках там просто момент не может передаться. А у Вас - собственное позиционирование, каждую рамку Вы крутите отдельно. Можно крутить из любого положения в любое без проблем и без всяких четвертых рамок.

  7. 1 hour ago, I_N_P said:

    Да собственно при любом повороте по любой оси на 90 я теряю одну свободу.

    Да ничего Вы не теряете. Просто в этом случае положение одной рамки не оказывает влияния на положение тела. Как только Вы выходите из этой вырожденной точки, то положение этой рамки опять определяет положение тела. Все. Если Вы попадете в вырожденную точку, покрутите рамку, которая не влияет на тело, а потом уйдете из точки, то Вам придется быстро вернуть эту рамку в нужное положение.

  8. 2 hours ago, I_N_P said:

    DCM - это direction cosine matrix?

    Да.

    Но что-то у меня теперь вообще сомнения в том, что четвертая рамка Вам нужна. Дело в том, что состояние gimbal lock - оно актуально только тогда, когда вращающие моменты приложены к внутреннему телу. Если Вы сами вращаете рамки, то вы можете установить их в любое положение, никакой блокировки не произойдет. Вопрос только в том, что при приближении к вырожденным точкам (там где ориентация одной из рамок может быть произвольной) непонятно, куда крутить эту самую рамку. Ну так ответ простой - не крутить ее никуда, когда оба аргумента функции atan2 при вычислении угла становятся очень близки к 0 - просто в этом месте прекращаете управлять этим мотором.

  9. 37 minutes ago, I_N_P said:

    Попробую уточнить задачу.

    Ладно, я так понял, у Вас там не гироскоп внутри, а наоборот Вы сами хотите вращать произвольно внутреннее тело. Тогда все с точностью до наоборот. Из нужной Вам DCM, определяющей положение тела в пространстве относительно Земли, вы получаете угол a2. Мотор a4 устанавливаете a4=a2+pi/2. Затем DCM поворачиваете на угол pi/2-a2. Потом достаете из повернутой DCM углы a1 и a3, они и будут нужными углами соответствующих моторов. А мотор a2 устанавливаете в pi/2.

  10. 1 hour ago, Mikhail_015 said:

    какой математикой преобразовывать необходимые (требуемые) углы поворота тела (=внутренней рамки) в четыре угла поворота всех четырех осей рамок, и при этом держать в перпендикуляре эти 4-ю и 2-ю рамки. Как я понимаю, стандартных функций для такого преобразования нет - 3 угла в 4 угла поворота, два из которых "связаны"... 

    Еще раз.

    У Вас есть 4 энкодера. Углы a1, a2, a3, a4. a4 - это угол самой внешней рамки. Мотором вы удерживаете эту рамку, чтобы A2 был равен 90 градусов.

    Потом преобразуете углы a1, a2, a3 в обычную матрицу поворота - https://ru.wikipedia.org/wiki/Матрица_поворота#Выражение_матрицы_поворота_через_углы_Эйлера 

     И затем поворачиваете ее вокруг последней оси, на угол a4 (именно поэтому там тоже нужен энкодер). a2 можно не измерять, а заменить на 90 градусов, если Вы уверены в точности удержания. Но лучше измерить.

  11. 3 hours ago, Mikhail_015 said:

    Но примерно это может выглядеть так, как самый простой вариант рамок, "вложенных" одна в другую:

    Если в этом варианте, крутя мотором самые наружные оси Вы будете удерживать 90 градусов в отмеченных осях, то вроде будет так, как надо:

    image.png.8a54444e1c5c0802f56d313c66b9803d.png

    При любом повороте второй от наружной рамки угол будет определяться только положением наружной рамки.

    Вот сейчас у Вас на картинке угол в отмеченных осях - 0, а надо крутить мотором наружную рамку, пока не станет 90. И все вроде. Энкодер, PID-регулятор, мотор - и вперед ;)

  12. On 5/29/2020 at 1:52 PM, Mikhail_015 said:

    необходимо добавить 4-ю вращающуюся рамку и держать ее плоскость в перпендикуляре с плоскостью 2-й рамки.

    А, простите, можно картинку этих четырех рамок? В смысле где именно оси проходят?

  13. 59 minutes ago, Dmitry Dubrovenko said:

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

    Заморачиваются. Каждая струна - в свой MIDI-канал (указывается в первом байте сообщения Note On).

  14. 2 hours ago, nice_vladi said:

    Это ок?

    Ну а какие проблемы? Шин, конечно, много, к сожалению, z-состояние внутри FPGA недоступно, с ним, конечно, намного меньше. Увеличение разрядности упирается только в ресурсы FPGA как по лутам, так и по трассировке. Которых явно больше, чем мегагерц.

  15. 29 minutes ago, nice_vladi said:

    Если чуть усложнить - можно передавать указатели на начало/конец пакета, что бы не было пустых слов в блоке. Но в приведенном вами простейшем случае мы бьём общий пулл на много блоков, фиксированной длины (максимальный размер пакета), я правильно понял?

    Это очень плохой план делать аналог менеджера кучи с произвольным размером блоков. а) Замучаетесь реализовывать, а когда реализуете - б) фрагментация потом все убъет. В таких случаях всегда делаются блоки фиксированного размера, а дальше пока проще для начала реализовать вариант с блоками максимальной длины. Потом можно будет приделать туда блоки размером короче, чем максимальный пакет, скажем, по 128 байт. Или по 256.

    31 minutes ago, nice_vladi said:

    Здесь получается преобразование разрядности? А как обрабатываются пакеты длины не кратной 2*N*8? Какой-то дополнительный маркер вводится?

    Ну так как основное поле памяти - это не FIFO, а обычная RAM, то можно просто в первой ячейке блока хранить его длину в байтах. Приняли пакет, записали в нулевую ячейку размер, а потом номер пакета положили в FIFO номеров нужного передатчика. Передатчик взял из своего FIFO номеров номер пакета, прочитал первую ячейку, сохранил в счетчик количество байт и пошел выдавать остальное.

    33 minutes ago, nice_vladi said:

    Это означает, что нужно либо увеличить частоту работы с общим полем в 2 раза относительно шины данных, либо потерять половину пропускной способности? Ну, или предположить, что общее поле двухпортовое.

    Зачем? Не надо увеличивать частоту. Вы разрядностью все делаете. Увеличиваете ее так (*2*N), что общая пропускная способность осталось той же.

  16. Переделайте внутренние шины на размер 2*N*8 бит, где N - количество портов. К каждому из портов у Вас будет дополнительно два небольших FIFO данных, с одной стороны 2*N*8, с другой 8 бит. Почему есть множитель 2 - потому что каждый порт в обе стороны работает.

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

    Есть FIFO номеров пустых блоков, которое изначально заполнено номерами всех доступных блоков.

    Если какому-то каналу нужен блок (у него RXDV активизировался), то он вычитывает номер нового блока из этого FIFO. Конечно, т.к. FIFO номеров один, то должен быть предусмотрен арбитр. Но время на этот доступ есть, т.к. заполняется FIFO данных, о котором я говорил в самом начале.

    Далее, у каждого канала есть FIFO номеров для передачи.

    После заполнения блока определяется, в какой канал его передавать, и в FIFO номеров выходного канала заталкивается номер блока.

    Ну и передатчик тривиален - если появился номер в FIFO, то передаем блок с этим номером, после окончания передачи запихиваем уже освободившийся номер в FIFO пустых блоков.

    Итого нужно реализовать самое главное - FIFO, у которого может быть много источников и много приемников. С арбитражем, естественно.

    Хотя пожалуй даже и арбитр не нужен, ибо он сложный. Просто работа с FIFO номеров делится на N тактов, в каждом такте доступ имеет только один канал. Да и работа с общим полем памяти разбивается точно так же, только 2*N, потому что отдельно прием и передача.

    В общем да, самый простой способ такой. Скажем, у Вас 8 портов. Тогда вся работа с памятью происходит за 16 тактов. В каждом такте доступ ко всем FIFO и общему полю памяти разрешен каналу n*2+dir, где n - номер, dir - направление (0 или 1). Маленькие FIFO данных в каждом канале позволяют дождаться нужного слота доступа без потери данных. Ширина шин данных общего поля памяти будет 2*8*8=128 бит. Все.

  17. On 5/15/2020 at 10:28 AM, ViKo said:

    Какой алгоритм сжатия символов в шрифте здесь можно применить, попроще?

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

    Если уж совсем неспешно надо, но с хорошей компрессией, то рекомендую превратить символ в последовательность длин серий бит (ну т.е. сколько нулей, сколько единиц, сколько нулей и так далее), а затем сжать эту последовательность арифметическим кодером. Причем, динамического кодирования там не надо, таблицу частот можно посчитать заранее.

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

  18. 6 minutes ago, Skryppy said:

    Буду пробовать определять по тембру.

    Тут есть одна тонкость. Есть масса способов звукозвлечения на гитаре, тембр меняется очень сильно. А иногда наоборот, стараются извлекать ноты так, чтобы тембр сильно не менялся. Ну все от художественной задумки зависит.

    Для звукоизвлечения медиатором я бы предложил вот какой способ. Там в самый первый момент, когда медиатор проезжает по струне, в звуке есть шумоподобный сигнал, скребок по струне. А первый период уже тонального сигнала начнется с запозданием (пока изгиб струны пролетит к ладу и обратно). По этому запозданию и дальнейшей частоте ноты можно будет оценить номер струны.

     

    Это, естественно, только для электрогитары прокатит, если это съем акустической гитары микрофоном, то там все реверберация поломает нафиг.

    47 minutes ago, blackfin said:

    Я не про гармоники. Я про то, что пальцы на грифе нельзя одномоментно растопырить шире чем на 10 см. 

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

     

    В общем случае (разные инструменты, разные музыканты, разные способы звукоизвлечения) задача эта нерешаема. Ну так, чтобы ошибок было минимальное количество. Обычно во всех этих гитарных MIDI-датчиках или съем отдельными датчиками с каждой струны, или вообще сложная конструкция грифа с кучей проводов к ладам, позволяющая определить прижатый лад сразу.

     

    Ах да,  вишенкой на тортике еще есть такая шутка, как бэнды. Утягиваешь пальцем струну, чтобы повысить тон звучания. Бывают на целое число полутонов, а бывают и на четверть тона, в блюзе например. Очень распространенная вещь в игре на гитаре.

  19. 1 hour ago, Zoltrix said:

    Тем более здесь заявили, что для ХР сгодится 5.0 версия.

    Это да, это я не туда посмотрел, пардон.

    На самом деле я Вам сейчас на примере того моего скриншота объясню. Из всех драйверов, которые там есть, никто в режиме Threaded DPC не работает, так что максимальная латенси и есть, собственно говоря, максимальное число в колонке Highest Execution. Никаких сотен микросекунд там нет, худший случай - 39мкс.

     

    1 hour ago, Zoltrix said:

    Например, берем ПК ~2010 года сборки. Надо ли доказывать, что на нем ХП-шка будет нормально работать, а десятка тормозить.... По-моему, очевидно и неоспоримо.

    Скажите пожалуйста, что мне делать, если один из моих рабочих компов как раз собран в 2010м году, и пережил XP x86, XP x64, а последние года четыре там стоит 8.1. Каждый раз количество тормозов уменьшалось. Особенно это было заметно в свете того, что я на этом компе "немножечко шью" - работа с аудио в виде многоканального накопления, нелинейного монтажа, всякой обработки и прочее. Так что вся эта бодяга с латенси мне знакома не понаслышке. Я уж помолчу про то, что 3ГБ ОЗУ для работы в Digital Audio Workstation крайне мало. Собственно говоря, первый переход с x86 на x64 был обусловлен именно ограничением 3ГБ на процесс. Попутно оказалось, что в x64 заметно быстрее обработка. В смысле на тех же проектах в DAW загрузка процессора заметно снизилась. При переходе на 8.1 ничего в свете именно падения производительности не изменилось.

    Вот на второй комп щас настелил Win10, потому что мне она нужна для тестов. С точки зрения внутренностей, латенси и прочего - никаких отличий от 8.1, ну кроме пары моментов, связанных с Kernel Patch Protection.

    Повторю свой вопрос. Что я не так делаю?

  20. 24 minutes ago, syoma said:

    Интересно, что тут можно подкрутить. У меня сейчас примерно 600 тысяч пакетов в секунду. По современным меркам это не так уж и много, вроде.

    Ну в сторону уменьшения количества прерываний в секунду крутить, понятное дело.

  21. 5 minutes ago, Zoltrix said:

    Сделайте замер на самой правильной версии и мне скажите на какой.

    Я сделаю на ней же. Результаты сравним.

    Ну так Вы на своей XP все равно выше чем на 5й не сделаете. Там результаты не отличаются от версии к версии. Поставьте свою любимую XP на полчасика и попробуйте победить вот такой скриншот с десятки (самое интересное с точки зрения realtime - это именно вкладка Drivers):

    image.thumb.png.0d4e3b87894fecf0927af24461edd680.png

     

×
×
  • Создать...