В этом примере показано, как использовать обнаружение циклостационарных признаков для различения сигналов с различными схемами модуляции, включая P25 сигналы [1]. Он определяет четыре случая сигналов: только шум, C4FM, CQPSK и один произвольный тип. Пример применяет алгоритм обнаружения к сигналам с различными значениями SNR и к захваченному реальному сигналу P25, а затем классифицирует сигналы как один из четырех типов. Графические результаты показывают, что алгоритм обнаружения успешен во всех случаях.
Проект 25 (P25 или APCO-25) представляет собой набор стандартов цифровой радиосвязи для использования федеральными, государственными, провинциальными и местными агентствами общественной безопасности в Северной Америке. При возникновении чрезвычайных ситуаций этот пакет протоколов обеспечивает связь между государственными учреждениями и группами по оказанию взаимной помощи. В этом отношении P25 выполняет ту же роль, что и протокол Европейского наземного магистрального радио (TETRA) [2], хотя эти два стандарта не являются совместимыми друг с другом. В Северной Америке P25 широко используется в сфере общественной безопасности, охраны, общественного обслуживания и коммерческих применений [1].
Проект 25 осуществляется в два этапа. В фазе 1 P25 использует C4FM, акроним для совместимой частотной модуляции 4 уровня. В простейшем виде представляет собой особый тип 4FSK модуляции, использующий четыре различные частоты для представления символов. Фаза 1 использует эту схему модуляции для передачи цифровой информации по каналу 12,5 кГц.
Фаза 2 передает цифровую информацию по каналу 6,25 кГц с использованием совместимого формата модуляции квадратурной фазовой манипуляции (CQPSK). CQPSK модуляция по существу представляет собой pi/4 дифференциальную квадратурную фазовую манипуляцию (pi/4 DQPSK), где кодирование симметрично, используя значения фазового изменения -135 градусов, -45 градусов, + 45 градусов и + 135 градусов, как показано на следующем рисунке.

На этом рисунке следующим состоянием красных точек могут быть только зеленые точки, и наоборот. Хотя скорость передачи данных и биты на символ идентичны, основное различие между двумя схемами модуляции заключается в том, что C4FM использует сдвиг частоты для изображения символа, который обеспечивает сигнал фиксированной амплитуды. Напротив, CQPSK использует фазовый сдвиг для изображения символа, который передает амплитудную составляющую сигналу.
Распознавание модуляции и классификация сигналов являются предметом значительных исследований на протяжении более двух десятилетий. Классификационные схемы, как правило, можно разделить на одну из двух широких категорий: подходы, основанные на правдоподобии (LB), и подходы, основанные на признаках (FB) [3]. Обнаружение циклостационарных признаков - это метод FB, основанный на том факте, что сигналы связи не точно описаны как стационарные, а скорее более уместно смоделированы как циклостационарные [4].
Циклостационарный процесс - это сигнал, имеющий статистические свойства, которые изменяются циклически со временем [5]. Эти периодичности возникают для сигналов четко определенными способами из-за таких процессов, как выборка, сканирование, модуляция, мультиплексирование и кодирование. Этот результирующий периодический характер сигналов можно использовать для определения схемы модуляции неизвестного сигнала [4].
Обнаружение циклостационарных признаков является надежным методом спектрального зондирования, поскольку модулированная информация представляет собой циклостационарный процесс, в то время как шум не имеет значения. В результате циклические детекторы могут успешно работать даже в средах с низким SNR.
В случае только шума создайте вектор (4 * N) по 1 белого гауссова шума мощностью 1 дБВт. 1/( 4 * N) - циклическое разрешение, используемое для вычисления спектральной автокорреляционной функции (SAF) в commP25ssca.m.
N = 4096; input = wgn(4*N,1,1);
Используйте функцию автокорреляции спектра временной области для анализа циклостационарных особенностей сигнала x (t). Выполните функцию спектральной автокорреляции на commP25ssca.m входного сигнала. Эта функция оценивает идеальную спектральную автокорреляционную функцию с использованием алгоритма корреляции спектра полосы (SSCA) [3] способа временного сглаживания. Это алгоритм сглаживания времени на основе БПФ. Для получения дополнительной информации о реализации этого алгоритма см. [6].
Запустите функцию печати commP25plot.m. Этот этап иллюстрирует спектральную автокорреляционную функцию, которая является трехмерной фигурой. Его ось x представляет циклическую частоту (альфа) от -1 до 1. Его ось y представляет спектральную частоту (f) от -0,5 до 0,5, а его ось z (Sx) представляет соответствующую величину спектральной автокорреляционной функции для каждой пары (альфа, f). Циклическое разрешение dalpha = 1/T, где T - время наблюдения данных. Спектральное разрешение df = 1/Tw, где Tw - время окна для вычисления комплексной демодуляции [7]. Так как T > Tw, дальфа < df. Обратите внимание, что если альфа не равно нулю, значения SAF приблизительно равны нулю.
% 64 represents the window time Tw, 4*N represents the observation time T [Sx,alphao,fo] = commP25ssca(input,1,1/64,1/(4*N)); fig1 = figure('Position',figposition([5 40 40 40])); commP25plot(Sx,alphao,fo);

commP25decision_noise.m определяет, содержит ли входной сигнал только шум. commP25decision_c4fm.m определяет, является ли входной сигнал сигналом C4FM. И commP25decision_cqpsk.m определяет, является ли входной сигнал сигналом CQPSK. Эти решения основываются на расположении пиков в СВС. В этом примере код правильно делает вывод об отсутствии P25 сигнала.
[c,d] = size(Sx); [Ades,Index] = sort(Sx(:),'descend'); % sort Sx by its element and store in Ades [Ridx,Cidx] = ind2sub(size(Sx),Index); % corresponding row index and column index leng = length(Ades); noise_decision = commP25decision_noise(Ades,Ridx,Cidx,leng,c,d); if noise_decision == 0 c4fm_decision = commP25decision_c4fm(Ades,Ridx,leng,c); if c4fm_decision == 0 commP25decision_cqpsk(Ades,Ridx,Cidx,leng,c,d); end end
There is no P25 signal.
Согласно [8] следующая структура модуляции генерирует выходной сигнал C4FM.

Нормальный приподнятый косинусный фильтр, удовлетворяющий критерию формирования импульса Найквиста, минимизирует межсимвольные помехи. Параметры приподнятого косинусного фильтра выбираются в соответствии со спецификациями фильтра в [8]. В частности, этот повышенный косинусный фильтр имеет коэффициент повышения дискретизации 4 и коэффициент скатывания 0,2. Стандарт C4FM также требует обратного синк-фильтра после фильтра с увеличенным косинусом, чтобы компенсировать синк-отклик интегрального и демпфирующего фильтра приемника P25. ЧМ модулятор имеет отклонение 600 Гц.
Чтобы наблюдать влияние шума на проектные решения, выполните обнаружение при значениях SNR -3 дБ, 3 дБ и бесконечности дБ.
% The length of input bits is N. The length of the output bits must also be % N x = randi([0,3],N,1); sym = 2*x-3; % integer input % Raised Cosine Filter sampsPerSym = 4; % Upsampling factor % Design raised cosine filter with given order in symbols. Apply gain to % the unit energy filter to obtain max amplitude of 1. rctFilt = comm.RaisedCosineTransmitFilter(... 'Shape', 'Normal', ... 'RolloffFactor', 0.2, ... 'OutputSamplesPerSymbol', sampsPerSym, ... 'FilterSpanInSymbols', 60, ... 'Gain', 1.9493); c4fm_init = rctFilt(sym); shape2 = 'Inverse-sinc Lowpass'; d2 = fdesign.interpolator(2, shape2); intrpltr = design(d2, 'SystemObject', true); c4fm_init = intrpltr(c4fm_init); % Baseband Frequency Modulator Fs = 4800; freqdev = 600; int_x = cumsum(c4fm_init)/Fs; c4fm_output = exp(1i*2*pi*freqdev*int_x); y = c4fm_output(1:N); % Ideal case, SNR = infinity y1 = awgn(y,3); % SNR = 3 dB y2 = awgn(y,-3); % SNR = -3 dB
Вычисляют и строят график соответствующих спектральных автокорреляционных функций. Следует отметить, что пики SAF становятся более невнятными по мере уменьшения SNR.
[Sx0,alphao0,fo0] = commP25ssca(y,1,1/64,1/(4*N)); [Sx1,alphao1,fo1] = commP25ssca(y1,1,1/64,1/(4*N)); [Sx2,alphao2,fo2] = commP25ssca(y2,1,1/64,1/(4*N)); fig2 = figure('Position',figposition([5 40 80 40])); subplot(131); commP25plot(Sx0,alphao0,fo0); title('Ideal case'); subplot(132); commP25plot(Sx1,alphao1,fo1); title('SNR = 3 dB'); subplot(133); commP25plot(Sx2,alphao2,fo2); title('SNR = -3 dB');

В этом разделе выполняются те же процедуры, что и в предыдущем, и получаются результаты классификации для каждого значения SNR. Функция commP25decision.m выполняет классификацию измерения спектра для всех возможных типов входных сигналов.
commP25decision(Sx0); % Ideal case
There is signal present. Checking for presence of C4FM. This is C4FM.
commP25decision(Sx1); % SNR = 3 dB
There is signal present. Checking for presence of C4FM. This is C4FM.
commP25decision(Sx2); % SNR = -3 dB
There is signal present. Checking for presence of C4FM. This is C4FM.
Согласно [8] следующая структура модуляции генерирует выходной сигнал CQPSK.

Модулятор CQPSK состоит из синфазной и квадратурной (I и Q) частей. Входные биты обрабатываются справочной таблицей [8] для получения 5-уровневого сигнала I/Q. Поскольку спецификация таблицы поиска эквивалентна pi/4 DQPSK, в примере для реализации этой таблицы поиска используется object™ системы модулятора DQPSK. Сигналы I/Q затем фильтруются с помощью фильтра с увеличенным косинусом, описанного в предыдущем случае.
% The size of input bits is 2*N, the size of output is 4*N x = randi([0,1],2*N,1); % Create a DQPSK modulator System object(TM) with bits as inputs, phase % rotation of pi/4 and Gray-coded constellation dqpskMod = comm.DQPSKModulator(pi/4,'BitInput',true); % Modulate and filter modout = dqpskMod(x); release(rctFilt); cqpsk_output = rctFilt(modout); y = cqpsk_output; % Ideal case, SNR = infinity y1 = awgn(y,3); % SNR = 3 dB y2 = awgn(y,-3); % SNR = -3 dB
Вычислите и постройте график соответствующих спектральных автокорреляционных функций.
[Sx0,alphao0,fo0] = commP25ssca(y,1,1/64,1/(4*N)); [Sx1,alphao1,fo1] = commP25ssca(y1,1,1/64,1/(4*N)); [Sx2,alphao2,fo2] = commP25ssca(y2,1,1/64,1/(4*N)); fig3 = figure('Position',figposition([5 40 80 40])); subplot(131); commP25plot(Sx0,alphao0,fo0); title('Ideal case'); subplot(132); commP25plot(Sx1,alphao1,fo1); title('SNR = 3 dB'); subplot(133); commP25plot(Sx2,alphao2,fo2); title('SNR = -3 dB');

Выходные данные кода ниже показывают результаты обнаружения CQPSK для трех различных значений SNR.
commP25decision(Sx0); % Ideal case
There is signal present. Checking for presence of C4FM. This is NOT C4FM. Checking for presence of CQPSK. This is CQPSK.
commP25decision(Sx1); % SNR = 3 dB
There is signal present. Checking for presence of C4FM. This is NOT C4FM. Checking for presence of CQPSK. This is CQPSK.
commP25decision(Sx2); % SNR = -3 dB
There is signal present. Checking for presence of C4FM. This is NOT C4FM. Checking for presence of CQPSK. This is CQPSK.
Этот случай определяет один произвольный тип сигнала, обрабатывает его с помощью P25 циклостационарного детектора и определяет, является ли он сигналом P25.
Создайте фильтр нижних частот equiriple FIR и примените его к случайному входу. В этом случае не добавляйте к сигналу никаких шумов. Попробуйте использовать дополнительные типы сигналов и дайте циклостационарному детектору классифицировать их.
bcoeffs = firpm(200,[0 0.2 0.22 1],[1 1 0 0]); % Set N to achieve 40 dB rejection
input = randn(N,1);
y = filter(bcoeffs,1,input);
Затем вычисляем и строим график спектральной автокорреляционной функции. Следует отметить, что различные характеристики модуляции каждого сигнала дают значительно различные SAF.
[Sx,alphao,fo] = commP25ssca(y,1,1/64,1/(4*N));
fig4 = figure('Position',figposition([5 40 40 40]));
commP25plot(Sx,alphao,fo);

Выполните те же процедуры и получите результат классификации.
commP25decision(Sx);
There is signal present. Checking for presence of C4FM. This is NOT C4FM. Checking for presence of CQPSK. This is NOT CQPSK either, so it is not a P25 signal.
В этом случае алгоритм обнаружения применяется к захваченному реальному сигналу C4FM. Сигнал передавался P25 радиостанцией на частоте 446 МГц, принимался USRP™ радиостанцией, а затем сохранялся MATLAB ® в capturedc4fm.mat. Выполните те же процедуры и получите результат классификации.
load capturedc4fm.mat; y = y(1:4*N); agc = comm.AGC; y = 0.1*agc(y); [Sx,alphao,fo] = commP25ssca(y,1,1/64,1/(4*N)); fig5 = figure('Position',figposition([5 40 40 40])); commP25plot(Sx,alphao,fo); commP25decision(Sx);
There is signal present. Checking for presence of C4FM. This is C4FM.

Этот пример показывает, как использовать обнаружение циклостационарных признаков для различения сигналов различных схем модуляции. Алгоритм классифицирует сигналы на основе местоположения пиков в спектральной автокорреляционной функции. Обнаружение циклостационарных признаков имеет преимущества перед некоторыми детекторами, такими как детектор энергии, благодаря его устойчивости к шуму.
В этом примере используются следующие сценарии и вспомогательные функции:
P25 Группа технологических интересов: http://www.project25.org/
TETRA < https://en.wikipedia.org/wiki/Terrestrial_Trunked_Radio >
Е. С. Как и «Распознавание некооперативной модуляции посредством использования циклической статистики». Дипломная работа MS. 2007
E. C. Like, V. D. Chakravarty, P. Ratazzi и Z. Wu, «Классификация сигналов в замирающих каналах с использованием циклического спектрального анализа», EURASIP Journal on Wireless Communications and Networking, Volume 2009, 2009.
W. A. Гарднер, А. Наполитано и Л. Паура, «Циклостационарность: Полвека исследований», Обработка сигналов, т. 86, № 4, стр. 639 - 697, 2006.
Е. Л. Да Коста, «Обнаружение и идентификация циклостационарных сигналов». Дипломная работа MS. 1996.
Антонио Ф. Лима, младший, «Анализ радиосигналов с низкой вероятностью перехвата (LPI) с использованием циклостационарной обработки». Дипломная работа MS. 2002.
Проект 25 стандарта TIA: < https ://www.tiaonline.org/what-we-do/standards/>