В этом примере показано, как сгенерировать формы волны, декодируйте формы волны и вычислите кривые BER для различных технических требований PHY стандарта IEEE® 802.15.4™ [1], пользуясь Библиотекой Communications Toolbox™ для Протокола ZigBee®.
Стандарт IEEE 802.15.4 задает слои PHY и MAC Беспроводных Персональных Сетей области С низкой ставкой (LR-WPANs) [1]. Слои IEEE 802.15.4 PHY и MAC обеспечивают основание других стандартов более высокого слоя, таких как ZigBee, WirelessHart®, 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 МГц), IEEE 802.15.4c (OQPSK в 780 МГц) и IEEE 802.15.4d (GFSK и BPSK в 950 МГц).
Эти физические уровни задают формат для Модуля данных о протоколе PHY (PPDU), который включает преамбулу, разделитель запуска из системы координат (SFD), и длину и содержимое Модуля данных о протоколе MAC (MPDU). Преамбула и SFD используются в синхронизации уровня системы координат. В следующем описании термин символ обозначает целочисленный индекс последовательности чипа (согласно стандарту IEEE 802.15.4), не символ модуляции (т.е. комплексное число).
OQPSK PHY: Вся ФИЗИКА OQPSK сопоставляет каждые 4 бита PPDU с одним символом. OQPSK PHY на 2,4 ГГц распространяет каждый символ к последовательности с 32 чипами, в то время как другая ФИЗИКА OQPSK распространила его к последовательности с 16 чипами. Затем последовательности чипа являются OQPSK, модулируемым и переданным формирующий фильтру импульса полусинусоиды (или нормальный повышенный фильтр косинуса в полосе на 780 МГц). Для подробного описания см. Пункт 10 в [1].
BPSK PHY: BPSK PHY дифференцированно кодирует биты PPDU. Каждый получившийся бит распространен к последовательности с 15 чипами. Затем последовательности чипа являются BPSK, модулируемым и переданным нормальному повышенному фильтру косинуса. Для подробного описания см. Пункт 11 в [1].
ASK PHY: ASK PHY использует модуляцию BPSK в преамбуле и SFD только. Остающиеся биты PPDU, т.е. заголовок PHY (PHR) и MPDU, сначала сопоставлены с 20-битными символами в полосе на 868 МГц и к 5-битным символам в полосе на 915 МГц. Каждый символ распространен к последовательности с 32 чипами с помощью метода, известного как Параллельный спектр распространения последовательности (PSSS) или Мультиплексирование деления ортогонального кода (OCDM). Последовательность чипа является затем ASK, модулируемым, и переданным корню повысил фильтр косинуса. Для подробного описания см. Пункт 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, berOQPSKrest, 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 / 868MHz / 915MHz 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' [~, berOQPSKrest(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, berOQPSKrest, '-*', EcNo, berBPSK, '-+', ... EcNo, berASK915, '-x', EcNo, berASK868, '-s', EcNo, berGFSK, '-v') legend('OQPSK, 2450 MHz', 'OQPSK, 780/868/950 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-WPANs)