Изменения и техническая поправка к указанному международному стандарту, принятые после его официальной публикации, внесены в текст настоящего стандарта и выделены двойной вертикальной линией, расположенной на полях напротив соответствующего текста, а обозначение и год принятия изменения (технической поправки) приведены в скобках после соответствующего текста.
При применении настоящего стандарта рекомендуется использовать вместо ссылочных международных стандартов соответствующие им национальные стандарты Российской Федерации, сведения о которых приведены в дополнительном приложении ДА
Некоторые положения международного стандарта, указанного в пункте 4, могут являться объектом патентных прав. Международная организация по стандартизации (ИСО) и Международная электротехническая комиссия (МЭК) не несут ответственности за идентификацию подобных патентных прав
5 ВВЕДЕН ВПЕРВЫЕ
Правила применения настоящего стандарта установлены в ГОСТ 1.0-2012 (раздел 8). Информация об изменениях к настоящему стандарту публикуется в ежегодном (по состоянию на 1 января текущего года) информационном указателе "Национальные стандарты", а официальный текст изменений и поправок - в ежемесячном информационном указателе "Национальные стандарты". В случае пересмотра (замены) или отмены настоящего стандарта соответствующее уведомление будет опубликовано в ближайшем выпуске ежемесячного информационного указателя "Национальные стандарты". Соответствующая информация, уведомление и тексты размещаются также в информационной системе общего пользования - на официальном сайте Федерального агентства по техническому регулированию и метрологии в сети Интернет (www.gost.ru)
Стандарты серии ИСО/МЭК 10373 устанавливают методы испытаний для определения характеристик идентификационных карт, соответствующих определению, приведенному в ИСО/МЭК 7810 (далее - карты). В каждом методе испытания имеется ссылка на один или несколько базовых стандартов, которыми могут быть ИСО/МЭК 7810 либо один или несколько дополнительных стандартов, устанавливающих требования к технологиям хранения информации, применяемым в картах.
Примечание 1 - Критерии оценки результатов испытаний не включены в настоящий стандарт; они установлены в базовых стандартах.
Примечание 2 - Испытания, определенные в настоящем стандарте, следует проводить независимо одно от другого. Любую конкретную карту близкого действия или терминальное оборудование близкого действия не следует подвергать последовательно всем испытаниям.
Настоящий стандарт устанавливает методы испытаний для карт и объектов близкого действия и соответствующего терминального оборудования, требования к которым установлены в ИСО/МЭК 14443-1:2008, ИСО/МЭК 14443-2:2010, ИСО/МЭК 14443-3:2011 и ИСО/МЭК 14443-4:2008. ИСО/МЭК 10373-1 определяет методы испытаний, являющиеся общими для одной или нескольких технологий хранения информации в картах на интегральных схемах, а остальные стандарты серии ИСО/МЭК 10373 устанавливают другие методы испытаний, предназначенные для других технологий.
В настоящем стандарте использованы ссылки на следующие международные стандарты. Для датированных ссылок следует использовать только указанное издание, для недатированных ссылок следует использовать последнее издание указанного документа, включая все поправки:
ИСО/МЭК 7810:2003 Карты идентификационные. Физические характеристики (ISO/IEC 7810:2003 Identification cards - Physical characteristics)
ИСО/МЭК 14443-1:2008 Карты идентификационные. Карты на интегральных схемах бесконтактные. Карты близкого действия. Часть 1. Физические характеристики (ISO/IEC 14443-1:2008 Identification cards - Contactless integrated circuit cards - Proximity cards - Part 1: Physical characteristics)
ИСО/МЭК 14443-2:2010 Карты идентификационные. Карты на интегральных схемах бесконтактные. Карты близкого действия. Часть 2. Радиочастотный энергетический и сигнальный интерфейс (ISO/IEC 14443-2:2010 Identification cards - Contactless integrated circuit cards - Proximity cards - Part 2: Radio frequency power and signal interface)
ИСО/МЭК 14443-3:2011 Карты идентификационные. Карты на интегральных схемах бесконтактные. Карты близкого действия. Часть 3. Инициализация и антиколлизия (ISO/IEC 14443-3:2011 Identification cards - Contactless integrated circuit cards - Proximity cards - Part 3: Initialization and anticollision)
ИСО/МЭК 14443-4:2008 Карты идентификационные. Карты на интегральных схемах бесконтактные. Карты близкого действия. Часть 4. Протокол передачи (ISO/IEC 14443-4:2008 Identification cards - Contactless integrated circuit cards - Proximity cards - Part 4: Transmission protocol)
МЭК 61000-4-2:2008 Электромагнитная совместимость. Часть 4-2. Методики испытаний и измерений. Испытание на невосприимчивость к электростатическому разряду [IEC 61000-4-2:2008 Electromagnetic compatibility (EMC) - Part 4-2: Testing and measurement techniques - Electrostatic discharge immunity test]
В настоящем стандарте применены термины, определения, сокращения и обозначения по ИСО/МЭК 14443-1:2008, ИСО/МЭК 14443-2:2010, ИСО/МЭК 14443-3:2011, ИСО/МЭК 14443-4:2008, а также следующие термины с соответствующими определениями.
Примечание - Элементы в жирных скобках [] являются дополнительными определениями.
3.1.1 базовый стандарт (base standard): Стандарт, для проверки соответствия требованиям которого используют данный метод испытания.
3.1.2 CascadeLevels: Число каскадных уровней PICC.
3.1.3 PICC "Класс 1" ("Class 1" PICC): PICC, у которой антенна расположена согласно ИСО/МЭК 14443-1:2008 и которая выдерживает испытание на максимальный эффект нагрузки по 7.2.5 настоящего стандарта в условиях, соответствующих PICC "Класс 1".
3.1.4 набор команд (command set): Набор, описывающий команды, посылаемые PICC во время инициализации и антиколлизии.
Примечание - См. ИСО/МЭК 14443-3:2011 (подраздел 6.4) для PICC типа A и ИСО/МЭК 14443-3:2011 (подраздел 7.5) для PICC типа B.
3.1.6 <1> отключение (mute): Отсутствие ответа в течение указанного времени ожидания, например, по истечению FWT.
--------------------------------
<1> Отсюда и до конца подраздела 3.1 нумерация пунктов последовательно изменена из-за включения в текст стандарта дополнительного пункта 3.1.5 (Изм. A1:2012).
3.1.7 состояния PICC (PICC states): Различные состояния PICC во время инициализации и антиколлизии.
Примечание - См. ИСО/МЭК 14443-3:2011 (подраздел 6.3) для PICC типа A и ИСО/МЭК 14443-3:2011 (подраздел 7.4) для PICC типа B.
3.1.8 сценарий (scenario): Определенный типовой протокол и коммуникация, специфичная для приложения, которые используются вместе с методами испытаний, определенными в настоящем стандарте.
3.1.9 исходное состояние испытания; TIS (Test Initial State; TIS): Одно из состояний PICC до выполнения PICC определенной команды из набора команд.
3.1.10 метод испытания (test method): Метод проверки характеристик идентификационных карт с целью подтверждения их соответствия требованиям стандартов.
3.1.11 целевое состояние испытания; TTS (Test Target State; TTS): Одно из состояний PICC после выполнения PICC определенной команды из набора команд.
Таблица 1
Испытания проводят при температуре окружающей среды (23 +/- 3) °C и относительной влажности воздуха от 40 до 60%, если не оговорены иные климатические условия.
В настоящем стандарте методы испытаний не требуют проведения предварительного кондиционирования PICC или PCD.
Отклонения значений характеристик испытательного оборудования (например, линейных размеров) и параметров испытательных режимов (например, параметров настройки испытательного оборудования) от указанных в стандарте значений не должны быть более +/- 5%, если не оговорены другие допускаемые отклонения.
Резисторы и конденсаторы должны иметь пренебрежимо малую индукцию.
Суммарная погрешность измерений по каждой величине, определяемой при испытаниях, должна быть указана в протоколе испытаний.
Основная информация дана в руководстве ИСО/МЭК 98-3:2008.
5 Оборудование и схемы для испытаний по параметрам, установленным в ИСО/МЭК 14443-1 и ИСО/МЭК 14443-2
В настоящем разделе определены испытательное оборудование и испытательные схемы для проверки работы PICC или PCD на соответствие требованиям ИСО/МЭК 14443-1:2008 и ИСО/МЭК 14443-2:2010. Испытательное оборудование включает в себя:
- средства измерений (см. 5.1);
- калибровочную катушку (см. 5.2);
- испытательную установку PCD (см. 5.3);
- эталонную PICC (см. 5.4).
Они описаны в следующих разделах.
Цифровой импульсный осциллограф должен быть способен осуществлять дискретизацию с частотой не менее 500 млн отсчетов в секунду с разрешением не менее 8 бит при оптимальном масштабировании и иметь общую минимальную полосу пропускания 250 МГц. Осциллограф должен иметь возможность выводить дискретные данные в виде текстового файла для облегчения математических и других операций, таких как кадрирование дискретных данных с использованием внешних программ (см. приложения E и F).
Примечание - Суммарная полоса пропускания представляет собой объединенную полосу пропускания осциллографа и измерительной установки.
Эталонные PICC предназначены для проверки способности PCD:
- генерировать поле напряженностью не менее Hmin и не более Hmax;
- передавать мощность на PICC;
- передавать модулированный сигнал на PICC;
- получать модулированный сигнал нагрузки от PICC в пределах своей рабочей области.
5.4.1 Размеры эталонной PICC
Эталонная PICC должна состоять из области высотой и шириной формата ID-1 по ИСО/МЭК 7810:2003, содержащей катушки индуктивности. Другая область, внешняя по отношению к первой, содержащая микросхему, эмулирующую требуемые функции PICC, должна быть присоединена таким образом, чтобы обеспечивать ее размещение в испытательных установках без создания помех испытаниям. Размеры должны быть такими, как показано на рисунке 4.
![]()
--------------------------------
Таблица 2
На CON1 должен быть подан сигнал нагрузочной модуляции. Нагрузочная модуляция может быть определена в испытательной установке PCD. Если генератор сигнала нагрузочной модуляции не используют, то он должен быть отключен или установлен на 0 В.
Нагрузку эталонной PICC можно настраивать с помощью напряжения на CON2 до тех пор, пока на CON3 не появится требуемое напряжение постоянного тока.
Напряжение постоянного тока эталонной PICC может быть измерено на CON3 с помощью вольтметра с высоким импедансом, при этом соединительные провода должны быть скручены или быть коаксиальными.
Параметры формы сигнала PCD подбирают на CON4, используя пробник осциллографа с высоким импедансом. Провод заземления пробника осциллографа с высоким импедансом должен быть как можно короче, менее 20 мм, или коаксиально соединен.
Резонансная частота эталонной PICC должна быть откалибрована с использованием следующей процедуры.
b) Подключить калибровочную катушку непосредственно к генератору сигналов, а соединитель CON3 эталонной PICC - к вольтметру с высоким импедансом. Подключить все остальные соединители к тем же устройствам, что и при испытании.
c) Расположить эталонную PICC на расстоянии d = 10 мм над калибровочной катушкой таким образом, чтобы оси двух катушек (калибровочной катушки и главной катушки эталонной PICC) совпали (см. рисунок 6).
d) Возбудить калибровочную катушку с набором синусоидальных колебаний на нужной резонансной частоте.
h) Откалибровать испытательную установку PCD, чтобы создать рабочий режим с Hmin на калибровочной катушке.
j) Повторить этапы от b) до g) с полученным значением R2.
![]() PICC
--------------------------------
6.1.1 Переменное магнитное поле
6.1.1.1 Назначение
Данное испытание устанавливает, что PCD генерирует поле, не превышающее среднего значения, установленного в ИСО/МЭК 14443-1:2008, во всех возможных положениях PICC.
6.1.1.2 Процедура испытаний
a) Настроить эталонную PICC на 19 МГц, как описано в перечислениях a) - g) 5.4.3.
b) Откалибровать испытательную установку PCD для получения среднего значения поля, установленного в ИСО/МЭК 14443-1:2008 (пункт 4.4), на калибровочной катушке.
c) Поместить эталонную PICC в положение DUT в испытательной установке PCD. Переключить перемычку J1 в положение b и настроить R2 для получения напряжения постоянного тока 3 В. Измеряемого на соединителе CON3. Режим рабочего поля проверяют, контролируя напряжение на калибровочной катушке, и при необходимости настраивают.
ПРЕДУПРЕЖДЕНИЕ - Значение R2 должно быть в пределах от 55 до 65 В.
d) Установить эталонную PICC в любое возможное положение PICC. Напряжение постоянного тока на CON3 не должно превышать 3 В.
e) Если оно превышает, то использовать один тот же коэффициент пересчета, чтобы измерить максимальное и среднее напряжение постоянного тока и преобразовать в напряженность поля для проверки максимального и среднего значений поля, установленных в ИСО/МЭК 14443-1:2008 (пункт 4.4), за период 30 с.
6.1.1.3 Протокол испытаний
Протокол испытаний должен содержать значение напряжения постоянного тока. Измеренное на CON3.
6.2.1 Переменное магнитное поле
Цель данного испытания - проверить поведение PICC при воздействии переменного магнитного поля на частоте 13,56 МГц.
6.2.1.1 Оборудование
Для создания переменного магнитного поля используют испытательную установку PCD.
6.2.1.2 Процедура испытаний
Применяют следующую процедуру.
b) Поместить испытуемую PICC в положение DUT и при необходимости сразу перенастроить радиочастотный передатчик в испытательной антенне PCD на требуемую напряженность поля.
c) По истечении 5 мин убрать PICC из положения DUT как минимум на 5 с.
e) Поместить испытуемую PICC в положение DUT и при необходимости сразу перенастроить радиочастотный передатчик в испытательной антенне PCD на требуемую напряженность поля.
g) Проверить, что PICC работает надлежащим образом.
6.2.1.3 Протокол испытаний
В протоколе испытаний должно быть указано, работает PICC надлежащим образом или нет.
6.2.2 Испытание на воздействие статического электричества
Цель данного испытания - проверить работу интегральной схемы карты при воздействии электростатического разряда (ESD) на испытуемый образец. Испытуемую PICC подвергают воздействию имитируемого электростатического разряда (ESD, модель человеческого тела) и затем проверяют ее основные функции (см. рисунок 7).
![]() 6.2.2.1 Оборудование
См. МЭК 61000-4-2:2008.
a) Основные технические характеристики генератора ESD:
- накопительная емкость - 150 пФ +/- 10%;
- разрядное сопротивление - 330 Ом +/- 10%;
- зарядное сопротивление - от 50 до 100 МОм;
- время нарастания - от 0,7 до 1 нс.
b) Предпочтительные характеристики оборудования:
- тип оборудования: настольный;
- метод разряда: прямое воздействие воздушного разряда на испытуемое оборудование;
- разрядные электроды генератора ESD: зонд диаметром 8 мм с круглым наконечником.
6.2.2.2 Процедура испытания
Подключить штырь заземления оборудования к электропроводной пластине, на которой размещена PICC.
Приложить разряд последовательно в нормальной полярности к каждой из 20 зон, показанных на рисунке 8. Далее повторить эту же процедуру с обратной полярностью. Необходимо выдерживать интервал не меньше 10 с для охлаждения между последовательными разрядными импульсами.
![]() на воздействие ESD
ВНИМАНИЕ - Если PICC содержит контакты, то их поверхность должна быть обращена вверх, а зона, включающая в себя контакты, не должна подвергаться воздействию этого разряда.
По завершении испытания проверить, работает ли PICC надлежащим образом.
6.2.2.3 Протокол испытаний
В протоколе испытаний должно быть указано, работает ли PICC надлежащим образом или нет.
7.1.1 Напряженность поля PCD
7.1.1.1 Цель
Данное испытание предназначено для измерения напряженности поля, создаваемого PCD в его рабочей области.
Примечание - В данном испытании учитывают нагрузку PICC на PCD.
Для Hmax применяют следующую процедуру.
a) Настроить эталонную PICC на частоту 19 МГц, как описано в перечислениях a) - g) 5.4.3.
b) Откалибровать испытательную установку PCD, чтобы создать рабочий режим с Hmax на калибровочной катушке.
c) Поместить эталонную PICC в положение DUT в испытательной установке PCD. Переключить перемычку J1 в положение b и настроить R2 таким образом, чтобы получить напряжение постоянного тока 3 В. Измеряемое на соединителе CON3. В качестве альтернативы перемычку J1 установить в положение c, и подаваемое на CON2 напряжение настраивать до получения напряжения постоянного тока 3 В на соединителе CON3. В обоих случаях режим рабочего поля проверять, контролируя напряжение на калибровочной катушке, и при необходимости настроить.
ПРЕДУПРЕЖДЕНИЕ - Значение R2 должно быть в пределах от 75 до 85 Ом. Проверить этот диапазон хотя бы один раз перед использованием альтернативного метода.
d) Расположить эталонную PICC в пределах рабочей области испытуемого PCD. Напряжение постоянного тока на CON3 не должно превышать 3 В.
Для Hmin применяют следующую процедуру.
a) Настроить эталонную PICC на частоту 13,56 МГц, как описано в 5.4.3.
7.1.4 Коэффициент модуляции и форма колебаний сигнала
7.1.4.1 Цель
7.1.4.2 Процедура испытаний
a) Установить калибровочную катушку в произвольном положении в установленной рабочей области и вывести данные напряжения катушки индуктивности на подходящий осциллограф. Определить коэффициент модуляции и характеристики формы колебаний сигнала, используя инструментарий для анализа, определенный в приложении E.
b) Настроить эталонную PICC на частоту 16,5 МГц, как описано в перечислениях a) - g) 5.4.3, и переключить перемычку J1 в положение c.
Примечание 1 - Если напряжение постоянного тока 6 В не может быть достигнуто при выбранном положении, то для испытания используют максимально достижимое напряжение.
e) Если немодулированное напряжение на CON4. Измеренное с помощью подходящего осциллографа (требования по 5.1.1), ниже 1 В (двойная амплитуда), то следует использовать другую воспринимающую катушку для определения характеристик формы колебания сигнала.
Примечание 2 - Другая воспринимающая катушка должна иметь форму восьмерки с радиусом 15 мм и быть расположена дальше всего от эталонной PICC для минимизации взаимодействия и как можно ближе к антенне PCD для минимизации наведенного напряжения.
f) Определить коэффициент модуляции и характеристики формы колебаний сигнала по напряжению на CON4 или на противоположной воспринимающей катушке, используя инструментарий для анализа, определенный в приложении E.
Примечание 3 - Выбранное положение калибровочной катушки в пределах рабочей области не влияет на результат.
Примечание 4 - Нагрузка эталонной PICC не означает наихудший эффект нагрузки PICC. Самый высокий эффект нагрузки может быть достигнут с помощью резонансных частот, близких к несущим частотам (т.е. 15 или 13,56 МГц).
7.1.4.3 Протокол испытаний
Протокол испытаний должен содержать измеренное значение коэффициента модуляции поля PCD, время нарастания и время спада, а также значения выбросов в пределах рабочей области в нагруженном и ненагруженном состояниях.
7.1.5 Прием сигнала нагрузочной модуляции
7.1.5.1 Цель
7.1.5.2 Процедура испытаний
Эталонная PICC и процедура ее калибровки позволяют определить чувствительность PCD к нагрузочной модуляции. Эталонная PICC не эмулирует эффект нагрузки всех типов PICC.
a) Настроить эталонную PICC на частоту 13,56 МГц, как описано в 5.4.3, и переключить перемычку J1 в положение c.
d) Увеличивать амплитуду модулированного сигнала на CON1 для получения откликов до тех пор, пока PCD не обнаружит не менее 10 последовательных откликов.
e) Поместить эталонную PICC в положение DUT в испытательной установке PCD.
f) Настроить испытательную установку PCD для создания напряженности поля H, которое даст такое же напряжение на CON3, и зафиксировать соответствующую напряженность поля путем считывания напряжения на калибровочной катушке.
g) Измерить амплитуду нагрузочной модуляции эталонной PICC VLMA согласно описанию в 7.2.1 и сравнить ее с нормальным предельным значением, соответствующим зафиксированному значению напряженности поля. Этот измеренный уровень VLMA определяет критерий чувствительности PCD для сравнения с нормальным предельным значением и выполнения этих контрольных измерений.
i) Повторить этапы с a) по h) с резонансной частотой эталонной PICC 15 МГц.
Любое положение, в котором чувствительность PCD больше нормального предельного значения, считают не соответствующим рабочей области.
Примечание 1 - Эффективность испытания может быть расширена при использовании дополнительных резонансных частот ниже 13,56 МГц, например, 12 и 10 МГц.
Примечание 2 - Чувствительность PCD должна быть ниже нормального предельного значения для обеспечения хорошего приема сигнала нагрузочной модуляции PICC.
Примечание 3 - В данном испытании не проверяют, что прием PCD не зависит от фазы нагрузочной модуляции PICC. Следовательно, данное испытание не гарантирует безошибочный прием никакой PICC, соответствующей требованиям ИСО/МЭК 14443-2:2010.
7.1.5.3 Протокол испытаний
Протокол испытаний должен содержать данные о чувствительности PCD к нагрузочной модуляции в положениях, подвергаемых испытанию.
7.2.1.1 Цель
7.2.1.2 Процедура испытаний
Отрегулировать радиочастотную мощность, подаваемую генератором сигналов на антенну для испытаний PCD, чтобы создать электромагнитное поле необходимой напряженности. Измеряемой с помощью калибровочной катушки. Соединить выход схемы испытания нагрузочной модуляции (см. рисунок 2) с цифровым импульсным осциллографом. Потенциометр P1 на 10 Ом должен быть поднастроен так, чтобы минимизировать остаточную несущую. Этот сигнал должен быть по меньшей мере на 40 дБ ниже уровня сигнала, полученного путем короткого замыкания одной из катушек считывания.
ПРЕДУПРЕЖДЕНИЕ - Испытание PICC методом амплитудной нагрузочной модуляции следует проводить путем увеличения напряженности поля, начиная с 0 А/м (среднеквадратичное значение), и таким образом проверять правильность операций PICC, начиная с Hmin.
Этап 2. Испытуемая PICC должна быть установлена в положение DUT концентрично с катушкой считывания a. Радиочастотный передатчик испытательной антенны PCD должен быть повторно отрегулирован на требуемую напряженность поля.
Вывести на экран цифрового импульсного осциллографа сегмент из не менее чем шести циклов колебаний сигнала нагрузочной модуляции поднесущей и сохранить выбранные данные в файл для анализа с помощью программного обеспечения (см. приложение F).
Ровно шесть циклов поднесущей из отобранных модулированных колебаний должны быть преобразованы в ряд Фурье с окнами Бартлетта, используя подходящее программное обеспечение (например, из приложения F). Использовать дискретное преобразование Фурье с таким масштабом, чтобы чистый синусоидальный сигнал давал в результате свою максимальную величину. Чтобы свести к минимуму влияние переходных процессов, не следует учитывать при анализе цикл поднесущей, который следует сразу после немодулированного периода или сдвига фазы поднесущей. Дискретное преобразование Фурье должно быть выполнено на частотах боковых полос, генерируемых испытуемой PICC, т.е. fc + fs и fc - fs.
Результирующие пиковые амплитуды верхней и нижней боковых полос на частотах fc + fs и fc - fs должны быть выше значения, определенного в ИСО/МЭК 14443-2:2010 (пункт 8.2.2).
7.2.1.3 Протокол испытаний
Протокол испытаний должен содержать измеренные пиковые амплитуды сигналов верхней и нижней боковых полос на частотах fc + fs и fc - fs, а также внешних полей и модуляций.
--------------------------------
<1> Отсюда и до конца подраздела 7.2 нумерация структурных элементов последовательно изменена из-за включения в текст стандарта дополнительного пункта 7.2.2 (Изм. A2:2012) и дополнительного подпункта 7.2.3.4 (Изм. A4:2012). Изменения к ИСО/МЭК 10373-6:2011 внесены в настоящий и последующие пункты подраздела 7.2 с учетом изменения нумерации. Ссылки на структурные элементы настоящего стандарта изменены с учетом изменившейся нумерации.
7.2.3.1 Цель
Цель данного испытания - проверить способность PICC принимать команды от PCD.
Определены три условия испытаний, характеризующиеся временными соотношениями на границе области временных параметров модулированного сигнала PICC типа A, определенной в ИСО/МЭК 14443-2:2010 (рисунок 4).
Условие 1: максимум t1 - t2 и максимум t3, выброса нет.
Условие 2: минимум достижимого (испытательной установкой PCD) значения t1 - t2 и максимум связанного с ним значения t3, максимум положительного выброса.
Условие 3: минимум достижимого (испытательной установкой PCD) значения t3 и максимум связанного с ним значения t1 - t2, максимум положительного выброса.
Примечание - Амплитуда несущей в конце t2 должна быть менее 4%.
Эти три условия должны быть испытаны как минимум при Hmin и Hmax, при этом параметр t1 является максимальным установленным значением при использовании условий 1 и 3 и минимальным установленным значением, если используют условие 2.
Определены три условия испытаний, характеризующиеся временными соотношениями на границе области временных параметров модулированного сигнала PICC типа A, определенной в ИСО/МЭК 14443-2:2010 (рисунки 7, 8 и 9).
Условие 1: максимум t1 - t5 и максимум t6, положительного выброса нет.
Условие 2: минимум достижимого (испытательной установкой PCD) значения t1 - t5 и максимум связанного с ним значения t6, максимум положительного выброса.
Условие 3: минимум достижимого (испытательной установкой PCD) значения t6 и максимум связанного с ним значения t1 - t5, максимум положительного выброса.
Эти три условия должны быть испытаны как минимум при Hmin и Hmax, при этом:
- параметр a является максимальным установленным значением при использовании условия 1 и минимальным достижимым значением для испытательной установки PCD, когда используют условия 2 и 3;
- параметр t1 является максимальным установленным значением при использовании условий 1 и 3 и минимальным установленным значением, когда используют условие 2.
7.2.3.2.3 Процедура испытаний
При условиях, определенных в 7.2.3.2.1, PICC должна отвечать на REQA посылкой ATQA.
PICC, поддерживающая дополнительную скорость передачи fc/64, должна работать при условиях, определенных в 7.2.3.2.2, после выбора скорости передачи fc/64. Эта PICC должна корректно отвечать на I-блок, переданный при скорости передачи fc/64.
PICC, поддерживающая дополнительную скорость передачи fc/32, должна работать при условиях, определенных в 7.2.3.2.2, после выбора скорости передачи fc/32. Эта PICC должна корректно отвечать на I-блок, переданный при скорости передачи fc/32.
PICC, поддерживающая дополнительную скорость передачи fc/16, должна работать при условиях, определенных в 7.2.3.2.2, после выбора скорости передачи fc/16. Эта PICC должна корректно отвечать на I-блок, переданный при скорости передачи fc/16.
Условие 1: максимум tf и максимум tr, отрицательного и положительного выбросов нет.
Условие 2: минимум достижимого (испытательной установкой PCD) значения tf и максимум связанного с ним значения tr, максимум отрицательного и положительного выброса.
Условие 3: минимум достижимого (испытательной установкой PCD) значения tr и максимум связанного с ним значения tf, максимум отрицательного и положительного выброса.
Эти три условия должны быть испытаны как минимум при использовании:
- Hmin и Hmax;
7.2.3.3.2 Процедура испытаний
При условиях, определенных в 7.2.3.3.1, PICC, работающая при скорости передачи fc/128, должна отвечать на REQB посылкой ATQB.
7.2.3.5 Протокол испытаний
Протокол испытаний должен подтвердить заданную операцию при обязательной скорости передачи fc/128. Для PICC, поддерживающих одну или более дополнительную более высокую скорость передачи, протокол испытаний должен подтвердить заданную операцию на поддерживаемых скоростях передачи. Используемые условия испытаний должны быть указаны в протоколе испытаний.
7.2.4 Резонансная частота PICC (для справки)
7.2.4.1 Цель
Данное испытание может быть использовано для измерения резонансной частоты PICC.
Если две или более PICC разместить в одном и том же возбуждающем поле, то резонансная частота каждой PICC уменьшится.
При разработке каждой PICC выбор резонансной частоты требует тщательного подхода.
ПРЕДУПРЕЖДЕНИЕ - Резонансная частота может зависеть от напряженности поля, используемого во время измерения.
7.2.4.2 Процедура
Резонансную частоту PICC измеряют с помощью анализатора импеданса или сетевого анализатора или индуктивно-резистивно-емкостного измерителя, соединенных с калибровочной катушкой. PICC должна быть размещена на калибровочной катушке на расстоянии 10 мм, при этом оси двух катушек должны совпадать. Резонансная частота - это частота, при которой резистивная часть измеренного комплексного импеданса максимальна.
7.2.4.3 Протокол испытаний
Протокол испытаний должен содержать резонансную частоту PICC и условия измерений.
См. приложение H и приложение I.
См. приложение G.
(обязательное)
Ширина токопроводящей дорожки антенной катушки - 1,8 мм (за исключением сквозных металлизированных отверстий).
Начиная со схемы согласования импедансов, на плате имеются пересечения через каждые 45°.
Печатная плата (PCB): материал FR4, толщина 1,6 мм, двухсторонняя с медным покрытием толщиной 35 мкм.
Примечание 1 - Топология схемы согласования импедансов носит информативный характер.
Примечание 2 - Такие печатные платы и резисторы Rext имеются в различных коммерческих источниках.
![]()
![]()
![]()
![]()
A.2 Схема согласования импедансов
Импеданс антенны (Rant, Lant) настраивают на выходной импеданс генератора сигналов (Z = 50 Ом) с помощью согласующей схемы (см. A.2.1 и A.2.2). Конденсаторы C1, C1a, C1b, C2 и C3 имеют фиксированные значения. Фаза входного импеданса может быть поднастроена конденсатором переменной емкости C4.
Испытательная установка PCD, как определено в 5.3 и в настоящем приложении, предназначена для использования при измерениях, ограниченных во времени, чтобы избежать перегрева отдельных компонентов. Если испытание проходит без остановки, то теплоотдача должна повышаться. Следует принимать меры, чтобы сохранить максимальное напряжение и максимальную теплоотдачу в пределах установленных границ отдельных компонентов.
Таблица A.1
Примечание 1 - Допускаемое отклонение согласованного импеданса антенны составляет +/- 5 Ом и +/- 10°.
Примечание 2 - Rext располагают на нижней стороне антенной катушки.
Примечание 3 - Диапазоны значений мощности и напряжения включают в себя резервные значения.
Примечание 4 - Линейный усилитель переменной мощности на 50 Ом с низким уровнем искажения должен быть способен эмитировать модуляции типа A и типа B для передачи REQA и REQB, как определено в 7.2.3. Выходная мощность должна быть настраиваемой для получения полей с H в диапазоне от 1,5 А/м (среднеквадратичное значение) до 12 А/м (среднеквадратичное значение). Следует принимать во внимание длительность полей, превышающих верхний рабочий диапазон 7,5 А/м (среднеквадратичное значение).
передачи fc/128
Примечание 1 - Rext может быть образован путем соединения пяти резисторов на 4,7 Ом, 2 Вт параллельно.
Примечание 2 - Кроме того, Rext может быть помещен в положении, отмеченном пунктирной линией, как показано на рисунке A.5.
Примечание 3 - Rext может быть на 4 Вт, если максимальное поле достигает 7,5 А/м (среднеквадратичное значение).
Примечание 4 - Паразитная емкость антенны не показана на рисунке A.5.
Примечание 1 - Rext может быть образован с помощью параллельной схемы из двух резисторов на 4,7 Ом, 5 Вт, соединенных последовательно.
Примечание 2 - Rext должен быть помещен на стороне GND антенны, как показано на рисунке.
Примечание 3 - Паразитная емкость антенны не показана на рисунке A.6.
(справочное)
На рисунках B.1 и B.2 показаны два этапа простой фазовой настройки для согласования импеданса антенны и задающего генератора. После такой двухэтапной настройки генератор сигналов должен быть непосредственно подсоединен к выходу антенны для испытаний.
Этап 1
Резистор высокого класса точности на 50 Ом +/- 1% (например, BNC-резистор на 50 Ом) вставляют в сигнальную линию между выходом генератора сигналов и антенным соединителем. Два пробника осциллографа подсоединяют к обеим сторонам последовательного эталонного резистора. На осциллографе отображается фигура Лиссажу, когда он настроен для представления сигнала по осям Y и X. Установки параметров генератора сигналов:
- форма сигнала - синусоидальная;
- частота - 13,56 МГц;
- амплитуда - от 2 до 5 В (среднеквадратичные значения).
Выход заканчивается вторым резистором высокой точности на 50 Ом +/- 1% (например, BNC-оконечный резистор на 50 Ом). Пробник, включенный параллельно с выходным соединителем, имеет малую паразитную емкость Cprobe. Калибровочный конденсатор Ccal, включенный параллельно эталонному резистору, компенсирует эту емкость пробника при условии Ccal = Cprobe. Емкость пробника считают компенсированной при отображении полностью замкнутой фигуры Лиссажу.
![]() Примечание - Заземляющий кабель должен быть проложен близко к пробнику, чтобы избежать напряжений, наведенных магнитным полем.
Этап 2
Используя те же самые значения, что на этапе 1, на втором этапе схему согласования подключают к выходу антенны. Конденсатор C4 на антенной плате используют для настройки фазы на ноль.
![]() (обязательное)
C.1 Топология катушек считывания
Размеры в миллиметрах (рисунок не в масштабе)
![]()
Ширина токопроводящих дорожек катушек считывания 0,5 мм с допускаемым отклонением +/- 20% (за исключением сквозных металлизированных отверстий). Размеры катушек относятся к наружным размерам.
Печатная плата (PCB): материал FR4, толщина 1,6 мм, двухсторонняя с медным покрытием толщиной 35 мкм.
Примечание - Такие печатные платы имеются в различных коммерческих источниках.
C.2 Установка катушек считывания
На рисунке C.3 <1> показана установка катушек считывания.
--------------------------------
<1> Номер рисунка изменен из-за включения в текст стандарта дополнительного рисунка C.2 (Изм. A1:2012).
![]() (обязательное)
![]()
Размеры считать от середины токопроводящей дорожки (рисунок не в масштабе).
Воспринимающая катушка и главная катушка должны быть концентричны.
Ширина токопроводящих дорожек обеих катушек и расстояние между ними должны составлять 0,5 мм с допускаемым отклонением +/- 20%.
Печатная плата (PCB): материал FR4, толщина 0,76 мм с допускаемым отклонением +/- 10%, двухсторонняя с медным покрытием толщиной 35 мкм.
Примечание 1 - При частоте 13,56 МГц индуктивность главной катушки L1 составляет 2,3 мкГн +/- 10%, а сопротивление - 1,8 Ом +/- 10%.
Примечание 2 - При частоте 13,56 МГц индуктивность воспринимающей катушки L2 составляет 375 нГн +/- 10%, а сопротивление - приблизительно 0,65 Ом +/- 10%.
Примечание 3 - Такие печатные платы имеются в различных коммерческих источниках.
(обязательное)
КОЭФФИЦИЕНТА МОДУЛЯЦИИ
E.1 Обзор
Принцип работы инструментария для анализа формы сигнала и определения коэффициента модуляции показан на рисунке E.1.
![]() сигнала и определения коэффициента модуляции
Каждый блок описан в последующих разделах.
E.2 Выборка дискретных данных
![]()
E.3 Фильтрация
E.3.1 Фильтрация для скоростей передачи fc/128, fc/64, fc/32 и fc/16
E.3.2 Фильтрация для скоростей передачи fc/8, fc/4 и fc/2
E.4 Генерация огибающей
К отфильтрованному сигналу необходимо применить преобразование Гильберта, и модуль этого комплексного преобразования будет представлять собой огибающую сигнала.
E.5 Сглаживание огибающей
E.5.2 Сглаживание огибающей для скоростей передачи fc/8, fc/4 и fc/2
E.6 Определение коэффициента модуляции
Исходная и модулированная амплитуда огибающей сигнала должны быть определены с помощью вычисления гистограммы сглаженной огибающей сигнала. Наиболее частые значения соответствуют исходной и модулированной амплитуде огибающей сигнала. Для модулированных сигналов типа A с помощью гистограммы определяют только исходную амплитуду огибающей сигнала.
E.7 Определение временных соотношений
Время нарастания и время спада определяют в соответствии с ИСО/МЭК 14443-2:2010.
E.8 Определение положительного и отрицательного выбросов
Уже сглаженная огибающая сигнала должна быть дополнительно сглажена с помощью фильтра скользящего среднего по трем периодам несущей до определения значений положительного и отрицательного выбросов в соответствии с определениями по ИСО/МЭК 14443-2:2010.
E.9 Программа инструментария для анализа формы сигнала и определения коэффициента модуляции (для справки)
Следующая программа, написанная на языке C, дает пример реализации инструментария для анализа формы сигнала и определения коэффициента модуляции.
Реализация алгоритма на языке C состоит из шести различных файлов, которые должны быть помещены в одну папку.
E.9.1 structures.h
/******************************************************************/
/*structures.h */
/*This code contains the structures to save important results */
/******************************************************************/
#ifndef STRUCTURES_H
#define STRUCTURES_H
typedef struct esl
{
double volt;
double time;
struct esl *sig;
}ESL;
typedef struct times
{
double tf; // Type B
double tr; // Type B
double b; // Type B
double bVHBR; //Bit rates of fc/8, fc/4 and fc/2 ?
(Введено дополнительно. Изм. A4:2012.) ?
Double trstartind; // Type B
double trendind; // Type B
double tfstartind; // Type B
double tfendind; // Type B
double t1; // Type A (all bit rates)
double t1startind; // Type A (all bit rates)
double t1start; // Type A (all bit rates)
double t1endind; // Type A (all bit rates)
double t2; // Type A
double t2startind; // Type A
double t2start; // Type A
double t3; // Type A
double t3end; // Type A
double t3endind; // Type A
double t4; // Type A
double t4endind; // Type A
double t5; // Type A (higher bit rates)
double t5startind; // Type A (higher bit rates)
double t6; // Type A (higher bit rates)
double t6end; // Type A (higher bit rates)
double t6endind; // Type A (higher bit rates)
double a; // Type A (higher bit rates)
double tploone; //Type A (higher bit rates)
}TIMES;
typedef struct shootreader
{
double shootind;
double shootind_b;
double hf_reader;
double hr_reader;
double above;
double above_b;
}SHOOTREADER;
#endif
E.9.2 fftrm.h
/******************************************************************/
/*fftrm.h */
/*This is the header file for fftrm.c */
/******************************************************************/
#ifndef FFTRM_H
#define FFTRM_H
#define RE(z) ((z).r)
#define IM(z) ((z).i)
typedef float real;
typedef double doublereal;
typedef struct { real r, i; } complex;
typedef struct { doublereal r, i; } doublecomplex;
int zffts (int debug, doublecomplex *X, int M);
int ziffts (int debug, doublecomplex *X, int M);
void zfftrmc(doublecomplex *X, int M, int P, float D);
void rmpo (int *rv, int *rvp );
#endif
E.9.3 fftrm.c
/******************************************************************/
/*fftrm.c */
/*This code contains the necessary function for Fourier and */
/*inverse Fourier transformation */
/******************************************************************/
#include <stdio.h>
#include <math.h>
#include <malloc.h>
#include "fftrm.h"
#ifndef M_PI
#define M_PI 3.1415926535897932384626433832795
#endif
float *WR;
float *WI;
doublereal *DWR;
doublereal *DWI;
void rmpo( int *rv, int *rvp )
{
int value_h;
int n;
n = 1;
*rvp = -1;
value_h = 1;
while ( value_h > 0 )
{
value_h = *rv - n;
(*rvp)++;
n += n;
}
}
void zfftrmc( doublecomplex *X, int M, int P, float D )
{
int MV2,MM1,J,I,K,L,LE,LE1,IP,IQ,IND,IND1,R;
int I1,J1;
float A,B;
float WCOS,WSIN;
float VR,VI;
float ARG;
static int IPOTC;
static float DALT;
DWR = (doublereal *)calloc(M,sizeof(doublereal));
DWI = (doublereal *)calloc(M,sizeof(doublereal));
/* if (IPOTC == P & D == DALT) goto warmstart; */
IPOTC = P;
DALT = (float)D;
LE = 1;
IND = 0;
for (L=1;L<=P;L++)
{
LEI = LE;
LE = LE*2;
DWR[IND] = 1.0;
DWI[IND] = 0.0;
ARG = (float)M_PI/(float)LE1;
WCOS = (float)cos(ARG);
WSIN = (float)(D*sin(ARG));
for (R=1;R<=LE1;R++)
{
IND1 = IND+1;
A = (float)DWR[IND];
B = (float)DWI[IND];
DWR[IND1] = A*WCOS - B*WSIN;
DWI[IND1] = B*WCOS + A*WSIN;
++IND;
}
}
/* warmstart: */
MV2=M/2;
MM1=M-1;
J=1;
for (I=1; I<=MM1; I++)
{
if (I >= J)
goto P1;
J1 = J-1;
I1 = I-1;
VR = (float)RE(X[J1]);
VI = (float)IM(X[J1]);
RE(X[J1]) = RE(X[I1]);
IM(X[J1]) = IM(X[I1]);
RE(X[I1]) = VR;
IM(X[I1]) = VI;
P1: K = MV2;
P2: if (K >= J) goto P3;
J = J-K;
K = K/2;
goto P2;
P3: J = J+K;
}
IND = 0;
LE = 1;
for (L=1; L<=P; L++)
{
LE1 = LE;
LE = LE*2;
for (R=0; R<LE1; R++)
{
WCOS = (float)DWR[IND];
WSIN = (float)DWI[IND];
IND = IND+1;
for (IQ=R; IQ<M; IQ+=LE)
{
IP = IQ+LE1;
A = (float)RE(X[IP]);
B = (float)IM(X[IP]);
VR = A*WCOS - B*WSIN;
VI = B*WCOS + A*WSIN;
RE(X[IP]) = RE(X[IQ]) - VR;
IM(X[IP]) = IM(X[IQ]) - VI;
RE(X[IQ]) = RE(X[IQ]) + VR;
IM(X[IQ]) = IM(X[IQ]) + VI;
}
}
}
free(DWR);
free(DWI);
}
/*================================================================*/
/*___1-D FFT with respect to a spatial coordinate_________________*/
/*================================================================*/
int zffts( int debug, doublecomplex *X, int M )
{
int P;
float D;
D = -1.0;
rmpo( &M, &P);
if ( debug )
{
printf("P = %d\n",P);
printf("FFT ...\n");
}
zfftrmc( X, M, P, D); /* fftrm.c */
return 0;
}
/*================================================================*/
/*___1-D Inverse FFT with respect to a spatial coordinate_________*/
/*================================================================*/
int ziffts( int debug, doublecomplex *X, int M )
{
int i;
int P;
float D;
D = 1.0;
rmpo( &M, &P);
if ( debug )
{
printf("P = %d\n",P);
printf("IFFT ...\n");
}
zfftrmc( X, M, P, D); /* fftrm.c */
/*___Multiply with 1/M____*/
for (i=0; i<M; i++)
{
RE(X[i]) /= (doublereal)M;
IM(X[i]) /= (doublereal)M;
}
return 0;
}/*End of fftrm.c*/
E.9.4 hilbert.h
/******************************************************************/
/*hilbert.h */
/*This code contains the necessary functions for extracting */
/*envelope */
/******************************************************************/
#ifndef HILBERT_H_
#define HILBERT_H_
/*This function reads the sampled data recorded in the file*/
int ReadData(void);
/*This function performs the Fourier transform*/
void Fft(void);
/*This function performs the necessary phase shift*/
void PhaseShifting(void);
/*This function performs the inverse Fourier transform*/
void Ifft(void);
/*Envelope reconstruction is done by this function*/
int EnvelopeReconstruction(void);
/*Hilbert main function*/
void hilbert(char *fnamep);
#endif /* HILBERT_H_ */
E.9.5 hilbert.c
/ ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/ * * * This program extract the envelope of modulated carrier * * * /
/ * * * Input: * * * /
/ * * * File in text format containing a table of two columns * * * /
/ * * * (time and test PCD output voltage vd) * * * /
/ * * * * * * /
/ * * * Data format of input-file: * * * /
/ * * * * * * /
/ * * * One data-point per line, * * * /
/ * * * * * * /
/ * * * {time[seconds], sense-coil-voltage[volts]) * * * /
/ * * * * * * /
/ * * * Data-points shall be equidistant time * * * /
/ * * * Minimum sampling rate: 100 MSamples/second * * * /
/ * * * example for spreadsheet file (start in next line): * * * /
/ * * * (time), (voltage) * * * /
/ * * * 3.00000e-06,1.00 * * * /
/ * * * 3.00200e-06,1.01 * * * /
/ * * * * * * /
/ * * * Run: * * * /
/ * * * hilbert Filename.txt * * * /
/ * * * or * * * /
/ * * * hilbert (default file name input.txt) * * * /
/ * * * * * * /
/******************************************************************/
/*hilbert.c */
/*Main program */
/******************************************************************/
# include <stdio.h>
# include <math.h>
# include <malloc.h>
# include <ctype.h>
# include <string.h>
# include "fftrm.h"
#define MAX_POINT 200000
#ifndef M_PI
#define M_PI 3.1415926535897932384626433832795
#endif
int debug=0;
int fftdebug=0;
double *Gvalue;
double *Gtime;
double *Gr;
double *Gi;
double *Gc;
doublecomplex *Gt_ifft;
/*File containing the input data*/
char *InputFileName ="input.txt";
int SampledPoints=0;
int N;
int row;
const int col=2;
int ReadData(void)
{
float a,b;
int i=0;
FILE *fp1;
i=0;
SampledPoints=0; //IA
if ((fp1 = fopen(InputFileName,"r")) == NULL)
{
printf("Cannot open input file.\n");
return 1;
}
while(!feof(fp1))
{
fscanf(fp1,"%e,%e\n", &a, &b);
Gtime[SampledPoints] = a;
Gvalue[SampledPoints] = b;
SampledPoints++;
if (SampledPoints>= MAX_POINT) break;
}
fclose(fp1);
fp1=fopen ("inputfile.txt", "w");
if (!fp1)
{
fprintf(stdout,"Can't write the sampled data in inputfile.txt. \n");
return 1;
}
for(i=0; i<SampledPoints; i++)
fprintf(fp1,"%e\n",Gvalue[i]); /*Gtime[i] has been omitted*/
fclose(fp1);
if(debug)
{
fp1=fopen("inputtime.txt","w");
if (!fp1)
{
fprintf(stdout,"Can't write the sampled data in inputtime.txt. \n");
return 1;
}
for(i=0; i<SampledPoints; i++)
fprintf(fp1,"%e\n",Gtime[i]); /*Gtime[i] has been omitted*/
fclose(fp1);
}
if(debug)
{
if((fp1=fopen("inputfile.bin","wb"))!=NULL)
{
fwrite(Gvalue,sizeof(double),SampledPoints,fp1);
fclose(fp1);
}
}
if(SampledPoints<N)
{
for(i=SampledPoints;i<=N;i++)
{
Gvalue[i] = 0;
}
}
return 0;
}/*End Of Function ReadData;*/
void Fft(void)
{
doublecomplex *Gt_freq;
FILE *fp1,*fp2,*fp3;
int k,num1,num2;
Gt_freg = (doublecomplex *)calloc(sizeof(doublecomplex),row);
/* FFT Procedure Starts for Sampled Data*/
for(k=0;k<=N;k++)
{
RE(Gt_freg[k])=Gvalue[k];
IM(Gt_freg[k])=0.0;
}
if(debug)
{
if((fp3=fopen("f.bin","wb"))!=NULL)
{
fwrite(Gvalue,sizeof(double),row,fp3);
fclose(fp3);
}
}
zffts(fftdebug,Gt_freg,row);/*FFT is done in spatial coordinate*/
for (k=0;k<=N;k++)
{
Gr[k]=RE(Gt_freg[k]);
Gi[k]=IM(Gt_freg[k]);
}
/* FFT Procedure Ends for Sampled Data*/
/* Writing The Real And Imaginary Part Of Reflected Part for Debuging*/
/* Writing the real part of sampled data*/
if(debug)
{
if((fp1=fopen("Gr.bin","wb"))!=NULL)
{
num1=fwrite(Gr,sizeof(double),row,fp1);
fclose (fp1);
}
else
fprintf(stdout,"Can't Open Gr.bin");
// Writing the img part of sampled data
if((fp2=fopen("Gi.bin","wb"))!=NULL)
{
num2=fwrite(Gi,sizeof(double),row,fp2);
fclose(fp2);
}
else
fprintf(stdout,"Can't Open Gi.bin");
fprintf(stdout,"Num of Real Part Data after FFT = %d\n",num1);
fprintf(stdout,"Num of Img Part Data after FFT = %d\n",num2);
}
free(Gt_freq);
}/* End Of The Function Fft */
void PhaseShifting(void)
{
double *tempr, *tempi;
int k;
FILE *fp1;
tempr = (double *)calloc(sizeof(double),row);
tempi = (double *)calloc(sizeof(double),row);
for ( k=0; k<=N; k++ )
{
tempr[k]=Gr[k];
tempi[k]=Gi[k];
}
for ( k=0; k<=ceil(N/2); k++ )
{
Gr[k] = tempi[k];
Gi[k] = -tempr[k];
}
for ( k=(int)ceil(N/2)+1; k<=N; k++ )
{
Gr[k] = -tempi[k];
Gi[k] = tempr[k];
}
if(debug)
{
if((fp1=fopen("ffrpt.bin","wb"))!=NULL)
{
fwrite(Gr,sizeof(double),row,fp1);
fclose(fp1);
}
if((fp1=fopen("ffipt.bin","wb"))!=NULL)
{
fwrite(Gi,sizeof(double),row,fp1);
fclose(fp1);
}
}
free (tempr);
free (tempi);
}/*End of PhaseShifting() function*/
void Ifft(void)
{
double *Gt_tmp; /* It takes the real part of R_ifft*/
double *Gt_tmpi;
FILE *fp1;
int k,i;
Gt_tmp = (double *)calloc(sizeof(double),row);
Gt_tmpi = (double *)calloc(sizeof(double),row);
for (k=0;k<=N;k++)
{
Gt_ifft[k].r=Gr[k];
Gt_ifft[k].i=Gi[k];
}
ziffts(fftdebug,Gt_ifft,row);/*IFFT of the signal in spatial coordinate*/
// End of IFFT
for (k=0;k<=N;k++)
{
Gt_tmp[k]=Gt_ifft[k].r;
}
if(debug)
{
fp1=fopen("ifft.txt","w");
if (!fp1)
fprintf (stdout, "Can't write in file");
for(i=0; i<=N; i++)
fprintf(fp1,"%.4e\n",(Gt_ifft[i].r));
fclose(fp1);
}
if(debug)
{
if((fp1=fopen("iffrpt.bin","wb"))!=NULL)
{
fwrite(Gt_tmp,sizeof(double),row,fp1);
fclose(fp1);
}
if((fp1=fopen("iffipt.bin","wb"))!=NULL)
{
fwrite(Gt_tmpi,sizeof(double),row,fp1);
fclose(fp1);
}
}
free(Gt_tmp );
free(Gt_tmpi );
}/* End Of Function Ifft*/
int EnvelopeReconstruction(void)
{
FILE *fp1;
int k;
doublecomplex *G; /*Input signal read from input file in complex form*/
doublecomplex *Ganalytical;/*Analytical function of our input signal*/
double *test;
double *sgrtr;
double *sgrti;
G = (doublecomplex *)calloc(sizeof(doublecomplex),row);
Ganalytical = (doublecomplex*)calloc(sizeof(doublecomplex),row;
test = (double *)calloc(sizeof(double),row);
sqrtr=(double *)calloc(sizeof(double),row);
sqrti=(double *)calloc(sizeof(double),row);
for (k=0;k<=N;k++)
{
RE(G[k]) = Gvalue[k];
IM(G[k]) = 0.0;
}
for (k=0;k<=N;k++)
{
RE(Ganalytical[k])=G[k].r;
IM(Ganalytical[k])=Gt_ifft[k].r;
}
for (k=0;k<=N;k++)
{
sqrtr[k]=sqrt(Ganalytical[k].r*Ganalytical[k].r+Ganalytical[k].i*Ganalytical[k].i);
}
fp1=fopen("output.txt","w");
if (!fp1)
{
fprintf(stdout,"Can't write extracted envelope in output.txt.\n");
free(G);
free(Ganalytical);
free(test);
free(sqrtr);
free(sqrti);
return 1;
}
for(k=0; k<SampledPoints; k++)
fprintf(fpi,"%e,%e\n",Gtime[k],sqrtr[k]);
fclose(fp1);
free(G);
free(Ganalytical);
free(test);
free(sqrtr);
free(sqrti);
return 0;
}
/*Main Function*/
void hilbert(char *fnamep)
{
int status=0,i=1;
char fname[256];
strcpy(fname, fnamep);
InputFileName= fname;
//Readinq the sampled data
do
{
N=(int)pow(2,i)-1;
i++;
}while (MAX_POINT > N);
if (debug)
printf("N= %d\n",N);
row=N+1;
Gvalue = (double *)calloc(sizeof(double),row);
Gtime = (double *)calloc(sizeof(double),row);
Gr = (double *)calloc(sizeof(double),row);
Gi = (double *)calloc(sizeof(double),row);
Gt_ifft = (doublecomplex *)calloc(sizeof(doublecomplex),row);
Gc = (double *)calloc(sizeof(double),row);
status = ReadData();
if (status== 1) goto MainExit;
/*Does FFT*/
Fft();
/*Appropriate Phase has been Shifted*/
PhaseShifting();
/*Does IFFT*/
Ifft();
/*Envelope Reconstruction */
status = EnvelopeReconstruction();
if (status== 1) goto MainExit;
MainExit:
free(Gvalue);
free(Gtime);
free(Gr);
free(Gi);
free(Gt_ifft);
free(Gc);
}/*End Of Main*/
E.9.6 functs.c
/******************************************************************/
/*functs.c */
/*This code contains all functions which provide the program*//*functionality.*/
/*Main function of the whole program can be found at the end of */
/*this file. */
/******************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
#include "structures.h"
#include "hilbert.h"
#define MAX_SAMPLES 200000
#ifndef M_PI
#define M_PI 3.1415926535897932384626433832795
#endif
// Reads a line from a file (f) and returns two char arrays (s and t)
// It is used to read files written in "comma separation" format.
void read_line (FILE *f, char *s, char *t)
{
int a=0;
int i=0;
a=fgetc(f); /* Takes chars from the file pointed by f */
while (isspace(a)) /* spaces at the beginning of line are taken out */
{
a=fgetc(f);
}
while (a!=',' && a!=EOF) /* spaces at the beginning of line are taken out */
{
t[i++]=(char)a;
a=fgetc(f);
}
t[i]='\0';
i=0;
a=fgetc(f);
while (a!='\n' && a!=EOF)
{
s[i++]=(char)a;
a=fgetc(f);
}
s[i]='\0'; /* We add the line end */
}
// Reads a line from a file (f) and discards it.
void skip_line (FILE *f)
{
int a=0;
a=fgetc(f);
while (a!='\n' && a!=EOF)
{
a=fgetc(f);
}
}
// Creates a ESL node with the given volt and time parameters
ESL *createnodef(double voltf, double timef)
{
ESL *new=NULL;
new=(ESL *)malloc(sizeof(ESL));
if (new!=NULL)
{
new->volt=voltf;
new->time=timef;
new->sig=NULL;
}
else
fprintf(stderr,"Memory Error");
return new;
}
// Frees the allocated memory for ESL nodes
void freelist(ESL *first) // frees ESL list
{
ESL *to_free;
while (first->sig!=NULL)
{
to_free=first;
first=first->sig;
free(to_free);
}
}
// Creates a TIME node with the given volt and time parameters void createtime(TIMES *new,?
double tr, double tf, double b, double bVHBR, double trstartind, double trendind, double?
tfstartind, double tfendind, double t1, double t1startind, double t1start, double t1endind,?
double t2, double t2startind, double t2start, double t3, double t3end, double t3endind,?
double t4, double t4endind, double t5, double t5startind, double t6, double t6end, double?
t6endind, double a, double tploone) ?
(Измененная редакция. Изм. A4:2012.) ?
{
new->tf=tf;
new->tr=tr;
new->b=b;
new->bVHBR=bVHBR; ?
(Введено дополнительно. Изм. A4:2012.) ?
new->trstartind=trstartind;
new->trendind=trendind;
new->tfstartind=tfstartind;
new->tfendind=tfendind;
new->t1=t1;
new->t1startind=t1startind;
new->t1start=t1start;
new->t1endind=t1endind;
new->t2=t2;
new->t2startind=t2startind;
new->t2start=t2start;
new->t3=t3;
new->t3end=t3end;
new->t3endind=t3endind;
new->t4=t4;
new->t4endind=t4endind;
new->t5=t5;
new->t5startind=t5startind;
new->t6=t6;
new->t6end=t6end;
new->t6endind=t6endind;
new->a=a;
new->tploone=tploone;
}
// Inserts a ESL node (new) in a list pointed by "first"
void insert_node (ESL **first, ESL *new)
{
ESL *p=NULL;
ESL *previous=NULL;
if (new!=NULL)
{
p=*first;
if (p==NULL)
{
*first=new;
}
else
{
while (p!=NULL)
{
previous=p;
p=p->sig;
}
previous->sig=new;
}
}
}
/* Multiplies order polynomials supposing (
/* b and c are complex values stored in a table where even elements are */
/* real and odd elements imaginary */
double *mult_poli (int num_pol, double *b, double *c)
{
int i=0;
int y=0;
double *real;
double *imag;
double *vector;
double *new_real;
double *new_imag;
double real_b=0;
double real_c=0;
double imag_b=0;
double imag_c=0;
real=(double *)calloc(4*num_pol, sizeof(double));
imag=(double *)calloc(4*num_pol, sizeof(double));
new_real=(double *)calloc(4*num_pol, sizeof(double));
new_imag=(double *)calloc(4*num_pol, sizeof(double));
vector=(double *)calloc(4*num_pol, sizeof(double));
real[0]=c[0];
real[1]=b[0];
real[2]=1;
imag[0]=c[1];
imag[1]=b[1];
imag[2]=0;
for (i=3; i<(4*num_pol); i++)
{
real[i]=0;
imag[i]=0;
}
for (y=1; y<num_pol; y++)
{
// Selects values b and c
real_b=b[2*y];
real_c=c[2*y];
imag_b=b[2*y+1];
imag_c=c[2*y+1];
for (i=0; i<=(2*num_pol-2); i++)
{
// Starts with coeff "c"
new_real[i]+=real[i]*real_c-imag[i]*imag_c;
new_imag[i]+=real[i]*imag_c+imag[i]*real_c;
// Continues with coeff "b"
new_real[i+1]+=real[i]*real_b-imag[i]*imag_b;
new_imag[i+1]+=real[i]*imag_b+imag[i]*real_b;
// Finishes with coeff "1"
new_real[i+2]+=real[i];
new_imag[i+2]+=imag[i];
}
// Update Values
for (i=0;i<(4*num_pol); i++)
{
real[i]=new_real[i];
imag[i]=new_imag[i];
new_real[i]=0;
new_imag[i]=0;
}
}
for (y=0; y<(2*num_pol); y++)
{
vector[2*y]=imag[y];
vector[2*y+1]=real[y];
}
free (new_imag);
free (new_real);
free (imag);
free (real);
return (vector);
}
// Part of the calculation of the butterworth coeffs.
double *butter_d_coeffs(double freq1, double freq2)
{
int butter_order=2;
int index=0;
double theta=0; // M_PI *(freq2-freq1)/2.0
double cp=0; // cosine of phi
double *vec_r=0; //
double *vec_t=0; //
double *dcoeff=0; // d coefficients
double pole_ang=0; // pole angle
double divisor=0;
cp = cos(M_PI*(freq2+freq1)/2.0);
theta = M_PI*(freq2-freq1)/2.0;
vec_r=(double *)calloc(2*butter_order,sizeof(double));
vec_t=(double *)calloc(2*butter_order,sizeof(double));
for(index=0;index<butter_order;++index)
{
pole_ang=M_PI*(double)(2*index+1)/(double)(2*butter_order);
divisor=sin(2*theta)*sin(pole_ang)+1.0;
vec_r[2*index]=cos(2*theta)/divisor;
vec_r[2*index+1]=sin(2*theta)*cos(pole_ang)/divisor;
vec_t[2*index]=-2.0*cp*(cos(theta)+sin(theta)*sin(pole_ang))/divisor;
vec_t[2*index+1]=-2.0*cp*sin(theta)*cos(pole_ang)/divisor;
}
dcoeff=mult_poli(butter_order,vec_t,vec_r);
dcoeff[4]=dcoeff[1];
dcoeff[3]=dcoeff[3];
dcoeff[2]=dcoeff[5];
dcoeff[1]=dcoeff[7];
dcoeff[0]=1;
for(index=5;index<=2*butter_order;index++)
dcoeff[index]=0;
free(vec_t);
free(vec_r);
return(dcoeff)
}
// Calculates the Butterworth filter coefficients
void butterworth_coeffs(double freq1, double freq2, double *dfiltercoeff,
double*cfiltercoeff)
{
// n filter order
// freq1, freq2 lower/uppercutoff frequencies
double sf; // scaling factor
double *dcoeff; // d coefficients
double cotan=0; // cotangent of theta
/* calculate the d coefficients */
dcoeff=butter_d_coeffs(freq1,freq2);
/* d coefficients for 4th order butterworth */
dfiltercoeff[0]=dcoeff[0]; // Always 1
dfiltercoeff[1]=dcoeff[1];
dfiltercoeff[2]=dcoeff[2];
dfiltercoeff[3]=dcoeff[3];
dfiltercoeff[4]=dcoeff[4];
/* scalling factor for the c filter coefficients (Butterworth 4th order */
cotan=1.0/tan(M_PI*(freq2-freq1)/2.0);
sf=(1.0/(((cotan+sqrt(2)/2)*(cotan+sqrt(2)/2))+1/2));
/* c coefficients for 4th order butterworth*/
cfiltercoeff[0]=1*sf;
cfiltercoeff[1]=0*sf;
cfiltercoeff[2]=-2*sf;
cfiltercoeff[3]=0*sf;
cfiltercoeff[4]=1*sf;
free(dcoeff);
}
// Checks if the data input is adequate to our algorithms
int datacheck(int posval, int negval, int samplesp, double tlast,FILE *pointfile)
{
double diffr=0.0;
char timestr1[25];
char timestr2[25];
char voltstr[25];
double timestrf1=0;
double timestrf2=0;
double cut_sample=0;
double delta_t=0;
double val_t=0;
int loop=0;
double linf=0;
int lind=0;
// Checks that there are (nearly) much positive as negative values
if (posval>negval)
diffr=(posval-negval)/((posval+negval)/2);
else
diffr=(negval-posval)/((posval+negval)/2);
if (diffr>0.8)
fprintf(stdout,"Data Corrupted: Too little negative (or positive)
values\n");
// L=n*p with P=2*pi and n=1,2,3... - Cuts data
rewind (pointfile);
read_line(pointfile,voltstr,timestr1);
read_line(pointfile,voltstr,timestr1);
read_line(pointfile,voltstr,timestr1); // Skips csv header if present or not
read_line(pointfile, voltstr, timestr1);
while (voltstr[0]!='\0')
{
read_line(pointfile,voltstr,timestr2);
loop++;
}
loop=loop+3;
rewind(pointfile);
for (lind=0; lind<loop; lind++)
{
read_line(pointfile,voltstr,timestr2);
}
timestrf1=atof(timestr1); // t(4)
timestrf2=atof(timestr2); // t(end)
cut_sample=((1/13.56e6)/((timestrf2-timestrf1)/(loop-1)));
linf=samplesp;
while (linf>0)
{
linf=linf-cut_sample;
}
linf+=cut_sample;
samplesp=samplesp-linf-3;
// At least 7 points per sample
delta_t=tlast-timestrf1;
val_t=delta_t/samplesp;
if (val_t>(1/13.56e6)/7)
fprintf(stdout, "More samples points needed - Nyquist\n");
return (samplesp);
}
// Finds the most frequent value(s) of the given signal, Hmax (Types A/B) and Hmin(Type
B).
void Hmaxfinder(double *env, double *Hmax, double *Hmin, int numsamples)
{
int hist[2001]={0}; // IA Changed memory access violation. Increased +1
int hi_low_i=0;
double tophist=0;
double bothist=100;
double diffhist=0;
double value=0;
int histind=0;
int max_i=0;
int min_i=0;
double max=0;
double min=0;
// Finds higher and lower values of samples
for (hi_low_i=0; hi_low_i<MAX_SAMPLES; hi_low_i++)
{
if (env[hi_low_i]!=0)
{
if (env[hi_low_i]<bothist)
bothist=env[hi_low_i];
if (env[hi_low_i]>tophist)
tophist=env[hi_low_i]; // Finds limits for the histogram
}
}
diffhist=tophist-bothist;
for (hi_low_i=0; hi_low_i<numsamples; hi_low_i++)
{
if (env[hi_low_i]!=0)
{
value=env[hi_low_i];
histind=(int)(2000*((value-bothist)/diffhist)); // Performs a lineal
quantization
hist[histind]++;
}
}
for (hi_low_i=0; hi_low_i<1000; hi_low_i++)
{
if (hist[hi_low_i]>min) // Searches most frequent value in the lower half of
the form
{
min=hist[hi_low_i];
min_i=hi_low_i;
}
*Hmin=(bothist+(diffhist/2000)*(min_i));
}
for (hi_low_i=1001; hi_low_i<2000; hi_low_i++)
{
if (hist[hi_low_i]>max) // Search most frequent value in the upper half of the
form
{
max=hist[hi_low_i];
max_i=hi_low_i;
}
*Hmax=(bothist+(diffhist/2000)*(max_i));
}
}
// Finds the value of m_min for bit rates of fc/8, fc/4 and fc/2 ?
?
void Mminfinder(double *env, double Hmax, double Hmin, double *HmaxVHBR, TIMES *timeres, ?
int numsamples) ?
{ ?
int i=0; ?
int j=0; ?
double compare_hi=0.0; ?
double compare_lo=0.0; ?
double compare=0.0; ?
double difference=0.0; ?
int going_up=0; ?
double ampl=0.0; ?
double ampl_max=0.0; // represents the amplitude (Hmax-b), and indirectly "m". ?
double m_deviation=0.0; // countermeasure 1: m_min < 0.2*m is not considered ?
double Hmax_cm=0.0; // countermeasure 2: m min does not start or end on ?
borders ?
double b_cm=0.0; ?
double mmin=0.0; ?
double mmin_cum=0.0; ?
?
// Skip all zeros ?
while (env[j]==0) ?
j++; ?
?
// where do we start? ?
difference=env[j]-env[j+1]; ?
if (difference<0) ?
{ ?
going_up=1; // going up ?
compare_lo=env[j]; ?
} ?
else if (difference>0) ?
{ ?
going_up=0; // going down ?
compare_hi=env[j]; ?
} ?
compare=env[j]; ?
?
ampl_max=(Hmax-Hmin); ?
m_deviation=ampl_max*0.2; ?
Hmax_cm=Hmax*0.95; ?
b_cm=Hmin*1.05; ?
timeres->bVHBR=0; ?
?
for (i=j; i<=numsamples-j; i++) ?
{ ?
if (going_up==0) // GOING DOWN ?
{ ?
if (compare>=env[i]) ?
{ ?
compare=env[i]; ?
} ?
else if (compare<env[i]) ?
{ ?
compare=env[i]; ?
compare_lo=env[i]; ?
going_up=1; // change direction ?
ampl=(compare_hi-compare_lo); ?
mmin=(ampl/(compare_hi+compare_lo))*100; ?
if (ampl>m_deviation && ampl<ampl_max && (compare_hi<Hmax_cm || ?
compare_lo>b_cm)) //Countermeasures ?
{ ?
*HmaxVHBR=compare_hi; ?
timeres->bVHBR=compare_lo; ?
ampl_max=ampl; ?
} ?
} ?
} ?
if (going_up==1) // GOING UP ?
{ ?
if (compare<=env[i]) ?
{ ?
compare=env[i]; ?
} ?
else if (compare>env[i]) ?
{ ?
compare=env[i]; ?
compare_hi=env[i]; ?
going_up=0; // change direction ?
ampl=(compare_hi-compare_lo); ?
mmin=(ampl/(compare_hi+compare_lo))*100; ?
if (ampl>m_deviation && ampl<ampl_max && (compare_hi<Hmax_cm || ?
compare_lo>b_cm)) //Countermeasures ?
{ ?
*HmaxVHBR=compare_hi; ?
timeres->bVHBR=compare_lo; ?
ampl_max=ampl; ?
mmin_cum=mmin; ?
} ?
} ?
} ?
} ?
if (*HmaxVHBR==0 || timeres->bVHBR==0) // in case Waveform has only two levels ?
(typical 1M7) Mmin=M ?
{ ?
*HmaxVHBR=Hmax; ?
timeres->bVHBR=Hmin; ?
} ?
} ?
(Введено дополнительно. Изм. A4:2012.) ?
// Linear convolution (z= x convolve y)
void LinearConvolution(double X[],double Y[], double Z[], int lenx, int leny)
{
double *zptr,s,*xp,*yp;
int lenz;
int i,n,n_lo,n_hi;
lenz=lenx+leny-1;
zptr=Z;
for (i=0;i<lenz;i++)
{
s=0.0;
n_lo=0>(i-leny+1)?0:i-leny+1;
n_hi=lenx-1<i?lenx-1:i;
xp=X+n_lo;
yp=Y+i-n_lo;
for (n=n_lo;n<=n_hi;n++)
{
s+=*xp * *yp;
xp++;
yp--;
}
*zptr=s;
zptr++;
}
}
int envfilt(int rate, double *output, double *toutput, int filterlength,double tini, double?
tend, int lengthp, double *envelope) ?
(Измененная редакция. Изм. A4:2012.) ?
{ ?
intcofpi=0;
int xx=0;
double cofp=0.0;
int lengthp1=0;
double lengthf=0;
double cof[2000]={0};
double points=0.0;
int pointsi=0;
int lengthtotal=0;
cofp=(73.75e-9)/((tend-tini)/(lengthp));
cofpi=cofp+0.5;
lengthf=cofpi*filterlength;
points=(5*73.75e-9)/((tend-tini)/(lengthp-1));
pointsi=(int)points+1;
lengthp1=lengthp;
for (xx=0; xx<lengthf; xx++)
cof[xx]=1/lengthf;
for (xx=lengthf+1; xx<2000; xx++)
cof[xx]=0;
if (rate==106 || rate==212 || rate==424 || rate==848) ?
{ ?
LinearConvolution(cof, output, envelope, lengthf, lengthp); ?
} ?
?
else if (rate==1700 || rate==3400 || rate==6800) ?
{ ?
cof[0]=1; ?
for (xx=1; xx<2 000; xx++) ?
cof[xx]=0; ?
lengthf=1; ?
LinearConvolution(cof, output, envelope, lengthf, lengthp); ?
} ?
(Измененная редакция. Изм. A4:2012.) ?
for (xx=0; xx<(pointsi); xx++) // "Cuts" envelope
{
envelope[xx]=0.0;
toutput[xx]=0.0;
envelope[lengthp1-xx]=0.0;
toutput[lengthp1-xx]=0.0;
}
for (xx=lengthp1+1; xx<MAX_SAMPLES; xx++)
{
envelope[xx]=0.0;
toutput[xx]=0.0;
}
lengthtotal=lengthp1-2*(pointsi);
return (lengthtotal);
}
// Performs the search of a certain level (target) in the envelope, i.e. 5%, 60%, 90% in
Type A, 106 kbit/s
int localizador(double *env, double *toutput, double target, ESL **crosses, int env_
length)
{
int flag=0;
double diff;
ESL *new;
double v;
double t;
int crosscounter=0;
int locat_index=0;
int locat_index_start=0;
while (env[locat_index]==0.0) // Leaves 0s out
locat_index++;
locat_index_start=locat_index;
if (env[locat_index]-target>0)
{
for (locat_index=locat_index_start;
locat_index<env_length+locat_index_start-1;locat_index++)
{
diff=env[locat_index]-target;
if (diff<0 && flag==0 && env[locat_index]!=0.0) // At the beginning or
after an odd occurrence, envelope is over "target" level
{
flag=1; // down!
v=target;
t=toutput[locat_index-1]+((toutput[locat_index]-toutput[locat_
index-1])/(env[locat_index]-env[locat_index-1])*(target-env[locat_index-1]));
new=createnodef(v,t);
insert_node(crosses,new);
crosscounter++;
}
if (diff>0 && flag==1 && env[locat_index]!=0.0) // After first (or even)
occurrence, envelope is under "target" level
{
flag=0; // up!
v=target;
t=toutput[locat_index-1]+((toutput[locat_index]-toutput[locat_
index-1])/(env[locat_index]-env[locat_index-1])*(target-env[locat_index-1]));
new=createnodef(v,t);
insert_node(crosses,new);
crosscounter++;
}
// Returns all occurrences with time and volt level in a list
}
}
else
fprintf(stdout,"Signal is not ---|___|--- \n");
return (crosscounter); // Also returns how many occurrences appeared
}
// Function that calculates the relevant times
void tfinder(char type, double *env, double *toutput, double tini, double Hmax, double
Hmin, int rate, int env_length, TIMES *timeres)
{
double *envc=NULL;
double *envc2=NULL;
ESL *crosses=NULL;
ESL *crosses2=NULL;
ESL *crosses3=NULL;
ESL *crosses_WORK=NULL;
double ninety=0.0;
double five=0.0;
double sixty=0.0;
double tp90one=0.0;
double tp90two=0.0;
double tp5one=0.0;
double tp5two=0.0;
double tp60two=0.0;
double vp90one=0.0;
double vp90two=0.0;
double vp5one=0.0;
double vp5two=0.0;
double vp60two=0.0;
double tphione=0.0;
double tphitwo=0.0;
double vphione=0.0;
double vphitwo=0.0;
double tpmidone=0.0;
double vpmidone=0.0;
double tploone=0.0;
double tplotwo=0.0;
double vplotwo=0.0;
double t1=0.0;
double t2=0.0;
double t3=0.0;
double t4=0.0;
double t5=0.0;
double t6=0.0;
int flag=0;
int flag2=0;
int flag3=0;
int flag_improv=0;
int x_improv=0;
double minvolt=0.0;
double highrate_low=0.0;
double highrate_mid=0.0;
double highrate_hi=0.0;
double a=0.0;
double t6end=0.0;
double t5startind=0.0;
double t6endind=0.0;
double b=0.0;
double B_low=0.0;
double B_hi=0.0;
double tr=0.0;
double tf=0.0;
double tfstartind=0.0;
double tfendind=0.0;
double trstartind=0.0;
double trendind=0.0;
double t2startind=0.0;
double t2start=0.0;
double t1startind=0.0;
double t1start=0.0;
double t3end=0.0;
double t4endind=0.0;
double t3endind=0.0;
double t1endind=0.0;
double oscmin=0.0;
double osctmin=0.0;
double oscmax=0.0;
double osctmax=0.0;
ESL *crossescopy=NULL;
double tim3=0.0;
int index_A=0;
int index_A2=0;
int index_chain=0;
int i=0;
double *toutput2=NULL; ?
int counter=0; ?
int rev_counter=0; ?
int VHBR_step=0; ?
double VHBR_tr=0.0; ?
double VHBR_tf=0.0; ?
double tr_accum=0.0; ?
double tf_accum=0.0; ?
int tr_counter=0; ?
int tf_counter=0; ?
double t_one_sample=0.0; ?
double tlo=0.0; ?
double vlo=0.0; ?
double thi=0.0; ?
double vhi=0.0; ?
?
toutput2=toutput; ?
(Введено дополнительно. Изм. A4:2012.) ?
b=Hmin;
envc=env;
envc2=envc;
switch (type)
{
case 'A':
{
switch (rate)
{
case 106:
{
ninety=Hmax*0.9;
five=Hmax*0.05;
sixty=Hmax*0.6;
flag2=localizador(envc,toutput,five,&crosses2,env_length); // Finds
5% of Hmax
if (flag2==2) // if there are two occurrences, there's no
problem...
{
tp5one=crosses2->time; // Temporary values are stored for
future use
vp5one=crosses2->volt;
tp5two=crosses2->sig->time;
vp5two=crosses2->sig->volt;
freelist(crosses2);
}
else if (flag2==0) // ...if there is no occurrence...
fprintf(stdout,"5 percent of Hmax not reached - maybe wrong type
or bitrate? \n");
else if (flag2>2) // ...if there are more than two
occurrences...
{
// ...it must be checked that "peaks"
comply the ISO restrictions
while (toutput[index_A]<crosses2->sig->time)
index A++;
oscmin=envc2[index_A];
for (index_chain=0; index_chain<flag2-2; index_chain++)
{
crosses2=crosses2->sig;
}
while (toutput[index_A]<=crosses2->time)
{
if (envc2[index_A]>oscmax)
{
oscmax=envc2[index_A];
osctmax=toutput[index_A];
}
index A++;
}
while (envc2[index_A2]==0)
{
index_A2++;
}
while (envc2[index_A2]>oscmax)
{
index_A2++;
}
oscmin=envc2[index_A2];
osctmin=toutput[index_A2];
if (osctmax-osctmin>5e-7)
fprintf(stdout,"Monotony not fulfilled \n");
tp5one=crosses2->time; // Temporary values are
stored for future use
vp5one=crosses2->volt;
tp5two=crosses2->sig->time;
vp5two=crosses2->sig->volt;
freelist(crosses2);
}
flag=localizador(envc,toutput,ninety,Scrosses,env_length); //Finds 90%
of Hmax
if (flag>=2)
{
crosses_WORK=crosses; // Copy of crosses to work
with
while (x_improv<flag)
{
if (crosses_WORK->time<tp5one)
{
tp90one=crosses_WORK->time; // Temporary values are
stored for future use
vp90one=crosses_WORK->volt;
}
if (crosses_WORK->time>tp5two && flag_improv==0)
{
tp90two=crosses_WORK->time; // Temporary values are
stored for future use
vp90two=crosses_WORK->volt;
flag_improv=1;
}
crosses_WORK=crosses_WORK->sig;
x_improv++;
}
freelist(crosses);
}
else // ...otherwise...
{
fprintf(stdout,"90 %% of Hmax not found - Noise Too High \n");
}
flag3=localizador(envc,toutput,sixty,&crosses3,env_length); // Finds
60% of Hmax
if (flag3==2) // if there are two occurrences, there's no problem...
{
tp60two=crosses3->sig->time; // Temporary values are stored
for future use
vp60two=crosses3->sig->volt;
freelist(crosses3);
}
t1=tp5two-tp90one; // Definitive values are calculated and stored
for display
t2=tp5two-tp5one;
t3=tp90two-tp5two;
t4=tp60two-tp5two;
t1start=tp90one; // Other important values for the coming
functions
t2start=tp5one;
t3end=tp90two;
t1startind=vp90one;
t1endind=vp5two;
t2startind=vp5one;
t3endind=vp90two;
t4endind=vp60two;
createtime(timeres,0,0,0,0,0,0,0,0,t1,t1startind,t1start,t1endind,t2,t2startind,t2s ?
tart,t3,t3end,t3endind,t4,t4endind,0,0,0,0,0,0,0); ?
(Измененная редакция. Изм. A4:2012.) ?
}
break;
case 212:
case 424:
case 848:
{
ninety=Hmax*0.9;
while (env[index_A]==0.0) // Finds first value different of 0.0
index A++;
minvolt=env[index_A];
while (env[index_A]!=0.0) // All values are considered
{
if (env[index_A]<minvolt)
{
minvolt=env[index_A]; // Finds minimal voltage
}
index A++;
}
highrate_low=minvolt+0.1*(Hmax-minvolt) // Calculates target
flag=localizador(envc,toutput,highrate_low,&crosses,env_length);
//Finds target
if (flag==2) // ...if there are two occurrences, there's no
problem...
{
tploone=crosses->time; // Temporary values are stored for
future use
tplotwo=crosses->sig->time;
vplotwo=crosses->sig->volt;
}
else if (flag>2) // if there are more than two occurrences...
{ // ...it must be checked that "peaks" comply the ISO
restrictions
while (toutput[index_A2]<crosses->time || toutput[index_A2]==0)
index A2++;
oscmin=envc2[index_A2];
while (envc2[index_A2]<=oscmin)
{
oscmin=envc2[index_A2];
index_A2++;
}
osctmin=toutput[index_A2];
crossescopy=crosses;
for (i=1; i<(flag-1); i++)
crossescopy=crossescopy->sig;
tim3=crossescopy->time;
while (toutput[index_A2]<tim3)
index_A2++;
oscmax=envc2[index_A2];
while (toutput[index_A2]<tim3)
{
if (oscmax<envc2[index A2])
{
oscmax=envc2[index_A2];
osctmax=toutput[index_A2]
}
index_A2++;
}
if (oscmax-oscmin>(0.09*(Hmax-oscmin)))
fprintf (stdout, "Monotony not fulfilled \n");
for (i=1; i<(flag-1); i++)
crosses=crosses->sig;
tploone=crosses->time; // Temporary values are stored for future use
tplotwo=crosses->sig->time;
vplotwo=crosses->sig->volt;
}
freelist(crosses);
highrate_hi=ninety+0.1*minvolt; // Calculates target
flag=localizador(envc,toutput,highrate_hi,&crosses2,env_length);
//Finds target
if (flag>=2)
{
crosses_WORK=crosses2;
while (x_improv<flag)
{
if (crosses_WORK->time<tploone)
{
tphione=crosses_WORK->time; // Temporary values are
stored for future use
vphione=crosses_WORK->volt;
}
if (crosses_WORK->time>tplotwo && flag_improv==0)
{
tphitwo=crosses_WORK->time; // Temporary values are
stored for future use
vphitwo=crosses_WORK->volt;
flag_improv=1;
}
crosses_WORK=crosses_WORK->sig;
x_improv++;
}
freelist(crosses2);
}
else // ...otherwise...
{
fprintf(stdout,"90 %% of Hmax not reached! - Noise Too High?\n");
}
highrate_mid=(Hmax+minvolt)/2; // Calculates target
flag=localizador(envc,toutput,highrate_mid,&crosses3,env_length);
//Finds target
if (flag==2) // ...if there are two occurrences,
there's no problem...
{
tpmidone=crosses3->time; // Temporary values are stored for
future use
vpmidone=crosses3->volt;
freelist (crosses3);
}
else // ...otherwise...
fprintf(stdout,"Noise Too High \n");
t1=tplotwo-tphione;// Definitive values are calculated and stored for
display
t5=tplotwo-tpmidone;
t6=tphitwo-tplotwo;
a=minvolt;
t6end=tphitwo;
// Other important values for the coming functions
t1start=tphione;
t1startind=vphione;
t5startind=vpmidone;
t1endind=vplotwo;
t6endind=vphitwo;
createtime(timeres,0,0,0,0,0,0,0,0,t1,t1startind,t1start,t1endind,0,0,0,0,0,0,0,0,t ?
5,t5startind,t6,t6end,t6endind,a,tploone); ?
(Измененная редакция. Изм. A4:2012.) ?
}
break;
}
}
break;
case 'B':
{ ?
switch (rate) ?
{ ?
case 106: ?
case 212: ?
case 424: ?
case 848: ?
{ ?
B_low=b+0.1*(Hmax-b); // Calculates target ?
flag=localizador(envc,toutput,B_low,&crosses,env_length); // ?
Finds target ?
if (flag>=2) ?
{ ?
crosses_WORK=crosses; ?
tploone=crosses_WORK->time; // Temporary values are ?
stored for future use ?
while (x_improv<flag) ?
{ ?
tplotwo=crosses_WORK->time; // Temporary values are ?
stored for future use ?
vplotwo=crosses_WORK->volt; ?
crosses_WORK=crosses_WORK->sig; ?
x_improv++; ?
} ?
freelist (crosses); ?
} ?
else ?
{ ?
fprintf(stdout,"Monotony not fulfilled\n"); ?
} ?
?
B_hi=Hmax-0.1*(Hmax-b); // Calculates target ?
flag=localizador(envc,toutput,B_hi,&crosses2,env_length); // ?
Finds target ?
if (flag>=2) ?
{ ?
x_improv=0; ?
flag_improv=0; ?
crosses_WORK=crosses2; ?
while (x_improv<flag) ?
{ ?
if (crosses_WORK->time<tploone) ?
{ ?
tphione=crosses_WORK->time; // Temporary values ?
are stored for future use ?
vphione=crosses_WORK->volt; ?
} ?
?
if (crosses_WORK->time>tplotwo && flag_improv==0) ?
{ ?
tphitwo=crosses_WORK->time; // Temporary values ?
are stored for future use ?
vphitwo=crosses_WORK->volt; ?
flag_improv=1; ?
} ?
crosses_WORK=crosses_WORK->sig; ?
x_improv++; ?
} ?
freelist(crosses2) ?
} ?
?
else ?
{ ?
fprintf(stdout,"Monotony not fulfilled\n"); ?
} ?
?
tf=tploone-tphione; // Definitive values are calculated and ?
stored for display ?
tr=tphitwo-tplotwo; ?
tfstartind=tphione; // Other important values for the coming ?
functions ?
tfendind=tploone; ?
trstartind=tplotwo; ?
trendind=tphitwo; ?
createtime(timeres,tr,tf,b,0,trstartind,trendind,tfstartind,tfendind,0,0,0,0,0,0,0,0,0,0, ?
0,0,0,0,0,0,0,0,0); ?
} ?
break; ?
?
case 1700: ?
case 3400: ?
case 6800: ?
{ ?
B_low=b+0.1*(Hmax-b); // Calculates target ?
B_hi=Hmax-0.1*(Hmax-b); // Calculates target ?
?
flag=localizador(envc,toutput,B_low,&crosses,env_length); ?
flag2=localizador(envc,toutput,B_hi,&crosses2,env_length); ?
?
tfstartind=crosses2->time; // Reused as start point for ?
overshoot ?
tfendind=crosses->time; // and undershoot ?
?
// LOCATE ADJACENT POINTS ?
while (crosses->sig!=NULL && crosses2->sig!=NULL) ?
{ ?
tlo=crosses->time; ?
thi=crosses2->time; ?
if (thi<tlo) // FALLING EDGE ?
{ ?
if (crosses2->sig->time < tlo) // Discard Point ?
crosses2=crosses2->sig; ?
else if (crosses2->sig->time > tlo) // Analysis tf ?
{ ?
vlo=crosses->volt; ?
vhi=crosses2->volt; ?
while (toutput2[counter]==0) // set counters ?
{ ?
counter++; ?
rev_counter++; ?
} ?
t_one_sample=toutput2[counter+2]-toutput2[counter+1];?
while (toutput2[counter]<=thi) // set counters ?
{ ?
counter++; ?
rev_counter++; ?
} ?
while (toutput2[rev_counter]<=tlo) // set ?
counters ?
rev_counter++; ?
?
while (vlo<vhi) ?
{ ?
vlo=envc2[rev_counter-VHBR_step]; ?
vhi=envc2[counter+VHBR_step]; ?
VHBR_step++; ?
} ?
if (vlo==vhi) ?
VHBR_step=VHBR_step*2; ?
else if (vlo>vhi) ?
VHBR_step=VHBR_step*2-1; ?
VHBR_tf=VHBR_stер*t_one_sample; ?
tf_counter++; ?
tf_accum=tf_accum+VHBR_tf; ?
?
VHBR_step=0.0; // Reset Counters ?
VHBR_tf=0.0; ?
counter=0; ?
rev_counter=0; ?
crosses2=crosses2->sig; ?
} ?
} ?
?
else if (tlo<thi) // RISING EDGE ?
{ ?
if (crosses->sig->time < thi) // Discard Point ?
crosses=crosses->sig; ?
else if (crosses->sig->time > thi) // Analysis tr ?
{ ?
vlo=crosses->volt; ?
vhi=crosses2->volt; ?
while (toutput2[counter]==0) // set counters ?
{ ?
counter++; ?
rev_counter++; ?
} ?
t_one_sample=toutput2[counter+2]- ?
toutput2[counter+1]; ?
while (toutput2[counter]<=tlo) // set counters ?
{ ?
counter++; ?
rev_counter++; ?
} ?
while (toutput2[rev_counter]<=thi) // set ?
counters ?
rev_counter++; ?
?
while (vlo<vhi) ?
{ ?
vhi=envc2[rev_counter-VHBR_step]; ?
vlo=envc2[counter+VHBR_step]; ?
VHBR_step++; ?
} ?
if (vlo==vhi) ?
VHBR_step=VHBR_step*2; ?
else if (vlo>vhi) ?
VHBR_step=VHBR_step*2-1; ?
?
VHBR_tr=VHBR_step*t_one_sample; ?
tr_counter++; ?
tr_accum=tr_accum+VHBR_tr; ?
?
VHBR_step=0.0; // Reset Counters ?
VHBR_tr=0.0; ?
counter=0; ?
rev_counter=0; ?
crosses=crosses->sig; ?
} ?
} ?
} ?
// Calculate and Save Parameters ?
tf=tf_accum/tf_counter; // Definitive values are calculated ?
and stored for display ?
tr=tr_accum/tr_counter; // Reused as end point for overshoot ?
trendind=crosses2->time; ?
trstartind=crosses->time; ?
createtime(timeres,tr,tf,b,0,trstartind,trendind,tfstartind,tfendind,0,0,0,0,0,0,0,0,0,0 ?
0,0,0,0,0,0,0,0,0); ?
} ?
break; ?
} ?
} ?
break; ?
} ?
} ?
(Измененная редакция. Изм. A4:2012.) ?
// Checks monotony on the falling edge
void monocheck(double *env, double *toutput, double Hmax, TIMES *timesp, int rate,char
type)
{
double tinit=0.0;
double tend=0.0;
double compare=0.0;
double timer0=0.0;
double timer1=0.0;
double volt0=0.0;
double volt1=0.0;
int counter=0;
int flag_mono=0;
switch (type)
{
case 'A':
{
switch (rate)
{
case 106:
{
while (env[counter]==0)
counter++;
tinit=timesp->t1start;
tend=timesp->t2start;
while (toutput[counter]<tinit)
counter++; //find first value
while (toutput[counter]<tend)
{
compare=env[counter];
if (compare<env[counter+1])
{
timer0=toutput[counter];
volt0=env[counter];
while (volt0<env[counter+1]) // growing values...
{
counter++;
volt0=env[counter];
}
timer1=toutput[counter]; //...max.value -> time
if (timer1-timer0>5e-6)
fprintf(stdout,"Monotony not fulfilled \n");
}
else
counter++;
}
}
break;
case 212:
case 424:
case 848:
{
while (env[counter]==0)
counter++;
tinit=timesp->t1start;
tend=timesp->t1endind;
while (toutput[counter]<tinit)
counter++; //find first value
while (env[counter]>tend)
{
compare=env[counter];
if (compare<env[counter+1])
{
volt0=env[counter];
volt1=volt0;
while (volt0<env[counter+1]) // growing values...
{
counter++;
volt0=env[counter];
}
if (volt1-volt0>0.09*(Hmax-volt0))
fprintf (stdout, "Monotony not fulfilled \n");
}
else
counter++;
}
}
break;
}
}
break;
case 'B':
{
while (env[counter]==0)
counter++;
tinit=timesp->tfstartind;
tend=timesp->tfendind;
while (toutput[counter]<tinit)
counter++; //find first value
while (toutput[counter]<tend)
{
compare=env[counter];
if (compare<env[counter++])
flag_mono=1;
}
if (flag_mono==1)
fprintf(stdout, "Monotony not fulfilled \n");
}
break;
}
}
// Function that calculates the overshoot times
void overshoot(TIMES *timesp, double Hmax, double *env2, double *toutput, int rate,char
type, int samples, SHOOTREADER *shootreader)
{
double shootind=0.0;
double shootind_b=0.0;
double hr_reader=0.0;
double hf_reader=0.0;
double above=0.0;
double above_b=10.0;
double start=0.0;
int index_samples=0;
switch (type)
{
case 'A':
{
switch (rate)
{
case (106):
{
start=timesp->t3end;
while (toutput[index_samples]<=start)
index_samples++;
while (env2[index_samples]!=0) ?
{ ?
if (env2[index_samples]>above) ?
(Измененная редакция. Изм. A4:2012.) ?
{
above=env2[index_samples];
shootind=toutput[index_samples];
}
index_samples++;
}
}
break;
case (212):
case (424):
case (848):
{
start=timesp->t6end;
while (toutput[index_samples]<=start)
index_samples++;
while (index_samples<=samples)
{
if (env2[index_samples]>above)
{
above=env2[index_samples];
shootind=toutput[index_samples];
}
index_samples++;
}
if (above<Hmax) // In very strange cases if there's no over-
shoot, the highest point
above=Hmax; // in the curve can be cutted off by envfilt,
producing a negative hr
}
break;
}
}
break;
case 'B':
{
start=timesp->trendind;
while (toutput[index_samples]<start) // Starts at the rising edge
index_samples++;
while (index_samples<=samples)
{
if (env2[index_samples]>above)
{
above=env2[index_samples];
shootind=toutput[index_samples];
hr_reader=(above-Hmax)/(Hmax-timesp->b);
if (hr_reader<0) // In very strange cases if there's no overshoot,
the highest point
hr_reader=0; // in the curve can be cutted off by envfilt,
producing a negative hr
}
index_samples++;
}
index_samples=0;
start=timesp->tfendind;
while (toutput[index_samples]==0)
index_samples++;
while (toutput[index_samples]<start)
index_samples++;
while (env2[index_samples]!=0) ?
{ ?
if (env2[index_samples]<above_b) ?
(Измененная редакция. Изм. A4:2012.) ?
{
above_b=env2[index_samples];
shootind_b=toutput[index_samples];
hf_reader=(timesp->b-above_b)/(Hmax-timesp->b);
}
index_samples++;
}
}
break;
}
shootreader->shootind=shootind;
shootreader->shootind_b=shootind_b;
shootreader->hr_reader=hr_reader;
shootreader->hf_reader=hf_reader;
shootreader->above=above;
shootreader->above_b=above_b;
}
// Calculates the modulation index "m"
double modulation(char type, double Hmax, double b)
{
double m=0;
switch (type)
{
case 'A':
{
// m is not defined for Type A
}
break;
case 'B':
{
m=100*(Hmax-b)/(Hmax+b); // In %
}
break;
}
return (m)
}
// Displays on screen the results of the calculations ?
void display(char type, int rate, SHOOTREADER *shootreader2, TIMES *timesp, double Hmax, ?
double m, double mmin) ?
(Измененная редакция. Изм. A4:2012.) ?
{
double ovs=0;
double ovsb1=0;
double ovsb2=0;
fprintf (stdout,"\n"); // 2nd set of functions, on debug purposes
switch (type)
{
case 'A'
{
fprintf (stdout,"---RESULTS------------\n");
fprintf(stdout,"Type A - Bitrate %d\n", rate);
fprintf (stdout, "---Overshoot----------\n");
ovs=(((shootreader2->above)-Hmax)/(Hmax-timesp->a))*100;
if (ovs>0)
fprintf(stdout,"Overshoot = %f %% \n", ovs);
else
fprintf(stdout,"Overshoot = 0 %% \n");
switch (rate)
{
case (106):
{
fprintf(stdout,"---timings------------\n");
fprintf(stdout,"t1 = %f microsec. \n", (timesp->t1)*1e6);
fprintf(stdout,"t1 = %f/fc \n", (timesp->t1)*13.56e6);
fprintf(stdout,"t2 = %f microsec. \n", (timesp->t2)*1e6);
fprintf(stdout,"t2 = %f/fc \n", (timesp->t2)*13.56e6);
fprintf(stdout,"t3 = %f microsec. \n", (timesp->t3)*1e6);
fprintf(stdout,"t3 = %f/fc \n", (timesp->t3)*13.56e6);
fprintf(stdout,"t4 = %f microsec. \n", (timesp->t4)*1e6);
fprintf(stdout,"t4 = %f/fc \n", (timesp->t4)*13.56e6);
fprintf(stdout,"---amplitudes---------\n");
fprintf(stdout,"Hmax = %f volts \n", Hmax);
fprintf(stdout,"Max. Amplitude = %f volts \n", (shootreader2->above));
}
break;
case (212):
case (424):
case (848):
{
fprintf(stdout,"hovs = %f \n", (((shootreader2->above-Hmax)/Hmax)));
fprintf(stdout,"---timings------------\n");
fprintf(stdout,"t1 = %f microsec. \n", (timesp->t1)*1e6);
fprintf(stdout,"t1 = %f/fc \n", (timesp->t1)*13.56e6);
fprintf(stdout,"t5 = %f microsec. \n", (timesp->t5)*1e6);
fprintf(stdout,"t5 = %f/fc \n", (timesp->t5)*13.56e6);
fprintf(stdout,"t6 = %f microsec. \n", (timesp->t6)*1e6);
fprintf(stdout,"t6 = %f/fc \n", (timesp->t6)*13.56e6);
fprintf(stdout,"---amplitudes---------\n");
fprintf(stdout,"Hmax = %f volts \n", Hmax);
fprintf(stdout,"a = %f %% of Hinitial \n", ((timesp->a)/Hmax));
}
break;
}
}
break;
case 'B':
{
fprintf(stdout,"---RESULTS------------\n");
if (rate<=848) ?
fprintf(stdout,"Type B - bit rate %d\n", rate); ?
else ?
fprintf(stdout,"Type VHBR - bit rate %d\n", rate); ?
(Измененная редакция. Изм. A4:2012.) ?
fprintf(stdout,"---timings------------\n");
fprintf(stdout,"tf = %f microsec. \n", (timesp->tf)*1e6);
fprintf(stdout,"tf = %f/fc \n", (timesp->tf)*13.56e6);
fprintf(stdout,"tr = %f microsec. \n", (timesp->tr)*1e6);
fprintf(stdout,"tr = %f/fc \n", (timesp->tr)*13.56e6);
fprintf(stdout,"---modulation---------\n");
fprintf(stdout,"m = %f %% \n", m);
if((rate==1700 || rate==3400 || rate==6800)) ?
fprintf(stdout,"m_min = %f %% \n", mmin); ?
(Введено дополнительно. Изм. A4:2012.) ?
fprintf(stdout,"---amplitudes---------\n");
fprintf(stdout,"a = %f volts \n", Hmax);
fprintf(stdout,"b = %f volts \n", timesp->b);
fprintf(stdout,"---Overshoots---------\n");
fprintf(stdout,"hf = %f %% of Hinitial-b\n", (shootreader2->hf_reader)*100);
fprintf(stdout,"hr = %f %% of Hinitial-b\n", (shootreader2->hr_reader)*100);
ovsb1=(timesp->b-(shootreader2->above_b))*1000;
ovsb2=((shootreader2->above)-Hmax)*1000;
if (ovsb1>0)
fprintf(stdout,"hf = %f milivolts \n", ovsb1);
else
fprintf(stdout,"hf = 0 milivolts \n");
if (ovsb2>0)
fprintf(stdout,"hr = %f milivolts \n", ovsb2);
else
fprintf(stdout,"hr = 0 milivolts \n");
}
break;
}
}
// Main Function
int main (int argc, char *argv[])
{ ?
char type; ?
int rate; ?
char voltstr[25]; // intermediate char array to modify the voltage values ?
char timestr[25]; // intermediate char array to modify the time values ?
double snum=0; ?
double tnum=0; ?
double t=0; ?
int filterlength=0; ?
double Hmax=0; ?
double HmaxVHBR=0; ?
double Hmin=0; ?
double Hmax2=0; ?
double Hmin2=0; ?
FILE *pointfile=NULL; ?
FILE *input_u2=NULL; ?
FILE *poutput=NULL; ?
double m=0.0; ?
double mmin=0.0; ?
int length=0; ?
double val=0; ?
int posval=0; ?
int negval=0; ?
double tini=0; ?
double tfin=0; ?
int samples=0; ?
int out_i=0; ?
int length_total=0; ?
int sample_ini=0; ?
int sample_end=0; ?
int flag_cut=0; ?
int samplesp=0; ?
int fi=0; // Filter generic index ?
double b1=0; // Filter parameters ?
double b2=0; ?
double b3=0; ?
double b4=0; ?
double b5=0; ?
double a1=0; ?
double a2=0; ?
double a3=0; ?
double a4=0; ?
double a5=0; ?
double freg1=0; ?
double freg2=0; ?
double as[5]={0}; ?
double bs[5]={0}; ?
double t0=0; ?
double tlast=0; ?
int lineskip=0; ?
double *voutput=malloc (sizeof(double)*MAX_SAMPLES); ?
double *toutput=malloc (sizeof(double)*MAX_SAMPLES); ?
double *envelope=malloc (sizeof(double)*MAX_SAMPLES); ?
double *vfilter=malloc (sizeof(double)*MAX_SAMPLES); ?
double *tfilter=malloc (sizeof(double)*MAX_SAMPLES); ?
TIMES *timesp=(TIMES *)malloc(sizeof(TIMES)); ?
TIMES *timesp2=(TIMES *)malloc(sizeof(TIMES)); ?
SHOOTREADER *shootreader2=(SHOOTREADER *)malloc(sizeof(SHOOTREADER)); ?
?
if (voutput!=NULL && toutput!=NULL && envelope!=NULL && vfilter!=NULL && tfilter!=NULL ?
&& timesp!=NULL && timesp2!=NULL && shootreader2!=NULL) ?
{ ?
memset(voutput, 0, MAX_SAMPLES); ?
memset(toutput, 0, MAX_SAMPLES); ?
memset(envelope, 0, MAX_SAMPLES); ?
memset (vfilter, 0, MAX_SAMPLES); ?
memset (tfilter, 0, MAX_SAMPLES); ?
?
type=*argv[1]; ?
rate=atoi(argv[2]); ?
if (type!='A' && type! = 'B' && type!='V) ?
fprintf(stdout, "Wrong Type (A, B or VHBR))"); ?
else if ((type=='A' || type=='B') && (rate!=106 && rate!=212 && rate!=424 && ?
rate!=848)) ?
fprintf(stdout, "Wrong bit rate (106, 212, 424, 848)"); ?
else if ((type=='V) && (rate!=1700 && rate!=3400 && rate!=6800)) ?
fprintf(stdout, "Wrong bit rate (1700, 3400, 6800)"); ?
else ?
{ ?
if (type=='V) ?
type='B'; ?
pointfile=fopen (argv[3],"r"); ?
input_u2=fopen("pre_Hilbert.txt","w"); // modified-intermediate ?
amplitude vector ?
if(pointfile!=NULL && input_u2! =NULL) ?
{ ?
//1. LOAD DATA + CHECKING DATA (WITHOUT FILTER) ?
for (lineskip=0; lineskip<10; lineskip++) // Skips the first 10 ?
lines which are the header of csv files ?
{ ?
skip_line (pointfile); ?
} ?
read_line (pointfile,voltstr, timestr); ?
t0=atof(timestr); ?
while (!feof(pointfile)) // Reading the lines of the voltage ?
input file ?
{ ?
if (voltstr[0]!='\0') ?
{ ?
snum=atof(voltstr); ?
tnum=atof(timestr); ?
if(snum<0) ?
negval++; ?
else ?
posval++; ?
vfilter[samplesp]=snum; ?
tfilter[samplesp]=tnum; ?
samplesp++; ?
read_line (pointfile, voltstr, timestr); ?
} ?
tlast=tfilter [samplesp-1]; ?
} ?
samplesp=samplesp+3; ?
?
samplesp=datacheck(posval, negval, samplesp, tlast, pointfile); ?
?
tlast=tfilter [samplesp]; ?
?
//2. DATA FILTER BANDWIDTH (10 MHz OR 20 MHz DEPENDING ON BIT RATE) ?
if (rate==106 || rate==212 || rate==424 || rate==848) ?
{ ?
freq1=8.56e6/(1/(2*((tlast-t0)/(samplesp-1)))); ?
freq2=18.56e6/(1/(2*((tlast-t0)/(samplesp-1)))); ?
} ?
else if (rate==1700 || rate==3400 || rate==6800) ?
{ ?
freq1=6.06e6/(1/(2*((tlast-t0)/(samplesp-1)))); ?
freq2=21.06e6/(1/(2*((tlast-t0)/(samplesp-1)))); ?
} ?
?
butterworth_coeffs(freq1, freq2, as, bs); ?
b1=bs[0]; ?
b2=bs[1]; ?
b3=bs[2]; ?
b4=bs[3]; ?
b5=bs[4]; ?
a1=as[0] ?
a2=as[1]; ?
a3=as[2]; ?
a4=as[3]; ?
a5=as[4]; ?
?
for (fi=0; fi<samplesp;fi++) ?
{ ?
if(fi<7 || fi>samplesp-7) ?
voutput[fi]=0; ?
else ?
voutput [fi]=(b1*vfilter[fi]+b2*vfilter[fi-1]+b3*vfilter[fi-2]+?
b4*vfilter[fi-3]+b5*vfilter[fi-4]-a2*voutput[fi-1]- ?
a3*voutput[fi-2]-a4*voutput[fi-3]-a5*voutput[fi-4])/a1; ?
} ?
?
rewind (pointfile); ?
lineskip=0; ?
for (lineskip=0; lineskip<10; lineskip++) // Skips the first 10 lines ?
(header of csv files) ?
{ ?
skip_line (pointfile); ?
} ?
for (fi=0; fi<(samplesp-7); fi++) // Reading the lines of the ?
voltage input file ?
{ ?
val=voutput[fi] ; ?
read_line (pointfile,voltstr,timestr); ?
fprintf(input_u2,"%s,%f\n",timestr,val); ?
length++; ?
} ?
?
//3. HILBERT TRANSFORM AND THE COMPLEX ENVELOPE ?
rewind(input_u2); ?
hilbert("pre_Hilbert.txt"); // performs Hilbert transform ?
?
poutput=fopen("output.txt","r"); // Hilbert transform output vector ?
read_line (poutput,voltstr,timestr); ?
tini=atof(timestr); ?
rewind (poutput); ?
?
if(poutput!=NULL) ?
{ ?
while (!feof(poutput)) // Reading the lines of the voltage ?
input file */ ?
{ ?
read_line (poutput,voltstr,timestr); ?
if (timestr[0]!='\0') ?
{ ?
snum=atof(voltstr); ?
voutput[samples]=snum; ?
t=atof(timestr); ?
toutput[samples]=t; ?
samples++;//==>US // Same variable as the one in ?
Hmaxfinder ?
tfin=t; ?
} ?
} ?
} ?
else ?
fprintf(stdout,"Error in Hilbert transform\n"); ?
fclose(poutput); ?
?
//4. USING A SMOOTHING FILTER (MOV. AVG) TO REDUCE THE NOISE ?
filterlength=3; ?
length_total=envfilt (rate, voutput, toutput, filterlength, tini, tfin, ?
samples, envelope); ?
?
//5. 100% OF H_INITIAL ?
Hmaxfinder(envelope, SHmax, SHmin, length_total); ?
?
//6. COMPUTING THE ISO BASED TIMES ?
tfinder(type,envelope,toutput,tini,Hmax,Hmin,rate,length_total,timesp); ?
?
//7. M_min FOR BIT RATES OF fc/8, fc/4 AND fc/2 ?
if (rate==1700 || rate==3400 || rate==6800) ?
Mminfinder(envelope, Hmax, Hmin, &HmaxVHBR, timesp, length_ ?
total); ?
?
//8. CHECKING FOR ISO DEFINED MONOTONY ?
if (rate==106 || rate==212 || rate==424 || rate==848) ?
monocheck(envelope, toutput, Hmax, timesp, rate, type); ?
out_i=0; ?
while (out_i<MAX_SAMPLES) // Finds how many zeros are at the ?
beginning of vector envelope ?
{ ?
if (envelope[out_i]==0 && flag_cut==0) ?
{ ?
sample_ini=out_i; ?
tini=toutput[sample_ini+1]; ?
} ?
?
if (envelope[out_i]!=0) ?
{ ?
flag_cut=1; ?
sample_end=out_i; ?
tfin=toutput [sample_end]; ?
} ?
out_i++; ?
} ?
?
samples=sample_end-sample_ini-1; //==>US ?
?
for (out_i=0; out_i<samples; out_i++) ?
{ ?
voutput[out_i]=envelope[out_i+sample_ini+1]; ?
toutput[out_i]=toutput[out_i+sample_ini+1]; ?
} ?
for (out_i=samples+1; out_i<MAX_SAMPLES; out_i++) ?
{ ?
voutput[out_i]=0.0; ?
toutput[out_i]=0.0; ?
} ?
?
tini=toutput[0]; ?
tfin=toutput [samples]; ?
?
//9. OVERSHOOT OF THE READER ?
fprintf (stdout,"\n"); // 2nd set of functions, "New Line" printed ?
for debug purposes ?
if (rate==106 || rate==212 || rate==424 || rate==848) ?
{ ?
filterlength=3; ?
length_total=envfilt (rate, voutput, toutput, filterlength, tini, ?
tfin, samples, envelope); // 2nd Filtering to find the alternate envelope ?
Hmaxfinder(envelope, &Hmax2, &Hmin2, length_total); ?
?
tfinder(type,envelope,toutput,tini,Hmax2,Hmin2,rate,length_total, timesp2); ?
monocheck(envelope, toutput, Hmax2, timesp2, rate,type); ?
// The parameters of the alternate envelope are calculated ?
overshoot(timesp2,Hmax2,envelope,toutput,rate,type,samples,shootrea- ?
der2); // This time the over- and undershoots are found ?
} ?
else if (rate==1700 || rate==3400 || rate==6800) ?
{ ?
filterlength=3; ?
length_total=envfilt(106, voutput, toutput, filterlength, tini, ?
tfin, samples, envelope); // 2nd Filtering to find the alternate envelope ?
Hmaxfinder(envelope, &Hmax2, &Hmin2, length_total); ?
overshoot(timesp,Hmax,envelope,toutput,rate,type,samples, ?
shootreader2); // This time the over- and undershoots are ?
found ?
} ?
?
//10. MODULATION ?
m=modulation(type, Hmax, timesp->b); ?
if((type=='B') && (rate==1700 || rate==3400 ||) rate==6800)) ?
mmin=modulation(type,HmaxVHBR, timesp->bVHBR); ?
?
//11. DISPLAY ?
display(type, rate, shootreader2, timesp, Hmax, m, mmin); ?
} ?
else if (pointfile==NULL || input_u2!=NULL) ?
fprintf(stdout,"file(s) could not be opened \n"); ?
?
fclose(pointfile); ?
fclose(input_u2); ?
} ?
} ?
?
else ?
fprintf(stdout, "Memory could not be allocated"); ?
?
free (voutput); ?
free (toutput); ?
free (envelope); ?
free (vfilter); ?
free (tfilter); ?
free (timesp); ?
free (timesp2); ?
free (shootreader2); ?
?
return 0; ?
} ?
(Измененная редакция. Изм. A4:2012.) ?
/***************************************************************/ ?
/*** This program calculates the Fourier coefficients ***/ ?
/*** of load modulated voltage of a PICC according ***/ ?
/*** the ISO/IEC 10373-6 Test methods ***/ ?
/*** The coefficients are calculated at the freguencies: ***/ ?
/*** Carrier: Fcm (=13.5600 for 13.56 MHz) ***/ ?
/*** Upper sideband: Fcm + fs ***/ ?
/*** Lower sideband: Fcm - fs ***/ ?
/*** fs is the subcarrier freguency and its value is: ***/ ?
/*** Fcm/16 for bit rates up to fc/16, Fcm/8 for a bit rate ***/ ?
/*** of fc/8, Fcm/4 for a bit rate of fc/4 or Fcm/2 for a ***/ ?
/*** bit rate of fc/2 ***/ ?
/***************************************************************/ ?
/*** Input: ***/ ?
/*** File in CSV Format containing a table of two ***/ ?
/*** columns (time and test PCD output voltage vd, clause 7)***/ ?
/*** ***/ ?
/*** data format of input-file: ***/ ?
/*** ------------------------- ***/ ?
/*** - one data-point per line: ***/ ?
/*** (time[seconds], sense-coil-voltage[volts]) ***/ ?
/*** - contents in ASCII, no headers ***/ ?
/*** - data-points shall be eguidistant in time ***/ ?
/*** - modulation waveform centered ***/ ?
/*** (max. tolerance: half of subcarrier cycle) ***/ ?
/*** ***/ ?
/*** ***/ ?
/*** example for spreadsheet file (start in next line): ***/ ?
/*** (time) (voltage) ***/ ?
/*** 3.00000e-06,1.00 ***/ ?
/*** 3.00200e-06,1.01 ***/ ?
/*** ..... ***/ ?
/***************************************************************/ ?
/*** RUN: ***/ ?
/*** "exefilename" [filename1[.csv] SubcarrierCode ] ***/ ?
/***************************************************************/ ?
/*** ISO/IEC 10373-6 DFT CALCULATION ***/ ?
/*** Version history: ***/ ?
/*** JUL 2000, version 1.1: original published version ***/ ?
/*** APR 2008, version 2.0: add the Bartlett window ***/ ?
/*** NOV 2008, version 2.1: published version with revision ***/ ?
/*** SEP 2010, version 3.0: support higher subcarrier freq. ***/ ?
/***************************************************************/ ?
?
#include <stdio.h> ?
#include <string.h> ?
#include <stdlib.h> ?
#include <math.h> ?
#define MAX_SAMPLES 50000 ?
#define MAX_POINTS 500 ?
#define MAX_MOYENNE 200 ?
?
double pi; /* pi=3.14.... */ ?
/* Array for time and sense coil voltage vd */ ?
double vtime[MAX_SAMPLES]; /* time array */ ?
double vd[MAX_SAMPLES]; /* Array for different coil voltage */ ?
?
?
/***************************************************************/ ?
/*** Read CSV File Function ***/ ?
/*** ***/ ?
/*** Description: ***/ ?
/*** This function reads the table of time and sense coil ***/ ?
/*** voltage from a File in CSV Format ***/ ?
/*** ***/ ?
/*** Input: filename ***/ ?
/*** ***/ ?
/*** Return: Number of samples (sample Count) ***/ ?
/*** 0 if an error occurred ***/ ?
/*** ***/ ?
/*** Displays Statistics: ***/ ?
/*** ***/ ?
/*** Filename, SampleCount, Sample rate, Max/Min Voltage ***/ ?
/***************************************************************/ ?
?
int readcsv(char* fname) ?
{ ?
double a,b; ?
double max_vd,min_vd; ?
int i; ?
FILE *sample_file; ?
?
/************ Open File ***********************************/ ?
if (!strchr(fname, '.')) strcat(fname, ".csv"); ?
?
if ((sample_file = fopen(fname, "r"))== NULL) ?
{ ?
printf ("Cannot open input file %s.\n",fname); ?
return 0; ?
} ?
/**********************************************************/ ?
/* Read CSV File */ ?
/**********************************************************/ ?
max_vd=-1e-9F; ?
min_vd=-max_vd; ?
i=0; ?
?
while (!feof(sample_file)) ?
{ ?
if (i>=MAX_SAMPLES) ?
{ ?
printf("Warning: File truncated !!!\n"); ?
printf("To much samples in file %s\b\n",fname); ?
break; ?
} ?
fscanf(sample_file,"%Lf,%Lf\n", &a, &b); ?
vtime[i] = a; ?
vd[i] = b; ?
if (vd[i]>max_vd) max_vd=vd[i]; ?
if (vd[i]<min_vd) min_vd=vd[i]; ?
i++; ?
} ?
fclose(sample_file); ?
?
/************ Displays Statistics *************************/ ?
?
printf("\n************************************************\n"); ?
?
printf("\nStatistics: \n"); ?
printf(" Filename : %s\n",fname); ?
printf(" Sample count : %d\n",i); ?
printf(" Sample rate : %1.0f MHz\n",1e-6/(vtime[1]-vtime[0])); ?
printf(" Max(vd) : %4.0f mV\n",max_vd*1000); ?
printf(" Min(vd) : %4.0f mV\n",min_vd*1000); ?
return i; ?
}/**************** End ReadCsv ***************/ ?
?
?
/***************************************************************/ ?
/*** DFT : Discrete Fourier Transformation ***/ ?
/***************************************************************/ ?
/*** Description: ***/ ?
/*** This function calculate the Fourier coefficient ***/ ?
/*** ***/ ?
/*** Input: Number of samples ***/ ?
/*** Carrier divider of the subcarrier ***/ ?
/*** ***/ ?
/*** Global Variables: ***/ ?
/*** ***/ ?
/*** Displays Results: ***/ ?
/*** ***/ ?
/*** Carrier coefficient ***/ ?
/*** Upper sideband coefficient ***/ ?
/*** Lower sideband coefficient ***/ ?
/*** ***/ ?
/***************************************************************/ ?
void dft(int count, int CarrierDivider) ?
{ ?
double c0_real,c0_imag,c0_abs,c0_phase; ?
double c1_real,c1_imag,c1_abs,c1_phase; ?
double c2_real,c2_imag,c2_abs,c2_phase; ?
int N_data,center,start; ?
double w0,wu,wl; ?
double Wb; /* Bartlett window coefficient */ ?
?
int i,k; ?
?
double fc; /* add variable for carrier frequency */ ?
?
fc=13.56e6; ?
?
w0=(double)(fc*2.0)*pi; /* carrier 13.56 MHz */ ?
wu=(double)(1.0+1.0/CarrierDivider)*w0; /* upper sideband 14.41 MHz */ ?
w1=(double)(1.0-1.0/CarrierDivider)*w0; /* lower sideband 12.71 MHz */ ?
c0_real=0; /* real part of the carrier fourier coefficient */ ?
c0_imag=0; /* imag part of the carrier fourier coefficient */ ?
c1_real=0; /* real part of the up. sideband fourier coefficient */ ?
c1_imag=0; /* imag part of the up. sideband fourier coefficient */ ?
c2_real=0; /* real part of the lo. sideband fourier coefficient */ ?
c2_imag=0; /* imag part of the lo. sideband fourier coefficient */ ?
?
center=(count+1)/2; /* center address */ ?
?
/********** signal selection *******************************/ ?
?
/* Number of samples for six subcarrier periods */ ?
?
N_data=(int)(0.5+6.0F*CarrierDivider/(vtime[2]-vtime[1])/fc); ?
/* Note: (vtime[2]-vtime[1]) is the scope sample rate */ ?
?
start=center - (int) N_data / 2; ?
?
/******************* DFT ********************************/ ?
?
for( i=0;i<=N_data-1;i++) ?
{ ?
/* Bartlett window */ ?
if ((N_data & 1) == 0) ?
{ ?
/* N_data is even */ ?
if (i < (int) N_data /2) ?
{ ?
Wb=2.0F*i/(double)(N_data - 1); ?
} ?
else ?
{ ?
Wb=2.0F*(N_data-i-1)/(double)(N_data - 1); ?
} ?
} ?
else ?
{ ?
/*N_data is odd */ ?
if (i < (int) N_data /2) ?
{ ?
Wb=2.0F*i/(double)(N_data - 1); ?
} ?
else ?
{ ?
Wb=2.0F-2.0F*i/(double)(N_data - 1); ?
} ?
} ?
?
k=i+start; ?
?
c0_real=c0_real+vd[k]*(double)cos(w0*vtime[k])*Wb; ?
c0_imag=c0_imag+vd[k]*(double)sin(w0*vtime[k])*Wb; ?
c1_real=c1_real+vd[k]*(double)cos(wu*vtime[k])*Wb; ?
c1_imag=c1_imag+vd[k]*(double)sin(wu*vtime[k])*Wb; ?
c2_real=c2_real+vd[k]*(double)cos(wl*vtime[k])*Wb; ?
c2_imag=c2_imag+vd[k]*(double)sin(wl*vtime[k])*Wb; ?
} ?
?
/******************* DFT scale ***************************/ ?
?
c0_real=4.0F*c0_real/(double) N_data; ?
c0_imag=4.0F*c0_imag/(double) N_data; ?
c1_real=4.0F*c1_real/(double) N_data; ?
c1_imag=4.0F*c1_imag/(double) N_data; ?
c2_real=4.0F*c2_real/(double) N_data; ?
c2_imag=4.0F*c2_imag/(double) N_data; ?
/* Note: 4.0F includes the correction coef. of the bartlett window */ ?
?
/**************** absolute fourier coefficient **********/ ?
c0_abs=(double)sqrt(c0_real*c0_real + c0_imag*c0_imag); ?
c1_abs=(double)sqrt(c1_real*c1_real + c1_imag*c1_imag); ?
c2_abs=(double)sqrt(c2_real*c2_real+c2_imag*c2_imag); ?
?
/************** Phase of fourier coefficient *********/ ?
c0_phase=(double)atan2(c0_imag,c0_real); ?
c1_phase=(double)atan2(c1_imag,c1_real); ?
c2_phase=(double)atan2(c2_imag,c2_real); ?
?
/************** Result Display **************************/ ?
?
printf("\n\nResults: \n"); ?
printf("Subcarrier frequency = fc/%d\n",CarrierDivider); ?
printf("Carrier "); ?
printf("Abs: %7.3fmV ",1000*c0_abs); ?
printf("Phase: %3.0fdeg\n",c0_phase/pi*180); ?
printf("Upper sideband "); ?
printf("Abs: %7.3fmV ",1000*c1_abs); ?
printf("Phase: %3.0fdeg\n",c1_phase/pi*180); ?
printf("Lower sideband "); ?
printf("Abs: %7.3fmV ",1000*c2_abs); ?
printf("Phase: %3.0fdeg\n\n",c2_phase/pi*180); ?
printf("\n***********************************************\n"); ?
return; ?
}/**************** End DFT ***************/ ?
?
?
/***************************************************************/ ?
/*** MAIN Program ***/ ?
/***************************************************************/ ?
int main(unsigned short paramCount,char *paramList[]) ?
{ ?
char fname[256]; ?
unsigned int sample_count; ?
int Dsi; /* Subcarrier frequency code */ ?
int Ds[4]={2, 4, 8, 16}; /* Carrier divider */ ?
?
pi = (double)atan(1.0)*4; /* calculate pi */ ?
?
?
printf("\n***********************************************\n"); ?
printf("\n**** ISO/IEC 10373-6 PICC Test-Program ****\n"); ?
printf("\n**** Version: 3.0 SEPTEMBER 2010 ****\n"); ?
printf("\n**** ****\n"); ?
printf("\n***********************************************\n"); ?
/************* No input Parameter *****************/ ?
if (paramCount==1) ?
{ ?
printf("\nCSV File name :"); ?
scanf("%s",fname); ?
printf("\nSubcarrier frequency code [1=fc/2, 2=fc/4, 3=fc/8 or 4=fc/16)] :");?
scanf("%d",SDsi); ?
} ?
else ?
{ ?
/************* Input Parameter Loop *****************/ ?
strcpy(fname,paramList[1]); ?
if (!strchr(fname, '.')) strcat(fname, ".csv"); ?
if (paramCount>2) ?
{ ?
Dsi=atoi(paramList[2]) ?
} ?
else ?
{ ?
Dsi=4; /*** for backward compatibility ***/ ?
} ?
} ?
if (!strchr(fname, '.')) strcat(fname, ".csv"); ?
if (!(sample_count=readcsv(fname))) return 0; ?
if ((Dsi > 0) & (Dsi < 5)) ?
{ ?
dft(sample_count,Ds[Dsi-1]); ?
} ?
else ?
{ ?
printf("\nError: Subcarrier frequency code shall be 1,2,3,or 4\n"); ?
} ?
?
return 0; ?
}/*********************** End Main ***************************/ ?
(Измененная редакция. Изм. A4:2012.) ?
(обязательное)
G.1 Оборудование для испытаний PICC и дополнительные приспособления
В настоящем разделе определены испытательное оборудование и испытательные схемы для проверки работы PICC на соответствие требованиям ИСО/МЭК 14443-3:2011. Испытательное оборудование включает в себя:
- калибровочную катушку (см. 5.2);
- испытательную установку PCD (см. 5.3);
- цифровой импульсный осциллограф (см. 5.1.1).
Необходимо проследить, чтобы на результаты не влияло радиочастотное действие испытательной схемы.
G.1.1 Эмуляция протокола на I/O
Оборудование для испытаний PICC должно быть способно эмулировать протоколы типа A и типа B, которые необходимы для испытаний PICC.
G.1.2 Генерация временных соотношений знака на I/O в режиме приема
Оборудование для испытаний PICC должно иметь возможность генерировать поток битов на I/O в соответствии с ИСО/МЭК 14443-3:2011. Временные параметры: длина стартового бита, разграничительный интервал, ширина бита, разграничительный интервал запроса, начало ширины кадра, конец ширины кадра - должны быть с изменяемой конфигурацией.
G.1.3 Измерение и контроль радиочастотного протокола на I/O
Оборудование для испытаний PICC должно иметь возможность измерять и контролировать временные соотношения низкого и высокого логических состояний радиочастотной линии входа/приема, связанных с тактовой частотой. Оборудование для испытаний PICC должно быть способно отслеживать поднесущую PICC.
G.1.4 Анализ протоколов
Оборудование для испытаний PICC должно быть способно анализировать поток битов на линии I/O в соответствии с протоколом типа A и типа B, как определено в ИСО/МЭК 14443-3:2011 и ИСО/МЭК 14443-4:2008, и извлекать поток логических данных для дальнейшего анализа.
G.1.5 RFU-поля
Зарезервированные для использования в будущем поля (RFU-поля) следует постоянно контролировать во время испытания, а также всегда проверять на содержание присвоенного значения по умолчанию. Результаты испытания считают неудовлетворительными, а испытуемая PICC должна быть признана не соответствующей требованиям, если в произвольное время RFU-поле не установлено в состояние значения по умолчанию.
Функциональные поля следует постоянно контролировать во время испытания, а также всегда проверять на содержание только стандартных или проприетарных функциональных значений, установленных в стандартах. Результаты испытания считают неудовлетворительными, а испытуемая PICC должна быть признана не соответствующей требованиям, если в произвольное время функциональное поле не было установлено в состояние вышеуказанных значений (и таким образом было установлено в состояние RFU-значения или значения, ограниченного для применения).
G.1.5.2 Измерения временных соотношений
Оборудование для испытаний PICC должно непрерывно контролировать следующие форматы кадра и временные значения.
Для PICC типа A:
- время задержки кадра от PCD к PICC [см. ИСО/МЭК 14443-3:2011 (подпункт 6.2.1.1)];
- форматы кадра по ИСО/МЭК 14443-3:2011 (пункт 6.2.3);
- время ожидания кадра [см. ИСО/МЭК 14443-4:2008 (подраздел 7.2)].
Для PICC типа B:
- знак, формат кадра и временные соотношения по ИСО/МЭК 14443-3:2011 (подраздел 7.1);
- время ожидания кадра [см. ИСО/МЭК 14443-4:2008 (подраздел 7.2)].
Результаты испытания считают неудовлетворительными, а испытуемая карта должна быть признана не соответствующей требованиям, если хотя бы одно из перечисленных ограничений на временные соотношения не выполняется.
G.1.5.3 Протокол измерения временных соотношений
В протоколе заполняют таблицу G.59 для PICC типа A и/или таблицу G.60 для PICC типа B измеренными временными значениями.
G.2 Взаимосвязь методов испытаний и требований базового стандарта
В таблице G.1 перечислены испытания, применимые для PICC типа A.
Таблица G.1
для логической операции протокола PICC типа A
В таблице G.2 перечислены испытания, применимые для PICC типа B.
Таблица G.2
для логической операции протокола PICC типа B
В таблице G.3 перечислены испытания, применимые для PICC типа A и типа B.
Таблица G.3
для логической операции PICC типа A или B
--------------------------------
<1> В ИСО/МЭК 10373-6:2011 указан пункт 7.5.6 без учета изменения нумерации пунктов, введенного изменением A1:2012 ИСО/МЭК 14443-4:2008 в связи с внесением дополнительного пункта 7.5.1.
PICC по ИСО/МЭК 14443-4:2008 также должны соответствовать ИСО/МЭК 14443-3:2011, их подвергают испытаниям на соответствие требованиям обоих указанных стандартов, в зависимости от их типа.
PICC, соответствующие ИСО/МЭК 14443-3:2011, но не отвечающие требованиям ИСО/МЭК 14443-4:2008, находящиеся в состоянии ACTIVE или ACTIVE* (см. G.3.3.7, G.3.3.12 и G.4.4.6) могут отвечать любым кадром (включая режим Mute) на кадры, не соответствующие требованиям ИСО/МЭК 14443-3:2011.
G.3 Метод испытаний для инициализации PICC типа A
G.3.1 Введение
По результатам испытаний, описанных в данном разделе, определяют, соответствует ли PICC типа A требованиям ИСО/МЭК 14443-3:2011 и требованиям к последовательности активации ИСО/МЭК 14443-4:2008 (раздел 5). Если соответствие требованиям ИСО/МЭК 14443-4:2008 не нужно, то испытания, содержащие команды ИСО/МЭК 14443-4, не применяют.
G.3.2.1 Область применения
Цель данного испытания - определить, соответствует ли поведение PICC типа A при получении команды REQA требованиям ИСО/МЭК 14443-3:2011 (раздел 5).
G.3.2.2 Процедура
Выполнить следующие шаги для трех различных значений напряженности рабочего поля: 1,5, 4,5 и 7,5 А/м (среднеквадратичное значение).
a) Поместить PICC в пределах поля и осуществить ее настройку.
b) Переключить радиочастотное рабочее поле в состояние "выключено" на минимальное время для возврата PICC в исходное состояние [см. ИСО/МЭК 14443-3:2011 (подраздел 5.4)].
c) Переключить радиочастотное рабочее поле в состояние "включено".
d) Обеспечить задержку в 5 мс и послать действительный кадр команды REQA.
f) Переключить радиочастотное рабочее поле в состояние "выключено" на минимальное время для возврата PICC в исходное состояние [см. ИСО/МЭК 14443-3:2011 (подраздел 5.4)].
g) Переключить радиочастотное рабочее поле в состояние "включено".
h) Выдержать 5 мс и послать действительный кадр команды REQB (используя модуляцию типа B и кодирование бит).
i) Выдержать 5 мс и послать действительный кадр команды REQA.
G.3.2.3 Протокол испытаний
Используя форму таблицы G.61, заполнить в ней соответствующую строку согласно таблице G.4.
Таблица G.4
G.3.3.1 Область применения
В данных испытаниях проверяют, соответствует ли реализация диаграммы состояний PICC типа A требованиям ИСО/МЭК 14443-3:2011 (подраздел 6.3).
Для исчерпывающего испытания конечного автомата PICC типа A должна быть проверена корректность каждого возможного перехода состояний для каждого состояния. Проверку конкретного состояния, использующего конкретный переход состояний, проводят следующим образом.
Сначала необходимо осуществить сброс PICC и поставить ее в исходное состояние испытания (TIS). Это одно из состояний StateSet, в котором следует проверять переходы (T). Далее следует выполнить переход (T) из TransitionSet. После выполнения перехода состояний следует проверить, находится ли PICC в ожидаемом целевом состоянии (TTS). Трудность заключается в том, как выполнить эту проверку, поскольку непосредственно проконтролировать конечный автомат PICC невозможно. Решение этой проблемы - выполнить некоторые дополнительные переходы состояний и проверить ответ PICC. Переходы для этой цели выбирают таким образом, чтобы состояние можно было определить по ответам PICC с максимально возможной точностью.
Приведение PICC в состояние TIS осуществляют с помощью последовательности команд перехода, определенной в следующей таблице. Общий метод заключается в следующем.
Для того чтобы привести PICC в состояние TIS, находят соответствующую последовательность переходов состояний в таблице G.5. Далее последовательно применяют переходы состояний, описанные в графе "Последовательность переходов состояний", находя соответствующие команды в таблице G.6. Следует всегда проверять содержание и целостность ответа PICC.
Таблица G.5
Таблица G.6
G.3.3.2.2 Функции для проверки действительности целевого состояния испытания TTS
В таблице G.7 описаны переходы состояний, которые используют для проверки, находится ли PICC в состоянии S. Содержание ответа PICC (т.е. ATQA, SAK ...) должно быть тщательно проверено на соответствие ИСО/МЭК 14443-3:2011 и ИСО/МЭК 14443-4:2008. Следует обратить внимание, что эти проверки могут привести к изменению состояния PICC.
Состояния READY(I)/READY*(I) и ACTIVE/ACTIVE* не могут различаться при однократном выполнении испытания. Для того чтобы отличить состояния с "*" от состояний без "*", необходимо выполнить следующие шаги:
a) повторно выполнить испытание без проверки TTS;
b) послать команду REQA. Ответом PICC должен быть Mute;
c) послать команду REQA;
d) если ответом PICC является Mute, то состоянием PICC было состояние с "*";
e) в противном случае PICC была в состоянии без "*".
Состояние HALT не отличается от состояний READY*(I) и ACTIVE* при однократном выполнении испытания. Для того чтобы отличить состояние HALT, необходимо выполнить следующие этапы:
f) повторно выполнить испытание без проверки TTS;
g) послать команду WUPA. Ответом PICC должен быть ATQA.
Таблица G.7
--------------------------------
<1> В ИСО/МЭК 10373-6:2011/Изм. A3:2012 указан пункт 7.5.3 без учета изменения нумерации пунктов, введенного изменением A1:2012 ИСО/МЭК 14443-4:2008 в связи с внесением дополнительного пункта 7.5.1.
G.3.3.3.1 Область применения
Цель данного испытания - определить, соответствует ли поведение PICC типа A в состоянии IDLE требованиям ИСО/МЭК 14443-3:2011 (пункт 6.3.2).
G.3.3.3.2 Процедура
Выполнить следующие шаги для каждой строки таблицы G.8.
a) Привести PICC в состояние IDLE.
b) Выполнить переход состояния путем подачи команды, указанной в графе "Оборудование для испытаний PICC".
c) Проверить, соответствует ли ответ PICC указанному в графе "PICC".
d) Если ответом PICC не является Mute, то проверить, соответствует ли время задержки кадра PICC значению, указанному в графе "FDT".
e) Проверить, находится ли PICC в состоянии TTS.
Таблица G.8
G.3.3.3.3 Протокол испытаний
Используя форму таблицы G.61, заполнить в ней соответствующую строку согласно таблице G.9.
Таблица G.9
типа A в состоянии IDLE
G.3.3.4.1 Область применения
Цель данного испытания - определить, соответствует ли поведение PICC типа A в состоянии READY на каскадном уровне 1 требованиям ИСО/МЭК 14443-3:2011 (пункт 6.3.3).
G.3.3.4.2 Процедура
Выполнить следующие шаги для всех PICC и каждой строки таблицы G.10.
a) Привести PICC в состояние READY(1).
b) Выполнить переход состояния путем подачи команды, указанной в графе "Оборудование для испытаний PICC".
c) Проверить, соответствует ли ответ PICC указанному в графе "PICC".
d) Если ответом PICC не является Mute, то проверить, соответствует ли время задержки кадра PICC значению, указанному в графе "FDT".
e) Проверить, находится ли PICC в состоянии TTS.
Таблица G.10
G.3.3.4.3 Протокол испытаний
Используя форму таблицы G.61, заполнить в ней соответствующую строку согласно таблице G.11.
Таблица G.11
в состоянии READY(1)
G.3.3.5.1 Область применения
Цель данного испытания - определить, соответствует ли поведение PICC типа A в состоянии READY на каскадном уровне 2 требованиям ИСО/МЭК 14443-3:2011 (пункт 6.3.3). Данное испытание предназначено только для PICC с двойным или тройным размером UID.
G.3.3.5.2 Процедура
Следует выполнить следующие шаги для всех PICC с двойным и тройным размером UID и для каждой строки таблицы G.12.
a) Привести PICC в состояние READY(2).
b) Выполнить переход состояния путем подачи команды, указанной в графе "Оборудование для испытаний PICC".
c) Проверить, соответствует ли ответ PICC указанному в графе "PICC".
d) Если ответом PICC не является Mute, то проверить, соответствует ли время задержки кадра PICC значению, указанному в графе "FDT".
e) Проверить, находится ли PICC в состоянии TTS.
Таблица G.12
G.3.3.5.3 Протокол испытаний
Используя форму таблицы G.61, заполнить в ней соответствующую строку согласно таблице G.13.
Таблица G.13
типа A в состоянии READY(2)
G.3.3.6.1 Область применения
Цель данного испытания - определить, соответствует ли поведение PICC типа A в состоянии READY(3) требованиям ИСО/МЭК 14443-3:2011 (пункт 6.3.3). Данное испытание предназначено только для PICC с тройным размером UID.
G.3.3.6.2 Процедура
Следует выполнить следующие шаги для всех PICC с тройным размером UID и для каждой строки таблицы G.14.
a) Привести PICC в состояние READY(3).
b) Выполнить переход состояния путем подачи команды, указанной в графе "Оборудование для испытаний PICC".
c) Проверить, соответствует ли ответ PICC указанному в графе "PICC".
d) Если ответом PICC не является Mute, то проверить, соответствует ли время задержки кадра PICC значению, указанному в графе "FDT".
e) Проверить, находится ли PICC в состоянии TTS.
Таблица G.14
G.3.3.6.3 Протокол испытаний
Используя форму таблицы G.61, заполнить в ней соответствующую строку согласно таблице G.15.
Таблица G.15
в состоянии READY(3)
G.3.3.7.1 Область применения
Цель данного испытания - определить, соответствует ли поведение PICC типа A в состоянии ACTIVE требованиям ИСО/МЭК 14443-3:2011 (пункт 6.3.4).
G.3.3.7.2 Процедура
Следует выполнить следующие шаги для каждой строки таблицы G.16.
a) Привести PICC в состояние ACTIVE.
b) Выполнить переход состояния путем подачи команды, указанной в графе "Оборудование для испытаний PICC".
c) Проверить, соответствует ли ответ PICC указанному в графе "PICC".
d) Если ответом PICC не является Mute, то проверить, соответствует ли время задержки кадра PICC значению, указанному в графе "FDT".
e) Проверить, находится ли PICC в состоянии TTS.
Таблица G.16
G.3.3.7.3 Протокол испытаний
Используя форму таблицы G.61, заполнить в ней соответствующую строку согласно таблице G.17.
Таблица G.17
в состоянии ACTIVE
G.3.3.8.1 Область применения
Цель данного испытания - определить, соответствует ли поведение PICC типа A в состоянии HALT требованиям ИСО/МЭК 14443-3:2011 (пункт 6.3.5).
G.3.3.8.2 Процедура
Следует выполнить следующие шаги для каждой строки таблицы G.18.
a) Привести PICC в состояние HALT.
b) Выполнить переход состояния путем подачи команды, указанной в графе "Оборудование для испытаний PICC".
c) Проверить, соответствует ли ответ PICC указанному в графе "PICC".
d) Если ответом PICC не является Mute, то проверить соответствует ли время задержки кадра PICC значению, указанному в графе "FDT".
e) Проверить, находится ли PICC в состоянии TTS.
Таблица G.18
G.3.3.8.3 Протокол испытаний
Используя форму таблицы G.61, заполнить в ней соответствующую строку согласно таблице G.19.
Таблица G.19
в состоянии HALT
G.3.3.9.1 Область применения
Цель данного испытания - определить, соответствует ли поведение PICC типа A в состоянии READY* на каскадном уровне 1 требованиям ИСО/МЭК 14443-3:2011 (пункт 6.3.6).
G.3.3.9.2 Процедура
Выполнить следующие шаги для каждой строки таблицы G.20.
a) Привести PICC в состояние READY*(1).
b) Выполнить переход состояния путем подачи команды, указанной в графе "Оборудование для испытаний PICC".
c) Проверить, соответствует ли ответ PICC указанному в графе "PICC".
d) Если ответом PICC не является Mute, то проверить, соответствует ли время задержки кадра PICC значению, указанному в графе "FDT".
e) Проверить находится ли PICC в состоянии TTS.
Таблица G.20
G.3.3.9.3 Протокол испытаний
Используя форму таблицы G.61, заполнить в ней соответствующую строку согласно таблице G.21.
Таблица G.21
в состоянии READY*(1)
G.3.3.10.1 Область применения
Цель данного испытания - определить, соответствует ли поведение PICC типа A в состоянии READY* на каскадной уровне 2 требованиям ИСО/МЭК 14443-3:2011 (пункт 6.3.6). Данное испытание предназначено только для PICC с двойным или тройным размером UID.
G.3.3.10.2 Процедура
Следует выполнить следующие шаги для каждой строки таблицы G.22.
a) Привести PICC в состояние READY*(2).
b) Выполнить переход состояния путем подачи команды, указанной в графе "Оборудование для испытаний PICC".
c) Проверить, соответствует ли ответ PICC указанному в графе "PICC".
d) Если ответом PICC не является Mute, то проверить, соответствует ли время задержки кадра PICC значению, указанному в графе "FDT".
e) Проверить, находится ли PICC в состоянии TTS.
Таблица G.22
G.3.3.10.3 Протокол испытаний
Используя форму таблицы G.61, заполнить в ней соответствующую строку согласно таблице G.23.
Таблица G.23
в состоянии READY*(2)
G.3.3.11.1 Область применения
Цель данного испытания - определить, соответствует ли поведение PICC типа A в состоянии READY* на каскадном уровне 3 требованиям ИСО/МЭК 14443-3:2011 (пункт 6.3.6). Данное испытание предназначено только для PICC с тройным размером UID.
G.3.3.11.2 Процедура
Следует выполнить следующие шаги для каждой строки таблицы G.24.
a) Привести PICC в состояние READY*(3).
b) Выполнить переход состояния путем подачи команды, указанной в графе "Оборудование для испытаний PICC".
c) Проверить, соответствует ли ответ PICC указанному в графе "PICC".
d) Если ответом PICC не является Mute, то проверить, соответствует ли время задержки кадра PICC значению, указанному в графе "FDT".
e) Проверить, находится ли PICC в состоянии TTS.
Таблица G.24
G.3.3.11.3 Протокол испытаний
Используя форму таблицы G.61, заполнить в ней соответствующую строку согласно таблице G.25.
Таблица G.25
в состоянии READY*(3)
G.3.3.12.1 Область применения
Цель данного испытания - определить, соответствует ли поведение PICC типа A в состоянии ACTIVE* требованиям ИСО/МЭК 14443-3:2011 (пункт 6.3.7).
G.3.3.12.2 Процедура
Следует выполнить следующие шаги для каждой строки таблицы G.26.
a) Привести PICC в состояние ACTIVE.
b) Выполнить переход состояния путем подачи команды, указанной в графе "Оборудование для испытаний PICC".
c) Проверить, соответствует ли ответ PICC указанному в графе "PICC".
d) Если ответом PICC не является Mute, то проверить, соответствует ли время задержки кадра PICC значению, указанному в графе "FDT".
e) Проверить, находится ли PICC в состоянии TTS.
Таблица G.26
G.3.3.12.3 Протокол испытаний
Используя форму таблицы G.61, заполнить в ней соответствующую строку согласно таблице G.27.
Таблица G.27
в состоянии ACTIVE*
G.3.3.13.1 Область применения
Цель данного испытания - определить, соответствует ли поведение PICC типа A в состоянии PROTOCOL требованиям ИСО/МЭК 14443-4:2008. Данное испытание должно подтвердить, что активированная PICC не отвечает на какую-либо команду антиколлизии или инициализации.
G.3.3.13.2 Процедура
Следует выполнить следующие шаги для каждой строки таблицы G.28.
a) Привести PICC в состояние PROTOCOL.
b) Выполнить переход состояния путем подачи команды, указанной в графе "Оборудование для испытаний PICC".
c) Проверить, соответствует ли ответ PICC указанному в графе "PICC".
d) Если ответом PICC не является Mute, то проверить, соответствует ли время задержки кадра PICC значению, указанному в графе "FDT".
e) Проверить, находится ли PICC в состоянии TTS.
Таблица G.28
G.3.3.13.3 Протокол испытаний
Используя форму таблицы G.61, заполнить в ней соответствующую строку согласно таблице G.29.
Таблица G.29
в состоянии PROTOCOL
G.3.4.1 Область применения
Данное испытание служит для выполнения полного побитового цикла антиколлизии в соответствии с ИСО/МЭК 14443-3:2011 (пункт 6.5.3).
G.3.4.2 Процедура
a) Поместить PICC в область поля.
b) Привести PICC в состояние READY(1).
c) Выполнить AnticollisionA.
d) Привести PICC в состояние READY*(1).
e) Выполнить AnticollisionA.
Псевдокод: Процедура антиколлизии типа A
G.3.4.3 Протокол испытаний
Используя форму таблицы G.61, заполнить в ней соответствующую строку согласно таблице G.30.
Таблица G.30
обработки антиколлизии типа A
Сценарий G.14: RATS после ложного RATS
Сценарий G.14, который был определен в ИСО/МЭК 10373-6:2001/Изм. A1:2007, исключен.
Сценарий G.15: RATS после RATS
Сценарий G.15, который был определен в ИСО/МЭК 10373-6:2001/Изм. A1:2007, исключен.
G.3.6.1 Область применения
Цель данного испытания - определить, соответствует ли выполнение PICC типа A процедуры обработки PPS-запроса требованиям ИСО/МЭК 14443-4:2008 (подпункт 5.6.2.2).
G.3.6.2 Процедура
Следует выполнить следующие шаги для каждого сценария G.16 - G.19, перечисленного в настоящем пункте.
a) Привести PICC в состояние PROTOCOL.
b) Подать команду, указанную в графе "Оборудование для испытаний PICC" в каждом сценарии.
c) Проверить, соответствует ли ответ PICC указанному в графе "PICC".
d) Проверить, находится ли PICC в состоянии PROTOCOL.
Сценарий G.16, который был определен в ИСО/МЭК 10373-6:2001/Изм. A1:2007, исключен.
G.3.6.3 Протокол испытаний
Используя форму таблицы G.61, заполнить в ней соответствующую строку согласно таблице G.31.
Таблица G.31
G.3.7.1 Область применения
Цель данного испытания - определить, принимает ли PICC типа A значение FSD, предложенное RATS, в соответствии с требованиями ИСО/МЭК 14443-4:2008 (подраздел 5.1).
G.3.7.2 Процедура
a) Привести PICC в состояние ACTIVE.
b) Подать команду RATS(0, fsdi) с параметром fsdi как в отдельном испытании.
c) Проверить, что ответом PICC является действительный ATS и что его размер <= FSD.
Примечание - PICC может потребовать дополнительные последовательности, чтобы быть готовой принять TEST_COMMAND2(2).
d) Послать I-блок I(0)0(TEST_COMMAND2(2)).
e) Проверить, что размер ответного I-блока, посланного PICC, <= FSD.
G.3.7.3 Протокол испытаний
Используя форму таблицы G.61, заполнить в ней соответствующую строку согласно таблице G.32.
Таблица G.32
Обработка FSD
G.4 Метод испытаний для инициализации PICC типа B
G.4.1 Введение
По результатам испытаний, описанных в данном разделе, определяют, соответствует ли PICC типа B требованиям ИСО/МЭК 14443-3:2011. Если соответствие требованиям ИСО/МЭК 14443-4:2008 не нужно, то испытания, содержащие команды ИСО/МЭК 14443-4, не применяют.
Если PICC не поддерживает ни REQB/WUPB с N > 1, ни команду Slot-MARKER [см. ИСО/МЭК 14443-3:2011 (пункт 7.6.1)], то все испытания, содержащие эти команды, не применяют.
G.4.2.1 Область применения
Цель данного испытания - определить, соответствует ли поведение PICC типа B при приеме REQB требованиям ИСО/МЭК 14443-3:2011 (раздел 5).
G.4.2.2 Процедура
Выполнить следующие этапы для трех различных значений напряженности рабочего поля: 1,5, 4,5 и 7,5 А/м (среднеквадратичное значение).
a) Поместить PICC в поле и осуществить ее настройку.
b) Переключить радиочастотное рабочее поле в состояние "выключено" на минимальное время для возврата PICC в исходное состояние в соответствии с ИСО/МЭК 14443-3:2011 (подраздел 5.4).
c) Переключить радиочастотное рабочее поле в состояние "включено".
d) Выдержать 5 мс и послать действительный кадр команды REQB(1).
f) Переключить радиочастотное рабочее поле в состояние "выключено" на минимальное время для возврата PICC в исходное состояние в соответствии с ИСО/МЭК 14443-3:2011 (подраздел 5.4).
g) Переключить радиочастотное рабочее поле в состояние "включено".
h) Выдержать 5 мс и послать действительный кадр команды REQA (используя модуляцию типа A).
i) Выдержать 5 мс и послать действительный кадр команды REQB(1).
G.4.2.3 Протокол испытаний
Используя форму таблицы G.62, заполнить в ней соответствующую строку согласно таблице G.33.
Таблица G.33
G.4.3.1 Область применения
Цель данного испытания - определить, соответствует ли поведение PICC типа B при приеме сообщений от PCD требованиям ИСО/МЭК 14443-3:2011 (пункты 7.1.1, 7.1.2, 7.1.4 и 7.1.5).
G.4.3.2 Процедура
Выполнить следующие шаги для каждой строки таблицы G.34.
a) Поместить эталонную PICC в область поля.
b) Установить параметры кадра оборудования для испытаний PICC в соответствии с таблицей G.34.
c) Послать команду REQB.
d) Зафиксировать наличие, содержание и временные соотношения ответа PICC.
e) Проверить, что формат кадра ответа PICC соответствует следующему:
- ответом PICC должен быть действительный ATQB;
- временные значения логического нуля SOF должны быть в промежутке от 10 до 11 etu;
- временные значения логической единицы SOF должны быть в промежутке от 2 до 3 etu;
- временные значения логического нуля EOF должны быть в промежутке от 10 до 11 etu;
- временные значения TR0 должны быть в диапазоне 64/fs <= TR0 <= 256/fs;
- временные значения TR1 должны быть в диапазоне 80/fs <= TR0 <= 200/fs;
- PICC должна отключить поднесущую в промежутке между 0 и 2 etu после EOF.
Таблица G.34
G.4.3.3 Протокол испытаний
Используя форму таблицы G.62, заполнить в ней соответствующую строку согласно таблице G.35.
Таблица G.35
сценария G.22: Прием PICC
Цель данных испытаний - проверить правильность реализации диаграммы состояния PICC типа B, как описано в ИСО/МЭК 14443-3:2011 (подраздел 7.4).
G.4.4.1 Общий принцип испытаний
Процедура аналогична описанной для PICC типа A (см. G.3.3.2).
Приведение PICC в состояние TIS осуществляют с помощью последовательности команд перехода, определенных в таблице G.37. Общий метод заключается в следующем.
Для того чтобы привести PICC в состояние TIS, находят соответствующую последовательность переходов состояний в таблице G.36. Далее последовательно применяют переходы состояний, описанные в графе "Последовательность переходов состояний", находя соответствующие команды в таблице переходов состояний G.37. Следует всегда проверять содержание и целостность ответа PICC.
Таблица G.36
Таблица G.37
G.4.4.1.2 Функции для проверки действительности целевого состояния испытания (TTS)
В таблице G.38 описаны переходы состояний, используемые, чтобы проверить, находится ли PICC в состоянии S. Содержание ответа PICC (т.е. ATQB...) должно быть детально проверено на соответствие ИСО/МЭК 14443-3 и ИСО/МЭК 14443-4.
Примечание - Испытание может вызвать смену состояния PICC.
Таблица G.38
--------------------------------
<1> В ИСО/МЭК 10373-6:2011/Изм. A3:2012 указан пункт 7.5.3 без учета изменения нумерации пунктов, введенного изменением A1:2012 ИСО/МЭК 14443-4:2008 в связи с внесением дополнительного пункта 7.5.1.
G.4.4.2.1 Область применения
Цель данного испытания - определить, соответствует ли поведение PICC типа B в состоянии IDLE требованиям ИСО/МЭК 14443-3:2011 (пункт 7.4.4).
G.4.4.2.2 Процедура
Выполнить следующие шаги для каждой строки таблицы G.39.
a) Привести PICC в состояние IDLE.
b) Выполнить переход состояния путем подачи команды, указанной в графе "Оборудование для испытаний PICC".
c) Проверить, соответствует ли ответ PICC указанному в графе "PICC".
d) Проверить, находится ли PICC в состоянии TTS.
Таблица G.39
G.4.4.2.3 Протокол испытаний
Используя форму таблицы G.62, заполнить в ней соответствующую строку согласно таблице G.40.
Таблица G.40
сценария 23: Поведение PICC типа B в состоянии IDLE
Если PICC не поддерживает ни REQB/WUPB с N > 1, ни команду Slot-MARKER [см. ИСО/МЭК 14443-3:2011 (пункт 7.6.1)], то данный сценарий не следует применять.
G.4.4.3.1 Область применения
Цель данного испытания - определить, соответствует ли поведение PICC типа B в подсостоянии READY-REQUESTED требованиям ИСО/МЭК 14443-3:2011 (пункт 7.4.5).
G.4.4.3.2 Процедура
Выполнить следующие шаги для каждой строки таблицы G.41.
a) Привести PICC в подсостояние READY-REQUESTED.
b) Выполнить переход состояния путем подачи команды, указанной в графе "Оборудование для испытаний PICC".
c) Проверить, соответствует ли ответ PICC указанному в графе "PICC".
d) Проверить, находится ли PICC в состоянии TTS.
Таблица G.41
G.4.4.3.3 Протокол испытаний
Используя форму таблицы G.62, заполнить в ней соответствующую строку согласно таблице G.42.
Таблица G.42
Поведение PICC типа B в подсостоянии READY-REQUESTED
G.4.4.4.1 Область применения
Цель данного испытания - определить, соответствует ли поведение PICC типа B в подсостоянии READY-DECLARED требованиям ИСО/МЭК 14443-3:2011 (пункт 7.4.6).
G.4.4.4.2 Процедура
Выполнить следующие шаги для каждой строки таблицы G.43.
a) Привести PICC в состояние READY-DECLARED.
b) Выполнить переход состояния путем подачи команды, указанной в графе "Оборудование для испытаний PICC".
c) Проверить, соответствует ли ответ PICC указанному в графе "PICC".
d) Проверить, находится ли PICC в состоянии TTS.
Таблица G.43
G.4.4.4.3 Протокол испытаний
Используя форму таблицы G.62, заполнить в ней соответствующую строку согласно таблице G.44.
Таблица G.44
Поведение PICC типа B в подсостоянии READY-DECLARED
G.4.4.5.1 Область применения
Цель данного испытания - определить, соответствует ли поведение PICC типа B в состоянии HALT требованиям ИСО/МЭК 14443-3:2011 (пункт 7.4.8).
G.4.4.5.2 Процедура
Следует выполнить следующие шаги для каждой строки таблицы G.45.
a) Привести PICC в состояние HALT.
b) Выполнить переход состояния путем подачи команды, указанной в графе "Оборудование для испытаний PICC".
c) Проверить, соответствует ли ответ PICC указанному в графе "PICC".
d) Проверить, находится ли PICC в состоянии TTS.
Таблица G.45
G.4.4.5.3 Протокол испытаний
Используя форму таблицы G.62, заполнить в ней соответствующую строку согласно таблице G.46.
Таблица G.46
Поведение PICC типа B в состоянии HALT
G.4.4.6.1 Область применения
Цель данного испытания - определить, соответствует ли поведение PICC типа B в состоянии PROTOCOL требованиям ИСО/МЭК 14443-4:2008. Данное испытание должно подтвердить, что активированная PICC не реагирует на какую-либо команду инициализации.
G.4.4.6.2 Процедура
Следует выполнить следующие шаги для каждой строки таблицы G.47.
a) Привести PICC в состояние PROTOCOL.
b) Выполнить переход состояния путем подачи команды, указанной в графе "Оборудование для испытаний PICC".
c) Проверить, соответствует ли ответ PICC указанному в графе "PICC".
d) Проверить, находится ли PICC в состоянии TTS.
Таблица G.47
G.4.4.6.3 Протокол испытаний
Используя форму таблицы G.62, заполнить в ней соответствующую строку согласно таблице G.48.
Таблица G.48
Поведение PICC типа B в состоянии PROTOCOL
G.4.5.1 Область применения
Цель данного испытания - определить, соответствует ли процедура обработки антиколлизии PICC типа B требованиям ИСО/МЭК 14443-3:2011 (пункт 7.4.1).
Основой этого испытания является процедура AnticollisionB(N, outparam chi2), которая определена в псевдокоде, приведенном ниже. Процедура выполняет 256 команд REQB(N) и последующие команды Slot-MARKER и подсчитывает, сколько раз каждый из N-слотов был выбран PICC. Также процедура проверяет, установила ли PICC соответствие каждого запроса REQB(N) только с одним слотом. Если нет, то испытание возвращает значение FAIL.
Поскольку антиколлизия типа B основана на случайном выборе слотов, то для проверки следует использовать статистические методы. Ввиду свойств всех статистических испытаний данное испытание может показать неудовлетворительный результат даже в том случае, если поведение PICC корректно. Такая ошибка носит название "ошибка I рода" в статистической терминологии. Этой ошибки невозможно полностью избежать. Вместо этого можно контролировать вероятность ее появления с помощью так называемого уровня значимости
Кроме того, PICC должна выбирать каждый из N-слотов с равной вероятностью (т.е. 1/N). Для того чтобы проверить это, необходимо применить статистический
ко всем слотам. Результатом этого теста является значение chi2, которое необходимо сравнить с квантилью G.4.5.2 Процедура
Если один из статистических тестов показывает неудовлетворительный результат на шаге e), то испытательная лаборатория может перезапустить тест для этого параметра N.
Выполнить следующие шаги для каждого значения N = 2, 4, 8, 16.
a) Установить уровень значимости
b) Осуществить сброс PICC.
c) Выполнить AnticollisionB(N, chi2).
d) Если AnticollisionB возвращает FAIL, то испытание не выдержано.
Таблица G.49
Псевдокод: Процедура антиколлизии типа B
G.4.5.3 Протокол испытаний
Используя форму таблицы G.62, заполнить в ней соответствующую строку согласно таблице G.50.
Таблица G.50
Обработка антиколлизии типа B
G.4.6.1 Область применения
Цель данного испытания - определить, соответствует ли поведение PICC типа B в ответ на команду ATTRIB требованиям ИСО/МЭК 14443-3:2011 (подраздел 7.10).
G.4.6.2 Процедура
Выполнить следующие шаги для каждого сценария G.29 и G.30, перечисленного в настоящем пункте.
a) Привести PICC в подсостояние READY-DECLARED.
b) Послать последовательность команд, указанных в графе "Оборудование для испытаний PICC".
c) Проверить, соответствует ли ответ PICC указанному в графе "PICC".
d) Проверить, находится ли PICC в состоянии PROTOCOL.
G.4.6.3 Протокол испытаний
Используя форму таблицы G.62, заполнить в ней соответствующую строку согласно таблице G.51.
Таблица G.51
G.4.7.1 Область применения
Цель данного испытания - определить, принимает ли PICC размер FSD в соответствии с требованиями ИСО/МЭК 14443-3:2011 (пункт 7.10.4).
G.4.7.2 Процедура
a) Привести PICC в подсостояние READY-DECLARED, как описано в G.4.4.1.1.
b) Подать команду ATTRIB(0, fsdi) с параметром fsdi, как в отдельном испытании.
c) Проверить, что ответом PICC является ATA(0).
Примечание - PICC может потребовать дополнительные последовательности, чтобы быть готовой принять TEST_COMMAND2(2).
d) Послать I-блок I(0)0(TEST_COMMAND2(2)).
e) Проверить, что размер ответного I-блока, посланного PICC, <= FSD.
G.4.7.3 Протокол испытаний
Используя форму таблицы G.62, заполнить в ней соответствующую строку согласно таблице G.52.
Таблица G.52
Обработка максимального размера кадра
G.5 Методы испытаний для логических операций PICC типа A или типа B
G.5.1 Введение
Настоящий раздел содержит испытания, в которых проверяют, соответствует ли активированная PICC требованиям ИСО/МЭК 14443-4:2008. Настоящий раздел применим к PICC типа A и типа B.
Активация PICC представляет собой процесс приведения PICC в состояние, в котором возможен обмен блоками протокола, определенными в ИСО/МЭК 14443-4:2008. Данный процесс зависит от типа PICC.
Примечание - PICC может потребовать дополнительные последовательности, чтобы быть готовой принять шаг 1 сценария.
G.5.1.1.1 Активация PICC типа A
a) Привести PICC в состояние ACTIVE, как описано в G.3.3.2.1.
b) Послать RATS(cid, fsdi).
c) Проверить, что ответом PICC является действительный ATS.
G.5.1.1.2 Активация PICC типа B
a) Привести PICC в подсостояние READY-DECLARED, как описано в G.4.4.1.1.
b) Послать ATTRIB(cid, fsdi).
c) Проверить, что ответом PICC является действительный ATA.
G.5.2.1 Область применения
Цель данного испытания - определить, соответствует ли поведение PICC требованиям ИСО/МЭК 14443-4:2008 (раздел 7). Данное испытание использует реализации сценариев протокола по ИСО/МЭК 14443-4:2008 (приложение B).
G.5.2.2 Процедура
Выполнить следующие шаги для каждого сценария G.32 - G.54, перечисленного в настоящем пункте.
a) Активировать PICC, как описано в G.5.1.1, используя CID = 0 и FSDI = 0.
1) послать команду, описанную в графе "Оборудование для испытаний PICC";
2) проверить, что ответ PICC совпадает с указанным в графе "PICC".
c) Завершить действия, указанные в перечислении b).
Примечание - Этот сценарий заменяет прежний сценарий, который был исключен.
Примечание - Этот сценарий заменяет прежний сценарий, который был исключен.
G.5.2.3 Протокол испытаний
Используя форму таблицы G.63, заполнить в ней соответствующую строку согласно таблице G.53.
Таблица G.53
на сценарии по ИСО/МЭК 14443-4
G.5.3.1 Область применения
Цель данного испытания - определить соответствие механизма обнаружения ошибок у PICC требованиям ИСО/МЭК 14443-4:2008 (пункт 7.5.7) <1>.
--------------------------------
<1> В ИСО/МЭК 10373-6:2011 указан пункт 7.5.6 без учета изменения нумерации пунктов, введенного изменением A1:2012 ИСО/МЭК 14443-4:2008 в связи с внесением дополнительного пункта 7.5.1.
G.5.3.2 Процедура
Выполнить следующие шаги для каждого сценария G.55 - G.57, перечисленного в настоящем подразделе.
a) Поместить эталонную PICC в область поля.
b) Активировать PICC, как описано в G.5.1.1, используя CID = 0 и FSDI = 0.
1) послать команду, описанную в графе "Оборудование для испытаний PICC";
2) проверить, что ответ PICC совпадает с указанным в графе "PICC".
d) Завершить действия, указанные в перечислении c).
Примечание - Графа "Комментарий" следующих сценариев ссылается на правила ИСО/МЭК 14443-4:2008 (пункты 7.5.4 - 7.5.7) <2>.
--------------------------------
<2> В ИСО/МЭК 10373-6:2011 указаны пункты 7.5.3 - 7.5.6 без учета изменения нумерации пунктов, введенного изменением A1:2012 ИСО/МЭК 14443-4:2008 в связи с внесением дополнительного пункта 7.5.1.
--------------------------------
<3> В ИСО/МЭК 10373-6:2011 указан подпункт 7.5.6.1 без учета изменения нумерации пунктов, введенного изменением A1:2012 ИСО/МЭК 14443-4:2008 в связи с внесением дополнительного пункта 7.5.1.
--------------------------------
<3> В ИСО/МЭК 10373-6:2011 указан подпункт 7.5.6.1 без учета изменения нумерации пунктов, введенного изменением A1:2012 ИСО/МЭК 14443-4:2008 в связи с внесением дополнительного пункта 7.5.1.
--------------------------------
<3> В ИСО/МЭК 10373-6:2011 указан подпункт 7.5.6.1 без учета изменения нумерации пунктов, введенного изменением A1:2012 ИСО/МЭК 14443-4:2008 в связи с внесением дополнительного пункта 7.5.1.
G.5.3.3 Протокол испытаний
Используя форму таблицы G.63, заполнить в ней соответствующую строку согласно таблице G.54.
Таблица G.54
по обнаружению PICC ошибок
G.5.4.1 Область применения
Цель данного испытания - определить соответствие реакции PICC на CID требованиям ИСО/МЭК 14443-4:2008 (подпункт 7.1.1.2).
G.5.4.2 Процедура
Выполнить следующие шаги для каждого сценария G.58 - G.62 и G.66 <1>, перечисленного в настоящем подразделе. Следует использовать соответствующую таблицу контрольных примеров CID в зависимости от того, поддерживает PICC CID или нет.
--------------------------------
<1> Сценарий G.66 введен изменением A3:2012 ИСО/МЭК 10373-6:2011 далее по тексту, но не предусмотрен в данной ссылке на сценарии.
Для каждой строки в таблицах контрольных примеров CID (см. таблицу G.55 или таблицу G.56) выполнить следующее.
a) Активировать PICC с cidass, указанным в графе "Присвоенный CID".
b) Выполнить обмен блоками, как указано в соответствующем сценарии. Использовать cidcmd, указанный в графе "Командный CID" в таблице контрольных примеров CID.
c) Проверить, совпадает ли ответ PICC с ответом в графе "PICC" в сценарии. Если для PICC указаны два варианта ответа, то уникальный ожидаемый ответ определяют из графы "Ожидаемый ответ PICC" в таблице контрольных примеров CID.
Таблица G.55
CID)
Таблица G.56
не поддерживающих CID)
G.5.4.3 Протокол испытаний
Используя форму таблицы G.63, заполнить в ней соответствующую строку согласно таблице G.57.
Таблица G.57
G.5.5.1 Область применения
Цель данного испытания - определить соответствие реакции PICC на кодирование NAD требованиям ИСО/МЭК 14443-4:2008 (подпункт 7.1.1.3).
G.5.5.2 Процедура
Выполнить следующие шаги для каждого сценария G.63 - G.65, перечисленного в настоящем подразделе.
Активировать PICC, как описано в G.5.1.1, используя CID = 0 и FSDI = 0.
Для каждого шага в сценарии выполнить следующее:
a) подать команду, как описано в графе "Оборудование для испытаний PICC";
b) проверить, совпадает ли ответ PICC с указанным в графе "PICC".
Пусть n - произвольно выбранное значение действительного NAD с b4 и b8, установленными в состояние (0)b.
G.5.5.3 Протокол испытаний
Используя форму таблицы G.63, заполнить в ней соответствующую строку согласно таблице G.58.
Таблица G.58
G.6 Результаты, включаемые в протокол испытаний
Таблица G.59
Примечание - Все временные значения вычисляют для несущей частоты fc = 13,56 МГц и скорости передачи = fc/128 (~106 кбит/с).
Таблица G.60
--------------------------------
<1> Изменением A3:2012 строка N 10 из таблицы G.60 исключена.
(Измененная редакция. Изм. A3:2012.)
Примечание - Все временные значения вычисляют для несущей частоты fc = 13,56 МГц и скорости передачи = fc/128 (~106 кбит/с).
Таблица G.61
Таблица G.62
Таблица G.63
типа A или B
(Введены дополнительно. Изм. A3:2012.)
(обязательное)
В настоящем разделе определены испытательное оборудование и испытательные схемы для проверки работы PCD на соответствие требованиям ИСО/МЭК 14443-3:2011 и ИСО/МЭК 14443-4:2008.
H.1.1 Метод испытаний
Для испытаний протокола по ИСО/МЭК 14443 между испытуемым PCD и LT выбирают абстрактную модель по ИСО/МЭК 9646 и используют метод локального тестирования.
H.1.2 Структура оборудования для испытаний PCD
Оборудование для испытаний PCD состоит из двух частей (см. рисунок H.1):
- верхний тестер (UT) (может быть персональным компьютером с интерфейсом главного компьютера, подходящим для испытуемого PCD);
- нижний тестер (LT).
![]() Испытуемое PCD рассматривают как тестируемую реализацию (IUT).
Если PCD встроено в изделие, то оно включает в себя UT. В таком случае некоторые испытания могут быть не применимы. Кроме того, в случае если в стандарте не определены конкретные требования, то метод испытания будет заключаться только в протоколировании функциональных возможностей.
Компонента LT оборудования для испытаний PCD включает в себя:
- аппаратное обеспечение, эмулирующее PICC, и программные средства, способные эмулировать протоколы типа A и типа B;
- цифровой импульсный осциллограф (см. 5.1.1).
UT и IUT обмениваются информацией с помощью TM-PDU (Test Management PDU). Определение TM-PDU зависит от реализации, его предоставляет изготовитель IUT, и он должен инициировать действия, указанные в таблице H.1.
Таблица H.1
Оборудование для испытаний PCD должно быть способно инициализировать служебную информацию IUT, предоставляемую изготовителем IUT, посредством интерфейса UT и конфигурировать себя для выполнения необходимых процедур, протоколов и анализа посредством интерфейса LT.
H.1.4 Эмуляция протокола на I/O
Оборудование для испытаний PCD должно быть способно посредством интерфейса LT эмулировать протоколы типа A и типа B и приложения PICC, необходимые для исполнения сценария. LT должен быть способен разбивать передаваемые пакеты на цепочки блоков требуемой длины.
Должна быть предусмотрена возможность конфигурировать LT, для того чтобы симулировать различные опции:
- конфигурации NAD и CID;
- размер кадра, скорость передачи или другой параметр, необходимый для реализации методов испытаний.
H.1.5 Генерирование временных соотношений знаков на I/O в режиме передачи
Оборудование для испытаний должно быть способно посредством интерфейса LT генерировать поток битов на I/O в соответствии с ИСО/МЭК 14443-3:2011. Временные параметры: продолжительность стартового бита, дополнительный разграничительный интервал (только для типа B), продолжительность бита, время задержки кадра, ширина начала кадра и ширина конца кадра - должны быть конфигурируемыми. Для реализации испытаний типа ALT должен быть способен симулировать коллизию бит в выбранной(ых) битовой(ых) позиции(ях).
H.1.6 Измерение и контроль радиочастотного протокола на I/O
Оборудование для испытаний PCD должно обеспечивать посредством интерфейса LT возможность измерять и контролировать временные соотношения низкого и высокого логических состояний, передаваемых PCD.
H.1.7 Анализ протокола
Оборудование для испытаний PCD должно быть способно анализировать поток битов на I/O посредством интерфейса LT в соответствии с протоколами типа A и типа B по ИСО/МЭК 14443-3:2011 и ИСО/МЭК 14443-4:2008 и извлекать поток логических данных для дальнейшего анализа протокола.
Активировать LT путем выполнения следующей последовательности.
a) Конфигурировать LT для эмуляции протокола типа A или типа B.
b) UT должен послать PCD TM-PDU INITIALIZE_PCD_TEST_MODE.
c) UT должен послать PCD TM-PDU INITIATE_ANTICOLLISION.
Активировать LT путем выполнения следующей последовательности.
a) Конфигурировать LT для эмуляции протокола типа A.
b) UT должен послать PCD TM-PDU INITIALIZE_PCD_TEST_MODE.
c) UT должен послать PCD TM-PDU INITIATE_ANTICOLLISION. PCD должно применить последовательность антиколлизии по ИСО/МЭК 14443-3:2011 (раздел 6) (запрос, цикл антиколлизии и выбор). PCD должно применить последовательность активации протокола по ИСО/МЭК 14443-4:2008 (раздел 5).
d) PCD сообщает UT результат процедуры активации.
Активировать LT путем выполнения следующей последовательности.
a) Конфигурировать LT для эмуляции протокола типа B.
b) UT должен послать PCD TM-PDU INITIALIZE_PCD_TEST_MODE.
c) UT должен послать PCD TM-PDU INITIATE_ANTICOLLISION. PCD должно применить последовательность активации протокола по ИСО/МЭК 14443-3:2011 (раздел 7).
d) PCD сообщает UT результат процедуры активации.
H.1.9 Сценарий
H.1.9.1 Описание
Для испытаний PCD, как установлено в настоящем стандарте, необходимо использовать сценарий. Этот сценарий представляет собой типовую коммуникацию для протокола и приложения, зависящую от их функциональности, обусловленной предполагаемым применением PCD и реализованной в нем.
Типовой сценарий представляет собой набор командных TM-PDU, определенных в H.1.3.
Сценарий должен быть определен исполнителем этих испытаний и отражен в протоколе испытаний наряду с результатами испытаний. Сценарий должен охватывать репрезентативное подмножество или, если целесообразно, полный набор функций PCD, предполагаемых к использованию при нормальном применении PCD.
Примечание - Исполнителю испытаний может потребоваться информация о реализованном протоколе и функциональности.
Посылаемый UT_APDU может представлять собой одну из следующих команд:
- UT_TEST_COMMAND1, выбираемую оборудованием для испытаний PCD и указывающую инструкцию ИСО, используемую как инструкция по умолчанию для сценариев, не требующих сцепления от PCD (в случае если PCD решает все-таки применить сцепление, то сценарий должен быть адаптирован соответствующим образом испытательной лабораторией);
- UT_TEST_COMMAND2, выбираемую оборудованием для испытаний PCD и указывающую инструкцию ИСО, используемую как инструкция по умолчанию для сценариев со сцеплением, обеспечиваемым PCD.
H.1.9.2 Пример сценария
Типовой сценарий:
INITIALIZE_PCD_TEST_MODE
INITIATE_ANTICOLLISION
SEND_UT_APDU (UT_TEST_COMMAND1)
SEND_UT_APDU (UT_TEST_COMMAND2)
... .
H.1.10 Поведение UT, LT и PCD
В следующих перечислениях обобщенно изложено поведение UT, LT и PCD.
a) UT запускает процедуру активации по H.1.8.
b) Если процедура активации прошла с ошибкой, то PCD переходит к обработке исключительной ситуации. Обработка этой исключительной ситуации может включать в себя передачу UT сообщения об ошибке.
c) В случае методов испытания антиколлизии оборудование для испытаний PCD завершает испытание на этом шаге. Для методов испытания протокола UT переходит к следующему шагу.
d) UT посылает PCD первую команду UT_APDU.
e) PCD должно передать LT эту команду (UT_APDU), используя TB-PDU. PCD разделяет текущую UT_APDU на соответствующие TB-PDU (I-блоки), посылает первый I-блок LT и ожидает ответный блок. PCD управляет коммуникационными блоками в соответствии с ИСО/МЭК 14443-4:2008.
f) LT принимает командный UT_APDU. LT посылает PCD ответный UT_APDU. LT управляет коммуникационными блоками (TB-PDU) в соответствии с ИСО/МЭК 14443-4:2008 (LT может использовать механизм сцепления в любое время, даже если это не предписано максимальным размером кадра PCD или PICC). PCD должен передать ответный UT_APDU, полученный от LT, назад UT.
g) Если выполнение команды прервалось на уровне протокола (т.е. ошибка обнаружена PCD), то PCD переходит к обработке исключительной ситуации. Обработка исключительной ситуации может включать в себя передачу UT сообщения об ошибке.
h) если выполнение команды прошло успешно, то PCD передает сообщение UT о положительном результате. В этом случае, если сценарий определяет посылку LT дополнительного UT_APDU, то UT посылает PCD следующий UT_APDU. Этот цикл продолжается, пока не будет послан последний UT_APDU.
H.1.11 Взаимосвязь методов испытаний и требований базового стандарта
Все испытания, указанные в таблицах H.2, H.3 и H.4, должны быть выполнены, а их результаты отражены в соответствующих таблицах по H.6.
Таблица H.2
Таблица H.3
Таблица H.4
--------------------------------
<1> В ИСО/МЭК 10373-6:2011 указан пункт 7.5.6 без учета изменения нумерации пунктов, введенного изменением A1:2012 ИСО/МЭК 14443-4:2008 в связи с внесением дополнительного пункта 7.5.1.
H.2 Методы испытаний для типа A
Цель данного испытания - определить время между кадром PICC и следующим кадром PCD.
H.2.1.1 Оборудование
См. H.1.
H.2.1.2 Процедура
Поместить LT в рабочую область PCD.
Во время следующей процедуры радиочастотные данные входа/приема должны быть непрерывно контролируемы и проверяемы на соответствие ИСО/МЭК 14443-2:2010. Все переходы сигнала (уровень и временные соотношения), а также логическое содержание коммуникации должны быть записаны.
Использовать следующую последовательность.
a) UT выполняет процедуру активации в соответствии с H.1.8.1.
b) LT ожидает, пока PCD пошлет ему действительный кадр команды REQA/WUPA.
c) LT отвечает действительным ATQA.
d) LT ожидает, пока PCD пошлет ему действительную команду антиколлизии в соответствии с ИСО/МЭК 14443-3:2011 (рисунок 7).
e) Измерить время между последней модуляцией, переданной LT, и первой паузой, переданной PCD [см. ИСО/МЭК 14443-3:2011, (подпункт 6.2.1.2)].
H.2.1.3 Протокол испытаний
В протокол испытаний включить запись сигнала. Используя форму таблицы H.21, заполнить в ней строку 1 измеренным значением времени задержки кадра. Используя форму таблицы H.23, заполнить в ней соответствующую строку.
Цель данного испытания - определить разграничительный интервал запроса двух последовательных команд REQA/WUPA. Данное испытание относится к PCD, которые посылают последовательно REQA/WUPA.
H.2.2.1 Оборудование
См. H.1.
H.2.2.2 Процедура
Поместить LT в рабочую область PCD.
Во время следующей процедуры радиочастотные данные входа/приема должны быть непрерывно контролируемы и проверяемы на соответствие ИСО/МЭК 14443-2:2010. Все переходы сигнала (уровень и временные соотношения), а также логическое содержание коммуникации должны быть записаны.
Использовать следующую последовательность.
a) UT выполняет процедуру активации в соответствии с H.1.8.1.
b) LT ожидает, пока PCD пошлет ему действительный кадр команды REQA/WUPA. LT остается в состоянии Mute.
c) LT ожидает, пока PCD пошлет ему действительный кадр команды REQA/WUPA. LT остается в состоянии Mute.
d) Измерить время между стартовыми битами двух последовательных REQA/WUPA [см. ИСО/МЭК 14443-3:2011 (пункт 6.2.2)].
H.2.2.3 Протокол испытаний
В протокол испытаний включить запись сигнала. Используя форму таблицы H.21, заполнить в ней строку 2 измеренным значением разграничительного интервала запроса. Используя форму таблицы H.23, заполнить в ней соответствующую строку.
Цель данного испытания - определить наличие обработки коллизии бит со стороны PCD во время ATQA.
H.2.3.1 Оборудование
См. H.1.
H.2.3.2 Процедура
Поместить LT в рабочую область PCD и записать наличие и содержание команд PCD.
Использовать следующую последовательность.
a) UT выполняет процедуру активации в соответствии с H.1.8.1.
b) LT ожидает, пока PCD пошлет ему действительный кадр команды REQA/WUPA.
c) Поддержать LT, чтобы получить ответ ATQA, используя симуляцию коллизии бит на бите N (N от 1 до 16). Коллизия на бите вызывает также коллизию в соответственном бите четности.
H.2.3.3 Протокол испытаний
Используя форму таблицы H.23, заполнить в ней соответствующую строку согласно таблице H.5.
Таблица H.5
коллизии бит во время ATQA
Цель данного испытания - определить соответствие обработки цикла антиколлизии бит требованиям ИСО/МЭК 14443-3:2011 (пункт 6.5.3).
H.2.4.1 Оборудование
См. H.1.
H.2.4.2 Процедура
Поместить LT в рабочую область PCD и записать наличие и содержание команд PCD.
H.2.4.2.1 Процедура 1 (одиночный размер UID)
Использовать следующую последовательность.
a) UT выполняет процедуру активации в соответствии с H.1.8.1.
b) LT ожидает, пока PCD пошлет ему действительный кадр команды REQA/WUPA.
c) LT отвечает ATQA, указывающим на биткадровую антиколлизию и размер UID: одиночный [биты b8 и b7 равны (00)b].
d) PCD должно послать команду ANTICOLLISION со значением '93 20' (каскадный уровень 1).
e) LT отвечает UID CL1(uid0 uid1 uid2 uid3 BCC).
f) PCD должно послать команду SELECT со значением '93 70' uid0 uid1 uid2 uid3 BCC CRC_A.
g) LT отвечает SAK [каскадный бит освобожден, b3 = (0)b], указывая, что UID полный.
H.2.4.2.2 Процедура 2 (двойной размер UID)
Использовать следующую последовательность.
a) UT выполняет процедуру активации в соответствии с H.1.8.1.
b) LT ожидает, пока PCD пошлет ему действительный кадр команды REQA/WUPA.
c) LT отвечает ATQA, указывающим на биткадровую антиколлизию и размер UID: двойной [биты b8 и b7 равны (01)b].
d) PCD должно послать команду ANTICOLLISION со значением '93 20' (каскадный уровень 1).
e) LT отвечает UID CL1 ('88' uid0 uid1 uid2 BCC).
f) PCD должно послать команду SELECT со значением '93 70 88' uid0 uid1 uid2 BCC CRC_A.
g) LT отвечает SAK [каскадный бит установлен, b3 = (1)b].
h) PCD должно увеличить каскадный уровень и послать команду ANTICOLLISION со значением '95 20' (каскадный уровень 2).
i) LT отвечает UID CL2 (uid3 uid4 uid5 uid6 BCC).
j) PCD должно послать команду SELECT со значением '95 70' uid3 uid4 uid5 uid6 BCC CRC_A.
k) LT отвечает SAK [каскадный бит освобожден, b3 = (0)b], указывая, что UID полный.
H.2.4.2.3 Процедура 3 (тройной размер UID)
Использовать следующую последовательность.
a) UT выполняет процедуру активации в соответствии с H.1.8.1.
b) LT ожидает, пока PCD пошлет ему действительный кадр команды REQA/WUPA.
c) LT отвечает ATQA, указывающим на биткадровую антиколлизию и размер UID: тройной [биты b8 и b7 равны (10)b].
d) PCD должно послать команду ANTICOLLISION со значением '93 20' (каскадный уровень 1).
e) LT отвечает UID CL1 ('88' uid0 uid1 uid2 BCC).
f) PCD должно послать команду SELECT со значением '93 70 88' uid0 uid1 uid2 BCC CRC_A.
g) LT отвечает SAK [каскадный бит установлен, b3 = (1)b].
h) PCD должно увеличить каскадный уровень и послать команду ANTICOLLISION со значением '95 20' (каскадный уровень 2).
i) LT отвечает UID CL2 ('88' uid3 uid4 uid5 BCC).
j) PCD должно послать команду SELECT со значением '95 70 88' uid3 uid4 uid5 BCC CRC_A.
k) LT отвечает SAK [каскадный бит установлен, b3 = (1)b].
l) PCD должно увеличить каскадный уровень и послать команду ANTICOLLISION со значением '97 20' (каскадный уровень 3).
m) LT отвечает UID CL3 (uid6 uid7 uid8 uid9 BCC).
n) PCD должно послать команду SELECT со значением '97 70' uid6 uid7 uid8 uid9 BCC CRC_A.
o) LT отвечает SAK [каскадный бит освобожден, b3 = (0)b], указывая, что UID полный.
H.2.4.2.4 Процедура 4 (полная побитовая антиколлизия, одиночный размер UID)
Использовать следующую последовательность.
a) UT выполняет процедуру активации в соответствии с H.1.8.1.
b) LT ожидает, пока PCD пошлет ему действительный кадр команды REQA или WUPA.
c) LT отвечает ATQA, указывающим на биткадровую антиколлизию и размер UID: одиночный [биты b8 и b7 равны (00)b].
d) PCD должно послать команду ANTICOLLISION со значением '93 20'.
e) LT отвечает потоком из 40 бит путем эмуляции коллизии на каждом бите, включая биты четности.
g) PCD должно послать команду ANTICOLLISION со значением '93' NVB UIDTX1[[1..k]], где UIDTX1[[1..k-1]] либо пустое (т.е. k = 1), либо значение уже известно PCD и UIDTX1[[k]] представляет собой произвольный бит, выбранный PCD.
h) LT отвечает потоком 40 минус k бит путем эмуляции коллизии на каждом бите, включая биты четности.
i) PCD может дополнительно использовать команду ANTICOLLISION: '93 60' UIDTX1[[1..32]]. В этом случае LT отвечает BCC.
Примечание - Дополнительная команда ANTICOLLISION не изменяет номер фазы.
j) PCD должно послать команду SELECT со значением '93 70' UIDTX1[[1..32]] BCC CRC_A с BCC, вычисленным PCD, если оно не использовало дополнительный шаг i).
k) LT отвечает SAK [каскадный бит освобожден, b3 = (0)b], указывая, что UID полный.
H.2.4.3 Протокол испытаний
Используя форму таблицы H.23, заполнить в ней соответствующую строку согласно таблице H.6.
Таблица H.6
обработки цикла антиколлизии
Цель данного испытания - определить соответствие обработки RATS и ATS со стороны PCD требованиям ИСО/МЭК 14443-4:2008 (подпункт 5.6.1.1).
H.2.5.1 Оборудование
См. H.1.
H.2.5.2 Процедура
Поместить LT в рабочую область PCD и записать наличие и содержание команд PCD.
H.2.5.2.1 Процедура 1
Использовать следующую последовательность.
a) UT выполняет процедуру активации в соответствии с H.1.8.1.
b) LT отвечает сообщениями, относящимися к антиколлизии, и ожидает, пока PCD пошлет действительный кадр команды RATS.
c) LT не реагирует на RATS (Mute).
d) PCD может послать действительный кадр команды RATS.
e) Если PCD посылает вторую RATS, то LT не реагирует на RATS (Mute).
f) PCD должно начать последовательность деактивации, определенную в ИСО/МЭК 14443-4:2008 (раздел 8).
H.2.5.2.2 Процедура 2
Использовать следующую последовательность.
a) UT выполняет процедуру активации в соответствии с H.1.8.1.
b) LT отвечает сообщениями, относящимися к антиколлизии, и ожидает, пока PCD пошлет действительный кадр команды RATS.
c) LT отвечает действительным ATS без байта TA.
d) PCD должно вернуть UT результирующий код его действия (в соответствии с таблицей H.1).
e) UT посылает PCD SEND_UT_APDU(UT_TEST_COMMAND1).
f) PCD должно послать LT какой-нибудь I-блок (включая пустой), возможно после контрольных последовательностей наличия PICC.
H.2.5.2.3 Процедура 3
В случае если PCD не использует необязательную повторную передачу RATS в соответствии в ИСО/МЭК 14443-4:2008 (подпункт 5.6.1.1), то данную процедуру пропустить.
В случае если PCD использует необязательную повторную передачу RATS в соответствии в ИСО/МЭК 14443-4:2008 (подпункт 5.6.1.1), то использовать следующую последовательность.
a) UT выполняет процедуру активации в соответствии с H.1.8.1.
b) LT отвечает сообщениями, относящимися к антиколлизии, и ожидает, пока PCD пошлет действительный кадр команды RATS.
c) Если PCD передает RATS, то LT не реагирует на RATS (Mute).
d) Если PCD повторно передает RATS, то LT отвечает действительным ATS.
e) PCD должно послать LT какой-либо I-блок (включая пустой), возможно после контрольных последовательностей наличия PICC или PPS-запроса.
H.2.5.3 Протокол испытаний
Используя форму таблицы H.23, заполнить в ней соответствующую строку согласно таблице H.7.
Таблица H.7
Цель данного испытания - определить соответствие обработки PPS-запроса требованиям ИСО/МЭК 14443-4:2008 (подпункт 5.6.2.1). Данное испытание применимо только к PCD, которое использует механизм выбора протокола и параметров как часть последовательности активации PICC. В случае если PCD не использует механизм PPS, то в графе протокола испытаний указывают N/A.
H.2.6.1 Оборудование
См. H.1.
Использовать следующую последовательность для приведения PCD в состояние, необходимое для данного испытания.
a) Поместить LT в рабочую область PCD и записать наличие и содержание команд PCD.
b) UT выполняет процедуру активации в соответствии с H.1.8.1.
c) LT отвечает сообщениями, относящимися к антиколлизии, и ожидает, пока PCD пошлет RATS.
d) LT отвечает ATS (с действительным TA<>'00', указывающим, что поддерживаются более высокие скорости передачи, и поэтому PICC поддерживает PPS, и таким образом PCD может выполнять PPS-последовательность).
H.2.6.2.1 Процедура 1
Использовать следующую последовательность сразу после процедуры по H.2.6.2.
a) LT ожидает, пока PCD пошлет ему действительный PPS-запрос. Следует убедиться, что стартовый байт PPSS, Parameter 0 и Parameter 1 не содержат RFU-значения.
Примечание - Необязательно посылать PPS-запрос.
b) LT отвечает PPS-ответом.
c) UT посылает PCD SEND_UT_APDU(UT_TEST_COMMAND1).
d) PCD должно передать I-блок, используя выбранные параметры, возможно после контрольных последовательностей наличия PICC.
H.2.6.2.2 Процедура 2
Использовать следующую последовательность сразу после процедуры по H.2.6.2.
a) LT ожидает, пока PCD пошлет ему действительный PPS-запрос.
b) LT отвечает ошибочным PPS-ответом (использовать ошибочный CRC_A).
c) PCD может повторно передать действительный PPS-запрос или продолжить операцию (например, послать I-блок), используя в обоих случаях скорость передачи по умолчанию.
H.2.6.3 Протокол испытаний
Используя форму таблицы H.23, заполнить в ней соответствующую строку согласно таблице H.8.
Таблица H.8
PPS-запроса и PPS-ответа
H.2.7.1 Оборудование
См. H.1.
H.2.7.2 Процедура
Поместить LT в рабочую область PCD и записать наличие и содержание команд PCD.
Использовать следующую последовательность.
a) UT выполняет процедуру активации в соответствии с H.1.8.1.
b) LT отвечает сообщениями, относящимися к антиколлизии, и ожидает, пока PCD пошлет действительный кадр команды RATS.
c) LT отвечает действительным ATS. Для цели данного испытания LT возвращает байт формата T0, равный '70' [см. ИСО/МЭК 14443-4:2008 (пункт 5.2.3)]. В случае PPS-запроса LT ответит на него прежде, чем начнется следующий шаг: максимальный размер кадра, допускаемый LT, - в соответствии с FSCI.
d) UT посылает PCD SEND_UT_APDU(UT_TEST_COMMAND2), где длина данных должна быть больше максимального размера кадра, допускаемого LT.
e) PCD должно послать следующий I(1)0 блок максимальной длиной в соответствии с FSCI.
H.2.7.3 Протокол испытаний
Используя форму таблицы H.23, заполнить в ней соответствующую строку согласно таблице H.9.
Таблица H.9
механизма выбора размера кадра
Цель данного испытания - определить соответствие временных соотношений передачи PCD требованиям ИСО/МЭК 14443-4:2008 (пункт 5.2.5).
Данное испытание выполняют как минимум при SFGI, установленном в состояние значений 0, 1 и 14.
H.2.8.1 Оборудование
См. H.1.
H.2.8.2 Процедура
Поместить LT в рабочую область PCD и записать наличие и содержание команд PCD.
Во время следующей процедуры радиочастотные данные входа/приема должны быть непрерывно контролируемы и проверяемы на соответствие ИСО/МЭК 14443-2:2010. Все переходы сигнала (уровень и временные соотношения), а также логическое содержание коммуникации должны быть записаны.
Использовать следующую последовательность.
a) UT выполняет процедуру активации в соответствии с H.1.8.1.
b) LT отвечает сообщениями, относящимися к антиколлизии, и ожидает, пока PCD пошлет действительный кадр команды RATS.
c) LT отвечает действительным ATS. Для цели данного испытания LT возвращает байт интерфейса TB(1), равный '0E' [см. ИСО/МЭК 14443-4:2008 (пункт 5.2.5)]. В случае PPS-запроса LT ответит на него прежде, чем начнется следующий шаг.
Значение '0E' = (00001110)b означает: минимальное значение задержки кадра, допускаемое LT, составляет (256 x 16/fc) x 214 (~4949 мс).
d) UT посылает PCD SEND_UT_APDU(UT_TEST_COMMAND1).
e) PCD должно послать следующий I(0 или 1)0 блок после минимальной задержки 4949 мс.
H.2.8.3 Протокол испытаний
Используя форму таблицы H.23, заполнить в ней соответствующую строку согласно таблице H.10.
Таблица H.10
разграничительного интервала кадра при запуске
Цель данного испытания - определить соответствие обработки CID требованиям ИСО/МЭК 14443-4:2008 (пункт 5.6.3). Данное испытание проводят для CID, как минимум установленного в состояние значений 0, 1 и 14, если CID может быть выбран UT. В противном случае должен быть использован только CID, выбранный PCD.
H.2.9.1 Оборудование
См. H.1.
H.2.9.2 Процедура
Использовать следующие шаги a) - c) для приведения PCD в состояние, необходимое для данного испытания.
b) UT выполняет процедуру активации в соответствии с H.1.8.1.
c) LT отвечает сообщениями, относящимися к антиколлизии, и ожидает, пока PCD пошлет RATS. LT отвечает ATS.
Для каждого испытания из сценария H.12, если его поддерживает PCD, использовать следующую последовательность шагов d) - h).
e) LT ожидает, пока PCD применит команду, описанную в графе "PCD".
f) LT отвечает, как описано в графе "LT".
g) UT посылает PCD SEND_UT_APDU(UT_TEST_COMMAND1).
h) PCD должно послать LT I-блок, применяя условие, описанное в графе "PCD".
H.2.9.3 Протокол испытаний
Используя форму таблицы H.23, заполнить в ней соответствующую строку согласно таблице H.11.
Таблица H.11
во время активации со стороны PCD
H.3 Методы испытаний для типа B
Цель данного испытания - определить соответствие временных соотношений передачи PCD требованиям ИСО/МЭК 14443-3:2011 (подраздел 7.1).
H.3.1.1 Оборудование
См. H.1.
H.3.1.2 Процедура
Поместить LT в область рабочего поля PCD.
Во время следующей процедуры радиочастотные данные входа/приема должны быть непрерывно контролируемы и проверяемы на соответствие ИСО/МЭК 14443-2:2010. Все переходы сигнала (уровень и временные соотношения), а также логическое содержание коммуникации должны быть записаны.
Использовать следующую последовательность.
a) UT выполняет процедуру активации в соответствии с H.1.8.1.
b) Анализировать временные границы бит в пределах знака, посылаемого PCD [см. ИСО/МЭК 14443-3:2011 (пункт 7.1.1)].
c) Анализировать дополнительный разграничительный интервал (EGT) между двумя последовательными знаками, посланными PCD [см. ИСО/МЭК 14443-3:2011 (пункт 7.1.2)].
d) Анализировать временные соотношения SOF, посылаемого PCD [см. ИСО/МЭК 14443-3:2011 (пункт 7.1.4)].
e) Анализировать временные соотношения EOF, посылаемого PCD [см. ИСО/МЭК 14443-3:2011, (пункт 7.1.5)].
f) Анализировать временные соотношения перед SOF, посылаемым PCD [см. ИСО/МЭК 14443-3:2011 (пункт 7.1.7)].
H.3.1.3 Протокол испытаний
В протокол испытаний включить запись сигнала. Используя форму таблицы H.22, заполнить ее значениями. Измеренными на шагах b) - f). Используя форму таблицы H.24, заполнить в ней соответствующую строку.
Цель данного испытания - анализ механизма выбора размера кадра на соответствие требованиям ИСО/МЭК 14443-3:2011 (подраздел 7.9).
H.3.2.1 Оборудование
См. H.1.
H.3.2.2 Процедура
Поместить LT в рабочую область PCD и записать наличие и содержание команд PCD.
Использовать следующую последовательность.
a) UT выполняет процедуру активации в соответствии с H.1.8.1.
b) LT ожидает, пока PCD пошлет ему действительный кадр команды REQB/WUPB.
c) LT отвечает ATQB. Принимают, что PUPI для LT равен '12 23 34 45' и LT поддерживает CID. Для цели данного испытания LT возвращает второй информационный байт протокола, равный '01' [см. ИСО/МЭК 14443-3:2011 (пункт 7.9.4)], который означает, что максимальный размер кадра, поддерживаемый LT, - 16 байтов, и LT соответствует ИСО/МЭК 14443-4:2008.
d) PCD должно послать действительный кадр команды ATTRIB.
e) LT посылает ответ на команду ATTRIB.
f) PCD должно вернуть UT результирующий код его действия в соответствии с таблицей H.1.
g) UT посылает PCD SEND_UT_APDU(UT_TEST_COMMAND2).
h) PCD должно послать I(1)0 блок максимальной длиной 16 байтов, как показано в графе "PCD" сценария H.13.
H.3.2.3 Протокол испытаний
Используя форму таблицы H.24, заполнить в ней соответствующую строку согласно таблице H.12.
Таблица H.12
механизма выбора размера кадра
--------------------------------
<1> В ИСО/МЭК 10373-6:2011 значение 'C' не указано. Здесь указано для согласования с измененной редакцией второго абзаца подраздела H.3.2.
Цель данного испытания - определить соответствие обработки CID требованиям ИСО/МЭК 14443-3:2011.
Данное испытание выполняют для CID, как минимум установленного в состояние значений 0, 1 и 14, если CID может быть выбран UT. В противном случае используют только CID, выбранный PCD.
H.3.3.1 Оборудование
См. H.1.
H.3.3.2 Процедура
Поместить LT в рабочую область PCD и записать наличие и содержание команд PCD.
H.3.3.2.1 Процедура 1
Использовать следующую последовательность.
a) UT выполняет процедуру активации в соответствии с H.1.8.1.
b) LT ожидает, пока PCD пошлет ему команду REQB/WUPB.
c) LT посылает ATQB с битами (b2, b1) Frame Option, равными (00)b. Это означает: CID и NAD не поддерживаются.
d) LT ожидает, пока PCD пошлет ему команду ATTRIB. PCD должно послать действительный кадр команды ATTRIB с байтом Param 4, равным 0.
e) LT посылает ответ на команду ATTRIB со значением CID, равным 0.
f) PCD должно вернуть UT результирующий код его действия в соответствии с таблицей H.1.
g) UT посылает PCD SEND_UT_APDU(UT_TEST_COMMAND1).
h) PCD должно послать следующий I(0 или 1)0 блок без NAD и CID.
H.3.3.2.2 Процедура 2
Использовать следующую последовательность.
a) UT выполняет процедуру активации в соответствии с H.1.8.1.
b) LT ожидает, пока PCD пошлет ему команду REQB/WUPB.
c) LT посылает ATQB с битами (b2, b1) Frame Option, равными (01)b. Это означает: CID поддерживается, а NAD не поддерживается.
d) LT ожидает, пока PCD пошлет ему команду ATTRIB. PCD должно послать действительный кадр команды ATTRIB, используя байт Param 4, равный '0X' (CID = X в диапазоне от 0 до 14).
e) LT посылает ответ на команду ATTRIB со значением CID, присвоенным PCD на шаге d), в байте Param 4.
f) PCD должно вернуть UT результирующий код его действия в соответствии с таблицей H.1.
g) UT посылает PCD SEND_UT_APDU(UT_TEST_COMMAND1).
h) PCD должно послать следующий I(0 или 1)0 блок, используя значение CID, присвоенное PCD на шаге d), или, на выбор, не используя CID, если CID = 0. PCD не должно использовать NAD в этом I(0 или 1)0 блоке.
H.3.3.3 Протокол испытаний
Используя форму таблицы H.24, заполнить в ней соответствующую строку согласно таблице H.13.
Таблица H.13
во время активации со стороны PCD
H.4 Метод испытания для логических операций PCD
Все методы, описанные в настоящем разделе, за исключением H.4.1, должны быть применены дважды - один раз для сигнального интерфейса типа A и один раз для сигнального интерфейса типа B.
Цель данного испытания - определить поведение PCD во время опроса. Применяют условия, определенные в ИСО/МЭК 14443-3:2011 (подраздел 5.1).
H.4.1.1 Оборудование
См. H.1.
H.4.1.2 Процедура
Поместить LT в область рабочего поля PCD и записать наличие и содержание команд PCD.
Во время следующей процедуры радиочастотные данные входа/приема должны быть непрерывно контролируемы и проверяемы на соответствие ИСО/МЭК 14443-2:2010. Все переходы сигнала (уровень и временные соотношения), а также логическое содержание коммуникации должны быть записаны.
Использовать следующую последовательность.
a) UT выполняет процедуру активации в соответствии с H.1.8.1.
b) LT ожидает, пока PCD пошлет ему действительный кадр команды REQA/WUPA и действительный кадр команды REQB/WUPB в любом порядке и повторяемости.
H.4.1.3 Протокол испытаний
Используя форму таблицы H.25, заполнить в ней соответствующую строку, учитывая результаты для обоих типов (типа A и типа B) согласно таблице H.14.
Таблица H.14
Цель данного испытания - определить поведение PCD, когда PICC использует запрос расширения времени ожидания [см. ИСО/МЭК 14443-4:2008, (подраздел 7.3)]. Механизм поддержки WTX со стороны PCD также испытывают.
Данное испытание выполняют для FWI, как минимум установленного в состояние значений 0, 1 и 14, с TR0 и TR1, установленными, чтобы указывать значение по умолчанию в LT, если он эмулирует PICC типа B.
Данную тестовую комбинацию выполняют для WTXM, как минимум установленного в состояние значений 1, 3 и 59 в соответствии с таблицей H.15.
Таблица H.15
H.4.2.1 Оборудование
См. H.1.
Поместить LT в рабочую область PCD и записать наличие и содержание команд PCD.
Во время следующей процедуры радиочастотные данные входа/приема должны быть непрерывно контролируемы и проверяемы на соответствие ИСО/МЭК 14443-2:2010. Все переходы сигнала (уровень и временные соотношения), а также логическое содержание коммуникации должны быть записаны.
UT выполняет процедуру активации протокола в соответствии с H.1.8.2 для типа A или H.1.8.3 для типа B.
H.4.2.2.1 Процедура 1 [ИСО/МЭК 14443-4:2008 (подраздел 7.3)]
Использовать следующую последовательность сразу после процедуры по H.4.2.2.
a) UT посылает PCD SEND_UT_APDU(UT_TEST_COMMAND1).
b) LT ожидает, пока PCD пошлет ему блок I(0)0 с полем INF, содержащим UT_TEST_COMMAND1.
c) LT посылает запрос S(WTX) на расширение времени ожидания.
d) PCD должно послать ответ S(WTX) с INF(с b6 по b1) = используемый WTXM.
H.4.2.2.1.1 Ожидаемый результат
Поведение PCD должно соответствовать ожидаемому по сценарию H.16 для всех значений FWI и WTXM, определенных в H.4.2 во всех тестовых комбинациях. Результаты данного испытания считают удовлетворительными, только если все выполненные тесты удовлетворяют предъявляемым требованиям.
H.4.2.2.1.2 Протокол испытаний
Используя форму таблицы H.25, заполнить в ней соответствующую строку, учитывая результаты для обоих типов (типа A и типа B) согласно таблице H.16.
Таблица H.16
на запрос расширения времени ожидания (процедура 1)
H.4.2.2.2 Процедура 2 [ИСО/МЭК 14443-4:2008 (подраздел 7.3)]
Использовать следующую последовательность сразу после процедуры по H.4.2.2.
a) UT посылает PCD SEND_UT_APDU(UT_TEST_COMMAND1).
c) LT посылает запрос S(WTX).
d) PCD должно послать ответ S(WTX) с INF(от b6 до b1) = WTXM. Если он не соответствует ожидаемому ответу, то закончить испытание на данном шаге.
e) Установить следующие параметры временных соотношений бит на LT:
f) LT посылает ответ на команду UT_TEST_COMMAND1, посланную на шаге b).
g) PCD должно передать ответный UT_APDU (ответ на команду UT_TEST_COMMAND1) обратно UT.
h) UT посылает PCD SEND_UT_APDU(UT_TEST_COMMAND1).
i) LT ожидает, пока PCD пошлет ему I-блок с полем INF, содержащим UT_TEST_COMMAND1. PCD должно осуществить сброс FWT на этом шаге.
j) LT остается в состоянии Mute как минимум в течение ожидаемого FWT. Это означает тайм-аут FWT для PCD.
k) Записать наличие, содержание и временные соотношения ответа PCD. PCD должно послать блок R(NAK) только после того, как закончится FWT (ИСО/МЭК 14443-4:2008, 7.5.5.2 <1>).
--------------------------------
<1> В ИСО/МЭК 10373-6:2011 указан подпункт 7.5.4.2 без учета изменения нумерации пунктов, введенного изменением A1:2012 ИСО/МЭК 14443-4:2008 в связи с внесением дополнительного пункта 7.5.1.
l) Измерить и записать промежуток времени между концом кадра PCD на шаге i) и началом кадра PCD на шаге k).
H.4.2.2.2.1 Ожидаемый результат
Поведение PCD должно соответствовать ожидаемому по сценарию H.17 для всех значений FWI и WTXM, определенных в H.4.2 во всех тестовых комбинациях. Результаты данного испытания считают удовлетворительными, только если все выполненные тесты удовлетворяют предъявляемым требованиям.
H.4.2.2.2.2 Протокол испытаний
Используя форму таблицы H.25, заполнить в ней соответствующую строку для обоих типов (типа A и типа B) согласно таблице H.17.
Таблица H.17
на запрос расширения времени ожидания (процедура 2)
Цель данного испытания - определить соответствие поведения PCD, если происходят ошибки, требованиям ИСО/МЭК 14443-4:2008 (пункт 7.5.7 <1>).
--------------------------------
<1> В ИСО/МЭК 10373-6:2011 указан пункт 7.5.6 без учета изменения нумерации пунктов, введенного изменением A1:2012 ИСО/МЭК 14443-4:2008 в связи с внесением дополнительного пункта 7.5.1.
Примечание - В данном разделе ошибочной блок - это кадр с ошибочным CRC.
H.4.3.1 Оборудование
См. H.1.
Поместить LT в область рабочего поля PCD и записать наличие и содержание команд PCD.
Во время следующей процедуры радиочастотные данные входа/приема должны быть непрерывно контролируемы и проверяемы на соответствие ИСО/МЭК 14443-2:2010. Все переходы сигнала (уровень и временные соотношения), а также логическое содержание коммуникации должны быть записаны.
UT выполняет процедуру активации протокола в соответствии с H.1.8.2 для типа A или H.1.8.3 для типа B.
H.4.3.2.1 Процедура 1 [ИСО/МЭК 14443-4:2008 (сценарий 12 приложения B)]
Использовать следующую последовательность сразу после процедуры по H.4.3.2.
a) UT посылает PCD SEND_UT_APDU(UT_TEST_COMMAND1).
b) LT ожидает, пока PCD пошлет ему I-блок с полем INF, содержащим UT_TEST_COMMAND1.
c) LT посылает PCD ошибочный I-блок.
d) PCD должно послать R(NAK)0.
e) LT посылает PCD I-блок (содержащий какой-либо ответный UT_APDU с ответом на UT_TEST_COMMAND1).
f) PCD должно передать ответный UT_APDU обратно UT. Проверить на UT, что блок с этим ответным UT_APDU принят корректно.
Сценарий H.18 - Обнаружение и исправление PCD ошибок передачи [ИСО/МЭК 14443-4:2008 (сценарий 12 приложения B)] (процедура 1)
H.4.3.2.2 Процедура 2 [ИСО/МЭК 14443-4:2008 (подпункт 7.5.5.2 <2>, правило 4)]
--------------------------------
<2> В ИСО/МЭК 10373-6:2011 указан подпункт 7.5.4.2 без учета изменения нумерации пунктов, введенного изменением A1:2012 ИСО/МЭК 14443-4:2008 в связи с внесением дополнительного пункта 7.5.1.
Использовать следующую последовательность сразу после процедуры по H.4.3.2.
a) UT посылает PCD SEND_UT_APDU(UT_TEST_COMMAND1).
b) LT ожидает, пока PCD пошлет ему I-блок с полем INF, содержащим UT_TEST_COMMAND1.
c) LT посылает PCD ошибочный блок.
d) PCD должно послать R(NAK)0.
e) LT посылает PCD второй ошибочный блок.
f) PCD должно послать R(NAK)0 или запрос S(DESELECT).
H.4.3.2.3 Процедура 3 [ИСО/МЭК 14443-4:2008 (подпункт 7.5.5.2 <1>), правило 4)]
--------------------------------
<1> В ИСО/МЭК 10373-6:2011 указан подпункт 7.5.4.2 без учета изменения нумерации пунктов, введенного изменением A1:2012 ИСО/МЭК 14443-4:2008 в связи с внесением дополнительного пункта 7.5.1.
Использовать следующую последовательность сразу после процедуры по H.4.3.2.
a) UT посылает PCD SEND_UT_APDU(UT_TEST_COMMAND1).
b) LT ожидает, пока PCD пошлет ему I-блок с полем INF, содержащим UT_TEST_COMMAND1.
c) Поддерживать LT в состоянии Mute.
d) Записать все запросы от PCD. PCD должно послать R(NAK)0 как минимум один раз.
H.4.3.2.4 Процедура 4 [ИСО/МЭК 14443-4:2008 (подпункт 7.5.5.2 <1>, правило 7)]
--------------------------------
<1> В ИСО/МЭК 10373-6:2011 указан подпункт 7.5.4.2 без учета изменения нумерации пунктов, введенного изменением A1:2012 ИСО/МЭК 14443-4:2008 в связи с внесением дополнительного пункта 7.5.1.
Использовать следующую последовательность сразу после процедуры по H.4.3.2.
a) UT посылает PCD SEND_UT_APDU(UT_TEST_COMMAND1).
b) LT ожидает, пока PCD пошлет ему I-блок с полем INF, содержащим UT_TEST_COMMAND1.
c) LT посылает R(ACK)0 (из-за нарушения LT правил протокола).
d) PCD должно послать запрос S(DESELECT).
H.4.3.2.5 Процедура 5 (со сцеплением) [ИСО/МЭК 14443-4:2008 (подпункт 7.5.5.2 <1>, правило 5), ИСО/МЭК 14443-4:2008 (сценарий 23 приложения B)]
--------------------------------
<1> В ИСО/МЭК 10373-6:2011 указан подпункт 7.5.4.2 без учета изменения нумерации пунктов, введенного изменением A1:2012 ИСО/МЭК 14443-4:2008 в связи с внесением дополнительного пункта 7.5.1.
Использовать следующую последовательность сразу после процедуры по H.4.3.2.
a) UT посылает PCD SEND_UT_APDU(UT_TEST_COMMAND1).
b) LT ожидает, пока PCD пошлет ему I-блок с полем INF, содержащим UT_TEST_COMMAND1.
c) LT посылает первый блок I(1)0 цепочки и ожидает ответа PCD.
d) PCD должно послать R(ACK)1.
e) LT посылает PCD ошибочный блок I(0)1.
f) PCD должно послать R(ACK)1.
Сценарий H.22 - Обнаружение и исправление PCD ошибок передачи (процедура 5) [ИСО/МЭК 14443-4:2008 (сценарий 19 приложения B)]
H.4.3.2.6 Процедура 6 [ИСО/МЭК 14443-4:2008 (подпункт 7.5.5.2 <1>)]
--------------------------------
<1> В ИСО/МЭК 10373-6:2011 указан подпункт 7.5.4.2 без учета изменения нумерации пунктов, введенного изменением A1:2012 ИСО/МЭК 14443-4:2008 в связи с внесением дополнительного пункта 7.5.1.
Использовать следующую последовательность сразу после процедуры по H.4.3.2.
a) UT посылает PCD SEND_UT_APDU(UT_TEST_COMMAND1).
b) LT ожидает, пока PCD пошлет ему I-блок с полем INF, содержащим UT_TEST_COMMAND1.
c) LT посылает PCD ошибочный блок.
d) PCD должно послать R(NAK)0.
e) LT остается в состоянии Mute.
f) Записать все ответы от PCD. PCD должно послать либо R(NAK)0, либо запрос S(DESELECT).
H.4.3.2.7 Процедура 7 [ИСО/МЭК 14443-4:2008 (пункт 7.5.7 <2>; сценарий 14 приложения B)]
--------------------------------
<2> В ИСО/МЭК 10373-6:2011 указан пункт 7.5.6 без учета изменения нумерации пунктов, введенного изменением A1:2012 ИСО/МЭК 14443-4:2008 в связи с внесением дополнительного пункта 7.5.1.
Использовать следующую последовательность сразу после процедуры по H.4.3.2.
a) UT посылает PCD SEND_UT_APDU(UT_TEST_COMMAND1).
b) LT ожидает, пока PCD пошлет ему I-блок с полем INF, содержащим UT_TEST_COMMAND1.
c) LT посылает ошибочный запрос S(WTX).
d) PCD должно послать R(NAK)0.
e) LT посылает действительный запрос S(WTX).
f) PCD должно послать ответ S(WTX).
g) LT посылает PCD I-блок (содержащий какой-либо ответный UT_APDU с ответом на UT_TEST_COMMAND1).
h) PCD должно передать этот ответный UT_APDU обратно UT. Проверить на UT, что блок с этим ответным UT_APDU принят корректно.
Сценарий H.24 - Обнаружение и исправление PCD ошибок передачи (процедура 7) [ИСО/МЭК 14443-4:2008 (сценарий 14 приложения B)]
H.4.3.2.8 Процедура 8 [ИСО/МЭК 14443-4:2008 (пункт 7.5.7 <1>, сценарий 17 приложения B)]
--------------------------------
<1> В ИСО/МЭК 10373-6:2011 указан пункт 7.5.6 без учета изменения нумерации пунктов, введенного изменением A1:2012 ИСО/МЭК 14443-4:2008 в связи с внесением дополнительного пункта 7.5.1.
Использовать следующую последовательность сразу после процедуры по H.4.3.2.
a) UT посылает PCD SEND_UT_APDU(UT_TEST_COMMAND1).
b) LT ожидает, пока PCD пошлет ему I-блок с полем INF, содержащим UT_TEST_COMMAND1.
c) LT посылает запрос S(WTX).
d) PCD должно отправить ответ S(WTX).
e) LT посылает ошибочный I(0)0.
f) PCD должно послать R(NAK)0.
g) LT посылает действительный I(0)0 с максимальным временным интервалом между R(NAK)0 и I(0)0, чтобы проверить, что FWT PCD все еще расширенный.
h) PCD должно передать этот ответный UT_APDU обратно UT. Проверить на UT, что блок с этим ответным UT_APDU принят корректно.
Сценарий H.25 - Обнаружение и исправление PCD ошибок передачи (процедура 8) [ИСО/МЭК 14443-4:2008 (сценарий 17 приложения B)]
H.4.3.2.9 Процедура 9 (со сцеплением) [см. ИСО/МЭК 14443-4:2008 (сценарий 20 приложения B)]
Использовать следующую последовательность сразу после процедуры по H.4.3.2.
a) UT посылает PCD SEND_UT_APDU(UT_TEST_COMMAND2 (вызывающую три цепочки)).
b) LT ожидает, пока PCD пошлет ему I-блок I(1)0 с первой цепочкой UT_TEST_COMMAND2 в поле INF.
d) PCD должно послать R(NAK)0.
e) LT посылает R(ACK)0.
f) PCD должно послать следующий блок I(1)1 цепочки.
g) LT посылает R(ACK)1.
h) PCD должно послать последний блок I(0)0 цепочки.
i) LT посылает I-блок (содержащий какой-либо ответный UT_APDU с ответом на UT_TEST_COMMAND2).
j) PCD должно передать этот ответный UT_APDU обратно UT. Проверить на UT, что блок с этим ответным UT_APDU принят корректно.
Примечание - В случае если UT не может принудить PCD использовать три цепочки для посылки TEST_COMMAND2, необходимо изменить ожидаемую процедуру, чтобы отразить цель испытания, которая заключается в том, чтобы убедиться, что нумерация блоков и образование цепочек происходят правильно после ошибки передачи на шаге c).
Сценарий H.26 - Обнаружение и исправление PCD ошибок передачи (процедура 9) (со сцеплением) [ИСО/МЭК 14443-4:2008 (сценарий 20 приложения B)]
H.4.3.2.10 Процедура 10 (со сцеплением) [см. ИСО/МЭК 14443-4:2008 (сценарий 21 приложения B)]
Использовать следующую последовательность сразу после процедуры по H.4.3.2.
a) UT посылает PCD SEND_UT_APDU(UT_TEST_COMMAND2 (вызывающую три цепочки)).
b) LT ожидает, пока PCD пошлет ему I-блок I(1)0 с первой цепочкой UT_TEST_COMMAND2 в поле INF.
d) PCD должно послать R(NAK)0.
e) LT посылает R-блок с несинхронизированным последовательным номером блока R(ACK)1.
f) PCD должно повторить для LT предыдущий I-блок I(1)0.
g) LT посылает R(ACK)0.
h) PCD должно послать следующий блок I(1)1 цепочки.
i) LT посылает R(ACK)1.
j) PCD должно послать последний блок I(0)0 цепочки.
k) LT посылает PCD I-блок (содержащий какой-либо ответный UT_APDU с ответом на UT_TEST_COMMAND2).
l) PCD должно передать этот ответный UT_APDU обратно UT. Проверить на UT, что блок с этим ответным UT_APDU принят корректно.
Примечание - В случае если UT не может принудить PCD использовать три цепочки для посылки TEST_COMMAND2, необходимо изменить ожидаемую процедуру, чтобы отразить цель испытания, которая заключается в том, чтобы убедиться, что нумерация блоков и сцепление происходят правильно после ошибки передачи на шаге c).
Сценарий H.27 - Обнаружение и исправление PCD ошибок передачи (процедура 10) [см. ИСО/МЭК 14443-4:2008 (сценарий 21 приложения B)]
H.4.3.2.11 Процедура 11 (со сцеплением) [см. ИСО/МЭК 14443-4:2008 (сценарий 24 приложения B)]
Использовать следующую последовательность сразу после процедуры по H.4.3.2.
a) UT посылает PCD SEND_UT_APDU(UT_TEST_COMMAND1).
b) LT ожидает, пока PCD пошлет ему I-блок I(0)0 с полем INF, содержащим UT_TEST_COMMAND1.
c) LT посылает I-блок I(1)0, указывающий сцепление.
d) PCD должно послать R(ACK)1.
e) LT посылает PCD ошибочный I-блок I(1)1.
f) PCD должно послать R(ACK)1.
g) LT повторно посылает I-блок I(1)1 без ошибки.
h) PCD должно послать R(ACK)0.
i) LT посылает PCD последний блок цепочки в I-блоке I(0)0 (его ответного UT_APDU с ответом на UT_TEST_COMMAND1).
j) PCD должно передать ответный UT_APDU, содержащий все сцепленные сегменты, обратно UT. Проверить на UT, что блок с этим ответным UT_APDU принят корректно.
Сценарий H.28 - Обнаружение и исправление PCD ошибок передачи (процедура 11) [ИСО/МЭК 14443-4:2008 (сценарий 24 приложения B)]
H.4.3.2.12 Процедура 12 [ИСО/МЭК 14443-4:2008 (подпункт 7.5.5.2 <1>, правило 8)]
--------------------------------
<1> В ИСО/МЭК 10373-6:2011 указан подпункт 7.5.4.2 без учета изменения нумерации пунктов, введенного изменением A1:2012 ИСО/МЭК 14443-4:2008 в связи с внесением дополнительного пункта 7.5.1.
Использовать следующую последовательность сразу после процедуры по H.4.3.2.
a) UT посылает PCD SEND_UT_APDU(UT_TEST_COMMAND1).
b) LT ожидает, пока PCD пошлет ему I-блок с полем INF, содержащим UT_TEST_COMMAND1.
c) LT остается в состоянии Mute.
d) LT ожидает, пока PCD пошлет ему R(NAK)0 (R-блок может быть послан более одного раза).
e) LT остается в состоянии Mute.
f) LT ожидает, пока PCD пошлет ему запрос S(DESELECT).
g) LT остается в состоянии Mute.
h) Записать ответ от PCD. PCD должно либо повторно передать запрос S(DESELECT), либо игнорировать LT.
H.4.3.3 Протокол испытаний
Используя форму таблицы H.25, заполнить в ней соответствующую строку для обоих типов (типа A и типа B) согласно таблице H.18.
Таблица H.18
обнаружения и исправления ошибок
Цель данного испытания - подтвердить, что PCD поддерживает NAD надлежащим образом.
H.4.4.1 Оборудование
См. H.1.
H.4.4.2 Процедура
Поместить LT в рабочую область PCD и записать наличие и содержание команд PCD.
Использовать следующую последовательность.
a) Конфигурировать LT как поддерживающую NAD.
b) Повторить процедуру из сценария H.26.
H.4.4.3 Протокол испытаний
Используя форму таблицы H.25, заполнить в ней соответствующую строку для обоих типов (типа A и типа B) согласно таблице H.19.
Таблица H.19
во время сцепления
Цель данного испытания - подтвердить, что PCD не устанавливает никакие RFU-биты в любом посылаемом кадре в состояние значения, отличного от значения по умолчанию, предписанного для RFU-бит официальными документами. Более того, испытание должно гарантировать, что поле никогда не принимает RFU-значения. Также испытание должно подтвердить, что R-блок и S-блок соответствуют определениям протокола, и что правила, касающиеся первого байта пакета, не нарушены.
H.5.1 RFU-поля
RFU-поля следует непрерывно контролировать во время испытания и всегда проверять на содержание присвоенного значения по умолчанию. Результаты испытания следует считать неудовлетворительными, а испытуемое PCD признавать несоответствующим предъявляемым требованиям, если в произвольное время RFU-поле не установлено в состояние соответствующего значения по умолчанию.
H.5.2 RFU-значения
Функциональные поля следует непрерывно контролировать во время испытания и всегда проверять на содержание только стандартных или проприетарных функциональных значений, установленных в стандартах. Результаты испытания считают неудовлетворительными, а испытуемое PCD должно быть признано не соответствующим требованиям, если в произвольное время функциональное поле не установлено в состояние вышеуказанных значений.
H.5.3 R-блок
R-блок никогда не должен содержать поле INF [см. ИСО/МЭК 14443-4:2008 (подпункт 7.1.1.1)].
H.5.5 PCB
Байт PCB должен содержать допустимые значения [см. ИСО/МЭК 14443-4:2008 (подпункт 7.1.1.1) и ИСО/МЭК 14443-4:2008 (приложение C)].
H.5.6 Кадры инициализации типа A
Кадры инициализации типа A должны содержать допустимые значения [см. ИСО/МЭК 14443-3:2011 (пункт 6.4.1 и подпункт 6.5.3.2)].
H.5.7 Оборудование
См. H.1.
H.5.8 Процедура
Во время испытательных процедур и сценариев всегда следует записывать логическое содержание коммуникации.
H.5.9 Протокол испытаний
Используя формы таблиц H.25 и H.27, заполнить в них соответствующие строки для типа A и типа B согласно таблице H.20.
Таблица H.20
непрерывного мониторинга пакетов, посылаемых PCD
Таблица H.21
Таблица временных соотношений для типа A
Примечание - Все временные значения вычисляют для несущей частоты fc = 13,56 МГц и скорости передачи fc/128 (~106 кбит/с).
Таблица H.22
Примечание - Все временные значения вычисляют для несущей частоты fc = 13,56 МГц и скорости передачи fc/128 (~106 кбит/с).
Таблица H.23
Таблица H.24
Таблица H.25
Таблица H.26
Отчет по тестовому покрытию
Таблица H.27
--------------------------------
(обязательное)
I.1 Оборудование
В данном испытании испытательное оборудование для PCD должно быть конфигурируемым, чтобы можно было изменять скорость передачи во время выполнения процедуры испытания. Тестер должен быть способен измерять скорость передачи, используемую PCD, на каждой стадии процедуры испытания.
I.2 Процедура
Поместить испытательное оборудование в область поля PCD.
I.2.1 Процедура для типа A
Следующую процедуру необходимо повторить для всех значений байта интерфейса TA(1), определенных в таблице I.1.
a) Выполнить последовательность активации, как определено в ИСО/МЭК 14443-3:2011.
b) PCD должно послать команду RATS, как определено в ИСО/МЭК 14443-4:2008.
c) Испытательное оборудование отвечает действительным ATS, включающим в себя TA(1) в соответствии с таблицей I.1.
d) PCD может дополнительно послать PPS с байтом PPS1, имеющим допустимое значение параметра в соответствии с таблицей I.1.
e) Если PCD послало PPS, то испытательное оборудование подтверждает прием полученного PPS действительным ответом PPS.
f) PCD должно послать блок I(0)0, используя выбранную скорость передачи.
Примечание 1 - Этим блоком может быть также I(1)0 или R(NAK) в случае использования метода 2a для проверки наличия PICC, как определено в ИСО/МЭК 14443-4:2008 (подпункт 7.5.6.2 <1>).
--------------------------------
<1> В ИСО/МЭК 10373-6:2011 указан подпункт 7.5.5.2 без учета изменения нумерации пунктов, введенного изменением A1:2012 ИСО/МЭК 14443-4:2008 в связи с внесением дополнительного пункта 7.5.1.
g) Испытательное оборудование посылает действительный ответ, используя выбранную скорость передачи. Следует проверить, приняло ли PCD ответ испытательного оборудования.
Примечание 2 - Следующие шаги могут быть не применимы, если PCD встроенно в изделие.
h) PCD должно послать запрос S(DESELECT), используя выбранную скорость передачи.
i) Испытательное оборудование посылает действительный ответ S(DESELECT), используя выбранную скорость передачи. Следует проверить, приняло ли PCD ответ испытательного оборудования.
j) PCD должно послать действительный кадр команды REQA, используя скорость передачи fc/128.
k) Испытательное оборудование отвечает действительным ATQA.
Таблица I.1
I.2.1.1 Ожидаемый результат
PCD должно вести себя, как описано в сценарии I.1, в каждом из 72 случаев испытания.
I.2.1.2 Протокол испытаний
Если PCD ведет себя допустимым образом в соответствии со сценарием I.1 в каждом из 72 случаев испытания, то результаты данного испытания считают удовлетворительными. В протоколе испытаний должны быть указаны скорости передачи, выбранные PCD в каждом из 72 случаев испытания.
I.2.2 Процедура для типа B
Следующую процедуру необходимо повторить для всех значений информационного байта протокола Bit_Rate_capability, определенных в таблице I.2.
a) PCD должно послать действительный кадр команды REQB.
b) Испытательное оборудование отвечает действительным ATQB, включающим в себя байт Bit_Rate_capability в соответствии с таблицей I.2.
c) PCD должно послать команду ATTRIB с допустимым значением параметра для байта Param 2 в соответствии в таблицей I.2.
d) Испытательное оборудование подтверждает прием полученного ATTRIB действительным ответом на команду ATTRIB.
e) PCD должно послать блок I(0)0, используя выбранную согласно Param 2 скорость передачи.
Примечание 1 - Эти блоком может быть также I(1)0 или R(NAK) в случае использования метода 2a для проверки наличия PICC, как описано в ИСО/МЭК 14443-4:2008 (подпункт 7.5.6.2 <1>).
--------------------------------
<1> В ИСО/МЭК 10373-6:2011 указан подпункт 7.5.5.2 без учета изменения нумерации пунктов, введенного изменением A1:2012 ИСО/МЭК 14443-4:2008 в связи с внесением дополнительного пункта 7.5.1.
f) Испытательное оборудование посылает действительный ответ, используя выбранную по Param 2 скорость передачи. Следует проверить, приняло ли PCD ответ испытательного оборудования.
Примечание 2 - Следующие шаги могут быть не применимы, если PCD встроено в изделие.
g) PCD должно послать запрос S(DESELECT), используя выбранную скорость передачи.
h) Испытательное оборудование посылает действительный ответ S(DESELECT), используя выбранную скорость передачи. Следует проверить, приняло ли PCD ответ испытательного оборудования.
i) PCD должно послать действительный кадр команды REQB, используя скорость передачи fc/128.
j) Испытательное оборудование отвечает действительным ATQB, включающим в себя байт Bit_Rate_capability в соответствии с таблицей I.2.
Таблица I.2
I.2.2.1 Ожидаемый результат
PCD должно вести себя, как описано в сценарии I.2, в каждом из 72 случаев испытания.
I.2.2.2 Протокол испытаний
Если PCD ведет себя допустимым образом в соответствии со сценарием I.2 в каждом из 72 случаев испытания, то результаты данного испытания считают удовлетворительными. В протоколе испытаний должны быть указаны скорости передачи, выбранные PCD в каждом из 72 случаев испытания.
/***************************************************************************************/ ?
/*** This program calculates the upper side band (USB) and ***/ ?
/*** lower side band (LSB) load modulation amplitudes ***/ ?
/*** versus time of a PICC for the evaluation of EMD levels ***/ ?
/*** according to ISO/IEC 10373-6/Amd.2 ***/ ?
/***************************************************************************************/ ?
/*** Input: ***/ ?
/*** File in CSV format containing a table of two ***/ ?
/*** columns (time and sense coils' voltage) ***/ ?
/*** data format of input-file: ***/ ?
/*** - one data-point per line: ***/ ?
/*** time[seconds], sense-coil-voltage[volts]) ***/ ?
/*** - contents in ASCII, no headers ***/ ?
/*** - data-points shall be equidistant time ***/ ?
/*** - minimum sampling rate: 100 MSamples/second ***/ ?
/*** - At least 200 microsecond before start of PICC ***/ ?
/*** sub-carrier generation ***/ ?
/*** - At least 50 microsecond after start of PICC ***/ ?
/*** sub-carrier generation ***/ ?
/*** ***/ ?
/*** example for spreadsheet file (start in next line): ***/ ?
/*** (time) (voltage) ***/ ?
/*** 3.00000e-06,1.00 ***/ ?
/*** 3.00200e-06,1.01 ***/ ?
/*** ..... ***/ ?
/*** ***/ ?
/*** Ouput: ***/ ?
/*** File in CSV format containing the results ***/ ?
/*** in a table of three columns (time, USB, LSB) ***/ ?
/*** ***/ ?
/*** ***/ ?
/***************************************************************************************/ ?
/*** RUN: ***/ ?
/*** "exefilename" filename[.csv] ***/ ?
/***************************************************************************************/ ?
/*** ISO/IEC 10373-6 EMD levels Calculation ***/ ?
/*** (according to clause 5.5.2) ***/ ?
/*** Program Version 1.0 Release January 2010 ***/ ?
/***************************************************************************************/ ?
#include <stdio.h> ?
#include <stdlib.h> ?
#include <string.h> ?
#include <math.h> ?
?
#define MAX_SAMPLES 5000000 ?
#define MAX_LMA 100000 ?
/*** Declare function prototype ***/ ?
int File_info(char * , double *); ?
int readcsv(char * ,double * ,double * ); ?
int writecsv(char* ,int ,double * ,double * ,double * ); ?
int Sliding_LMA(double ,int ,double *,double *,int ,double *,double *,double *); ?
void Noise_STD(int ,double *,double *, double *,double *); ?
?
/***************************************************************************************/ ?
/*** File_info function ***/ ?
/*** ***/ ?
/*** Description: ***/ ?
/*** This function parse a file in CSV format ***/ ?
/*** to determine the number of lines and sampling rate ***/ ?
/*** ***/ ?
/*** Input: filename ***/ ?
/*** ***/ ?
/*** Return: Number of samples (sample Count) ***/ ?
/*** 0 if an error occurred ***/ ?
/*** ***/ ?
/***************************************************************************************/ ?
int File_info(char * fname , double * pdt) ?
{ ?
int i, c; ?
double t1,v1,t2,v2; ?
FILE *sample_file; ?
?
/************ Open File ***********************/ ?
if (!strchr(fname, '.')) strcat(fname, ".csv"); ?
?
if ((sample_file = fopen(fname, "r"))== NULL) ?
{ ?
printf("Cannot open input file %s.\n",fname); ?
return 0; ?
} ?
/*** Read two first lines to retrieve sampling rate ***/ ?
fscanf(sample_file,"%Lf,%Lf\n", &t1, &v1); ?
if (feof(sample_file)) ?
{ ?
fclose(sample_file); ?
return 0; ?
} ?
fscanf(sample_file,"%Lf,%Lf\n", &t2, &v2); ?
if (feof(sample_file)) ?
{ ?
fclose(sample_file); ?
return 0; ?
} ?
*pdt=t2-t1; ?
?
i=2; ?
?
while (!feof(sample_file)) ?
{ ?
c = fgetc(sample_file); ?
if (c == '\n') ?
{ ?
i++; ?
if (i>=MAX_SAMPLES) ?
{ ?
printf("Too many samples in input file: only %d samples retained\n",i);?
break; ?
} ?
} ?
} ?
fclose(sample_file); ?
return i; ?
} ?
/***************************************************************************************/ ?
?
/***************************************************************************************/ ?
/*** Read CSV File Function ***/ ?
/*** ***/ ?
/*** Description: ***/ ?
/*** This function reads the table of time and sense coil ***/ ?
/*** voltage from a File in CSV Format ***/ ?
/*** ***/ ?
/*** Input: filename ***/ ?
/*** ***/ ?
/*** Return: Number of samples (sample Count) ***/ ?
/*** 0 if an error occurred ***/ ?
/*** ***/ ?
/*** Displays Statistics: ***/ ?
/*** ***/ ?
/*** Filename, SampleCount, Sampling rate, Max/Min Voltage ***/ ?
/***************************************************************************************/ ?
?
int readcsv(char* fname,double vtime[],double vd[]) ?
{ ?
double max_vd,min_vd; ?
int i; ?
?
FILE *sample_file; ?
?
/************ Open File ***********************/ ?
if (!strchr(fname, '.')) strcat(fname, ".csv"); ?
?
if ((sample_file = fopen(fname, "r"))== NULL) ?
{ ?
printf("Cannot open input file %s.\n", fname); ?
return 0; ?
} ?
?
?
/***************************************************************************************/ ?
/* Read CSV File ***/ ?
/***************************************************************************************/ ?
max_vd=-1e-9F; ?
min_vd=-max_vd; ?
i=0; ?
?
while (!feof(sample_file)) ?
{ ?
if (i>=MAX_SAMPLES) ?
{ ?
printf("Too many samples in input file: only %d samples read\n",i); ?
break; ?
} ?
fscanf(sample_file,"%lf,%lf\n", &vtime[i], &vd[i]); ?
if (vd[i]>max_vd) max_vd=vd[i]; ?
if (vd[i]<min_vd) min_vd=vd[i]; ?
i++; ?
} ?
fclose(sample_file); ?
?
/************ Displays Statistics ***********************************************/ ?
printf("\n*********************************************************************\n"); ?
?
printf("Statistics: \n"); ?
printf(" Filename : %s\n",fname); ?
printf(" Sample count : %d\n",i); ?
printf(" Sampling rate : %1.0f MHz\n",1e-6/(vtime[1]-vtime[0])); ?
printf(" Max(vd) : %4.0f mV\n",max_vd*1000); ?
printf(" Min(vd) : %4.0f mV\n",min_vd*1000); ?
return i; ?
} ?
/****** End ReadCsv ********************************************************************/ ?
?
/***************************************************************************************/ ?
/*** Write CSV File Function ***/ ?
/*** ***/ ?
/*** Description: ***/ ?
/*** This function writes in a CSV format file ***/ ?
/*** the result of LMA computation: ***/ ?
/*** Fist column = time(s) ***/ ?
/*** Second column = Upper side band amplitude (V) ***/ ?
/*** Third column = Lower side band amplitude (V) ***/ ?
/*** ***/ ?
/*** Return: Number of written samples ***/ ?
/*** 0 if an error occurred ***/ ?
/***************************************************************************************/ ?
?
int writecsv(char* fname,int n_LMA,double LMA_time[],double USB[],double LSB[]) ?
{ ?
int i; ?
FILE *out_file; ?
if ((out_file = fopen(fname, "w"))== NULL) ?
{ ?
printf("Cannot open output file %s.\n",fname); ?
return 0; ?
} ?
for (i=0;i<n_LMA;i++) ?
{ ?
fprintf(out_file,"%7.4E,%7.4E,%7.4E\n",LMA_time[i],USB[i],LSB[i]); ?
} ?
fclose(out_file); ?
return i; ?
} ?
?
/***************************************************************************************/ ?
/*** Sliding_LMA: Load Modulation Amplitude versus Time ***/ ?
/***************************************************************************************/ ?
/*** Description: ***/ ?
/*** This function calculates Upper side band and ***/ ?
/*** Lower side band amplitudes as a function of time ***/ ?
/*** ***/ ?
/*** Arguments: ***/ ?
/*** fc = carrier frequency (Hz) ***/ ?
/*** count = number of input signal samples ***/ ?
/*** vtime[] = input signal time array ***/ ?
/*** vd[] = input signal voltage array ***/ ?
/*** lout = max. size of following arrays ***/ ?
/*** LMA_time[] = Times to which LMAs are computed ***/ ?
/*** USB[] = load modulation amplitude at fc+fs ***/ ?
/*** LSB[] = load modulation amplitude at fc-fs ***/ ?
/*** ***/ ?
/*** return value: number of computed LMA ***/ ?
/***************************************************************************************/ ?
int Sliding_LMA(double fc,int count,double vtime[],double vd[],int lout,double LMA_ ?
time[],double USB[],double LSB[]) ?
{ ?
double c1_real,c1_imag; ?
double c2_real,c2_imag; ?
double w0,wu,wl,dt; ?
double Wb; /* Bartlett window coefficient */ ?
int i,j,k=0; ?
int N_data; /* Time window size*/ ?
int N_over; /* Overlap */ ?
int N_middle; /* Half window size */ ?
double *Yuc,*Yus,*Ylc,*Yls; /* Phase factors */ ?
double pi; /* pi=3.14.... */ ?
double sum_Wb=0; /* Sum of Bartlett coeff. */ ?
double cf; /* correction factor of the Bartlett window */ ?
?
pi = (double)atan(1.0)*4; /* calculate pi */ ?
?
w0=(double)(fc*2.0)*pi; /* carrier 13.56 MHz */ ?
wu=(double)(1.0+1.0/16.0)*w0; /* upper sideband 14.41 MHz */ ?
wl=(double)(1.0-1.0/16.0)*w0; /* lower sideband 12.71 MHz */ ?
?
?
/********** Time window ***********************************************************/ ?
dt=vtime[2]-vtime[1]; /* Note: (vtime[2]-vtime[1]) is the scope sampling rate */ ?
N_data=(int)(0.5+2*16.0F/dt/fc); /* Number of samples for two subcarrier periods */ ?
N_middle=(int) (0.5+N_data/2); ?
N_over=(int) (0.5+1.0/dt/fc); /* Overlap of 1/fc */ ?
?
/******* Allocate memory *********************************************************/ ?
Yuc=(double *) malloc(N_data * sizeof(double)); ?
if (Yuc == NULL) ?
{ ?
printf("Cannot allocate memory"); ?
return 0; ?
} ?
Yus=(double *) malloc(N_data * sizeof(double)); ?
if (Yus == NULL) ?
{ ?
printf("Cannot allocate memory"); ?
free(Yuc); ?
return 0; ?
} ?
Ylc=(double *) malloc(N_data * sizeof(double)); ?
if (Ylc == NULL) ?
{ ?
printf("Cannot allocate memory"); ?
free(Yuc); free(Yus); ?
return 0; ?
} ?
Yls=(double *) malloc(N_data * sizeof(double)); ?
if (Yls == NULL) ?
{ ?
printf("Cannot allocate memory"); ?
free(Yuc); free(Yus); free(Ylc); ?
return 0; ?
} ?
/************ Calculate apodization window and phase factors ****/ ?
for( i=0;i<N_data;i++) ?
{ ?
/* Bartlett window */ ?
if ((N_data & 1) == 0) ?
{ ?
/* N_data is even */ ?
if (i < (int) (N_data /2)) ?
{ ?
Wb=2.0F*i/(double)(N_data - 1); ?
} ?
else ?
{ ?
Wb=2.0F*(N_data-i-1)/(double)(N_data - 1); ?
} ?
} ?
else ?
{ ?
/*N_data is odd */ ?
if (i <= (int) (0.001+(N_data-1) /2)) ?
{ ?
Wb=2.0F*i/(double)(N_data - 1); ?
} ?
else ?
{ ?
Wb=2.0F-2.0F*i/(double)(N_data - 1); ?
} ?
} ?
Yuc[i]=(double)cos(wu*i*dt)*Wb; ?
Yus[i]=(double)sin(wu*i*dt)*Wb; ?
Ylc[i]=(double)cos(wl*i*dt)*Wb; ?
Yls[i]=(double)sin(wl*i*dt)*Wb; ?
sum_Wb += Wb; ?
} ?
cf=N_data/sum_Wb; ?
?
/******************* DFT **********************************************************/ ?
?
for (j=0;j<count-N_data;j=j+N_over) ?
{ ?
c1_real=0; /* real part of the up. sideband fourier coefficient */ ?
c1_imag=0; /* imag part of the up. sideband fourier coefficient */ ?
c2_real=0; /* real part of the lo. sideband fourier coefficient */ ?
c2_imag=0; /* imag part of the lo. sideband fourier coefficient */ ?
?
for( i=0;i<N_data;i++) ?
{ ?
c1_real=c1_real+vd[i+j]*Yuc[i]; ?
c1_imag=c1_imag+vd[i+j]*Yus[i]; ?
c2_real=c2_real+vd[i+j]*Ylc[i]; ?
c2_imag=c2_imag+vd[i+j]*Yls[i]; ?
?
} ?
/******************* DFT scale **********************************************/ ?
?
c1_real=2.0F*cf*c1_real/(double) N_data; ?
c1_imag=2.0F*cf*c1_imag/(double) N_data; ?
c2_real=2.0F*cf*c2_real/(double) N_data; ?
c2_imag=2.0F*cf*c2_imag/(double) N_data; ?
/**************** absolute fourier coefficient **********/ ?
USB[k]=(double)sqrt(c1_real*c1_real + c1_imag*c1_imag); ?
LSB[k]=(double)sqrt(c2_real*c2_real+c2_imag*c2_imag); ?
?
/************** Half window time ************************/ ?
LMA_time[k]=vtime[j+N_middle]; /* Half window time */ ?
k++; ?
if (k > lout) break; /* stop if array size is reached*/ ?
} ?
?
free(Yuc); ?
free(Yus); ?
free(Ylc); ?
free(Yls); ?
return k; ?
?
} ?
/********* End DFT *********************************************************************/ ?
?
/***************************************************************************************/ ?
/*** Noise_STD : Noise standard deviation ***/ ?
/***************************************************************************************/ ?
/*** Description: ***/ ?
/*** This function calculates the standard deviations ***/ ?
/*** at fc+fs and fc-fs as required by the noise ***/ ?
/*** precondition test of ISO/IEC 10373-6. ***/ ?
/*** Results are meaningful only when the sense coil's ***/ ?
/*** signal is recorded with a reference PICC. ***/ ?
/*** ***/ ?
/*** Arguments: ***/ ?
/*** n_LMA = number of input values ***/ ?
/*** USB[] = load modulation amplitude at fc+fs ***/ ?
/*** LSB[] = load modulation amplitude at fc-fs ***/ ?
/*** pSTD_USB= standard deviation at fc+fs ***/ ?
/*** pSTD_LSB= standard deviation at fc-fs ***/ ?
/*** ***/ ?
/***************************************************************************************/ ?
void Noise_STD(int n_LMA,double USB[],double LSB[], double *pSTD_USB,double *pSTD_LSB) ?
{ ?
double P_USB=0,P_LSB=0; ?
int i; ?
/**************** Square summation *********************/ ?
for (i=0;i<n_LMA;i++) ?
{ ?
P_USB += USB[i]*USB[i]; ?
P_LSB += LSB[i]*LSB[i]; ?
} ?
*pSTD_USB=sqrt(P_USB/n_LMA); ?
*pSTD_LSB=sqrt(P_LSB/n_LMA); ?
?
} ?
?
/***************************************************************************************/ ?
/*** MAIN Program ***/ ?
/***************************************************************************************/ ?
int main(int argc, char *argv[]) ?
{ ?
char fname[256]; ?
char fout[256]; ?
int sample_count; ?
int lout; /*Maximun length of result arrays */ ?
int n_LMA; /* Number of computed LMA */ ?
int status; ?
double fc; /* Carrier frequency */ ?
double std_USB,std_LSB,dt; ?
double *pTime, *pVolts, *pLMA_time, *pUSB, *pLSB; ?
?
fc=13.56e6; ?
?
printf("\n"); ?
printf("***********************************************************************\n"); ?
printf("**** ISO/IEC 10373-6 EMD Test-Program *********************************\n"); ?
printf("**** Version: 1.0 January 2010 ****************************************\n"); ?
printf("****(according to ISO/IEC 10373-6 , clause 5.5.2)**********************\n"); ?
printf("**********************************************************************\n"); ?
if (argc > 1) ?
{ ?
/*** First input parameter is taken as input file name ***/ ?
strcpy(fname, argv[1]); ?
} ?
else ?
{ ?
/*** No input parameter ***/ ?
printf("\nCSV File name :"); ?
scanf("%s",fname); ?
} ?
?
if (!strchr(fname, '.')) strcat(fname, ".csv"); ?
if (!(sample_count=File_info(fname , &dt))) return 0; ?
lout= (int) (sample_count/(int)(0.5+1.0/dt/fc)); ?
if (lout > MAX_LMA) lout = MAX_LMA; ?
?
/*** Start of memory allocation ***/ ?
pTime= (double *) malloc(sample_count * sizeof(double)); ?
if (pTime == NULL) ?
{ ?
printf("Cannot allocate memory"); ?
return 0; ?
} ?
pVolts= (double *) malloc(sample_count * sizeof(double)); ?
if (pVolts == NULL) ?
{ ?
printf("Cannot allocate memory"); ?
free(pTime); ?
return 0; ?
} ?
pUSB= (double *) malloc(lout * sizeof(double)); ?
if (pUSB == NULL) ?
{ ?
printf("Cannot allocate memory"); ?
free(pTime); free(pVolts); ?
return 0; ?
} ?
pLSB= (double *) malloc(lout * sizeof(double)); ?
if (pLSB == NULL) ?
{ ?
printf("Cannot allocate memory"); ?
free(pTime); free(pVolts); free(pUSB); ?
return 0; ?
} ?
pLMA_time= (double *) malloc(lout * sizeof(double)); ?
if (pLMA_time == NULL) ?
{ ?
printf("Cannot allocate memory"); ?
free(pTime); free(pVolts); free(pUSB); free(pLSB); ?
return 0; ?
} ?
/*** End of memory allocation ***/ ?
?
if (!(sample_count=readcsv(fname,pTime,pVolts))) return 0; /* reading data */ ?
if (!(n_LMA=Sliding_LMA(fc,sample_count,pTime,pVolts,lout,pLMA_ time,pUSB,pLSB))) ?
return 0; ?
?
/***** processing data *****************************************************/ ?
strcpy(fout,"LMA_"); ?
strcat(fout,fname); ?
status=writecsv(fout,n_LMA,pLMA_time,pUSB,pLSB); /* writing results in a file */ ?
Noise_STD(n_LMA,pUSB,pLSB,&std_USB,&std_LSB); /* evaluating noise floor */ ?
?
/************** Result Display ****************************************************/ ?
printf("\n"); ?
printf("************************************************************************\n"); ?
printf(" Noise floor : \n"); ?
printf(" standard deviation at fc+fs: %7.3f mV\n",std_USB*1000); ?
printf(" standard deviation at fc-fs: %7.3f mV\n",std_LSB*1000); ?
printf(" Note: Displayed results are meaningful only when\n"); ?
printf(" the sense coil's signal is recorded with a\n"); ?
printf(" reference PICC."); ?
printf("\n*********************************************************************\n"); ?
?
free(pTime); ?
free(pVolts); ?
free(pLMA_time); ?
free(pUSB); ?
free(pLSB); ?
?
return 1; ?
} ?
/*********** End Main *******************************************************************/ ?
(Введено дополнительно. Изм. A2:2012.) ?
(Измененная редакция. Поправка Cor.1:2013.) ?
(справочное)
НАЦИОНАЛЬНЫМ СТАНДАРТАМ РОССИЙСКОЙ ФЕДЕРАЦИИ
И МЕЖГОСУДАРСТВЕННЫМ СТАНДАРТАМ
Таблица ДА.1
--------------------------------
<1> Действует ГОСТ Р 54500.3-2011/Руководство ИСО/МЭК 98-3:2008 "Неопределенность измерения. Часть 3. Руководство по выражению неопределенности измерения".
Вернуться в "Каталог нормативных документов"
Источник информации: https://internet-law.ru/documents/prod/gost-r_gosudarstvennyj-standart/35/gost_83157.html
На правах рекламы:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||