Jump to content

    

Rst7

Модераторы
  • Content Count

    4542
  • Joined

Everything posted by Rst7


  1. Moderator: К сожалению, кое-кто не внял предупреждению. R/O на неделю.
  2. Moderator: Посты с офтопиком (а сравнение производительности в данной теме - офтопик) убраны. Потрудитесь соблюдать правила, ибо в следующий раз будут наказания.
  3. Уважаемый, у Вас тоже явная проблема в общении. И бан в гугле выписан, как я посмотрю. И во внимательности и вообще в способности ориентироваться в RFC, относящихся к TCP, например. Потому что есть еще RFC1122 "Requirements for Internet Hosts -- Communication Layers". Ну и так желаемый Вами пруф - https://tools.ietf.org/html/rfc1122#page-101 И вообще там раздел 4.2 говорит очень многие вещи, которых нет в RFC793.
  4. Причем тут протокол? Еще раз. а) Абсолютное большинство современных MIDI-гитар отдают ноты на отдельных струнах, используя номер канала. Без этого нет смысла по нынешним временам. б) Современные VST-синтезаторы (да и железные синтюки тоже) умеют работать, например, в режиме "использовать данные из таких-то каналов". Но при этом никто не мешает на другие каналы повесить другой синтезатор/семплер. в) MIDI-маршрутизация в современных DAW весьма разнообразна, и жесткие привязки Mono/Poly/Omni - это никому не нужно.
  5. Не надо понтов. Причем тут Mono, если дальше Вы по надобности действуете - можно, например, в DAW повесить один синтюк на три верхних струны, другой - на три нижних.
  6. А текст по ссылке Вы читали? Это такая же вырожденная точка. Когда на их рисунке внешняя рамка (outer gimbal) близка к 90 градусам, то нужен очень быстрый переброс 4й рамки для устранения блокировки. Это как раз когда cos A(outer) становится близок к 0.
  7. Что-то чем дальше в лес, тем вообще какой-то туман с этой четвертой осью. А можете вообще ссылку на какое-нибудь описание предоставить (именно про четырехосвевые дела с удержанием в перпендикуляре к рамке 2)? А то я что-то совсем разучился в гугл, ничего не могу найти.
  8. У Вас и с тремя рамками есть возможность двигаться в любом направлении. Три угла Эйлера (суть положения трех рамок) однозначно определяют положение тела в пространстве. Еще раз, не путайте проблему блокировки гироскопа с проблемой позиционирования рамок. Блокировка гироскопа из-за того, что моменты вращения он сам создает, и на наружные рамки они передаются через внутренние, а значит в вырожденных точках там просто момент не может передаться. А у Вас - собственное позиционирование, каждую рамку Вы крутите отдельно. Можно крутить из любого положения в любое без проблем и без всяких четвертых рамок.
  9. Да ничего Вы не теряете. Просто в этом случае положение одной рамки не оказывает влияния на положение тела. Как только Вы выходите из этой вырожденной точки, то положение этой рамки опять определяет положение тела. Все. Если Вы попадете в вырожденную точку, покрутите рамку, которая не влияет на тело, а потом уйдете из точки, то Вам придется быстро вернуть эту рамку в нужное положение.
  10. Да. Но что-то у меня теперь вообще сомнения в том, что четвертая рамка Вам нужна. Дело в том, что состояние gimbal lock - оно актуально только тогда, когда вращающие моменты приложены к внутреннему телу. Если Вы сами вращаете рамки, то вы можете установить их в любое положение, никакой блокировки не произойдет. Вопрос только в том, что при приближении к вырожденным точкам (там где ориентация одной из рамок может быть произвольной) непонятно, куда крутить эту самую рамку. Ну так ответ простой - не крутить ее никуда, когда оба аргумента функции atan2 при вычислении угла становятся очень близки к 0 - просто в этом месте прекращаете управлять этим мотором.
  11. Ладно, я так понял, у Вас там не гироскоп внутри, а наоборот Вы сами хотите вращать произвольно внутреннее тело. Тогда все с точностью до наоборот. Из нужной Вам DCM, определяющей положение тела в пространстве относительно Земли, вы получаете угол a2. Мотор a4 устанавливаете a4=a2+pi/2. Затем DCM поворачиваете на угол pi/2-a2. Потом достаете из повернутой DCM углы a1 и a3, они и будут нужными углами соответствующих моторов. А мотор a2 устанавливаете в pi/2.
  12. Еще раз. У Вас есть 4 энкодера. Углы a1, a2, a3, a4. a4 - это угол самой внешней рамки. Мотором вы удерживаете эту рамку, чтобы A2 был равен 90 градусов. Потом преобразуете углы a1, a2, a3 в обычную матрицу поворота - https://ru.wikipedia.org/wiki/Матрица_поворота#Выражение_матрицы_поворота_через_углы_Эйлера И затем поворачиваете ее вокруг последней оси, на угол a4 (именно поэтому там тоже нужен энкодер). a2 можно не измерять, а заменить на 90 градусов, если Вы уверены в точности удержания. Но лучше измерить.
  13. Если в этом варианте, крутя мотором самые наружные оси Вы будете удерживать 90 градусов в отмеченных осях, то вроде будет так, как надо: При любом повороте второй от наружной рамки угол будет определяться только положением наружной рамки. Вот сейчас у Вас на картинке угол в отмеченных осях - 0, а надо крутить мотором наружную рамку, пока не станет 90. И все вроде. Энкодер, PID-регулятор, мотор - и вперед ;)
  14. А, простите, можно картинку этих четырех рамок? В смысле где именно оси проходят?
  15. Отвечаю сам себе. Пришлось вернуться к задаче и выяснилось, что мультикаст задачу решает на отлично. Все эти мыльничные вайфай-роутеры такой пакет без подписки клиентов не роутят.
  16. Заморачиваются. Каждая струна - в свой MIDI-канал (указывается в первом байте сообщения Note On).
  17. Ну а какие проблемы? Шин, конечно, много, к сожалению, z-состояние внутри FPGA недоступно, с ним, конечно, намного меньше. Увеличение разрядности упирается только в ресурсы FPGA как по лутам, так и по трассировке. Которых явно больше, чем мегагерц.
  18. Это очень плохой план делать аналог менеджера кучи с произвольным размером блоков. а) Замучаетесь реализовывать, а когда реализуете - б) фрагментация потом все убъет. В таких случаях всегда делаются блоки фиксированного размера, а дальше пока проще для начала реализовать вариант с блоками максимальной длины. Потом можно будет приделать туда блоки размером короче, чем максимальный пакет, скажем, по 128 байт. Или по 256. Ну так как основное поле памяти - это не FIFO, а обычная RAM, то можно просто в первой ячейке блока хранить его длину в байтах. Приняли пакет, записали в нулевую ячейку размер, а потом номер пакета положили в FIFO номеров нужного передатчика. Передатчик взял из своего FIFO номеров номер пакета, прочитал первую ячейку, сохранил в счетчик количество байт и пошел выдавать остальное. Зачем? Не надо увеличивать частоту. Вы разрядностью все делаете. Увеличиваете ее так (*2*N), что общая пропускная способность осталось той же.
  19. Переделайте внутренние шины на размер 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 бит. Все.
  20. Вариантов на самом деле много, но если Вы возьмете за основу что-то типа LZ4, то сможете чуть ли не со скоростью обычного копирования разжимать символы прямо на лету. Если уж совсем неспешно надо, но с хорошей компрессией, то рекомендую превратить символ в последовательность длин серий бит (ну т.е. сколько нулей, сколько единиц, сколько нулей и так далее), а затем сжать эту последовательность арифметическим кодером. Причем, динамического кодирования там не надо, таблицу частот можно посчитать заранее. И вообще, дайте Ваш текущий набор символов, я хочу поглядеть на него.
  21. Тут есть одна тонкость. Есть масса способов звукозвлечения на гитаре, тембр меняется очень сильно. А иногда наоборот, стараются извлекать ноты так, чтобы тембр сильно не менялся. Ну все от художественной задумки зависит. Для звукоизвлечения медиатором я бы предложил вот какой способ. Там в самый первый момент, когда медиатор проезжает по струне, в звуке есть шумоподобный сигнал, скребок по струне. А первый период уже тонального сигнала начнется с запозданием (пока изгиб струны пролетит к ладу и обратно). По этому запозданию и дальнейшей частоте ноты можно будет оценить номер струны. Это, естественно, только для электрогитары прокатит, если это съем акустической гитары микрофоном, то там все реверберация поломает нафиг. Есть еще масса возможностей аккордов с открытыми струнами. Например, прижатые пятая и четвертая струна на седьмом и пятом ладу соответственно (а остальные струны нигде не прижаты, открыты, как говорят) - вполне себе ми-минор, а расстояние там будь здоров. В общем случае (разные инструменты, разные музыканты, разные способы звукоизвлечения) задача эта нерешаема. Ну так, чтобы ошибок было минимальное количество. Обычно во всех этих гитарных MIDI-датчиках или съем отдельными датчиками с каждой струны, или вообще сложная конструкция грифа с кучей проводов к ладам, позволяющая определить прижатый лад сразу. Ах да, вишенкой на тортике еще есть такая шутка, как бэнды. Утягиваешь пальцем струну, чтобы повысить тон звучания. Бывают на целое число полутонов, а бывают и на четверть тона, в блюзе например. Очень распространенная вещь в игре на гитаре.
  22. Это да, это я не туда посмотрел, пардон. На самом деле я Вам сейчас на примере того моего скриншота объясню. Из всех драйверов, которые там есть, никто в режиме Threaded DPC не работает, так что максимальная латенси и есть, собственно говоря, максимальное число в колонке Highest Execution. Никаких сотен микросекунд там нет, худший случай - 39мкс. Скажите пожалуйста, что мне делать, если один из моих рабочих компов как раз собран в 2010м году, и пережил XP x86, XP x64, а последние года четыре там стоит 8.1. Каждый раз количество тормозов уменьшалось. Особенно это было заметно в свете того, что я на этом компе "немножечко шью" - работа с аудио в виде многоканального накопления, нелинейного монтажа, всякой обработки и прочее. Так что вся эта бодяга с латенси мне знакома не понаслышке. Я уж помолчу про то, что 3ГБ ОЗУ для работы в Digital Audio Workstation крайне мало. Собственно говоря, первый переход с x86 на x64 был обусловлен именно ограничением 3ГБ на процесс. Попутно оказалось, что в x64 заметно быстрее обработка. В смысле на тех же проектах в DAW загрузка процессора заметно снизилась. При переходе на 8.1 ничего в свете именно падения производительности не изменилось. Вот на второй комп щас настелил Win10, потому что мне она нужна для тестов. С точки зрения внутренностей, латенси и прочего - никаких отличий от 8.1, ну кроме пары моментов, связанных с Kernel Patch Protection. Повторю свой вопрос. Что я не так делаю?
  23. Ну в сторону уменьшения количества прерываний в секунду крутить, понятное дело.
  24. То вы не в курсе дела. Ставит оно драйвер ядра, просто молча.
  25. Ну так Вы на своей XP все равно выше чем на 5й не сделаете. Там результаты не отличаются от версии к версии. Поставьте свою любимую XP на полчасика и попробуйте победить вот такой скриншот с десятки (самое интересное с точки зрения realtime - это именно вкладка Drivers):