Fir driver что это
Как использовать IPP FIR фильтры в приложениях максимально эффективно
В библиотеке Intel Performance Primitives (IPP), начиная с версии 8.2, планомерно осуществляется переход от внутреннего распараллеливания функций к внешнему. Причины такого решения изложены в статье Функции IPP c поддержкой бордюров для обработки изображений в нескольких потоках.
В этом посте будут рассмотрены функции, реализующие фильтр с конечным откликом — FIR фильтр (Finite Impulse Response).
FIR фильтр
Фильтры являются одной из важнейших областей в цифровой обработке сигналов. И, конечно же, библиотека IPP имеет реализацию большинства классов этих фильтров, в том числе и FIR (finite impulse response) фильтра. Подробное описание FIR фильтров можно найти в многочисленной литературе или в википедии, но если кратко, в нескольких словах, то FIR фильтр просто умножает несколько предыдущих отсчетов и текущий отсчет входного дискретного сигнала на соответствующие им коэффициенты, складывает эти произведения и получает текущий отсчет выходного сигнала. Или чуть более формально: FIR фильтр осуществляет преобразование входного вектора X длиной N отсчетов в выходной вектор Y длиной тоже N отсчетов посредством умножения K отсчетов входного вектора на соответствующие им K коэффициентов H и последующим суммированием. Количество коэффициентов K называется порядком фильтра.
Рис. 1. FIR фильтр
Здесь:
tapsLen — это порядок фильтра,
numIters — это длина вектора.
Рисунок взят из документации на IPP библиотеку, поэтому используется принятая в IPP терминология.
Визуально можно представить FIR фильтр следующим образом.
Рис. 2. FIR фильтр схематически
Как видим, здесь порядок фильтра K равен 4 и мы просто умножаем 4 коэффициента h фильтра на 4 отсчета вектора x, складываем и записываем сумму в один отсчет выходного вектора y. Отметим, что коэффициенты фильтра h[3],h[2],h[1],h[0] лежат в памяти в обратном порядке по отношению к x и y, в соответствии с общепринятой формулой на рис. 1
Линия задержки
Поскольку FIR фильтр это обычная свертка, то для получения выходного вектора длиной в N отсчетов, необходимо N+K-1 входных отсчетов, где K длина ядра. Первые K-1 отсчетов будем далее называть «линией задержки» (delay line). На рис. 2 они нумеруются x[-3], x[-2], x[-1]. Данные, подаваемые в функцию, могут быть довольно большого объема, вследствие чего быть разбитыми на отдельные последовательно обрабатываемые блоки. К примеру, если это аудио сигнал, то он может буферизоваться операционной системой, если это данные от внешнего устройства, то они могут приходить порциями по линии связи. А также данные могут обрабатываться через буфер и в самом приложении, поскольку заранее неизвестен объем возможных данных. В этом случае рабочий буфер выделяется некой фиксированной длины к примеру так, чтобы они укладывались в кэш некоторого уровня и тогда все данные проходят через этот буфер порциями. Во всех таких случаях линия задержки очень полезна. Она помогает очень просто «склеить» данные в один непрерывный поток таким образом, что не возникает краевого эффекта разбиения данных на блоки.
IPP API
Этот API следует стандартной схеме, применяемой в IPP. Вначале с помощью функции ippsFIRSRGetSize запрашивается размер памяти под контекст функции и рабочий буфер. Далее вызывается функция ippsFIRSRInit, в которую подаются коэффициенты фильтра. Эта функция инициализирует внутренние таблицы данных в структуре pSpec, ускоряющие работу процессирующей функции ippsFIRSR. Содержимое данной структуры не изменяется в процессе работы функции, что отражено в ее названии Spec, поэтому может быть использовано одновременно несколькими потоками, для более эффективного использования памяти. Параметр pBuf это рабочий и модицифируемый буфер функции, поэтому для каждого потока должен быть выделен свой рабочий буфер.
Суффикс SR означает single rate, и используется для единообразия c MR (multi rate) фильтрами, описание которых может являться целой отдельной статьей. Параметр numIters также позаимствован из MR фильтров и в нашем случае означает просто длину вектора.
На начало обрабатываемого блока x[0] указывает параметр pSrc.
Теперь рассмотрим какой смысл вкладывается в параметры pDlySrc и pDlyDst.
Рис. 3. «Входная» и «Выходная» линии задержки
Как уже упоминалось ранее, необходимость в x[-3], x[-2], x[-1] происходит из формулы свертки. Эти элементы называются «входной линией задержки» pDlySrc. А отсчеты x[N-3], x[N-2], x[N-1] это «хвост» обрабатываемого вектора, т.е. последние K-1 элементов. Они называются «выходной линией задержки» pDlyDst. Для следующего блока они соответственно будут являться входной линией и так далее.
Входная линия задержки pDlySrc может указывать на k-1 отсчетов левее x[0], на какой то другой буфер или равняться NULL. В случае NULL считается, что все элементы входной линии задержки равны 0. Это удобно для начального блока, когда еще нет поступивших данных.
По адресу pDlyDst осуществляется запись «хвоста» блока, т.е. k-1 последних отсчетов. Если значение равно NULL, то ничего не записывается.
Такой механизм из двух линий задержки позволяет распараллелить обработку вектора, даже в случае in-place режима, т.е. когда вектор перезаписывается. Для этого достаточно предварительно скопировать «хвосты» блоков в отдельные буферы и подать их в качестве входной линии в каждый поток. Пример кода использованого в статье приведен в конце единым листингом.
Пример использования Lowpass IPP FIR фильтра.
Рассмотрим что делает этот код. Итак, к нам поступила очередная порция сигнала x[0],…,x[N-1], которую нужно обработать фильтром, а вместе с ней указатель на входную и выходную линии задержки или другими словами «хвост» предыдущей порции и буфер, куда следует поместить “хвост” текущей порции. Мы хотим ускорить процесс фильтрации и разбиваем обработку этой порции на T=NTHREADS блоков, соответствующее числу потоков. Для этого нам надо просто правильно указать входные и выходные линии, а также выделить свой рабочий буфер для каждого потока.
Для 0-ого потока входная линия задержки при вызове ippsFIRSR это тот самый «хвост» предыдущей порции, а для всех остальных в качестве входной линии подается указатель на блок смещенный на order-1 элементов. И только последний поток записывает «хвост» порции.
Приведенный подход подразумевает что результирующий вектор записывается по другому адресу чем исходный вектор, в случае же если данные будут перезаписаны, то линии задержки следует предварительно скопировать в отдельные буферы.
На графике показана производительность однопоточной и многопоточной версии для 4-х потоков фильтра 31 порядка на процессоре с поддержкой AVX2 инструкций Intel® Core(TM) i7-4770K 3.50Ghz. Для FIR фильтров используется единица измерения cpMAC, т.е. количество тактов на операцию Умножить+Сложить
cpMAC = (время выполнения функции) / (длина вектора * порядок фильтра)
Рис. 7. Сравнение производительности однопоточной и многопоточной версий FIR фильтра
Видно, что функция очень хорошо масштабируется, и многопоточная версия работает приблизительно в 3.7 раз быстрее на достаточно длинных векторах, чем однопоточная, что очень хорошо соответствует 4 потокам. Критерий переключения между одно- и многопоточной версиями теперь, с новым API, можно подобрать экспериментально под конкретную машину, в отличие от предыдущего, где критерий был жестко зашит в код и функция параллелилась изнутри.
Сравнение direct и FFT реализаций
В цифровой обработке сигналов широко используется взаимное соответствие свертки и преобразования Фурье.
IPP FIR фильтры помимо прямой реализации имеют и реализацию через FFT, причем получаемые при этом cpMAC иногда превосходят теоретически возможную для данного cpu и прямого алгоритма, о чем иногда пишут пользователи на форумах, справедливо полагая, что вычисления идут через FFT.
Теперь для того, чтобы указать какой тип алгоритма использовать, следует использовать одно из значений параметра algType — ippAlgDirect ippAlgFFT, ippAlgAuto. Последний параметр означает, что функция выбирает алгоритм по фиксированному критерию для используемого cpu, а он не всегда может быть оптимальным.
Рассмотрим производительность на том же CPU фильтра разных порядков для длины вектора в 1024 и 128 отсчетов используя прямой алгоритм и FFT реализацию.
Рис. 8. Сравнение производительности direct и fft реализаций для длины в 1024 отсчета
Рис. 9. Сравнение производительности direct и fft реализаций для длины в 128 отсчетов
Для FFT реализации характерны ступеньки. Это объясняется тем, что для фильтров нескольких близких порядков используется FFT одного порядка, а когда переходит переход на следующий порядок FFT, то производительность изменяется. Для достижения максимальной производительности следует использовать тот алгоритм, который лежит ниже на графике. Предлагаемый API позволяет реализовать пример, который будет запускать на измерение на конкретной машине обе версии алгоритма, и выбирать лучшую из них. Картинка буде выглядеть примерно следующим образом. На этой картинке нарисовано двумерное пространство размером 1024×1024, где по оси X порядок фильтра, а по оси Y длина вектора. Зеленый цвет означает что fft алгоритм работает быстрее прямой версии. Характерные прямые линии внизу рисунка соответствуют рис. 9, где fft вариант работает некоторое время медленнее, после перехода на следующий порядок.
Рис. 10. Сравнение производительности direct и fft реализации IPP FIR float фильтра в пространстве filter order X vector length размерностью 1024 x 1024
Видно, что рисунок довольно сложный и его не так то просто интерполировать внутри IPP под произвольную платформу. К тому же, это рисунок может изменяться на конкретной машине. Помимо выбора между direct и fft кодом, можно добавить еще одну размерность в виде количества потоков и таким образом получится уже многослойная картинка. Предлагаемый API опять же позволяет позволяет выбрать оптимальный для данной платформы вариант и в этом случае.
Заключение
Введенный в IPP 9.0 API FIR фильтров позволяет использовать их в приложениях еще более эффективно, выбирая оптимальный вариант между прямым и fft алгоритмами, а также паралеллить каждый из выбранных вариантов. К тому же библиотека IPP абсолютно бесплатна и доступна для скачивания по этой ссылке Intel Performance Primitives (IPP).
Приложение. Пример кода, измеряющий производительность IPP FIR фильтра
Расширение файла FIR
FireOne Fireworks Show
Что такое файл FIR?
Программы, которые поддерживают FIR расширение файла
Программы, которые могут обрабатывать FIR файлы, следующие. Файлы с расширением FIR, как и любые другие форматы файлов, можно найти в любой операционной системе. Указанные файлы могут быть переданы на другие устройства, будь то мобильные или стационарные, но не все системы могут быть способны правильно обрабатывать такие файлы.
Программы, обслуживающие файл FIR
Как открыть файл FIR?
Причин, по которым у вас возникают проблемы с открытием файлов FIR в данной системе, может быть несколько. Что важно, все распространенные проблемы, связанные с файлами с расширением FIR, могут решать сами пользователи. Процесс быстрый и не требует участия ИТ-специалиста. Мы подготовили список, который поможет вам решить ваши проблемы с файлами FIR.
Шаг 1. Скачайте и установите FireOne
Шаг 2. Убедитесь, что у вас установлена последняя версия FireOne
Вы по-прежнему не можете получить доступ к файлам FIR, хотя FireOne установлен в вашей системе? Убедитесь, что программное обеспечение обновлено. Может также случиться, что создатели программного обеспечения, обновляя свои приложения, добавляют совместимость с другими, более новыми форматами файлов. Причиной того, что FireOne не может обрабатывать файлы с FIR, может быть то, что программное обеспечение устарело. Последняя версия FireOne должна поддерживать все форматы файлов, которые совместимы со старыми версиями программного обеспечения.
Шаг 3. Свяжите файлы FireOne Fireworks Show с FireOne
Если проблема не была решена на предыдущем шаге, вам следует связать FIR файлы с последней версией FireOne, установленной на вашем устройстве. Процесс связывания форматов файлов с приложением по умолчанию может отличаться в деталях в зависимости от платформы, но основная процедура очень похожа.
Выбор приложения первого выбора в Windows
Выбор приложения первого выбора в Mac OS
Шаг 4. Убедитесь, что FIR не неисправен
Если вы выполнили инструкции из предыдущих шагов, но проблема все еще не решена, вам следует проверить файл FIR, о котором идет речь. Вероятно, файл поврежден и, следовательно, недоступен.
1. Убедитесь, что FIR не заражен компьютерным вирусом
Если FIR действительно заражен, возможно, вредоносное ПО блокирует его открытие. Немедленно просканируйте файл с помощью антивирусного инструмента или просмотрите всю систему, чтобы убедиться, что вся система безопасна. Если файл FIR действительно заражен, следуйте инструкциям ниже.
2. Убедитесь, что файл с расширением FIR завершен и не содержит ошибок
Если вы получили проблемный файл FIR от третьего лица, попросите его предоставить вам еще одну копию. Возможно, файл был ошибочно скопирован, а данные потеряли целостность, что исключает доступ к файлу. Если файл FIR был загружен из Интернета только частично, попробуйте загрузить его заново.
3. Проверьте, есть ли у вашей учетной записи административные права
Иногда для доступа к файлам пользователю необходимы права администратора. Войдите в систему, используя учетную запись администратора, и посмотрите, решит ли это проблему.
4. Проверьте, может ли ваша система обрабатывать FireOne
Если система перегружена, она может не справиться с программой, которую вы используете для открытия файлов с расширением FIR. В этом случае закройте другие приложения.
5. Проверьте, есть ли у вас последние обновления операционной системы и драйверов
Регулярно обновляемая система, драйверы и программы обеспечивают безопасность вашего компьютера. Это также может предотвратить проблемы с файлами FireOne Fireworks Show. Устаревшие драйверы или программное обеспечение могли привести к невозможности использования периферийного устройства, необходимого для обработки файлов FIR.
Вы хотите помочь?
Если у Вас есть дополнительная информация о расширение файла FIR мы будем признательны, если Вы поделитесь ею с пользователями нашего сайта. Воспользуйтесь формуляром, находящимся здесь и отправьте нам свою информацию о файле FIR.
Переводы страниц руководства
НАЗВАНИЕ
ОБЗОР
ОПИСАНИЕ
irattach привязывает стек Linux-IrDA к порту IrDA. Программа выполняет низкоуровневую настройку стека Linux-IrDA в ядре. Обычно этот шаг необходим перед тем как вы (или приложения) сможете воспользоваться верхним слоем стека IrDA.
Команда irattach загружает необходимый драйвер Linux-IrDA, который настраивает оборудование IrDA, и настраивает стек IrDA для взаимодействия с новым портом IrDA. Несколько портов IrDA могут быть задействованы с помощью нескольких команд irattach.
irattach по умолчанию использует драйвер irtty, который подсоединяется к терминальной подсистеме Linux и использует стандартный последовательный драйвер Linux. Это работает достаточно хорошо на большинстве машин и конфигураций, но ограничивает скорость передачи до 115200 бит в секунду (IrDA в режиме SIR). Этот режим позволяет работать с большинством оборудования FIR (как оказалось, в ноутбуках этот режим предоставляет эмуляцию последовательного порта) и с большинством последовательных брелоков (при предоставлении брелоком правильного типа), позволяя сделать безопасный выбор. Однако, брелоки USB и несколько адаптеров FIR не поддерживают эмуляцию последовательного порта и не могут использоваться с драйвером irtty.
irattach также может использовать один из драйверов FIR для Linux (включая драйверы брелоков USB) вместо драйвера irtty. Большинство драйверов FIR требуют правильной настройки параметров модуля (это описано далее). Драйверы FIR позволяют вам использовать более высокие скорости передачи данных (обычно до 4 мегабит в секунду). В общем, поддержка FIR в Linux не настолько стабильная и зрелая, чтобы можно было обойтись без документации и затрат времени.
irattach нужно запускать от пользователя root или установить атрибут setuid для пользователя root, поскольку требуются привилегии пользователя root. Если вы собрали стек IrDA в виде модулей (рекомендуется), то вам нужно отредактировать файл /etc/modules.conf. Обратитесь к Infrared-HOWTO за подробностями.
ОПЦИИ
: Название терминала или интерфейса IrDA или драйвера IrDA. irattach принимает решение воспользоваться драйвером irtty или одним из драйверов FIR, основываясь на этом аргументе.
-v: Показать информацию о версии (это также произойдёт, если опции не указаны).
-h: Показать справочную информацию.
-d брелок: Подключить дополнительный драйвер брелока к порту IrDA.
Вам необходим драйвер брелока, если у вас есть инфракрасное устройство, которое присоединяется к последовательному порту вашего компьютера (обычный 9-игольчатый разъём последовательного порта). Эти устройства называются брелоками (dongles) и в настоящее время используются любым драйвером SIR (IrTTY или irport). Эта опция не совместима с драйверами FIR и работает только с драйверами irtty и irport.
В настоящее время известны следующие (последовательные) брелоки:
o | esi Extended Systems JetEye PC ESI-9680 |
o | tekram Брелок Tekram IrMate IR-210B |
o | actisys Брелок ACTiSYS IR-220L |
o | actisys+ Брелок ACTiSYS IR-220L+ |
o | girbil Брелок Greenwich GIrBIL |
o | litelink Брелок Parallax LiteLink и Extended Systems JetEye PC ESI-9680B |
o | airport Без описания. |
o | old_belkin Брелок Belkin (old) SmartBeam или любой брелок, поддерживающий только скорость передачи 9600 бит в секунду |
o | ep7211 Драйвер инфракрасного порта процессора Cirrus Logic EP7211 (основанного на ARM) |
o | mcp2120 Брелоки на основе MCP2120 (Microchip) |
o | act200l Брелоки ACTiSYS Ir-200L |
o | ma600 Брелоки Mobile Action ma600 |
o | toim3232 Брелоки на основе Vishay/Temic TOIM3232 и TOIM4232 |
МОДУЛИ ДРАЙВЕРА FIR
Если вы один из счастливчиков, имеющих набор микросхем FIR или брелок USB, который поддерживается одним из драйверов Linux-IrDA, для их настройки вы можете воспользоваться irattach с названием интерфейса порта IrDA. Вам нужно настроить соответствующим образом /etc/modules.conf, по крайней мере нужно создать псевдоним irda0 для названия драйвера, или заранее загрузить драйвер вручную.
Вам не настолько уж и необходимо использовать irattach для драйверов FIR, вы можете воспользоваться modprobe для загрузки драйвера, ifconfig для активации интерфейса и задать необходимые переменные ядра вручную с помощью sysctl, но irattach позволяет сделать это более удобным способом.
Конечно, вам нужно знать как драйвер FIR влияет на ваше оборудование. Вы можете воспользоваться findchip, чтобы получить информацию о микросхеме FIR. Если это не поможет, Infrared-HOWTO подскажет вам другие способы получения этой информации.
А также, вам скорее всего нужно будет настраивать драйвер последовательного порта Linux для игнорирования порта IrDA, иначе оба драйвера будут конфликтовать. Обычно это делается с помощью setserial /dev/ttySx uart none.
В настоящее время известны следующие драйверы FIR: