В этом примере показано, как генерировать формы сигналов, декодировать формы сигналов и вычислять кривые BER для различных спецификаций PHY стандарта IEEE ® 802.15.4™ [1], используя библиотеку Communications Toolbox™ Library для протокола ZigBee ®.
Стандарт IEEE 802.15.4 определяет уровни PHY и MAC низкоскоростных беспроводных персональных сетей (LR-WPAN) [1]. Уровни IEEE 802.15.4 PHY и MAC обеспечивают основу для других стандартов более высокого уровня, таких как ZigBee, StartHart ®, 6LoWPAN и MiWi. Такие стандарты находят применение в домашней автоматизации и сети датчиков и имеют большое значение для тенденции Интернета вещей (IoT).
Исходный стандарт IEEE 802.15.4 и поправки к нему определяют несколько уровней PHY, которые используют различные схемы модуляции и поддерживают различные скорости передачи данных. Эти физические уровни были разработаны для конкретных диапазонов частот и, в определенной степени, для конкретных стран. Этот пример предоставляет функции, которые генерируют и декодируют сигналы для физических уровней, предложенных в первоначальной спецификации IEEE 802.15.4 (OQPSK в 2,4 ГГц, BPSK в 868/915 МГц), IEEE 802.15.4b (OQPSK и ASK в 868/915 МГц).
Эти физические уровни определяют формат блока данных протокола PHY (PPDU), который включает в себя преамбулу, разделитель начала кадра (SFD) и длину и содержимое блока данных протокола MAC (MPDU). Преамбула и SFD используются для синхронизации на уровне кадра. В последующем описании символ термина обозначает целочисленный индекс элементарной последовательности (согласно стандарту IEEE 802.15.4), а не символ модуляции (т.е. комплексное число).
OQPSK PHY: Все OQPSK PHY отображают каждые 4 бита PPDU в один символ. OQPSK PHY 2,4 ГГц распространяет каждый символ в 32-элементную последовательность, в то время как другие OQPSK PHY распространяют его в 16-элементную последовательность. Затем элементарные последовательности модулируются OQPSK и передаются в фильтр формирования полусинусных импульсов (или нормальный фильтр с увеличенным косинусом, в диапазоне 780 МГц). Подробное описание см. в Статье 10 в [1].

BPSK PHY: BPSK PHY дифференцированно кодирует биты PPDU. Каждый результирующий бит распределяется по последовательности из 15 элементарных посылок. Затем последовательности элементарных посылок модулируются BPSK и передаются в нормальный фильтр с увеличенным косинусом. Подробное описание см. в статье 11 в [1].

СПРОСИТЕ PHY: СПРОСИТЬ PHY использует модуляцию BPSK для преамбулы и SFD только. Остальные биты PPDU, т.е. заголовок PHY (PHR) и MPDU, сначала отображаются на 20-битовые символы в диапазоне 868 МГц и на 5-битовые символы в диапазоне 915 МГц. Каждый символ расширяется в 32-элементную последовательность с использованием технологии, известной как расширение спектра параллельных последовательностей (PSSS) или мультиплексирование с ортогональным кодовым разделением (OCDM). Последовательность элементарных посылок затем модулируется с помощью АСК и передается на корневой косинусный фильтр. Подробное описание см. в статье 12 в [1].

GFSK PHY: GFSK PHY сначала белит биты PPDU, используя модуль 2 дополнения с последовательностью PN9. Затем отбеленные биты модулируются GFSK. Подробное описание см. в статье 15 в [1].

Этот код иллюстрирует, как использовать функции генерации и декодирования формы сигнала для различных диапазонов частот, и сравнивает соответствующие кривые BER.
EcNo = -25:2.5:17.5; % Ec/No range of BER curves spc = 4; % samples per chip msgLen = 8*120; % length in bits message = randi([0 1], msgLen, 1); % transmitted message % Preallocate vectors to store BER results: [berOQPSK2450, berOQPSK780, berBPSK, berASK915, ... berASK868, berGFSK] = deal(zeros(1, length(EcNo))); for idx = 1:length(EcNo) % loop over the EcNo range % O-QPSK PHY, 2450 MHz waveform = lrwpan.PHYGeneratorOQPSK(message, spc, '2450 MHz'); K = 2; % information bits per symbol SNR = EcNo(idx) - 10*log10(spc) + 10*log10(K); received = awgn(waveform, SNR); bits = lrwpan.PHYDecoderOQPSKNoSync(received, spc, '2450 MHz'); [~, berOQPSK2450(idx)] = biterr(message, bits); % O-QPSK PHY, 780MHz waveform = lrwpan.PHYGeneratorOQPSK(message, spc, '780 MHz'); % or '868 MHz'/'915 MHz' SNR = EcNo(idx) - 10*log10(spc) + 10*log10(K); received = awgn(waveform, SNR); bits = lrwpan.PHYDecoderOQPSKNoSync(received, spc, '780 MHz'); % or '868 MHz'/'915 MHz' [~, berOQPSK780(idx)] = biterr(message, bits); % BPSK PHY, 868/915/950 MHz waveform = lrwpan.PHYGeneratorBPSK(message, spc); K = 1; % information bits per symbol SNR = EcNo(idx) - 10*log10(spc) + 10*log10(K); received = awgn(waveform, SNR); bits = lrwpan.PHYDecoderBPSK(received, spc); [~, berBPSK(idx)] = biterr(message, bits); % ASK PHY, 915 MHz waveform = lrwpan.PHYGeneratorASK(message, spc, '915 MHz'); K = 1; % information bits per symbol SNR = EcNo(idx) - 10*log10(spc) + 10*log10(K); received = awgn(waveform, SNR); bits = lrwpan.PHYDecoderASK(received, spc, '915 MHz'); [~, berASK915(idx)] = biterr(message, bits(1:msgLen)); % ASK PHY, 868 MHz waveform = lrwpan.PHYGeneratorASK(message, spc, '868 MHz'); K = 1; % information bits per symbol SNR = EcNo(idx) - 10*log10(spc) + 10*log10(K); received = awgn(waveform, SNR); bits = lrwpan.PHYDecoderASK(received, spc, '868 MHz'); [~, berASK868(idx)] = biterr(message, bits(1:msgLen)); % GFSK PHY, 950 MHz waveform = lrwpan.PHYGeneratorGFSK(message, spc); K = 1; % information bits per symbol SNR = EcNo(idx) - 10*log10(spc) + 10*log10(K); received = awgn(waveform, SNR); bits = lrwpan.PHYDecoderGFSK(received, spc); [~, berGFSK(idx)] = biterr(message, bits); end % plot BER curve figure semilogy(EcNo, berOQPSK2450, '-o', EcNo, berOQPSK780, '-*', EcNo, berBPSK, '-+', ... EcNo, berASK915, '-x', EcNo, berASK868, '-s', EcNo, berGFSK, '-v') legend('OQPSK, 2450 MHz', 'OQPSK, 780 MHz', 'BPSK, 868/915/950 MHz', 'ASK, 915 MHz', ... 'ASK, 868 MHz', 'GFSK, 950 MHz', 'Location', 'southwest') title('IEEE 802.15.4 PHY BER Curves') xlabel('Chip Energy to Noise Spectral Density, Ec/No (dB)') ylabel('BER') axis([min(EcNo) max(EcNo) 10^-2 1]) grid on

Далее можно изучить следующие функции генератора и декодирования:
IEEE 802.15.4-2011 - Стандарт IEEE для локальных и городских сетей - Часть 15.4: Низкоскоростные беспроводные персональные сети (LR-WPAN)