Главная » Архив материалов
Если обобщенные статистические свойства обрабатываемых процессов не заданы в виде аналитических соотношений, то необходимые этапы машинного синтеза нерекурсивных цифровых фильтров расширяются за счет включения процедур оценки обобщенных статистических характеристик путем обработки реализаций поступающего процесса с последующей их аппроксимацией аналитическими функциями. По полученным аппроксимациям обобщенных статистических характеристик процессов вычисляются координаты обобщенной весовой функции, которые используются в дальнейшем при определении коэффициентов нерекурсивных цифровых фильтров. Составление спецификаций вышеуказанных параметров для синтезируемого фильтра. При этом одна часть параметров вводится в виде исходных данных, а другая может быть вычислена с использованием соответствующих подпрограмм. Например, показатель задержки в полосе пропускания фильтра не включается в номенклатуру исходных данных для синтеза, а вычисляется в процессе машинного синтеза.
Просмотров: 38 | Добавил: admin | Дата: 02.06.2016 | Комментарии (0)

Современный уровень развития вычислительной техники, а также теории оптимальных методов выделения сигналов на фоне помех создает предпосылки для создания высокоэффективных автоматизированных систем передачи и обработки измерительной информации. Функционирование этих систем основывается на применении различных методов преобразования информации, таких как фильтрация и предсказание, кодирование и сжатие, обнаружение и коррекция ошибок. Все больше методов обработки информации, которые раньше реализовывались с использованием аналоговой техники, находят воплощение в системах цифровой и дискретной техники. Сфера применения методов цифровой (дискретной) обработки сигналов непрерывно расширяется, так как они позволяют получить новые результаты, недостижимые при использовании аналоговых методов. В настоящее время цифровые методы применяются при обработке сигналов в радиоэлектронике и звуколокации, сжатии данных в телеметрии, обнаружении сигналов и фазовой автоподстройке частоты в системах связи, ... Читать дальше »
Просмотров: 47 | Добавил: admin | Дата: 03.05.2016 | Комментарии (0)

Некоторые ошибки легко устраняются. Например, если вызов readO прерываетсясигналом до того, как он успевает считать байты, то возвращается значение-1 (значение 0 можно перепутать с ситуацией EOF) и переменной errnoприсваивается значение EINTR. В таком случае можно просто повторить считывание.Действительно, существует много возможных завершений вызова readO:О вызов возвращает значение, равное len. Все len считанных байтов записаныв буфер buf. Результат допустим и ожидаем;О вызов возвращает значение, меньшее 1 еп, но большее нуля. Считанные байтызаписаны в buf. Это может происходить, когда сигнал прерывает незавершеннуюоперацию считывания, когда в середине считывания происходитошибка, когда доступно больше нуля, но меньше len байтов, когда конецфайла достигается раньше, чем удается считать 1 еп байтов. Повторение вызова(с соответствующим образом обновленными значениями buf и len) по-зволиг считать оставшиеся байты в оставшееся свободное пространство буфераили узнать нричину ошибки;О вызо ... Читать дальше »
Просмотров: 301 | Добавил: admin | Дата: 28.03.2016 | Комментарии (0)

Перечисленные возможные ситуации демонстрируют, что предыдущее тривиальноеи упрощенное использование системного вызова readO не подходит,если вы хотите обрабатывать все ошибки и действительно считывать все len необходимыхбайтов (по крайней мере, до достижения EOF). Для реализацииправильного вызова вам необходим цикл и несколько условных операторов:ssize_t ret.while (len 0 && (ret = read (fd. buf len)) 0) {if (rot — 1) {if (errno
Просмотров: 259 | Добавил: admin | Дата: 28.03.2016 | Комментарии (0)

Иногда программистам нужно, чтобы вызов readO в случае, когда данныенедоступны, не блокировался. Они предпочитают, чтобы вызов сразу же возвращалкакое-то значение, указывая, что данных для считывания нет. Это называетсявводом-выводом без блокировки (nonblocking I/O ) и позволяет приложениямвыполнять ввод-вывод, возможно, даже на нескольких файлах, вообщене блокируясь и, следовательно, не упуская доступные данные в другихфайлах.Следовательно, стоит проверять еще одно значение переменной error: EAGAIN.Как говорилось ранее, если определенный дескриптор файла открывается в режимебез блокирования (вызову openО передан флаг 0_N0NBL0CK; см. раздел«Флаги для системного вызова ореп()»), но данных для считывания нет, то вызовread() возвращает значение -1 и устанавливает для переменной error значениеEAGAIN, а не блокируется. При выполнении считывания без блокировки необходимовсегда проверять error на значение EAGAIN, чтобы не спутатьсерьезную ошибку с простым отсутствием данных. Напри ... Читать дальше »
Просмотров: 250 | Добавил: admin | Дата: 28.03.2016 | Комментарии (0)

Прочие коды ошибки относятся к программным ошибкам или (как ЕЮ) к проблемамна низком уровне. Возможные значения еггпо после сбоя вызова readOвключают в себя:EBADFДанный файловый дескриптор недопустим или не открыт для чтения.EFAULTУказатель, предоставленный вызову при помощи buf, находится за пределамиадресного пространства вызывающего процесса.EINVALФайловый дескриптор соответствует объекту, пс допускающему чтение.ЕЮПроизошла низкоуровневая ошибка ввода-вывода.Лимиты размера для вызова read()Типы size_t и ss ize t определены в POSIX. Тип s ize t используется для хранениязначений, обозначающих размеры, в байтах. Тип ss ize t — это версияsize t со знаком (отрицательные значения обозначают ошибки). В 32-разряд-ных системах дополнительные типы С — это обычно unsigned in t и in t соответственно.Так как эти два типа часто используются вместе, потенциально меньшийдиапазон s s ize t ограничивает диапазон s ize t.Максимальное значение типа s ize t — это SIZE MAX; максимальное ... Читать дальше »
Просмотров: 241 | Добавил: admin | Дата: 28.03.2016 | Комментарии (0)

Самый простой и распространенный системный вызов, используемый для записи,— это w riteO . Вызов w r iteO представляет собой эквивалент readO и такжеопределен в POSIX.1:finclude <unistd.h>ssize t write (int fd, const void *buf, size t count);Когда вы делаете вызов w n te ( ), начиная с текущей позиции в файле, указанномпри помощи файлового дескриптора fd, в него записывается до count байтовиз буфера buf. Файлы, представляющие объекты, которые не поддерживаютпоиск (например, устройства посимвольного ввода-вывода), всегда записываютсяначиная с «головы».В случае успеха возвращается количество записанных байтов, а позицияв файле соответствующим образом обновляется. В случае ошибки возвращаетсязначение -1 и соответствующим образом устанавливается переменная еггпо.Вызов w r iteO может вернуть значение 0, но оно всего лишь указывает, чтобыло записано ноль байт.Как и для вызова readO, самый простой вариант использования write О выглядиттак:const char *buf = "My ship ... Читать дальше »
Просмотров: 192 | Добавил: admin | Дата: 28.03.2016 | Комментарии (0)

Системный вызов write() выполняет лишь частичную запись с меныпей вероятностью,чем системный вызов readO делает частичное считывание. Помимоэтого, для системного вызова w r iteO не существует условия EOF. Что касаетсяобычных файлов, w r iteO гарантированно выполняет запрошенную операциюзаписи полностью, если только не происходит какая-либо ошибка.Следовательно, для обычных файлов нет необходимости реализовывать записьв цикле. Однако для других типов файлов, например сокетов, цикл можетпотребоваться, чтобы гарантировать, что все запрошенные байты действительнобудут записаны. Еще одно преимущество использования цикла состоит в том,что второй вызов w r iteO может вернуть ошибку, поясняющую, почему первыйвызов выполнил запись только частично (хотя, повторюсь, такая ситуациявстречается не часто). Вот пример реализации с циклом:ssize_t ret. nr.while (len
Просмотров: 160 | Добавил: admin | Дата: 28.03.2016 | Комментарии (0)

Когда файл fd открывается в режиме присоединения (при помощи флага0 APPEND), то запись начинается не с текущей позиции в файле, а с конца файла.Например, предположим, что два процесса записывают данные в один и тотже файл. В другом режиме, отличном от режима присоединения, если первыйпроцесс запишет данные в конец файла и потом то же самое сделает второйпроцесс, то позиция в файле для первого процесса уже не будет указывать наконец файла; она будет указывать в точку, отстающую от реального конца файлана длину данных, только что записанных вторым процессом. Это означает,что несколько процессов не могут присоединять данные к одному файлу без явнойсинхронизации, так как при этом они будут попадать в условия состязания.Режим присоединения позволяет избежать этой проблемы. Он гарантирует,что позиция в файле всегда устанавливается на конец файла, поэтому операциизаписи всегда присоединяют данные в конце файла, даже если их выполняютразные процессы. Можно представлять себе это так, как будто ... Читать дальше »
Просмотров: 184 | Добавил: admin | Дата: 28.03.2016 | Комментарии (0)

Когда файл fd открывается в режиме без блокировки (при помощи флага0 N0NBL0CK) и выполняется запись, которая в обычных условиях заблокирова-лась бы, системный вызов w r iteO возвращает значение -1 и присваивает переменнойеггпо значение EAGAIN. В такой ситуации запрос нужно повторить ещераз. С обычными файлами такая ситуация случается крайне редко.Прочие коды ошибокПрочие полезные значения еггпо включают в себя:EBADFУказанный файловый дескриптор недопустим или не открыт для записи.EFAULTУказатель в аргументе buf указывает за пределы адресного пространствапроцесса.EFBIGДанная операция записи сделала бы файл больше максимального допустимогоразмера для процесса или больше внутренних пределов реализации.EINVALУказанный файловый дескриптор соответствует объекту, не допускающемузапись.ЕЮПроизошла низкоуровневая ошибка.EN0SPCВ файловой системе, откуда взят данный дескриптор файла, недостаточносвободного пространства.EPIPEДанный файловый дескриптор связан с конвейером или сокетом, считывающаяст ... Читать дальше »
Просмотров: 175 | Добавил: admin | Дата: 28.03.2016 | Комментарии (0)

« 1 2 3 4 5 6 7 ... 15 16 »