Michailov Ivan Vyacheslavovich
 
Михайлов Иван  
Вячеславович  
E-mail: ivanvm@list.ru 

Очерк А.Б.Сергиенко "Цифровая модуляция"

Источник: http://matlab.exponenta.ru/communication/book4/index.php

В настоящее время все большая часть информации, передаваемой по разнообразным каналам связи, существует в цифровом виде. Это означает, что передаче подлежит не непрерывный (аналоговый) модулирующий сигнал, а последовательность целых чисел n0, n1, n2, …, которые могут принимать значения из некоторого фиксированного конечного множества. Эти числа, называемые символами (symbol), поступают от источника информации с периодом T, а частота, соответствующая этому периоду, называется символьной скоростью (symbol rate): fT = 1/T.
Замечание. Часто используемым на практике вариантом является двоичная (binary) последовательность символов, когда каждое из чисел ni может принимать одно из двух значений — 0 или 1.
Последовательность передаваемых символов является, очевидно, дискретным сигналом. Поскольку символы принимают значения из конечного множества, этот сигнал фактически является и квантованным, то есть его можно назвать цифровым сигналом. Далее будут рассматриваться вопросы, связанные с преобразованием этого цифрового сигнала в аналоговый модулированный сигнал.
Типичный подход при осуществлении передачи дискретной последовательности символов состоит в следующем. Каждому из возможных значений символа сопоставляется некоторый набор параметров несущего колебания. Эти параметры поддерживаются постоянными в течение интервала T, то есть до прихода следующего символа. Фактически это означает преобразование последовательности чисел {nk} в ступенчатый сигнал sn(t) с использованием кусочно-постоянной интерполяции:
sn(t) = f(nk), kT <=  t < (k + 1)T.
Здесь f — некоторая функция преобразования. Полученный сигнал sn(t) далее используется в качестве модулирующего сигнала обычным способом.
Такой способ модуляции, когда параметры несущего колебания меняются скачкообразно, называется манипуляцией (keying). В зависимости от того, какие именно параметры изменяются, различают амплитудную (АМн), фазовую (ФМн), частотную (ЧМн) и квадратурную (КАМн) манипуляцию.


Амплитудная манипуляция
Как будет показано далее, амплитудная манипуляция (АМн; английский термин — amplitude shift keying, ASK), при которой скачкообразно меняется амплитуда несущего колебания, является частным случаем квадратурной манипуляции (см. далее). Поэтому здесь мы только построим в качестве примера график АМн-сигнала и скажем несколько слов о демодуляции сигналов данного типа.
Демодуляция АМн-сигнала может выполняться теми же методами, что и в случае квадратурной манипуляции (путем умножения на несущее колебание). Однако наличие всего лишь двух возможных значений начальной фазы несущей, отличающихся друг от друга на 180° , делает возможной реализацию автоматической подстройки начальной фазы с помощью петли ФАПЧ. Этот режим демодуляции реализуется функциями ddemod и ddemodce при указании вида манипуляции 'ask/costas'.
Пример
Амплитудная манипуляция осуществляется функциями dmod (формируется вещественный выходной сигнал) и dmodce (формируется комплексная огибающая) пакета Communications при указании в них параметра типа модуляции 'ask'. Следующий за ним параметр M указывает количество используемых уровней манипуляции. Символы, подлежащие передаче, должны принимать целочисленные значения, лежащие в диапазоне 0…M–1. Символу 0 соответствует значение амплитуды, равное –1, а символу M–1 — значение амплитуды, равное 1. Остальные уровни равномерно распределены между этими значениями. Таким образом, строго говоря, в данном случае может меняться не только амплитуда, но и фаза несущего колебания (отрицательные амплитудные множители соответствуют изменению фазы на 180° ).
В качестве примера построим график сигнала, содержащего все возможные символы при 8-позиционной АМн:
M = 8; % количество уровней манипулЯции
sy = 0:M-1; % передаваемые символы
Fd = 1; % символьнаЯ скорость
Fc = 4; % несущаЯ частота
FsFd = 40; % отношение Fs/Fd
Fs = Fd * FsFd; % частота дискретизации
% формируем АМн-сигнал
[s_ask, t] = dmod(sy, Fc, Fd, Fs, 'ask', M);
plot(t, s_ask)
grid on



На графике хорошо виден бросок фазы в середине сигнала. Кроме того, можно заметить, что фазы посылок в первой и второй половинах сигнала, имеющих одинаковые амплитуды, отличаются на 180° .


Фазовая манипуляция
Фазовая манипуляция (ФМн; английский термин — phase shift keying, PSK), при которой скачкообразно меняется фаза несущего колебания, тоже является частным случаем квадратурной манипуляции (см. далее).
На практике фазовая манипуляция используется при небольшом числе возможных значений начальной фазы — как правило, 2, 4 или 8. Кроме того, при приеме сигнала сложно измерить абсолютное значение начальной фазы; значительно проще определить относительный фазовый сдвиг между двумя соседними символами. Поэтому обычно используется фазоразностная манипуляция (синонимы — дифференциальная фазовая манипуляция, относительная фазовая манипуляция; английский термин — differential phase shift keying, DPSK).
Демодуляция фазовой манипуляции может выполняться тем же методом, что и в случае квадратурной манипуляции (путем умножения на несущее колебание). Применительно к ФМн данный метод демодуляции часто называется корреляционным.
Пример
Фазовая манипуляция осуществляется функциями dmod (формируется вещественный выходной сигнал) и dmodce (формируется комплексная огибающая) пакета Communications при указании в них параметра типа модуляции 'psk'. Следующий за ним параметр M указывает количество используемых градаций начальной фазы. Символы, подлежащие передаче, должны принимать целочисленные значения, лежащие в диапазоне 0…M–1. Символу k соответствует значение начальной фазы, равное 2p k/M радиан, или 360k/M градусов.
В качестве примера построим график сигнала, содержащего все возможные символы при 4-позиционной ФМн:
M = 4; % количество позиций манипулЯции
sy = 0:M-1; % передаваемые символы
Fd = 1; % символьнаЯ скорость
Fc = 4; % несущаЯ частота
FsFd = 40; % отношение Fs/Fd
Fs = Fd * FsFd; % частота дискретизации
% формируем ФМн-сигнал
[s_psk, t] = dmod(sy, Fc, Fd, Fs, 'psk', M);
plot(t, s_psk)

На графике видны скачки фазы на 90° , происходящие при переходе от одного символа к другому.


Частотная манипуляция
При частотной манипуляции (ЧМн; английский термин — frequency shift keying, FSK) каждому возможному значению передаваемого символа сопоставляется своя частота. В течение каждого символьного интервала передается гармоническое колебание с частотой, соответствующей текущему символу. При этом возможны различные варианты, различающиеся выбором начальной фазы отдельных синусоидальных посылок.
Первый способ — когда все посылки, соответствующие одному закону передаваемого символа, имеют одинаковую начальную фазу, то есть являются идентичными. При этом можно заранее сформировать наборы отсчетов для всех возможных дискретных символов. Тогда осуществление частотной манипуляции сводится к последовательной передаче заранее рассчитанных последовательностей отсчетов, соответствующих поступающим символам. Однако если используемые частоты манипуляции не кратны символьной скорости, сформированный таким образом ЧМн-сигнал будет содержать разрывы (скачки) на стыках символов. Вследствие этого спектр сигнала будет иметь всплески на частотах, кратных символьной скорости.
Второй способ — непрерывная генерация колебаний всех необходимых частот и осуществление переключения между этими сигналами в соответствии с поступающими символами. Данный метод также не гарантирует отсутствие скачков на стыках символов, но вследствие того, что начальные фазы посылок меняются от символа к символу, скачки возникают не на всех стыках, и их величина оказывается различной. В результате возникающие из-за скачков всплески спектра в данном случае выражены слабее. Именно этот вариант формирования ЧМн-сигнала используется в функциях dmod и dmodce пакета Communications.
Наконец, третий способ — когда поступающие для передачи символы управляют скоростью линейного нарастания текущей фазы, а частотно-манипулированный сигнал формируется путем вычисления косинуса этой текущей фазы. При этом фазовая функция, а значит, и сам ЧМн-сигнал оказываются непрерывными (не имеющими скачков). Данный способ сложнее в реализации, но он дает наиболее компактный спектр сигнала. ЧМн-сигнал, полученный таким образом, называется частотно-манипулированным сигналом с непрерывной фазовой функцией (continuous phase frequency shift keying — CPFSK).
Пример 1
Частотная манипуляция осуществляется функциями dmod (формируется вещественный выходной сигнал) и dmodce (формируется комплексная огибающая) пакета Communications при указании в них параметра типа модуляции 'fsk'. Следующие за ним параметры M и tone указывают соответственно количество используемых частот манипуляции и расстояние между соседними частотами (по умолчанию значение параметра tone равно символьной скорости Fd). Символы, подлежащие передаче, должны принимать целочисленные значения, лежащие в диапазоне 0…M–1. Символу k соответствует смещение частоты (относительно несущей частоты Fc), равное tone*(1–M+2*k)/2.
В качестве примера сформируем 2-позиционный (бинарный) ЧМн-сигнал, в котором возможным значениям символов 0 и 1 соответствуют частоты 800 и 1600 Гц. Символьная скорость будет равна 400 символам в секунду, а частота дискретизации — 16 кГц:
bits = [0 1 0 0 1]; % цифровое сообщение
N = length(bits); % длина сообщениЯ
Fd = 400; % символьнаЯ скорость
FsFd = 40; % отношение Fs/Fd
Fs = Fd * FsFd; % частота дискретизации
f0 = 800; % частота манипулЯции длЯ символа "0"
f1 = 1600; % частоты манипулЯции длЯ символа "1"
Fc = (f0 + f1)/2; % несущаЯ частота
tone = f1 – f0; % разнос частот
% формируем ЧМн-сигнал
[s_fsk, t] = dmod(bits, Fc, Fd, Fs, 'fsk', 2, tone);
td = t * Fd; % времЯ длЯ графика – в символах
plot(td, s_fsk)
xlabel('Symbols')
ylabel('s_{FSK}')
ylim([-1.1 1.1])

На графике хорошо заметно двукратное изменение частоты сигнала при смене значения передаваемого бита. В данном примере на длительности символа укладывается два периода колебания при передаче нулевого бита и четыре периода — при передаче единичного бита.


Демодуляция ЧМн-сигнала

Прием ЧМн-сигнала, как правило, осуществляется корреляционным методом. При этом корреляционный прием может быть когерентным или некогерентным. Когерентный метод может использоваться, если известны начальные фазы посылок. Сущность его состоит в вычислении взаимной корреляции между принимаемым сигналом и колебаниями-образцами (опорными сигналами), представляющими собой гармонические колебания с используемыми для манипуляции частотами. Взаимная корреляция сигнала с k-м опорным сигналом для n-го по времени символа рассчитывается следующим образом:
.
Здесь s(t) — ЧМн-сигнал, w k — частота манипуляции, соответствующая символу, равному k, j 0k — начальная фаза посылки, T — длительность передачи символа. Использованные пределы интегрирования задают обработку n-го (по счету) символа.
После расчета взаимных корреляций zk(n) для всех k они сравниваются друг с другом в поисках максимального значения. Значение k, соответствующее максимальному zk(n), принимается в качестве демодулированного символа.
Замечание. При цифровой реализации демодуляции ЧМн-сигнала вместо интегрирования, разумеется, используется суммирование дискретных отсчетов подынтегрального выражения.
Если начальные фазы передаваемых посылок неизвестны (на практике так чаще всего и бывает), приходится использовать некогерентный (или квадратурный) корреляционный прием. В этом случае опорными сигналами служат не вещественные гармонические колебания, а комплексные экспоненты, а у результата интегрирования вычисляется модуль:
.
Из-за игнорирования фазовой информации помехоустойчивость некогерентного метода несколько ниже, чем у когерентного.
Когерентный вариант демодуляции используется функциями ddemod и ddemodce по умолчанию. Для использования некогерентного варианта необходимо при вызове этих функций указать метод манипуляции в виде 'fsk/noncoherence'.
Пример 2
В качестве примера оценим помехоустойчивость частотной манипуляции при когерентной и некогерентной демодуляции, смоделировав случайный информационный сигнал, сформировав соответствующий ЧМн-сигнал, добавив к нему шум и осуществив когерентную и некогерентную демодуляцию зашумленного сигнала. Повторив эту процедуру при различных отношениях сигнал/шум, получим графики помехоустойчивости. Параметры ЧМн-сигнала выберем соответствующими нижнему частотному каналу Рекомендации ITU-T V.21 (этот протокол используется модемами в качестве “наименьшего общего знаменателя” на самом раннем этапе вхождения в связь): символьная скорость 300 символов/с, манипуляция двоичная, символу “0” соответствует частота манипуляции 1180 Гц, символу “1” — 980 Гц. Частоту дискретизации (напомним, что при использовании функций пакета Communications она должна быть кратна символьной скорости) выберем равной 9600 Гц. Вот соответствующий код:
N = 10000; % число передаваемых бит
x = randint(N, 1); % цифровое сообщение
M = 2; % двоичнаЯ манипулЯциЯ
Fd = 300; % символьнаЯ скорость
Fs = 9600; % частота дискретизации
f0 = 1180; % частота “нуля”
f1 = 980; % частота “единицы”
Fc = (f0 + f1) / 2; % среднЯЯ частота
tone = f1 – f0; % разнос частот
s = dmod(x, Fc, Fd, Fs, 'fsk', M, tone); % манипулированный сигнал
snr = -10:10; % вектор отношений С/Ш (в децибелах)
for k = 1:length(snr)
sn = awgn(s, snr(k), 'measured'); % добавлЯем шум
% когерентнаЯ демодулЯциЯ
y_c = ddemod(sn, Fc, Fd, Fs, 'fsk', M, tone);
% некогерентнаЯ демодулЯциЯ
y_nc = ddemod(sn, Fc, Fd, Fs, 'fsk/noncoherence', M, tone);
% расчет вероЯтностей ошибок
[n_err, er_c(k)] = symerr(x, y_c);
[n_err, er_nc(k)] = symerr(x, y_nc);
end
% вывод графика
semilogy(snr, er_c, snr, er_nc)



Приведенный график показывает зависимость вероятности ошибки от отношения сигнал/шум (в децибелах). Синяя кривая соответствует когерентной демодуляции, зеленая — некогерентной. Видно, что проигрыш некогерентного варианта когерентному составляет от 1 до 3 дБ.
Замечание. При моделировании демодуляции сигнала с отношением сигнал/шум, равным 2 дБ и более, ошибок приема не возникло. Поэтому при выводе графика вероятности ошибок с использованием логарифмического масштаба по вертикали эти точки оказались отброшенными.
Из графика также видно, что помехоустойчивость данного вида манипуляции очень высока — даже при равенстве средних мощностей сигнала и шума (отношение сигнал/шум 0 дБ) вероятность ошибки составляет примерно 2*10–4 для когерентного варианта и примерно 1,5*10–3 — для некогерентного. Платой за это в данном случае является крайне низкая скорость передачи данных — всего лишь 300 бит/с.


Минимальная частотная манипуляция
Для повышения помехоустойчивости ЧМн желательно, чтобы посылки, соответствующие разным символам, были некоррелированы, то есть имели нулевую взаимную корреляцию. Считая начальные фазы посылок нулевыми, ЧМн-сигналы для символов 0 и 1 можно записать так:
s0(t) = A cos w 0t, 0 <=  t <=  T,
s1(t) = A cos w 1t, 0 <=  t <=  T.
Их взаимная корреляция при нулевом сдвиге по времени равна
.
Если (w 1 + w 0)T >> 1, то первое слагаемое значительно меньше второго и им можно пренебречь:
.
Это значение равно нулю при (w 1 – w 0)T = p n, где n — целое число, не равное нулю. Таким образом, минимальное значение расстояния между соседними частотами манипуляции, при котором посылки, соответствующие разным символам, оказываются некоррелированными, составляет половину символьной скорости:
,
,
где fT — символьная скорость.
Двухпозиционная (двоичная) ЧМн, частоты которой выбраны согласно приведенной формуле, получила название минимальной частотной манипуляции (МЧМн, английский термин — minimum shift keying, MSK). Функции пакета Communications реализуют данный вариант частотной манипуляции при указании параметра метода манипуляции в виде 'msk'. Как и при ЧМн общего вида, в данном случае возможны когерентная и некогерентная ('msk/noncoherence') демодуляция.


Квадратурная манипуляция
При квадратурной манипуляции (КАМн; английский термин — quadrature amplitude shift keying, QASK) каждому из возможных значений дискретного символа Ck ставится в соответствие пара величин — амплитуды синфазной и квадратурной составляющих либо, что эквивалентно, амплитуда и начальная фаза несущего колебания:
Ck ®  (ak, bk), s(t) = ak cos w 0t + bk sin w 0t, kT ?  t < (k + 1)T
или
Ck ®  (Ak, j k), s(t) = Ak cos(w 0t + j k), kT ?  t < (k + 1)T.
Параметры аналогового колебания, сопоставленные дискретному символу Ck, удобно представлять в виде комплексного числа в алгебраической (ak + jbk) или экспоненциальной (Ak exp(jj k)) форме. Совокупность этих комплексных чисел для всех возможных значений дискретного символа называется сигнальным созвездием (constellation).
Замечание. Иногда, особенно в старых публикациях, используется также термин "пространственная диаграмма" (space diagram).
При представлении дискретного символа комплексным числом сигнал с квадратурной манипуляцией можно записать следующим образом:
, kT ?  t < (k + 1)T.
На практике используются созвездия, содержащие от четырех до нескольких тысяч точек. Ниже показаны некоторые созвездия, используемые модемами, предназначенными для передачи данных по телефонным линиям.

Слева показано 16-точечное созвездие, используемое в протоколе V.32 при передаче данных со скоростью 9600 бит/с. Созвездие в центре имеет 128 точек, оно соответствует протоколу V.32bis и скорости передачи данных 14 400 бит/с. Наконец, созвездие, показанное справа, содержит 640 точек, оно используется модемами, работающими согласно протоколу V.34 при скорости передачи данных 28 800 бит/с.
Пример 1
График сигнала с квадратурной манипуляцией оказывается не очень наглядным из-за смешанного (амплитудно-фазового) характера модуляции. Изменения амплитуды и фазы при переходе от символа к символу могут быть небольшими и плохо заметными на графике.
Построим тем не менее график сигнала, сформированного с использованием 16-точечного “квадратного” созвездия, показанного на приведенном рисунке слева. Такое созвездие можно реализовать, указав при вызове функций dmod и dmodce метод манипуляции 'qask' и число точек M=16. Однако в данном случае нет возможности указать, как именно точки “квадратного” созвездия должны соответствовать передаваемым символам. Поэтому мы воспользуемся самым гибким режимом квадратурной манипуляции, позволяющим задавать произвольное созвездие и реализуемым при указании метода манипуляции 'qask/arb' (от “arbitrary” — произвольный).
Параметры сигнала возьмем соответствующими модемному протоколу V.32 — несущая частота 1800 Гц, символьная скорость 2400 символов/с. Частоту дискретизации (напомним, что при использовании функций пакета Communications она должны быть кратна символьной скорости) примем равной 19200 Гц.
Ниже приведен код, формирующий квадратурно-манипулированный сигнал, содержащий 1000 символов.
N = 1000; % число символов
M = 16; % число позиций манипулЯции
x = randint(N, 1, M); % случайные целые числа 0…15
Fd = 2400; % символьнаЯ скорость
Fc = 1800; % несущаЯ частота
Fs = 19200; % частота дискретизации
% карта созвездиЯ
map_i = [-1, -3, -1, -3, 1, 1, 3, 3, -1, -1, -3, -3, 1, 3, 1, 3];
map_q = [-1, -1, -3, -3, -1, -3, -1, -3, 1, 3, 1, 3, 1, 1, 3, 3];
[s_qask16, t] = dmod(x, Fc, Fd, Fs, 'qask/arb', map_i, map_q);
plot(t(1:250), s_qask16(1:250))

Как уже говорилось, параметры сформированного сигнала (структура созвездия, значения символьной скорости и несущей частоты) соответствуют модему, передающему данные с скоростью 9600 бит/с в соответствии с Рекомендацией ITU-T V.32. Прослушаем сигнал, используя для этого функцию soundsc, чтобы не заботиться о приведении сигнала к диапазону уровней –1…1:
soundsc(repmat(s_qask16, 10, 1), Fs)
Замечание. Функция repmat использована здесь, чтобы повторить сформированный сигнал десять раз — иначе звук окажется слишком коротким.
Если вы когда-нибудь слышали шуршащий звук модема, то должны заметить, что в сформированном нами сигнале что-то не так. Действительно, на практике при осуществлении квадратурной манипуляции выполняется еще одна операция, которую мы пока пропустили. Речь о ней пойдет далее, в разделе “Формирование спектра”.
При квадратурной манипуляции могут меняться и амплитуда, и начальная фаза несущего колебания, поэтому амплитудная и фазовая манипуляция являются частными случаями квадратурной — нужно лишь использовать соответствующие созвездия. Выведем графики созвездий, соответствующих 8-позиционной амплитудной (слева) и фазовой (справа) манипуляции, с помощью функции modmap:
subplot(1, 2, 1)
modmap('ask', 8)
subplot(1, 2, 2)
modmap('psk', 8)


Демодуляция КАМн-сигнала
Демодулируется сигнал с квадратурной манипуляцией так же, как и в случае аналоговой квадратурной модуляции — сигнал умножается на два несущих колебания, сдвинутых по фазе друг относительно друга на 90° , а результаты умножения пропускаются через ФНЧ. На выходе этих ФНЧ будут получены аналоговые сигналы синфазной и квадратурной составляющих. Далее эти сигналы дискретизируются с частотой, равной символьной скорости. Пары отсчетов синфазной и квадратурной составляющих образуют комплексное число, и ближайшая к этому числу точка используемого созвездия (а точнее — соответствующий этой точке информационный символ) выдается в качестве выходного результата.
Перечисленные действия реализуются функциями демодуляции ddemod и ddemodce пакета Communications. По умолчанию низкочастотная фильтрация осуществляется путем интегрирования сигнала (то есть суммирования его отсчетов) в течение символьного такта.
Пример 2
Реализуем демодуляцию сформированного в Примере 1 сигнала s_qask16. Приведенный ниже код реализует собственно демодуляцию и сравнение полученных символов с исходными (то есть с вектором x из Примера 1. Используется также много других переменных из Примера 1):
% демодулЯциЯ
z = ddemod(s_qask16, Fc, Fd, Fs, 'qask/arb', map_i, map_q);
% сравнение переданных и принЯтых символов
symerr(x, z)
ans =
0
Как видите, сигнал принят без ошибок. Теперь построим график расположения принятых точек на комплексной плоскости (такой график называется диаграммой рассеяния — scatter plot). Для этого нужно получить от функции ddemod аналоговый демодулированный сигнал без осуществления его дискретизации по времени и поиска ближайших точек использованного созвездия. Такой режим реализуется при использовании ключа /nomap, добавляемого к параметру, указывающему режим манипуляции. Само построение диаграммы рассеяния производится с помощью функции scatterplot.
% аналоговаЯ демодулЯциЯ без дискретизации результата
y = ddemod(s_qask16, Fc, Fd, Fs, 'qask/arb/nomap', map_i, map_q);
% вывод диаграммы рассеЯниЯ
scatterplot(y, Fs/Fd)

Полученный график выглядит крайне плохо — даже удивительно, что демодуляция прошла без ошибок. Дело в том, что при столь низком значении несущей частоты (а она в нашем примере меньше символьной скорости!) используемый по умолчанию способ фильтрации не обеспечивает хорошего подавления зеркального канала, то есть составляющих сигнала с частотами, расположенными в окрестности удвоенной частоты несущего колебания (такие частоты появляются после умножения сигнала на опорные колебания с несущей частотой). Таким образом, при приеме сигнала следует применять более тщательным образом выбранный фильтр. Однако мы рассмотрим эту проблему в комплексе с использованием фильтра для формирования спектра передаваемого сигнала.


Формирование спектра
Если параметры модуляции аналогового сигнала поддерживаются постоянными в течение символьного такта и в начале нового такта изменяются скачкообразно, это приводит к появлению скачков и в сформированном сигнале. Как известно из теории преобразования Фурье, спектр сигнала, содержащего скачки, затухает с ростом частоты медленно — пропорционально 1/w . Чтобы сделать спектр более компактным, необходимо обеспечить гладкость сигнала (то есть непрерывность сигнала и, возможно, некоторого количества его производных), а это, в свою очередь, означает гладкость модулирующей функции. Следовательно, вместо скачкообразного изменения параметров модуляции необходимо выполнить интерполяцию между точками созвездия, соответствующими последовательным символам.
Согласно теореме Котельникова, мы можем соединить отсчеты, следующие с символьной скоростью Fd, плавной функцией, занимающей полосу частот от нуля до Fd/2. В этом случае квадратурно-манипулированный сигнал будет занимать полосу частот шириной Fd. Однако медленное затухание функций sin(x)/x, составляющих базис Котельникова, делает неудобной интерполяцию на их основе. Наибольшее распространение при интерполяции отсчетов для цифровой модуляции получил SQRT-вариант фильтра с косинусоидальным сглаживанием АЧХ (square root raised-cosine filter; расчет таких фильтров может быть выполнен с помощью функции rcosine пакета Communications, а интерполяция сигнала с помощью такого фильтра осуществляется функцией rcosflt этого же пакета).
Фильтр, используемый для интерполяции, определяет форму спектра КАМн-сигнала, поэтому его называют формирующим фильтром (shaping filter), а сам процесс интерполяции — формированием спектра (spectral shaping).
Скачкообразное изменение параметров модуляции можно рассматривать как использование формирующего фильтра с прямоугольной импульсной характеристикой, длительность которой равна символьному интервалу.
Пример 3
Повторим формирование 16-позиционного квадратурно-манипулированного сигнала (см. Пример 1), используя на сей раз формирующий фильтр с косинусоидальным сглаживанием АЧХ. Функции dmod и dmodce пакета Communications в настоящее время не поддерживают использование формирующих фильтров, поэтому формирование сигнала придется осуществить в три этапа. Сначала мы отобразим передаваемые символы в точки, выбранные из используемого созвездия, с помощью функции modmap. Затем осуществим интерполяцию полученного сигнала с помощью фильтра с косинусоидальным сглаживанием, использовав для этого функцию rcosflt. Наконец, осуществим аналоговую квадратурную модуляцию с помощью функции amod.
N = 1000; % число символов
M = 16; % число позиций манипулЯции
x = randint(N, 1, M); % случайные целые числа 0…15
Fd = 2400; % символьнаЯ скорость
Fc = 1800; % несущаЯ частота
Fs = 19200; % частота дискретизации
% карта созвездиЯ
map_i = [-1, -3, -1, -3, 1, 1, 3, 3, -1, -1, -3, -3, 1, 3, 1, 3];
map_q = [-1, -1, -3, -3, -1, -3, -1, -3, 1, 3, 1, 3, 1, 1, 3, 3];
% отображаем символы в точки созвездиЯ
C = modmap(x, 1, 1, 'qask/arb', map_i, map_q);
% интерполЯциЯ
s = rcosflt(C, Fd, Fs, 'sqrt');
% аналоговаЯ модулЯциЯ
[s_qask16s, t] = amod(s, Fc, Fs, 'qam');
plot(t(1:250), s_qask16s(1:250))

Прослушаем и этот сигнал, снова используя функцию soundsc:
soundsc(repmat(s_qask16s, 10, 1), Fs)
Не правда ли, звук стал значительно больше похож на тот, что производится модемом — все дело именно в формировании спектра.
Сравним спектры мощности сигналов s_qask16 и s_qask16s, чтобы наглядно показать влияние формирующего фильтра. Для оценки СПМ используется функция pwelch пакета Signal Processing, реализующая метод усредненных модифицированных периодограмм Уэлча:
[P1, f] = pwelch(s_qask16, [], [], [], Fs);
P2 = pwelch(s_qask16s, [], [], [], Fs);
psdplot([P1 P2], f, 'Hz')

Из графиков видно, что при использовании формирующего фильтра (зеленый график) спектр сигнала оказывается значительно компактнее, чем в случае, когда формирование спектра не производится (синий график).
При приеме такого сигнала в качестве ФНЧ необходимо использовать такой же фильтр, как для формирования спектра. Последовательное использование двух SQRT-фильтров с косинусоидальным сглаживанием дает результирующую импульсную характеристику, соответствующую обычному фильтру с косинусоидальным сглаживанием, равную нулю в точках, сдвинутых на целое число символов относительно пика. Это позволяет при правильном выборе моментов взятия отсчетов устранить помехи от соседних символов (так называемую межсимвольную интерференцию, МСИ; английский термин — intersymbol interference, ISI).
Пример 4
Функции ddemod и ddemodce позволяют пользователю задавать используемый при демодуляции фильтр (для этого в конце списка параметров нужно дополнительно указать два вектора — коэффициенты числителя и знаменателя функции передачи фильтра), однако после фильтрации все равно используется интегрирование в течение символьного такта. Нам это не подходит, поэтому придется реализовать необходимую последовательность действий вручную.
Но прежде чем осуществить собственно демодуляцию, построим глазковую диаграмму (eye diagram) для данного сигнала. Глазковая диаграмма представляет собой “осциллограмму” аналогового демодулированного сигнала, построенную при длительности “прямого хода развертки”, равной одному символьному такту, и бесконечном “времени послесвечения экрана”. В точках оптимальной дискретизации линии на такой диаграмме образуют узкие пучки, свободное пространство между которыми по форме напоминает раскрытый глаз. В данном случае видно, что выбирать элементы из вектора y нужно начиная с первого (без дополнительного сдвига). Поскольку сигнал является комплексным, приведены отдельные графики для его вещественной и мнимой частей.
% расчет фильтра
b = rcosine(Fd, Fs, 'sqrt');
% аналоговаЯ демодулЯциЯ
y = ademod(s_qask16s, Fc, Fs, 'qam', b, 1);
% глазковаЯ даиграмма
eyediagram(y, Fs/Fd)
% диаграмма рассеЯниЯ
scatterplot(y, Fs/Fd)
 


На рисунке справа приведена диаграмма рассеяния, полученная при приеме данного сигнала. Благодаря использованию согласованных друг с другом фильтров на передающей и приемной сторонах разброс точек оказывается значительно меньше, чем на рисунке, показанном в Примере 2.
Замечание. Дополнительный сдвиг отсчетов в данном примере не понадобился по следующей причине. Использованный при приеме и передаче сигнала фильтр вносит задержку, равную трем символам (это значение принято в функциях rcosine и rcosflt по умолчанию). После осуществления модуляции и демодуляции суммарная задержка оказывается равной шести символам, так что отсчеты сигнала нужно брать с шагом Fs/Fd, начиная с первого.
Теперь реализуем собственно демодуляцию сигнала s_qask16s:
% расчет фильтра
b = rcosine(Fd, Fs, 'sqrt');
% аналоговаЯ демодулЯциЯ
y = ademod(s_qask16s, Fc, Fs, 'qam', b, 1);
% дискретизациЯ и поиск ближайших точек созвездиЯ
z = demodmap(y, Fd, Fs, 'qask/arb', map_i, map_q);
% удалЯем лишние символы в начале и в конце сигнала
z(1:5) = [];
z(end) = [];
% сравнение переданных и принЯтых символов
symerr(x, z)
ans =
0
Как видите, сигнал и в этом случае принят без ошибок.

При прохождении сигнала через канал связи, обладающий частотной дисперсией, то есть вносящий разную групповую задержку на разных частотах, символы оказываются “размазанными” во времени и “наползают” друг на друга. В этом случае устранить межсимвольную интерференцию полностью не удается. Чтобы минимизировать ее, используют адаптивные фильтры, параметры которых автоматически подстраиваются под характеристики обрабатываемого сигнала. В последнюю (2.1) версию пакета Filter Design добавлены несколько функций, реализующих ряд распространенных алгоритмов адаптивной фильтрации. Кроме того, блоки, реализующие эти же адаптивные алгоритмы, имеются в наборе блоков Communications Blockset, предназначенном для моделирования систем связи с помощью Simulink.