1Мгц. Оптимизация скорости игры на старом 8-битном процессоре: от 1 МГц до 70% ускорения

Как ускорить работу игры на старом 8-битном процессоре с частотой 1 МГц. Какие приемы оптимизации использовались программистами в 1980-х годах. Как удалось добиться 70% ускорения за счет нестандартных решений и глубокого понимания архитектуры процессора.

Содержание

Исходная проблема: слишком медленная работа игры

В 1980-х годах разработчикам игр приходилось прибегать к самым разным ухищрениям, чтобы добиться приемлемой производительности на маломощных 8-битных компьютерах. Эта история рассказывает об одном из таких случаев оптимизации.

Друг автора разрабатывал игру-сайдскроллер для компьютера с процессором 6809, работающим на частоте около 1 МГц. Несмотря на все усилия по оптимизации, игра работала слишком медленно и была практически неиграбельной из-за рывков при прокрутке.

Особенности работы с графикой на старых компьютерах

Чтобы понять суть проблемы, нужно разобраться, как работала графика на компьютерах того времени:


  • Не было специализированных графических процессоров
  • Все операции с графикой выполнял центральный процессор
  • Изображение формировалось путем записи байтов напрямую в видеопамять
  • Для отрисовки каждого элемента приходилось копировать байты вручную

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

Исходный код копирования тайла на экран

Изначально для копирования одного тайла размером 28×28 пикселей использовался такой код на ассемблере:

[Код COPYTILE из оригинального текста]

Этот код тратил 157 тактов на копирование одной строки тайла. Учитывая, что в тайле 28 строк, на копирование целого тайла уходило 4396 тактов.

Первые попытки оптимизации

Друг автора уже применил некоторые стандартные приемы оптимизации:

  • Развернул внутренний цикл копирования строки
  • Заменил инкрементирование указателей на прямые смещения

В результате удалось сократить время копирования строки до 98 тактов, а всего тайла — до 2893 тактов. Это дало ускорение на 60% по сравнению с исходным вариантом.


Поиск нестандартных решений

Чтобы добиться дальнейшего ускорения, автор обратился к документации на процессор 6809 в поисках нестандартных возможностей. Его внимание привлекли команды PSHS и PULS для быстрой работы со стеком.

Эти команды позволяли сохранять и восстанавливать сразу несколько регистров за одну операцию. Появилась идея использовать их для быстрого копирования данных.

Новый алгоритм копирования с использованием стека

Новая идея заключалась в следующем:

  • Использовать регистр S как указатель на источник данных (тайл)
  • Использовать регистр U как указатель на приемник (видеопамять)
  • Копировать данные блоками по 6 байт с помощью PULS/PSHU

Примерный код выглядел так:

[Код с PULS/PSHU из оригинального текста]

Это позволило сократить время копирования строки до 66 тактов. Но оставалась проблема с остатком в 2 байта, так как 14 не делится нацело на 6.

Использование регистра DP для устранения остатка

Изучая документацию дальше, автор обнаружил регистр DP, который можно было использовать как дополнительное хранилище. Это позволило копировать по 7 байт за раз, что идеально подходило для строки из 14 байт.


Окончательный вариант кода выглядел так:

[Финальный код с PULS/PSHU и DP из оригинального текста]

Теперь копирование целой строки тайла занимало всего 56 тактов!

Проблема с направлением работы стека

Однако оставалась еще одна проблема — стек работает в направлении от больших адресов к меньшим, а копировать данные нужно было в обратном направлении. Как же решить эту задачу?

Финальное решение: копирование в обратном порядке

Автор нашел изящное решение:

  • Разбить строку тайла на два блока по 7 байт
  • Скопировать сначала второй блок, затем первый
  • Использовать отрицательные смещения для корректировки указателей

Это позволило сохранить высокую скорость копирования и при этом получить правильный порядок байтов на экране.

Итоговые результаты оптимизации

В результате всех оптимизаций удалось добиться следующих показателей:

  • Время копирования одного тайла уменьшилось с 4396 до 1624 тактов
  • Общее ускорение составило около 70% по сравнению с исходным кодом
  • Игра стала работать значительно плавнее и стала вполне играбельной

Этот пример показывает, насколько важно глубокое понимание архитектуры процессора и нестандартный подход к решению задач оптимизации.


Выводы: уроки экстремальной оптимизации

Данная история оптимизации демонстрирует несколько важных принципов работы над производительностью программ:

  • Важно досконально изучить возможности целевой платформы
  • Нестандартные приемы могут дать значительный прирост скорости
  • Иногда стоит пожертвовать читаемостью кода ради производительности
  • Оптимизация требует творческого подхода и глубокого понимания работы процессора

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


Анализатор фазового шума в диапазоне от 1 МГц до 50 ГГц с прямым понижающим преобразованием и взаимной корреляцией

Цепочка обработки сигналов до этого места аналогична концепции стандартной цифровой радиостанции. Но следующие АМ- и ЧМ-демодуляторы специфичны для нового подхода, который позволяет одновременно измерять амплитудный и фазовый шум при смещении частоты до 30 МГц. Алгоритм CORDIC (цифровой вычислитель поворота системы координат) используется, чтобы разделять сложный модулирующий I/Q-сигнал на амплитудные и фазовые составляющие.

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

В общем случае в автономном генераторе присутствует дрейф относительно гетеродина LO. Неизбежный сдвиг частоты приводит к линейно увеличивающейся фазе, которая свертывается при значениях ±π. Сигнал со свертыванием фазы неприемлем для дальнейшей понижающей дискретизации и БПФ-обработки. Реализация обратной связи в предшествующий NCO, чтобы удерживать ПЧ на нуле, была бы очевидным решением. Однако контуры обратной связи создают проблемы из-за больших постоянных времени и значительных требований к увеличению разрядности. Вместо этого представленный здесь подход предусматривает использование блока дифференцирования фазы в качестве надежной структуры прямой связи. ФМ-сигнал преобразуется в ЧМ-сигнал без свертывания. Медленный дрейф частоты ИУ преобразуется в составляющую ЧМ-сигнала с низкой или нулевой частотой, которая не препятствует последующей фильтрации и БПФ-обработке.

Как известно, аналоговые ЧМ-демодуляторы недостаточно чувствительны для измерения фазового шума вблизи несущей, поскольку АЧХ демодулятора понижается со скоростью 20 дБ на декаду в направлении частоты 0 Гц. Этот наклон должен компенсироваться на кривой окончательных результатов измерений, чтобы любой белый шум, возникающий после демодулятора, например, в усилителях или последующем АЦП, увеличивался на 20 дБ на декаду. Однако цифровой ЧМ-демодулятор обладает такими же характеристиками рядом с частотой 0 Гц. Но в отличии от аналогового варианта ресурсы передовых ПЛИС позволяют обрабатывать требуемый увеличенный динамический диапазон. Прореживающий цифровой фильтр, расположенный после ЧМ-модулятора, обеспечивает ослабление в полосе задержания 220 дБ. Он охватывает наклон ЧМ-демодулятора по 11 декадам! Битовая ширина сигнала соответственно увеличивается, чтобы гарантировать, что любой шум квантования будет лежать далеко за пределами фазового шума после ЧМ-демодуляции.

Для цифровых АМ- и ЧМ-демодуляторов требуется, чтобы несущая и полный диапазон измерений присутствовали в полосе частот I/Q-сигнала по Найквисту. Поэтому максимальное измеряемое смещение частоты в тракте демодулятора ограничивается значением 30 МГц. Для больших смещений частоты измеряется только сумма амплитудного и фазового шума. В этом случае тракт цифрового сигнала допускает обход демодулятора и передачу I/Q-данных непосредственно в последующий процессор для стандартного расчета спектра.

Модуль электронный SIMATIC DP для ET 200S, 1 SSI 25Бит/1МГц, ширина 15мм, модуль подключения абсолютных энкодеров и интерфейсом SSI, интерфейс SSI с DI и сравнительным значением, циклическая синхронизация по времени (6ES7138-4DB03-0AB0)

Код товара 1344299

Артикул 6ES7138-4DB03-0AB0

Страна Германия

Наименование SIMATIC DP, ЭЛЕКТРОННЫЙ МОДУЛЬ ДЛЯ ET 200S, 1 SSI 25БИТ/1МГЦ, 15MM ШИРИНА, МОДУЛЬ ПОДКЛЮЧЕНИЯ АБС. ЭНКОДЕРОВ И ИНТЕРФЕЙСОМ SSI, ИНТЕРФЕЙС SSI С DI И СРАВН. ЗНАЧ., ЦИКЛИЧЕСКАЯ СИНХРОНИЗАЦИЯ ПО ВРЕМЕНИ

Упаковки  

Сертификат RU Д-DE. HB11.B09137-20

Высота, мм 81

Глубина, мм 52

Ширина, мм 15

Степень защиты IP20

Все характеристики

Характеристики

Код товара 1344299

Артикул 6ES7138-4DB03-0AB0

Страна Германия

Наименование SIMATIC DP, ЭЛЕКТРОННЫЙ МОДУЛЬ ДЛЯ ET 200S, 1 SSI 25БИТ/1МГЦ, 15MM ШИРИНА, МОДУЛЬ ПОДКЛЮЧЕНИЯ АБС. ЭНКОДЕРОВ И ИНТЕРФЕЙСОМ SSI, ИНТЕРФЕЙС SSI С DI И СРАВН. ЗНАЧ., ЦИКЛИЧЕСКАЯ СИНХРОНИЗАЦИЯ ПО ВРЕМЕНИ

Упаковки  

Сертификат RU Д-DE. HB11.B09137-20

Высота, мм 81

Глубина, мм 52

Ширина, мм 15

Степень защиты IP20

Все характеристики

Всегда поможем:
Центр поддержки
и продаж

Скидки до 10% +
баллы до 10%

Доставка по городу
от 150 р.

Получение в 150
пунктах выдачи

Программируемые генераторы

Генераторы кварцевые с программируемой частотой:

1. Предпочтительный вариант по параметрам и срокам поставки (на заказ от 1 шт. в срок от 1 дня): 

    Программируемые  кремниевые электромеханические (MEMS) генераторы DISCERA

( Напряжение питания на выбор 1,8~3,3В/// Стабильность частоты 10 ppm -40~+105 град)

HCMOS

размера  2,5х2,0мм — DSC-8001DL5 от 1МГц до 150МГц  размера  3,2х2,5мм — DSC-8001CL5 от 1МГц до 150МГц  размера  5,0х3,2мм — DSC-8001BL5 от 1МГц до 150МГц  размера  7,0х5,0мм — DSC-8001AL5 от 1МГц до 150МГц 

( Напряжение питания на выбор 2,5~3,3В/// Стабильность частоты 25 ppm -40~+85град)

HCMOS

размера  3,2х2,5мм — DSC-8101CI2 от 10МГц до 170МГц  размера  5,0×3,2мм — DSC-8101BI2 от 10МГц до 170МГц  размера  7,0х5,0мм — DSC-8101AI2 от 10МГц до 170МГц 

( Напряжение питания на выбор 1,8~3,3В/// Стабильность частоты 25 ppm -40~+85град)

HCMOS

размера  2,5х2,0мм — DSC-1001DI2 от 1МГц до 150МГц 

( Напряжение питания на выбор 2,5~3,3В/// Стабильность частоты 25 ppm -40~+85град)

LVDS

размера  3,2х2,5мм — DSC-8103CI2 от 10МГц до 425МГц 

HCSL

размера  3,2х2,5мм — DSC-8104CI2 от 10МГц до 425МГц 

PECL

размера  3,2х2,5мм — DSC-8102CI2 от 10МГц до 460МГц 

2.  Программируемые кварцевые генераторы EPSON 

( Напряжение питания на выбор 1,8~5В/// Стабильность частоты 50ppm -40~+85град)

TTL/HCMOS

размера  3,2х2,5мм — SG-8002CE от 1МГц до 125МГц  размера  3,2х2,5мм — SG-8003CE от 1МГц до 166МГц  размера  5,0х3,2мм — SG-8002LB от 1МГц до 125МГц  размера  7,0х5,0мм — SG-8002CA от 1МГц до 125МГц  размера  7,0х5,0мм — SG-8002JF  от 1МГц до 125МГц  размера 10,5х5,8мм — SG-8002JC  от 1МГц до 125МГц (аналог SG-636)  размера 14,0х9,8мм — SG-8002JA  от 1МГц до 125МГц (аналог SG-615)  размера FULL       — SG-8002DB  от 1МГц до 125МГц (аналог DIL-14)  размера HALF       — SG-8002DC  от 1МГц до 125МГц (аналог DIL-8) 

Точную информацию по наличию, стоимости и срокам изготовления можно получить по тел. +7(495)964-08-38 или e-mail:[email protected]

Онлайн консультант


на Буженинова, 16

График работы:

С 11:00 до 17:00

Skype: consultant_buzh@quartz1. ru

Whatsapp (чат):+7(977)3560387


Программируем генераторы!
Изготовление за 1 день.

Ускоряем на 70% игру на процессоре в 1 МГц / Хабр


Давным-давно, во времена студенчества в колледже я немного занимался разработкой компьютерных видеоигр. Это была эпоха 8-битных PC, когда игровое оборудование по современным стандартам было почти невозможно медленным.

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

Это история об одном из таких трюков.

Я постараюсь припомнить все важные подробности, однако в чём-то могу ошибиться. Если так случится, простите меня, это было очень давно.

Исходные данные


Мой друг, одарённый программист, почти закончил свою новую игру. Каким-то образом ему удалось почти без изменений уместить в компьютер эпохи 1980-х довольно впечатляющую графически на то время игру, популярную на аркадных автоматах.

Единственная проблема заключалась в том, что его версия игры оказалась неиграбельной. Она работала слишком медленно, а дёрганые движения мешали вовлечённости игрока, ведь игра была сайд-скроллером.

Мой друг, работавший над игрой параллельно с учёбой в колледже, начал уже ощущать себя немного вымотанным. Опасаясь, что мог упустить какую-нибудь простую оптимизацию, он попросил посмотреть код меня.

Я посмотрел. Но там нельзя было найти никакой простой оптимизации.

Код был очень оптимальным. Куда бы я не посмотрел, он уже реализовал всё то, что бы я только мог придумать. Циклы были развёрнуты. Необязательная отрисовка была устранена. Все признаки пустой траты ресурсов были уничтожены.

А вместе с ними и наши надежды на простоту исправления.

Но как насчёт сложного исправления? Может быть, даже безумного?

Ну, такая возможность существует всегда.

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

Как работало графическое оборудование


Если вкратце, то графическое оборудование не делало ничегошеньки.

На PC, с которым мы работали, при необходимости отрисовки чего-то на экране это нужно было делать самостоятельно, байт за байтом. Никаких функций наложения текстур, никаких блиттеров. Только байты. Байты, которые нужно перемещать ручками.

Очень захватывающе.

Бо́льшую часть времени игра моего друга тратила на перерисовку фона. (Повторюсь: это сайд-скроллер.) В каждом кадре ей приходилось отрисовывать почти целый экран тайлов фона, сдвинутых на позицию игрока.

Если память меня не подводит, каждый тайл имел размер 28 на 28 пикселей. Каждый пиксель имел один из 16 цветов, то есть на его описание требовалась половина байта. Следовательно, в памяти тайлы были представлены в виде 28 соседних строк по 14 байт каждая. Первые 14 байт представляли первую строку пикселей, вторые 14 байт — вторую, и так далее.

Однако экран имел размер 320 пикселей в ширину и 240 пикселей в высоту. То есть в памяти буфер экрана размещался как 240 соседних строк по 160 байт каждый.

Следовательно, при копировании тайла по адресу X в позицию экранного буфера, начинающуюся с адреса Y, нужно скопировать 28 строк. Чтобы скопировать каждую строку, нужно скопировать 14 байт. К счастью, эта игра работала на процессоре 6809, имевшем несколько 16-битных индексных регистров и замечательные режимы адресации с «автоинкрементом» (наподобие добавления постфиксного оператора ++ к указателям на C). Это означало, что можно скопировать 4 пикселя за раз, одновременно в процессе изменяя регистры X и Y:

    LDU ,X++     ; read a 2-byte word (= 4 pixels) from source tile
    STU ,Y++     ; write it to screen buffer

Чтобы скопировать всю строку, это нужно проделать семь раз, поэтому можно поместить эти строки в цикл со счётчиком 7 итераций:
    LDB #7       ; remaining words <- tile width in words
@LOOP
    LDU ,X++     ; read a 2-byte word (= 4 pixels) from source tile
    STU ,Y++     ; write it to screen buffer
    DECB         ; reduce remaining-word count
    BNE @LOOP    ; loop while words remain

Закончив копирование строки, нужно переместить указатель точки назначения Y, чтобы он указывал на начальный адрес следующей строки, которую мы будем отрисовывать в экранный буфер. Так как экранный буфер имеет ширину 160 байт, а тайл имел размер всего 14 байт, необходимо было прибавить их разность к Y:
    LEAY 160-14,Y

Вот и всё, мы скопировали строку на экран.

Но это только одна строка. Чтобы скопировать тайл целиком, нужно проделать то же самое 28 раз. Поэтому в свою очередь этот код мы засовываем в цикл со счётчиком 28 итераций.

Соединив всё вместе и дав имена всем важным числам, мы можем получить примерно такую подпроцедуру:

;;; important constants

SCRW = 160          ; screen-buffer width in bytes (= 320 4-bit pixels)
TILW =  14          ; background-tile width in bytes (= 28 4-bit pixels)
TILH =  28          ; background-tile height in rows
WOFF = SCRW - TILW  ; s-b offset from end of one tile row to start of next


COPYTILE
;;;
;;; Copy a 28x28 background tile into a screen buffer.
;;; Arguments:
;;;   X = starting address of background tile
;;;   Y = starting address of destination in screen buffer
;;;
    LDA #TILH               ; remaining rows <- tile height
@COPYROW
    LDB #TILW/2             ; remaining words <- tile width in words
@LOOP
    LDU ,X++                ; read a word (= 4 pixels) from source tile
    STU ,Y++                ; write it to screen buffer
    DECB                    ; reduce remaining-word count
    BNE @LOOP               ; loop while words remain
    ;;
    LEAY WOFF,Y             ; advance dst ptr to start of next dst row
    DECA                    ; reduce remaining-row count
    BNE @COPYROW            ; loop while rows remain
    ;;
    RTS                     ; done! return to caller

И этот код будет хорошо работать.

Конечно, если вас не заботит скорость.

Заботимся о скорости


Зная, что игра скорее всего будет тратить основную часть времени на выполнение этого кода, вы бы поступили как любой хороший программист: начали бы считать такты. Снова покажем внутренний цикл с подготовкой и завершением, с указанием количества тактов:
    LDB #TILW/2             ; 2 cycles (set-up)
@LOOP
    LDU ,X++                ; 8
    STU ,Y++                ; 8
    DECB                    ; 2
    BNE @LOOP               ; 3
    ;;
    LEAY WOFF,Y             ; 8 (finishing)

Изучая эти величины, вы вряд ли упустите аж целых 21 такта на копирование всего 4 пикселей. То есть для копирования полной строки требуется 2 такта + (7 итераций) * (21 такт/итерация) + 8 тактов = 157 тактов. Ой-ёй.

Но и мы не в первый раз за клавиатурой. Мы знаем, что нужно сделать. Развернём этот цикл!

    LDU ,X++                ; 8 cycles
    STU ,Y++                ; 8
    LDU ,X++                ; 8
    STU ,Y++                ; 8
    LDU ,X++                ; 8
    STU ,Y++                ; 8
    LDU ,X++                ; 8
    STU ,Y++                ; 8
    LDU ,X++                ; 8
    STU ,Y++                ; 8
    LDU ,X++                ; 8
    STU ,Y++                ; 8
    LDU ,X++                ; 8
    STU ,Y++                ; 8
    LEAY WOFF,Y             ; 8 (finishing)

Теперь количество впустую тратящихся в цикле тактов снижено до нуля — мы избавились от подготовки, на каждую строку требуется всего 7 * (8 + 8) + 8 = 120 тактов. Ускорение на 30 процентов, довольно неплохо.

И на этом большинство программистов закончили бы.

Но не мой друг.

Он знал, что эти операторы ++ затратны, по 3 такта на каждый. А после разворачивания цикла он точно знал, где расположено каждое слово для чтения или записи относительно X или Y. Поэтому он остроумно заменил эти трёхтактовых постинкременты точными смещениями. Каждое из них стоит всего 1 такт, а смещение на 0 по сути бесплатное:

    LDU  ,X                 ; 5 cycles
    STU  ,Y                 ; 5
    LDU 2,X                 ; 6
    STU 2,Y                 ; 6
    LDU 4,X                 ; 6
    STU 4,Y                 ; 6
    LDU 6,X                 ; 6
    STU 6,Y                 ; 6
    LDU 8,X                 ; 6
    STU 8,Y                 ; 6
    LDU 10,X                ; 6
    STU 10,Y                ; 6
    LDU 12,X                ; 6
    STU 12,Y                ; 6
    LEAX TILW,X             ; 8 (finishing)
    LEAY SCRW,Y             ; 8 (finishing)

После таких оптимизаций количество тактов на строку снизилось до (5 + 5) + 6 * (6 + 6) + (8 + 8) = 98 тактов. По сравнению с первоначальным кодом ускорение составило 60 процентов:
original_speed  = (1*row) / (157*cycle)
optimized_speed = (1*row) /  (98*cycle)

speed_up  =  optimized_speed / original_speed - 1  =  157 / 98 - 1  =  0.60

Соединим всё вместе (я снова делаю это по памяти, поэтому код мог быть и немного другим), и подпроцедура копирования тайла будет выглядеть примерно так, копируя полный тайл (все 28 строк) всего за 2893 такта:
COPYTILE2
;;;
;;; Copy a 28x28 screen tile into a screen buffer.
;;; Arguments:
;;;   X = starting address of background tile
;;;   Y = starting address of destination in screen buffer
;;; Execution time:
;;;   4 + 28 * (82 + 8 + 8 + 2 + 3) + 5 = 2893 cycles
;;;
    LDA #TILH      ; initialize row count (4 cycles)
    ;;
@COPY1
    ;; unroll inner loop (copies one row of 28 pixels in 82 cycles)
    LDU ,X         ; (1) read 4 pixels (5 cycles)
    STU ,Y         ;     write 4 pixels (5 cycles)
    LDU 2,X        ; (2) (6 cycles)
    STU 2,Y        ;     (6 cycles)
    LDU 4,X        ; (3) . ..
    STU 4,Y        ;     ...
    LDU 6,X        ; (4)
    STU 6,Y        ;
    LDU 8,X        ; (5)
    STU 8,Y        ;
    LDU 10,X       ; (6)
    STU 10,Y       ;
    LDU 12,X       ; (7)
    STU 12,Y       ;
    ;;
    LEAX TILW,X    ; advance src to start of next row (8 cycles)
    LEAY SCRW,Y    ; advance dst to start of next row (8 cycles)
    DECA           ; reduce remaining count by one (2 cycles)
    BNE @COPY1     ; loop while rows remain (3 cycles)
    ;;
    RTS            ; done!  return to caller (5 cycles)

Этот код в сумме оказался на 60% быстрее, чем наивный код COPYTILE, с которого мы начали.

Но он не был достаточно быстрым, даже близко.

Поэтому когда друг показал мне свой код и спросил, смогу ли я его ускорить, я на самом деле хотел ему помочь. Я действительно хотел ответить «да».

Но мне пришлось ответить «нет». Мне ужасно не хотелось давать такой ответ. Однако, изучив код, я не нашёл никаких способов его ускорить.

Тем не менее, крючок с наживкой был заброшен.

Я не мог выкинуть эту задачку из головы. Вырос я на компьютерах Apple II и их процессорах 6502. Однако код моего друга исполнялся на 6809. Возможно, он позволяет создавать оптимизации, о которых я не знаю.

Возродив свой оптимизм, я набрал номер университетской библиотеки для доступа к каталогу карточек. (В те времена ещё не было World Wide Web.) Через эмулятор терминала VT220 я поискал книги о 6809.

Нашлась только одна: руководство по микропроцессору 6809. Оно находилось в инженерной библиотеке. К счастью, я учился на инженера и имел возможность брать книги.

Поэтому я отправился в библиотеку.

Безумная идея


Добравшись до инженерной библиотеки, я нашёл книгу именно там, где она и должна была находиться, ожидая небольшой встряски:

The MC6809-MC6809E Microprocessor Programming Manual.

Не озаботившись поиском стула, я стоя пролистал страницы в поисках какой-нибудь нетипичной, специфической для 6809 команды способной быстро получать и принимать множество байт. Однако страница за страницей ничего не находилось.

Затем я наткнулся на PSHS. «Push registers on the hardware stack» («Поместить регистры в аппаратный стек»).

Если на моём любимом 6502 вам нужно было сохранить регистры в стек, то это надо было делать по одному за раз, да и ещё передавая их через накопитель. Это было медленно и затратно. Поэтому когда была важна скорость, я учился избегать использования стека.

Однако на 6809 можно сохранять все регистры (или любое их подмножество) одной командой. Удивительно, но для этого требовалось всего 5 тактов, плюс по одному такту за каждый записываемый в стек байт.

Так как процессор имел три 16-битных регистра общего назначения — D, X и Y — я мог загрузить их, а затем использовать команду PSHS, чтобы записать 6 байт всего за 11 тактов. Соответствующая pull-команда, PULS, имела столь же низкие затраты.

Более того, 6809 имел два регистра стека, S и U. Я мог использовать один как указатель на источник, а другой — как указатель на точку назначения. Теоретически, при помощи одной пары PULS/PSHU я мог копировать 6 байт за 22 такта.

Это безумно, безумно быстро.

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

Безумный план


По дороге назад в общежитие я сформировал свой план.

Я буду сохранять куда-нибудь регистры S и U, а затем указывать при помощи S на тайл фона, а при помощи U на экранный буфер. Затем я буду извлекать данные из S и записывать в U, копируя по 6 байт за раз при помощи D, X и Y в качестве промежуточных носителей. Для копирования 14 байтов, составляющих строку, потребуется три такие итерации, которые в развёрнутом виде составят примерно 60 тактов.

Добравшись до своей комнаты, я нашёл лист бумаги и набросал черновик:

    PULS D,X,Y    ; first 6 bytes    11 cycles
    PSHU D,X,Y    ;                  11
    PULS D,X,Y    ; second 6 bytes   11
    PSHU D,X,Y    ;                  11
    PULS D        ; final 2 bytes     7
    PSHU D        ;                   7
    LEAU -WOFF,U  ; advance dst ptr   8

Всего 66 тактов, в том числе и корректировка U после строки, подготавливающая его к следующей строке. (Обратите внимание, что корректировка теперь отрицательна.) Для сравнения: наивный цикл копирования строк выполнял ту же задачу за 157 тактов. А оптимизированный код моего друга за 98. Эта безумная идея уже казалась серьёзным выигрышем.

Однако у нас была очень неуклюжая последняя пара PULS/PSHU! Ей нужно было обрабатывать последние два байта строки, потому что строки имели ширину 28 пикселей = 14 байт, а 14 не делится нацело на 6.

Этот чёртов остаток в 2 байта!

Вот если бы в игре использовались тайлы 24 на 24 пикселя… Но это было не так, поэтому я тщательно изучил руководство в поисках способа снижения затрат на эту неизбежную последнюю пару.

И, к своему удивлению, я наткнулся на золотую жилу! Это была ещё одна особенность процессора 6809 — регистр DP.

В 6502 и большинстве 8-битных процессоров той эпохи нижние 256 байт памяти назывались нулевой страницей. Эта нулевая страница была особой, потому что её ячейки памяти имели однобайтные адреса и к ним можно было получить доступ с помощью более коротких и обычно более быстрых команд.

Проектировщики 6809 развили эту идею ещё глубже. Они позволили программистам использовать регистр DP, чтобы назначать любую страницу в качестве нулевой, которую они называли «direct page».

Но ни одна из моих передающих байты команд не требовала применения direct page. Это означало, что можно использовать регистр DP как ещё одно дополнительное промежуточное хранилище. Теперь я мог копировать 7 байт каждой парой pull-push!

И 14 точно делится на 7 нацело.

После внесения этого изменения я мог копировать целую 28-пиксельную строку и переходить к следующей всего за 5 команд:

    PULS D,X,Y,DP  ; first 7 bytes    12 cycles
    PSHU D,X,Y,DP  ;                  12
    PULS D,X,Y,DP  ; second 7 bytes   12
    PSHU D,X,Y,DP  ;                  12
    LEAU -WOFF,U   ; advance dst ptr   8

56 тактов!

Благодаря этому фрагменту кода я почувствовал себя потрясающе. Мне удалось задействовать каждый доступный в машине регистр для передачи байтов! D, X, Y, U, S и даже нетипичный DP — все они задействовались в полную силу.

Мне очень нравилось это решение.

За одним исключением…

Мне нужно сделать ещё одну безумную вещь


Если вы знакомы со стеками, то могли заметить небольшую погрешность в моём блестящем плане:

Push и pull работают в противоположных направлениях.

Видите, ли я обманул вас, показывая фрагмент кода. Я не копировал одну строку из тайла фона на экран. На самом деле он разбивал строку на два блока по 7 байт (я назову их септетами), а затем отрисовывал их на экран в обратном порядке.

Помните те строки тайлов, которые удобно укладывались в память как 14 соседних байт?

+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 0   1   2   3   4   5   6   7   8   9   A   B   C   D |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

Когда мы выполняли pull и push строки на экран в 7-байтных септетах, они разделялись горизонтально таким образом:

+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 7   8   9   A   B   C   D | 0   1   2   3   4   5   6 |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

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

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

Чтобы продемонстрировать хаос, которое может создавать этот переворот строк и обмен местами септетов, давайте представим, что у нас есть такой тайл ключа размером 28 на 28:


Если бы вы использовали 28 раз мой код копирования строк для отрисовки его на экране, то получили бы вот такой не-ключ:
То есть… в этом была моя проблема.

Однако у этой проблемы тоже имелось изящное решение!

Опишем проблему вкратце:

  • строки перевёрнуты
  • септеты в каждой из строк поменялись местами
  • но байты в пределах каждого септета остались неизменными

Моё открытие заключалось в том, чтобы рассматривать «переворот» и «обмен местами» как два примера одного явления. Обращения.

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

Проработав всё это на бумаге, я также обнаружил, что этап предварительной обработки может игнорировать строки и просто считать тайлы одной длинной линейной последовательностью септетов1. Чтобы понять, почему это так, давайте рассмотрим небольшой тайл из 2 строк по 2 септета каждая:

+---+---+
| a   b |
+---+---+
| c   d |
+---+---+

В памяти они будут размещены в построчном порядке, то есть как 4 последовательных септета:

+---+---+---+---+
| a   b | c   d |
+---+---+---+---+

То есть переворот строк с последующим обменом местами септетов в каждой строке будут аналогичны перевороту порядка септетов в памяти:

+---+---+                  +---+---+                  +---+---+
| a   b |                  | c   d |                  | d   c |
+---+---+        =======>  +---+---+        =======>  +---+---+
| c   d |        reverse   | a   b |        swap      | b   a |
+---+---+        rows      +---+---+        septets   +---+---+

+---+---+---+---+          +---+---+---+---+          +---+---+---+---+
| a   b | c   d |          | c   d | a   b |          | d   c | b   a |
+---+---+---+---+          +---+---+---+---+          +---+---+---+---+

То есть у проблемы с искажениями решением оказался простой единовременный этап предварительной обработки: достаточно просто разбить каждый тайл на септеты и обратить их порядок.

Зная, что проблему с искажениями можно решить, мне начала нравиться вся идея в целом. я не видел никаких других проблем, поэтому накидал черновик новой подпроцедуры копирования тайлов, чтобы показать её другу. Так как логика копирования строк занимала теперь всего 5 команд, я использовал её 4 раза, немного развернув последний оставшийся цикл. Теперь вместо копирования 28 одиночных строк я копировал 7 четверных строки.

Код выглядел примерно так:

COPYTILE3
;;;
;;; Copy a 28x28 screen tile into a screen buffer.
;;; Arguments:
;;;   X = starting address of *septet-reversed* background tile
;;;   Y = starting address of destination in screen buffer
;;; Execution time:
;;;   34 + 7 * (224 + 7 + 3) + 7 + 10 = 1689 cycles
;;;
    ;; setup:  34 cycles
    PSHS U,DP      ; save U and DP (8 cycles)
    STS >SSAVE     ; save S (7 cycles)
    ;;
    LDA #TILH/4    ; initial quad-row count (2 cycles)
    STA >ROWCT     ; (5 cycles)
    ;;
    LEAS ,X                    ; initialize src ptr (4 cycles)
    LEAU (TILH-1)*SCRW+TILW,Y  ; initialize dst ptr (8 cycles)
    ;;
@COPY1
    ;; copy four rows of 28 pixels in 4 * (48 + 8) = 224 cycles
    PULS X,Y,D,DP
    PSHU X,Y,D,DP
    PULS X,Y,D,DP
    PSHU X,Y,D,DP
    LEAU -WOFF,U
    PULS X,Y,D,DP
    PSHU X,Y,D,DP
    PULS X,Y,D,DP
    PSHU X,Y,D,DP
    LEAU -WOFF,U
    PULS X,Y,D,DP
    PSHU X,Y,D,DP
    PULS X,Y,D,DP
    PSHU X,Y,D,DP
    LEAU -WOFF,U
    PULS X,Y,D,DP
    PSHU X,Y,D,DP
    PULS X,Y,D,DP
    PSHU X,Y,D,DP
    LEAU -WOFF,U
    ;;
    DEC >ROWCT     ; reduce remaining quad-row count by one (7 cycles)
    BNE @COPY1     ; loop while quad-rows remain (3 cycles)
    ;;
    LDS  >SSAVE    ; restore S (7 cycles)
    PULS U,DP,PC   ; restore regs and return to caller (10 cycles)

SSAVE ZMD  1       ; stash for saving S while drawing
ROWCT ZMB  1       ; var: remaining rows to copy

После сложения тактов их сумма составила всего 1689. Я сократил код друга почти на 1200 тактов. Ускорение на 70 процентов!

Сияя от радости, я направился к другу.

Кислотный тест


Когда я встретился с другом и сказал, что разобрался, как сделать процедуру копирования тайла на 70% быстрее, его лицо озарилось. Когда я немного объяснил всю концепцию искажений и септетов, он помрачнел и засомневался. Но когда я показал ему код, он всё понял. В голове «щёлкнуло».

«Давай его проверим», — сказал он.

Спустя примерно полчаса работы он интегрировал код в игру. После пересборки и перезапуска игра начала загружаться.

Появился экран заставки.

Он запустил игру.

И…

Чёрт побери!

Она казалась удивительно быстрой. На самом деле, вероятно, только на треть или на половину, но этого было достаточно. Мы превзошли некий порог восприятия. Игровой процесс теперь казался плавным и естественным. Разницу можно было ощутить.

Мы просто продолжали играть в игру и улыбаться. Это был хороший день.

Но наша радость была недолгой.

Семь бед…


Спустя несколько дней проблема со скоростью была далеко позади (или так нам казалось), оставалось добавить окончательные штрихи. Одним из таких штрихов были сэмплируемые звуковые эффекты. Для этого требовалось несколько раз в секунду передавать фрагменты размером в байт в ЦАП вывода звука. Чтобы запланировать передачу, мой друг включил прерывание по аппаратному таймеру.

Всё работало замечательно. Звуки звучали отлично, и всё остальное было идеально.

За одним исключением.

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

О, нет.

Происходило что-то очень плохое.

И потом нас озарило.

Что происходит, если прерывание срабатывает во время выполнения процедуры копирования тайлов?

Чтобы подготовиться к вызову обработчика прерывания, процессор помещает своё текущее состояние в системный стек. Однако во время процедуры копирования тайлов системного стека нет. Процедура «конфисковала» регистр системного стека S. И куда же он указывает? Прямо на буфер памяти, содержащий исходные тайлы!

Упс.

Мы пали духом. После всех этих усилий трудно поверить, что наше совершенное необходимое ускорение вызывает повреждение памяти…

Нуждаясь в отдыхе, мы дошли до круглосуточного кафе рядом с кампусом, чтобы поесть и подумать. Поглощая блинчики и бекон, мы обсуждали проблему.

Существовало всего два стековых регистра и без использования их обоих процедура копирования тайлов и близко не будет такой быстрой. Таким образом, мы никак не могли вернуть системе регистр S, не потеряв при этом с трудом заработанный выигрыш в скорости. Но в то же время не было никакого способа реализации надёжного звука без использования прерываний.

Значит, тем или иным образом прерывания должны работать. А если они работают, то при выполнении копирования тайлов всё, на что указывает S, будет повреждено.

«Как можно предотвратить это повреждение?», — спросил я.

Мы сидели, забыв о еде, и вопрос повис в воздухе.

Внезапно мой друг хлопнул по столу. Он понял.

«Не нужно его предотвращать!», — сказал он.

«Что?»

«Не будем предотвращать повреждение. Пусть оно происходит. Просто не с исходными тайлами».

Это на самом деле было просто. Он продолжил:

«Просто поменяем местами S и U в процедуре копирования тайлов. U будет указывать на исходные тайлы, а S — на экранный буфер. Если сработает прерывание, то повреждение произойдёт там, куда указывает Sна экране. Повреждение сохранится только до перерисовки следующего кадра».

«Гениально!», — сказал я.

Стремясь проверить его решение, мы быстро закончили трапезу.

… один ответ


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

Позже тем же вечером мы его нашли.

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

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

Это был идеальный хак!

За старые деньки!


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

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

Однако такой поиск всегда был очень поучительным.

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

Мы начали с процедуры копирования тайлов, ядро которой состояло из настроенного вручную развёрнутого цикла машинных команд. Затем для получения ускорения на 70%:

  1. Мы заменили эту подпроцедуру очень специфичным признаком проявления нашего безумия, конфискующим оба стековых указателя и использующим извлечение и запись в стеки, а также все доступные регистры для отрисовки тайлов вниз головой и сломанными по горизонтали.
  2. Затем мы предварительно обработали тайлы, чтобы отрисовка на самом деле их исправляла.
  3. Но потом (чёрт возьми!) оказалось, что прерывания, запускаемые во время отрисовки, способны повредить исходные тайлы.
  4. Поэтому для защиты исходных тайлов мы повреждали вместо них экранный буфер.
  5. Но такое повреждение было бы видимым.
  6. Поэтому мы изменили порядок размещения тайлов, чтобы чинить (на лету) любые повреждения, которые могут возникнуть, прежде чем они успеют отобразиться на экране.
  7. И всё это сработало!

Мы сделали это. Ради 70 процентов.

И это полностью оправдало себя.

Расскажи свою историю


Я хотел поделиться этой историей по двум причинам.

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

Я узнал, что борьба оправдывает себя.

Во-вторых, я хотел вдохновить вас рассказать свои истории. Я знаю, что «в былые времена» создание большинства видеоигр приводило к появлению множества таких историй. Я бы хотел их услышать. Но слишком многие из них утеряны, стёрты из памяти до того, как кто-нибудь догадался их сохранить.

Если у вас есть история, не ждите. Расскажите её, с каждым днём ожидания это становится сложнее.



  1. Задание: доказать для всех конечных последовательностей из конечных последовательностей, что применение (reverseconcat) эквивалентно применению (concatreversemap reverse).
  2. Нам также нужно было проверять, что ничего ценного не хранится в ячейках памяти непосредственно перед экранным буфером. Теоретически они тоже могли бы быть повреждены при срабатывании прерывания в момент размещения верхнего левого септета верхнего левого углового тайла. Адрес этого септета соответствует началу буфера.

ICE2HS01G PMIC; контроллер резонансногорежима; 0,03?1МГц; PG-DSO-20 производства ICE2HS01G

Главная Каталог Полупроводники Микросхемы Регуляторы напряжения — микросхемы Импульсные регуляторы — микросхемы Регуляторы напряжения — микросхемы ШИМ
КоличествоЦена ₽/шт
Минимально 1 шт и кратно 1 шт
  • Условия

    Срок поставки 5-10 рабочих дней
    Цена включает НДС Cрок поставки и цену сообщим по вашему запросу
  • Артикул

    ICE2HS01G
  • Производитель

  • Техническое описание:

Вы можете запросить у нас любое количество ICE2HS01G, просто отправьте нам запрос на поставку.
Мы работаем с частными и юридическими лицами.

Купить ICE2HS01G от 1 шт с помощью банковской карты можно прямо сейчас на нашем сайте.
Работаем с частными и юридическими лицами.

ICE2HS01G описание и характеристики

PMIC; контроллер резонансногорежима; 0,03?1МГц; PG-DSO-20

Бесплатная доставка
заказов от 5000 ₽

Доставим прямо в руки или в ближайший пункт выдачи


Смежные товары

Определение МГц | PCMag

( M ega H ert Z ) Один миллион циклов в секунду. МГц используется для измерения скорости передачи электронных устройств, включая каналы, шины и внутренние часы компьютера. Тактовая частота в один мегагерц (1 МГц) означает, что некоторым количеством битов (1, 4, 8, 16, 32 или 64) можно управлять не менее одного миллиона раз в секунду. Тактовая частота в два гигагерца (2 ГГц) означает минимум два миллиарда раз. «По крайней мере» потому, что несколько операций часто выполняются за один такт.

И мегагерцы (МГц), и гигагерцы (ГГц) используются для измерения скорости процессора. Например, компьютер с частотой 1,6 ГГц обрабатывает данные (вычисляет, сравнивает, копирует) в два раза быстрее, чем компьютер с частотой 800 МГц.

Почему не быстрее?
ЦП в новом компьютере, в котором установлена ​​частота в два раза больше МГц или ГГц, чем на предыдущем компьютере, не означает, что за один и тот же период времени выполняется вдвое больше готовой работы. Внутренний кэш и архитектура ЦП, а также скорость ОЗУ, хранилища и сети — все это влияет на фактическую производительность и общую пропускную способность компьютера.См. Кеш.

Пользователи часто с тревогой обнаруживают лишь постепенные улучшения после покупки так называемого «более быстрого» компьютера. Кроме того, более новые версии программного обеспечения иногда работают медленнее, чем предыдущие версии, и часто требуется более быстрый компьютер, просто чтобы поддерживать тот же уровень производительности, что и старое программное обеспечение. См. Инструкции в секунду, Герцах и пространстве / времени.

МГц и ГГц — это сердцебиение
При определении частоты процессора, частота МГц и ГГц представляют собой необработанные устойчивые импульсы, которые возбуждают цепи в микросхеме.Немецкий физик Генрих Герц определил электромагнитные волны в 1883 году, и по совпадению «Герц» на немецком языке означает «сердце».

Скорость и ширина


Мегагерцы (МГц) и гигагерцы (ГГц) — это тактовая частота процессора, а количество бит (8, 16 и т. Д.) — это ширина регистров процессора. Сочетание скорости и ширины определяет внутреннюю производительность процессора. Параллельные каналы от ЦП к внешним устройствам также измеряются по скорости и ширине; однако последовательные каналы оцениваются только по скорости.См. Параллельную передачу, последовательную передачу и шины данных ПК.

Мегагерц (МГц) Преобразование единиц частоты

Мегагерц — это единица измерения частоты. Используйте один из приведенных ниже калькуляторов преобразования, чтобы преобразовать в другую единицу измерения, или прочтите, чтобы узнать больше о мегагерцах.

Калькулятор преобразования мегагерц

Выберите единицу частоты для преобразования.

Частота

Угловая частота

Мегагерц, определение и использование

Мегагерцы — это частота, равная одному миллиону циклов в секунду.

Мегагерц кратен герцу, который является производной единицей измерения частоты в системе СИ. В метрической системе «мега» — это префикс 10 6 . Мегагерцы можно обозначить как МГц ; например, 1 мегагерц можно записать как 1 МГц.

Таблица преобразования единиц измерения в мегагерцах

Общие значения мегагерц и эквивалентные измерения частоты в британской и метрической системе
мегагерцы герц килогерц гигагерц терагерц циклов в секунду оборотов в минуту радиан в секунду градусов в секунду
1 МГц 1000000 Гц 1000 кГц 0. 001 ГГц 0,000001 ТГц 1000000 имп / с 60 000 000 об / мин 6,283,185 рад / с 360 000 000 ° / с
2 МГц 2 000 000 Гц 2000 кГц 0.002 ГГц 0,000002 ТГц 2,000,000 циклов в секунду 120 000 000 об / мин 12,566,371 рад / с 720,000,000 ° / с
3 МГц 3 000 000 Гц 3000 кГц 0. 003 ГГц 0,000003 ТГц 3,000,000 циклов в секунду 180 000 000 об / мин 18,849,556 рад / с 1 080 000 000 ° / с
4 МГц 4 000 000 Гц 4000 кГц 0.004 ГГц 0,000004 ТГц 4,000,000 циклов в секунду 240 000 000 об / мин 25 132 741 рад / с 1,440,000,000 ° / с
5 МГц 5 000 000 Гц 5000 кГц 0. 005 ГГц 0,000005 ТГц 5 000 000 имп / с 300000000 об / мин 31,415,927 рад / с 1,800,000,000 ° / с
6 МГц 6 000 000 Гц 6000 кГц 0.006 ГГц 0,000006 ТГц 6 000 000 имп / с 360 000 000 об / мин 37,699,112 рад / с 2 160 000 000 ° / с
7 МГц 7 000 000 Гц 7000 кГц 0. 007 ГГц 0,000007 ТГц 7 000 000 имп / с 420 000 000 об / мин 43,982,297 рад / с 2,520,000,000 ° / с
8 МГц 8 000 000 Гц 8000 кГц 0.008 ГГц 0,000008 ТГц 8 000 000 имп / с 480 000 000 об / мин 50 265 482 рад / с 2 880 000 000 ° / с
9 МГц

00 Гц

9000 кГц 0. 009 ГГц 0,000009 ТГц

00 имп / с

540 000 000 об / мин 56,548,668 рад / с 3 240 000 000 ° / с
10 МГц 10 000 000 Гц 10 000 кГц 0.01 ГГц 0,00001 ТГц 10 000 000 имп / с 600000000 об / мин 62,831,853 рад / с 3,600,000,000 ° / с
11 МГц 11 000 000 Гц 11000 кГц 0. 011 ГГц 0,000011 ТГц 11000000 имп / с 660 000 000 об / мин 69,115,038 рад / с 3,960,000,000 ° / с
12 МГц 12 000 000 Гц 12000 кГц 0.012 ГГц 0,000012 ТГц 12 000 000 имп / с 720 000 000 об / мин 75,398,224 рад / с 4,320,000,000 ° / с
13 МГц 13 000 000 Гц 13000 кГц 0. 013 ГГц 0,000013 ТГц 13000000 имп / с 780 000 000 об / мин 81,681,409 рад / с 4 680 000 000 ° / с
14 МГц 14 000 000 Гц 14000 кГц 0.014 ГГц 0,000014 ТГц 14000000 имп / с 840 000 000 об / мин 87,964,594 рад / с 5 040 000 000 ° / с
15 МГц 15 000 000 Гц 15000 кГц 0. 015 ГГц 0,000015 ТГц 15 000 000 имп / с

0000 об / мин

94 247 780 рад / с 5 400 000 000 ° / с
16 МГц 16 000 000 Гц 16000 кГц 0.016 ГГц 0,000016 ТГц 16 000 000 имп / с 960 000 000 об / мин 100,530,965 рад / с 5,760,000,000 ° / с
17 МГц 17 000 000 Гц 17000 кГц 0. 017 ГГц 0,000017 ТГц 17000000 имп / с 1,020,000,000 об / мин 106814150 рад / с 6 120 000 000 ° / с
18 МГц 18 000 000 Гц 18000 кГц 0.018 ГГц 0,000018 ТГц 18000000 имп / с 1 080 000 000 об / мин 113,097,336 рад / с 6,480,000,000 ° / с
19 МГц 19 000 000 Гц 19000 кГц 0. 019 ГГц 0,000019 ТГц 1

00 имп / с

1,140,000,000 об / мин 119,380,521 рад / с 6,840,000,000 ° / с
20 МГц 20000000 Гц 20000 кГц 0.02 ГГц 0,00002 ТГц 20 000 000 имп / с 1,200,000,000 об / мин 125,663,706 рад / с 7 200 000 000 ° / с

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

Преобразование 1 мегагерца в герц — преобразование 1 мегагерца в герц (МГц в Гц)

Преобразование из 1 мегагерца в герц

Мегагерц в герц — частота, длина волны — преобразование

Вы переводите единицы Длина волны Частота из Мегагерц в Герц

1 мегагерц (МГц)

=

1000000 Герц (Гц)

Посетите Герц в Мегагерц Преобразование

Мегагерц: Мегагерц — это производная единица измерения частоты в системе СИ, кратная десятичной, которая равна 10 6 Гц.Обозначение мегагерц — МГц.

Герц: Герц — это единица измерения частоты в единицах СИ, эквивалентная циклам в секунду. Он определяется как количество циклов периодического явления в секунду. Чаще всего он используется для описания синусоидальной волны, особенно тех, которые используются в радио и аудио приложениях, например, частоты музыкальных тонов. Символ герца — Гц.

Калькулятор преобразования длины волны частоты

Конвертировать из:

МГц

Общие единицы Гигагерц (ГГц) Герц (Гц) Килогерц (кГц) Мегагерц (МГц) Миллигерц (МГц) Петагерц (ФГц) Терагерц (ТГц) Длина волны в метрах (w.л. м) Стандартные единицы Аттогерц (aHz) Сантигерц (cHz) Цикл / секунда (cyc./s) Декагерц (dHz) Декагерц (daHz) Экзагерц (EHz) Фемтогерц (fHz) Гектогерц (hHz) Микрогерц (μHz) Panohertz pHz) Длина волны в сантиметрах (wl cm) Длина волны в декаметрах (wl dam) Длина волны в дециметрах (wl dm) Длина волны в Exametres (wl Em) Длина волны в гигаметрах (wl Gm) Длина волны в гектометрах (wl Hm) Длина волны в километрах (wl Km) ) Длина волны в мегаметрах (wl мм) Длина волны в микрометрах (wl мкм) Длина волны в миллиметрах (wl мкм) Длина волны в миллиметрах (wl мкм)л. мм) Длина волны в петаметрах (w.l. Pm) Длина волны в тераметрах (w.l. Tm) Перевести в :

Гц

Стандартные единицы Гигагерцы (ГГц) Герцы (Гц) Килогерцы (кГц) Мегагерцы (МГц) Миллигерцы (МГц) Петагерцы (ФГц) Терагерцы (ТГц) Длина волны в метрах (Вт-м) Общие единицы Аттогерц (Гц) Сантигерц (сГц) цикл . /s) Декагерцы (dHz) Декагерцы (daHz) Экзагерцы (EHz) Фемтогерцы (fHz) Гектогерцы (hHz) Микрогерцы (µHz) Наногерцы (nHz) Пикогерцы (pHz) Длина волны в сантиметрах (wl cm) Длина волны в декамах (wl cm)л. dam) Длина волны в дециметрах (wl dm) Длина волны в Exametres (wl Em) Длина волны в гигаметрах (wl Gm) Длина волны в гектометрах (wl Hm) Длина волны в километрах (wl Km) Длина волны в Megametres (wl Mm) Длина волны в микрометрах (wl Mm) ) Длина волны в миллиметрах (wl мм) Длина волны в петаметрах (wl Pm) Длина волны в тераметрах (wl Tm) Результат :

Самые популярные пары преобразования частоты длина волны

  • Гигагерц в Герц
  • Гигагерц в Килогерц
  • Гигагерц в Мегагерц
  • Гигагерц в Миллигерц
  • Гигагерц в Петагерц
  • Гигагерц в Терагерц
  • Гигагерц на ш.л. м
  • Герц в Гигагерц
  • Герц в Килогерц
  • Герц в Мегагерц
  • Герц в Миллигерц
  • Герц в Петагерц
  • Герц в Терагерц
  • Гц до w.l. м
  • Килогерц в Гигагерц
  • Килогерц в Герц
  • Килогерц в Мегагерц
  • Килогерц в Миллигерц
  • Килогерц в Петагерц
  • Килогерц в Терагерц
  • килогерц до ш.л. м
  • Мегагерц в Гигагерц
  • Мегагерц в Герц
  • Мегагерц в Килогерц
  • Мегагерц в Миллигерц
  • Мегагерц в Петагерц
  • Мегагерц в Терагерц
  • Мегагерц до w.l. м
  • Миллигерц в Гигагерц
  • Миллигерц в Герц
  • Миллигерц в Килогерц
  • Миллигерц в Мегагерц
  • Миллигерц в Петагерц
  • Миллигерц в Терагерц
  • Миллигерц к ш.л. м
  • Петагерц в Гигагерц
  • Петагерц в Герц
  • Петагерц в Килогерц
  • Петагерц в Мегагерц
  • Петагерц в Миллигерц
  • Петагерц в Терагерц
  • Петагерц до w.l. м
  • Терагерц в Гигагерц
  • Терагерц в Герц
  • Терагерц в Килогерц
  • Терагерц в Мегагерц
  • Терагерц в Миллигерц
  • Терагерц в Петагерц
  • Терагерц на ш.л. м
  • w.l. м в гигагерцы
  • w.l. м в Герц
  • w.l. м в Килогерц
  • w.l. м в Мегагерцы
  • w.l. м в Миллигерц
  • w.l. м до Петагерца
  • w.l. м в Терагерц

Подкаст Apple II — Подкасты Monster Feet

1 МГц: подкаст Apple II

Организатор — Кэррингтон Ванстон.

Подписаться: iTunes RSS

16

Архонт

18 июля 2012 г.

Обзор Archon для Apple II.


воспроизвести /
загрузки

15

Открытые мегагерцы

23 июля 2011 г.

Специальное шоу, записанное на KansasFest 2011


воспроизвести /
загрузки

14

Бюрократия со стороны Инфоком

13 июля 2011 г.

Обзор бюрократии от Infocom для Apple II.


воспроизвести /
загрузки

13

В поисках самого удивительного

23 апреля 2011 г.

Обзор модели В поисках самого удивительного для Apple II.


воспроизвести /
загрузки

12

Пустошь

25 октября 2010 г.

Обзор Wasteland для Apple II.


воспроизвести /
загрузки

11

Проклятие поместья Кроули

5 февраля 2008 г.

Обзор модели The Curse of Crowley Manor для Apple II.


воспроизвести /
загрузки

10

Apple Паника

14 июля 2007 г.

Обзор Apple Panic для Apple II.


воспроизвести /
загрузки

9

Голливудский хиджинкс от Infocom

5 июня 2007 г.

Обзор Hollywood Hijinx от Infocom для Apple II.


воспроизвести /
загрузки

8

Черная магия и неизведанная галактика

4 марта 2007 г.

Обзор Black Magic и Undiscoverd Galaxy для Apple II.


воспроизвести /
загрузки

7

Нет отзывов — это хорошо Отзывы

31 декабря 2006 г.

Нет обзоров на этот выпуск, но интересных новостей об Apple II предостаточно.


воспроизвести /
загрузки

6

Портал

30 октября 2006 г.

Обзор Portal для Apple II.


воспроизвести /
загрузки

5

Трансильвания и Infocom Ballyhoo

24 сентября 2006 г.

Обзор Transylvania и Infocom Ballyhoo для Apple II.


воспроизвести /
загрузки

4

Решатель Дондры и Судоку

6 августа 2006 г.

Обзор Dondra и Sudoku Solver для Apple II.


воспроизвести /
загрузки

3

Побег !, Вперед и микроприключения

2 июля 2006 г.

Обзор Escape !, Head On и Micro Adventure для Apple II.


воспроизвести /
загрузки

2

Lode Runner and Jungle Safari

4 июня 2006 г.

Обзор Lode Runner и Jungle Safari для Apple II.


воспроизвести /
загрузки

1

Tass Times в Тонтауне

7 мая 2006 г.

Обзор Tass Times в Тонтауне для Apple II.


воспроизвести /
загрузки

Широкополосная спектроскопия импеданса от 1 мГц до 10 МГц с помощью комбинации четырех- и двухэлектродных методов

Основные моменты

Предлагаются процедуры широкополосной спектроскопии импеданса от 1 мГц до 10 МГц.

Мы объединяем данные с двух разных инструментов ИБ.

Процедуры испытываются на воде, пористом стекле, песчанике и образцах бетона.

Мы используем отношения Крамерса – Кронига и моделирование CRIM для проверки.

Метод превосходит два альтернативных подхода к объединению данных.

Abstract

Измерения методом импедансной спектроскопии (IS) позволяют исследовать широкий спектр механизмов поляризации, связанных с различными частотными диапазонами. Экспериментальные устройства обычно с достаточной точностью покрывают ограниченные диапазоны частот. Мы предлагаем (а) комбинацию четырехэлектродных и двухэлектродных устройств и (б) комбинацию данных и процедуру взаимной проверки с использованием реального испытуемого образца.Таким образом, мы покрываем диапазон частот от 1 МГц до 10 МГц. Комбинация данных основана на предварительном условии, что любые дисперсионные помехи затухают в некоторой общей точке в перекрывающемся частотном диапазоне от 1 Гц до 45 кГц. Мы проверяем нашу процедуру объединения данных с помощью измерений IS на простых системах отсчета и сравнения с широко принятыми модельными функциями, например модель комплексного показателя преломления (CRIM) для высокочастотного поведения и соотношения Крамерса – Кронига с точки зрения согласованности данных.В этом отношении предлагаемый нами подход к обработке данных превосходит два выбранных альтернативных подхода. Мы успешно адаптируем типичные функции эмпирической модели, например multi-Cole – Cole к полученным широкополосным данным, чтобы показать, что они полностью применимы для дальнейшего анализа данных.

Ключевые слова

Широкополосная импедансная спектроскопия

Электрические измерения и обработка

Спектрально-индуцированная поляризация (SIP)

Рекомендуемые статьиЦитирующие статьи (0)

Просмотреть аннотацию

Copyright © 2015 Авторы.Опубликовано Elsevier B.V.

Рекомендуемые статьи

Цитирующие статьи

Frontiers | Влияние ультразвука с частотой 1 МГц на температуру эпаксиальных мышц у лошадей

Введение

Терапевтический ультразвук — это широко используемый метод лечения термических и нетермических эффектов при лечении различных состояний как у животных, так и у людей (1–4). Было показано, что тепловые эффекты ультразвука уменьшают боль (5–9), уменьшают подострый и хронический отек (10–12), уменьшают мышечные спазмы (7, 13, 14) и способствуют растяжению коллагеновой ткани (15–12). 17).Было показано, что нетепловой ультразвук стимулирует восстановление тканей, уменьшает боль, вызванную триггерными точками, и уменьшает отек (10–12). Чтобы добиться теплового эффекта от ультразвука и увеличить растяжимость тканей, температура тканей должна быть выше нормального уровня (15, 16). Известно, что повышение температуры тканей на 1 ° C увеличивает скорость метаболизма в тканях, а> 2 ° C — для уменьшения хронического воспаления, уменьшения боли, увеличения кровотока, уменьшения мышечных спазмов и увеличения растяжимости коллагена (15–21).Эти исследования показывают, что повышение температуры тканей на 2–4 ° C эффективно для улучшения гибкости / диапазона движений (ROM) как у животных, так и у людей (15-17). Большинство ультразвуковых исследований проводилось на людях и собаках. Однако терапевтический ультразвук — это метод, который часто используется в популяции лошадей. Из-за отсутствия исследований, подтверждающих влияние ультразвука на лошадей, необходимо провести дальнейшие исследования, чтобы установить протоколы ультразвукового исследования в популяции лошадей.

Хотя ультразвук можно проводить на разных частотах, большинство исследований проводилось с использованием 1.0 и 3,0 МГц. В исследованиях на людях и собаках было показано, что частота 1,0 МГц наиболее эффективно нагревает ткани на глубине от 2,0 до 5,0 см, при этом 3,0 см — это глубина, на которой происходит максимальное нагревание (17–20, 22). И наоборот, было показано, что частота 3,3 МГц наиболее эффективна при нагревании тканей размером от 1,0 до 2,5 см (23, 24). В исследовании на людях непрерывный ультразвук 3,0 МГц с интенсивностью 0,5 Вт / см 2 применялся к икроножной мышце живота в течение 10 минут (21). Пиковое повышение температуры тканей на глубине 2.0 см составляет 2,8 ° C (21). Кроме того, единственное опубликованное исследование, оценивающее влияние терапевтического ультразвука на температуру мышц и сухожилий лошади, использовало частоту 3,3 МГц и интенсивность 1,5 Вт / см 2 (25). При использовании этого уровня ультразвука в течение 20 минут на площади 15,0 см 2 среднее повышение температуры на 1,0 см составило 1,3 ° C, 0,7 ° C на 4,0 см и 0,7 ° C на 8,0 см (25).

Целью этого исследования было определить тепловой эффект, который будет иметь ультразвук 1,0 МГц при 1.0, 3,0 и 5,0 см в эпаксиальной мышце лошади при интенсивности 1,0 и 2,0 Вт / см. 2 .

Материалы и методы

Были исследованы десять взрослых кобыл смешанной породы, не имеющих каких-либо ортопедических заболеваний или хромоты, весом 465–576 кг. Возраст от 4 до 12 лет. Все экспериментальные процедуры были одобрены Комитетом по уходу и использованию животных Университета Теннесси (Ноксвилл, Теннесси, США). Для установки термопары лошадей удерживали в стапелях. Детомидин HCl (0.01 мг / кг внутривенно {IV}) вводили перед размещением термопары, чтобы предотвратить движение лошади и обеспечить точное размещение термопар. Детомидин во время лечения не применялся.

Волосы были вырезаны из обработанной площади 25 см. 2 квадратной области над правой и левой длинной мышцей спины на уровне второго поясничного позвонка. Центр вырезанной области находился на 10 см латеральнее средней линии. Кожа в этой области была подготовлена ​​для асептического введения стерильных игл для подкожных инъекций с использованием скраба с повидон-йодом и стерильного изотонического солевого раствора (0.9% NaCl) раствор. Три миллилитра мепивацина HCl (20 мг / мл) вводили подкожно через иглу размера 25, 1,6 см в область 2 см 2 , которая находилась в центре вырезанной области. В эту область размером 2 см 2 были введены одна игла 20 калибра, 3,81 см и две спинальные иглы 20 калибра, 8,89 см. Иглы вводили по направлению к средней линии под углом 75 ° с использованием диагностического ультразвука, чтобы гарантировать надлежащую глубину 1,0, 3,0 и 5,0 см и избежать поперечного отростка поясничных позвонков.После калибровки гибкий имплантируемый терморезисторный зонд вводили через просвет каждой иглы в мышцу, и иглы удалялись, сдвигая их над термистором и вынимая из ткани. После того, как иглы были удалены, термисторы были закреплены с помощью 1-дюймовой медицинской ленты за пределами области лечения. Термисторы были подключены к микрокомпьютеру, взаимодействующему с компьютерной программой, которая регистрировала температуру каждые 30 с.

Температура регистрировалась в течение 5 минут для установления базовой температуры на каждой глубине обработки.Шаблон 20 см 2 использовался, чтобы очертить зону обработки с центром в области вставки термистора. Ультразвук применялся с использованием стандартного геля для передачи ультразвука в течение 10 мин через звуковую головку с эффективной площадью излучения 10 см 2 . Ультразвуковой прибор был откалиброван авторизованной службой калибровки непосредственно перед использованием в этом исследовании. Площадь 20 см 2 получала 10 минут непрерывного ультразвука с частотой 1 МГц и 1,0 или 2,0 Вт / см 2 , что было определено путем случайного распределения (правая или левая длинная мышца) (рис. 1).Температуру регистрировали каждые 30 с во время обработки и в течение 10 мин после ее окончания. В конце периода измерения термисторы были удалены, и каждой лошади вводили фенилбутазон (4,4 мг / кг внутривенно).

Рисунок 1 . Выполнение ультразвука с использованием стандартного геля для передачи ультразвука в течение 10 минут с помощью звуковой головки 1,0 МГц с эффективной площадью излучения 10 см. 2 .

Статистический анализ

Средние температуры для каждой временной точки, местоположения и интенсивности были рассчитаны с использованием компьютерного программного обеспечения.Смешанный модельный дисперсионный анализ (ANOVA) с повторными измерениями использовался для проверки различий между нагревом, полученным на трех разных глубинах, и для двух разных интенсивностей на этих трех глубинах. Индивидуальные различия в средних значениях были проверены с помощью теста разделения средних по наименьшей значимой разнице (LSD). Чтобы проверить, было ли изменение температуры ткани с течением времени в каждом месте и на каждой глубине значительно различается, площадь под кривой (AUC) была рассчитана с использованием логарифмически линейного правила трапеций.Среднее разделение ANOVA и LSD рассчитывали с помощью компьютерного программного обеспечения. Результаты считались значимыми при P <0,05.

Результаты

Имплантация термисторов и ультразвуковое лечение хорошо переносились всеми лошадьми. В месте имплантации термистора длинная мышца спины в среднем составляла 8 см в глубину (диапазон 6–9 см). Послеоперационных осложнений не было.

Температура начала расти в течение 30 с после начала обработки при обеих интенсивностях и на всех глубинах (рис. 2, 3).По окончании обработки наблюдалось медленное, но устойчивое снижение температуры как при интенсивности, так и на всех глубинах. Однако в конце периода измерения (через 10 минут после окончания обработки) температуры при обеих интенсивностях и на всех глубинах все еще были выше исходного уровня. Исходная температура составляла 38,3, 39,4 и 39,8 ° C на глубине 1,0, 3,0 и 5,0 см соответственно.

Рисунок 2 . Изменение температуры тканей эпаксиальных мышц во время терапевтического ультразвука на 1,0 Вт / см 2 .Ультразвук начинается через 5 мин и заканчивается через 15 мин. Значения представлены как среднее ± стандартная ошибка среднего.

Рисунок 3 . Изменение температуры тканей эпаксиальных мышц во время лечебного ультразвука 2,0 Вт / см 2 . Ультразвук начинается через 5 мин и заканчивается через 15 мин. Значения представлены как среднее ± стандартная ошибка среднего.

При использовании интенсивности 1,0 Вт / см 2 максимальное повышение температуры эпаксиальной мускулатуры на глубине 1,0 см составило 1,55 ° C, и эта температура была достигнута в конце лечения.На глубине 3 см максимальное повышение температуры составило 1,18 ° C, что достигается в конце обработки. На глубине 5 см максимальное повышение температуры составило 1,29 ° C, что достигается в конце обработки (табл. 1).

Таблица 1 . Повышение температуры тканей через 10 мин лечения терапевтическим ультразвуком.

При использовании интенсивности 2,0 Вт / см 2 максимальное повышение температуры эпаксиальной мускулатуры на глубине 1,0 см было 2.48 ° C, и эта температура была достигнута через 9 мин обработки. На глубине 3 см максимальное повышение температуры составило 1,24 ° C, что достигается через 9 мин обработки. На глубине 5 см максимальное повышение температуры составило 1,95 ° C, что достигается через 9 мин обработки (таблица 1).

На глубине 1,0, 3,0 и 5,0 см интенсивность нагрева тканей 2,0 Вт / см 2 значительно больше, чем интенсивность 1,0 Вт / см 2 ( p <0,01) (Таблица 1).

Через десять минут после завершения процедуры температура тканей 1.0 Вт / см 2 Настройка все еще была выше базовой с температурами 38,7, 40,0 и 40,5 ° C для глубин 1,0, 3,0 и 5,0 см соответственно. Для 2,0 Вт / см 2 температура ткани составляла 38,7, 40,2 и 40,9 ° C для глубины 1,0, 3,0 и 5,0 см соответственно.

Обсуждение

Исходные температуры тканей были максимальными на глубине 5,0 см, затем на 3,0 см, а затем на глубине 1,0 см. Это было ожидаемо, поскольку более глубокие ткани находятся ближе к сердцевине тела и согласуются с предыдущими исследованиями на лошадях, собаках и людях (18, 19, 22–24) (Рисунки 2, 3).

В то время как статистическая значимость была достигнута между 2,0 и 1,0 Вт / см 2 интенсивностей на всех глубинах, разница на 3,0 см была небольшой и, вероятно, не клинически значимой. Статистическая значимость была достигнута в состоянии 3,0 см, поскольку все значения имели тенденцию к повышению (хотя и незначительно) при сравнении 2,0–1,0 Вт / см 2 .

Разница в общем увеличении между глубиной 3 см и глубиной 5 см была неожиданной. Если учесть поглощение тканью и слой половинной величины (глубина, на которую 50% интенсивности ультразвукового луча поглощается тканью, уменьшая интенсивность по мере прохождения через ткань), можно предсказать, что температура на 5 см будет ниже. чем температура на 3 см (26).Однако Демминк и др., Используя ткани трупа, обнаружили, что различная геометрия тканей (различные тепловые и акустические свойства могут влиять на предел глубины для разных диапазонов температур (27). Используя тепловые изображения, которые отображают только изменение температуры ткани, они продемонстрировали, что Геометрия и свойства ткани влияют на глубину нагрева (27). Ультразвук проникает через ткани с высоким содержанием воды и поглощается плотными тканями с высоким содержанием белка, где он оказывает наибольшее воздействие (23).Чем плотнее среда, тем больше ультразвуковой луч будет поглощаться тканями и, возможно, приведет к большему тепловому эффекту (23). Области с высоким содержанием коллагена, которые могут быть обнажены, включают поверхностную кортикальную кость, надкостницу, мениски, синовиальную оболочку и капсулы суставов, миофасциальные интерфейсы, межмышечные рубцы, фиброзные мышцы, оболочки сухожилий и основные нервные стволы (28). Если термопара на 5 см находится ближе к границе раздела кость / мышцы, то может возникнуть более высокая температура из-за отражения от кости.В этом исследовании мы использовали диагностический ультразвук, чтобы определить местоположение наконечника термистора и попытаться убедиться, что термисторы были помещены только в мышцу. Средняя глубина longissimus dorsi мышцы на этом уровне до появления поперечного отростка составляла 8 см. Поскольку самый глубокий термистор находился на расстоянии 5 см, вероятность нагрева от кости была низкой. Однако длинная мышца спины имеет фасциальные плоскости, которые могут поглощать больше ультразвукового луча, тем самым нагревая больше, чем нижележащая мышца.Мы не делали попыток избежать этих фасциальных плоскостей, поэтому возможно возникновение избыточного тепла, выделяемого увеличенной коллагеновой тканью. Кроме того, необходимо учитывать терморегулирующий эффект кровообращения (27). Мышечная ткань на глубине 3 см могла иметь более высокую циркуляцию, что приводило к большей скорости рассеивания тепла.

При проведении ультразвуковой терапии необходимо учитывать седативный эффект детомидина. Следует избегать сильного седативного действия, чтобы лошадь могла избежать чрезмерного нагрева тканей.Было показано, что доза детомидина, используемая в этом исследовании, не влияет на способность лошади обнаруживать вредные тепловые раздражители и избегать их (29, 30). Также необходимо учитывать влияние детомидина на функцию мышц. Эднер и др. изучили взаимосвязь мышечной перфузии и метаболизма с сердечно-сосудистыми параметрами до и после инъекции детомидина во время анестезии пропофолом / кетамином у лошадей (31). Они обнаружили, что детомидин вызывает глубокую гипертензию и брадикардию, снижает сердечный выброс и перфузию мышц (31).Однако через 10 минут после инъекции детомидина перфузия мышц восстановилась до уровней до инъекции (31). Поскольку измерения не начинались раньше, чем через 30 мин после введения детомидина, влияние на перфузию мышц должно быть минимальным. Kruljc и Nemec обнаружили, что доза 0,022 мг / кг значительно снижает мышечную ЭМГ-активность (32). Однако эта доза была вдвое больше, чем в этом исследовании. Wooldridge et al. Не обнаружили эффекта детомидина на скелетные мышцы пищевода и предположили, что ранее сообщаемый эффект может быть центрально опосредованным (33).Поскольку в этом исследовании оценивалось тепловое воздействие ультразвука на мышцы, центрально-опосредованное влияние на функцию мышц не должно влиять на результаты.

Предыдущие исследования показывают, что повышение температуры тканей на 2–4 ° C эффективно для улучшения гибкости / диапазона движений (ROM) как у животных, так и у людей (15-17). Использование УЗИ на частоте 1,0 МГц в этом исследовании вызвало повышение температуры ткани на> 2,0 ° C только в 1 из 6 условий США (2,0 Вт / см 2 , глубина 1,0 см). Два других условия были близки к достижению повышения на 2 ° C (1.0 Вт / см 2 на глубине 1 см и 2,0 Вт / см 2 на глубине 5 см). Увеличение времени лечения или интенсивности УЗИ могло привести к повышению температуры тканей до терапевтических уровней в этих условиях. При сравнении интенсивностей, интенсивность 2,0 Вт / см 2 повысила температуру ткани значительно выше, чем интенсивность 1,0 Вт / см 2 на всех глубинах. Поскольку повышение температуры было кратковременным во всех изученных условиях, для оптимального увеличения диапазона движений по возможности следует применять растяжение во время последней половины лечения и сразу после прекращения лечения.

Выводы

Это исследование демонстрирует, что статистически значимый нагрев происходит в эпаксиальных мышцах лошадей во время УЗИ 1,0 МГц, причем наибольший нагрев происходит на глубине 1,0 см. Однако нижний предел терапевтического диапазона нагрева ткани был достигнут только при 2,0 Вт / см 2 , глубина 1,0 см. Увеличение времени лечения или интенсивности УЗИ может привести к дальнейшему повышению температуры тканей.

Заявление об этике

Все экспериментальные процедуры были одобрены Комитетом по уходу и использованию животных Университета Теннесси (Ноксвилл, Теннесси, США).

Авторские взносы

HA и DL принимали участие в разработке исследования, сборе данных, интерпретации данных и подготовке рукописи.

Финансирование

Финансирование было предоставлено Студенческой исследовательской премией Университета Теннесси в Чаттануге, Чаттануга, Теннесси.

Заявление о конфликте интересов

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

Благодарности

Авторы хотели бы поблагодарить Stephen Tilstra, DPT и Andrew Tobias, DPT за их помощь в сборе данных.

Сноски

Список литературы

1. Armijo-Olivo S, Fuentes J, Muir I., Gross DP. Образцы использования и представления о терапевтическом ультразвуке канадскими физиотерапевтами: исследовательское поперечное исследование населения. Physiother Can. (2013) 65: 289–99. DOI: 10.3138 / ptc.2012-30BC

PubMed Аннотация | CrossRef Полный текст | Google Scholar

2.Эбади С., Хеншке Н., Нахостин Ансари Н., Фаллах Е., ван Тулдер М.В. Лечебное ультразвуковое исследование при хронической боли в пояснице. Кокрановская база данных Syst Rev. (2014) CD009169. DOI: 10.1002 / 14651858.CD009169.pub2

CrossRef Полный текст | Google Scholar

3. Вонг Р.А., Шуман Б., Таунсенд Р., Фелпс, Калифорния. Обследование использования терапевтического ультразвука физиотерапевтами, сертифицированными специалистами-ортопедами. Phys Ther. (2007) 87: 986–94. DOI: 10.2522 / ptj.20050392

PubMed Аннотация | CrossRef Полный текст | Google Scholar

5.Кубот А., Гжегожевский А., Синдер М., Шимчак В., Козловски П. Радиальная экстракорпоральная ударно-волновая терапия и ультразвуковая терапия в лечении синдрома теннисного локтя. Ortop Traumatol Rehabil. (2017) 19: 415–26. DOI: 10.5604 / 01.3001.0010.5821

PubMed Аннотация | CrossRef Полный текст | Google Scholar

6. Егин Т., Алтан Л., Касапоглу Аксой М. Влияние терапевтического ультразвука на боль и физическую функцию у пациентов с остеоартрозом коленного сустава. Ultrasound Med Biol. (2017) 43: 187–94. DOI: 10.1016 / j.ultrasmedbio.2016.08.035

PubMed Аннотация | CrossRef Полный текст | Google Scholar

7. Ильтер Л., Дилек Б., Батмаз И., Улу М.А., Сарийылдыз М.А., Нас К. и др. Эффективность импульсного и непрерывного терапевтического ультразвука при миофасциальном болевом синдроме: рандомизированное контролируемое исследование. Am J Phys Med Rehabil. (2015) 94: 547–54. DOI: 10.1097 / PHM.0000000000000210

PubMed Аннотация | CrossRef Полный текст | Google Scholar

9.Райегани С., Бахрами М., Самади Б., Седигипур Л., Мохтарирад М., Элиаспур Д. Сравнение эффектов низкоэнергетического лазера и ультразвука при лечении миофасциального болевого синдрома плеча: рандомизированное слепое клиническое исследование. Eur J Phys Rehabil Med. (2011) 47: 381–9.

PubMed Аннотация | Google Scholar

10. Nyanzi C, Langridge J, Heyworth J, Mani R. Рандомизированное контролируемое исследование ультразвуковой терапии при лечении острых растяжений боковых связок голеностопного сустава. Clin Rehabil. (1999) 13 (Дополнение 1): 16–22. DOI: 10.1177 / 0269215590103

PubMed Аннотация | CrossRef Полный текст | Google Scholar

11. Beheshti A, Shafigh Y, Parsa H, Zangivand A. Сравнение высокочастотной и ультразвуковой терапии MIST для заживления венозных язв ног. Adv Clin Exp Med. (2014) 23: 969–75. DOI: 10.17219 / acem / 37353

PubMed Аннотация | CrossRef Полный текст | Google Scholar

12. Ли Д-Й, Хан Дж-С, Чан Э-Дж, Со Д-К, Хонг Дж. Х, Ли С. С. и др.Сравнение ручного лимфодренажа и ультразвуковой терапии отека ног, вызванного ношением высоких каблуков. Technol Health Care. (2014) 22: 309–15. DOI: 10.3233 / THC-140785

PubMed Аннотация | CrossRef Полный текст | Google Scholar

13. Draper DO, Mahaffey C, Kaiser D, Eggett D, Jarmin J. Тепловой ультразвук снижает жесткость тканей триггерных точек в верхних трапециевидных мышцах. Physiother Theory Pract. (2010) 26: 167–72. DOI: 10.3109 / 095939803079

PubMed Аннотация | CrossRef Полный текст | Google Scholar

14.Ригби Дж. Х., Дрейпер Д. О.. Эффекты длительного ультразвука низкой интенсивности для активных триггерных точек трапеции: рандомизированное клиническое исследование. J Sport Rehabil. (2017) 9: 1–17. DOI: 10.1123 / jsr.2016-0150

CrossRef Полный текст | Google Scholar

15. Lehmann JF, Masock AJ, Warren CG, Koblanski JN. Влияние терапевтических температур на растяжимость сухожилий. Arch Phys Med Rehabil. (1970) 51: 481–7.

PubMed Аннотация | Google Scholar

16.Уоррен CG, Lehmann JF, Koblanski JN. Удлинение сухожилия хвоста крысы: влияние нагрузки и температуры. Arch Phys Med Rehabil. (1971) 52: 465–74.

PubMed Аннотация | Google Scholar

17. Wessling KC, DeVane DA, Hylton CR. Эффекты статической растяжки по сравнению со статической растяжкой и ультразвуком в сочетании на растяжимость трехглавой мышцы бедра у здоровых женщин. Phys Ther. (1987) 67: 674–9. DOI: 10.1093 / ptj / 67.5.674

PubMed Аннотация | CrossRef Полный текст | Google Scholar

18.Draper DO, Sunderland S, Kirkendall DT, Ricard M. A Сравнение повышения температуры в икроножных мышцах человека после применения подводного и местного гелевого ультразвука. J Orthop Sports Phys Ther. (1993) 17: 247–51. DOI: 10.2519 / jospt.1993.17.5.247

PubMed Аннотация | CrossRef Полный текст | Google Scholar

19. Draper DO, Castel JC, Castel D. Скорость повышения температуры в мышцах человека во время непрерывного ультразвука с частотой 1 МГц и 3 МГц. J Orthop Sports Phys Ther. (1995) 22: 142–50. DOI: 10.2519 / jospt.1995.22.4.142

PubMed Аннотация | CrossRef Полный текст | Google Scholar

20. Ward AR, Robertson VJ. Сравнение нагрева неживых мягких тканей ультразвуковыми аппаратами с частотой 45 кГц и 1 МГц. J Orthop Sports Phys Ther. (1996) 23: 258–66. DOI: 10.2519 / jospt.1996.23.4.258

PubMed Аннотация | CrossRef Полный текст | Google Scholar

21. Галло Дж. А., Дрейпер Д. О., Броуди Л. Т., Феллингхэм Г. В..Сравнение повышения температуры мышц человека во время непрерывного и импульсного ультразвука с частотой 3 МГц с эквивалентной средней временной интенсивностью. Res Rep. (2004) 34: 7. DOI: 10.2519 / jospt.2004.34.7.395

PubMed Аннотация | CrossRef Полный текст | Google Scholar

22. Steiss JE, Adams CC. Влияние шерсти на скорость повышения температуры мышц при ультразвуковом лечении собак. Am J Vet Res. (1999) 60: 76–80.

PubMed Аннотация | Google Scholar

23.Draper DO, Schulthies S, Sorvisto P, Hautala AM. Изменения температуры в глубоких мышцах человека во время лечения льдом и ультразвуком: исследование in vivo . J Orthop Sports Phys Ther. (1995) 21: 153–7. DOI: 10.2519 / jospt.1995.21.3.153

PubMed Аннотация | CrossRef Полный текст | Google Scholar

26. Эштон Д.Ф., Дрейпер Д.О., Майрер Дж. У. Повышение температуры в мышцах человека во время ультразвукового лечения с использованием flex-all в качестве связующего агента. J Athl Train. (1998) 33: 136–40.

PubMed Аннотация | Google Scholar

27. Демминк Дж. Х., Хелдерс П. Дж., Хобаек Х., Энвемека С. Изменение глубины нагрева в зависимости от частоты терапевтического ультразвука в физиотерапии. Ultrasound Med Biol. (2003) 29: 113–8. DOI: 10.1016 / S0301-5629 (02) 00691-9

PubMed Аннотация | CrossRef Полный текст | Google Scholar

29. Эльфенбейн Дж. Р., Санчес Л. С., Робертсон С. А., Коул К. А., Сэмс Р. Влияние детомидина на висцеральную и соматическую ноцицепцию и моторику двенадцатиперстной кишки у взрослых лошадей в сознании. Vet Anaesth Analg. (2009) 36: 162–172. DOI: 10.1111 / j.1467-2995.2008.00441.x

PubMed Аннотация | CrossRef Полный текст | Google Scholar

30. Камерлинг С.Г., Cravens WMT, Bagwell CA. Объективная оценка обезболивания и седативного эффекта, вызванного детомидином, у лошади. Eur J Pharmacol. (1988) 151: 1–8. DOI: 10.1016 / 0014-2999 (88)-1

PubMed Аннотация | CrossRef Полный текст | Google Scholar

31. Эднер А., Найман Г., Эссен-Густавссон Б.Взаимосвязь перфузии мышц и метаболизма с сердечно-сосудистыми параметрами до и после инъекции детомидина во время анестезии пропофол-кетамином у лошадей. Vet Anaesth Analg. (2002) 29: 182–199. DOI: 10.1046 / j.1467-2995.2002.00101.x

PubMed Аннотация | CrossRef Полный текст | Google Scholar

32. Крульц П., Немец А. Электроэнцефалографические и электромиографические изменения при использовании детомидина и комбинации детомидин-буторфанол у стоящих лошадей. Acta Vet Hung. (2006) 54: 35–42. DOI: 10.1556 / AVet.54.2006.1.4

CrossRef Полный текст | Google Scholar

33. Вулдридж А.А., Идес СК, Хосгуд Г.Л., Мур Р.М. Влияние окситоцина, ацепромазина, детомидина, ксилазина, буторфанола, тербуталина, изопротеренола и дантролена in vitro на гладкие и скелетные мышцы пищевода лошади. Am J Vet Res. (2002) 63: 1732–1737. DOI: 10.2460 / ajvr.2002.63.1732

PubMed Аннотация | CrossRef Полный текст | Google Scholar

Высоковольтные дифференциальные пробники

1 ГГц и 500 МГц

Высоковольтные дифференциальные пробники TDP1000, TDP0500 и P6251 обеспечивают отличные высокоскоростные электрические и механические характеристики, необходимые для современных импульсных источников питания (SMPS), шины CAN / LIN и проектирование высокоскоростных цифровых систем.

Основные рабочие характеристики
  • Полоса пропускания пробника 1 ГГц и 500 МГц
  • Дифференциальная входная емкость <1 пФ
  • Дифференциальное входное сопротивление 1 МОм
  • ± 42 В (DC + pk AC) дифференциальное входное напряжение
  • > 18 дБ CMRR (при 50-кратном затухании 250 МГц)
Основные характеристики
  • Превосходные электрические характеристики
    • Выбираемые фильтры ограничения полосы пропускания
    • Подавление постоянного тока
  • Универсальные возможности подключения DUT
    • Небольшая компактная головка пробника для зондирующих элементов схемы с малой геометрией
    • Прямой штифт, квадратный штифт, припой вниз, стандартные аксессуары переменного шага
    • Прочная конструкция для надежности
  • Простота использования
    • Обеспечивает автоматическое масштабирование единиц измерения и считывание на дисплее осциллографа
    • TDP1000, TDP0500 Connect
      • напрямую к осциллографам с TekVPI ™ интерфейс пробника
      • Простой доступ к отображаемому на осциллографе меню пробника для управления настройкой пробника и информации о рабочем состоянии
      • Удаленное управление пробником через GPIB / USB через осциллограф
      • AutoZero — обнуление выходного смещения
    • P6251
      • Подключение напрямую к Осциллографы с интерфейсом TekProbe ™ или осциллографы TekConnect® с использованием адаптера TCA-BNC
Приложения
  • Конструкция высокоскоростного импульсного источника питания
  • Конструкция шины CAN / LIN
  • Цифровое проектирование и определение характеристик
  • технические испытания
  • Исследования и разработки
Высоковольтные дифференциальные пробники

Высоковольтные дифференциальные пробники TDP1000, TDP0500 и P6251 специально разработаны для использования с осциллографами Tektronix и прямого подключения к ним с помощью интерфейса пробников TekVPI ™ или Интерфейс TekProbe BNC.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *