MATLAB è Simulink íà ðóññêîì

https://hub.exponenta.ru/
 

Обработка сигналов и изображений\Communications Toolbox

Список функций CommunicationsToolbox:  Аналоговая модуляция/демодуляция

  В оглавление \ К следующему разделу \ К предыдущему разделу

MSKDEMOD
Демодуляция сигнала с частотной манипуляцией с минимальным сдвигом

Синтаксис:

z = mskdemod(y,nsamp)
z = mskdemod(y,nsamp,dataenc)
z = mskdemod(y,nsamp,dataenc,ini_phase)
z = mskdemod(y,nsamp,dataenc,ini_phase,ini_state)
[z,phaseout] = mskdemod(...)
[z,phaseout,stateout] = mskdemod(...)

Описание

z = mskdemod(y,nsamp)

Выполняет демодуляцию комплексной огибающей сигнала с дифференциальной минимальной частотной манипуляцией y. Элементы демодулированной информационной последовательности z могут принимать значения 0 и 1. Входной параметр nsamp должен быть положительным целым числом, большим единицы; он задет число отсчетов сигнала y, приходящееся на один информационный символ. Начальная фаза комплексной огибающей должна быть равна нулю. Если y - матрица, то ее столбцы обрабатываются независимо.

z = mskdemod(y,nsamp,dataenc)

То же, что предыдущий вариант синтаксиса, но дополнительный входной параметр dataenc задает метод кодирования принимаемых данных: при значении 'diff' предполагается, что дифференциальное кодирование использовалось, при значении 'nondiff' - что не использовалось.

z = mskdemod(y,nsamp,dataenc,ini_phase)

То же, что предыдущий вариант синтаксиса, но дополнительный входной параметр ini_phase задает начальную фазу комплексной огибающей в радианах. Этот параметр должен быть вектором-строкой с размером, равным числу каналов (столбцов) в сигнале y, а значения элементов этого вектора должны быть кратны pi/2. Чтобы использовать значение по умолчанию для параметра dataenc, его следует задать в виде пустой матрицы: [].

z = mskdemod(y,nsamp,dataenc,ini_phase,ini_state)

То же, что предыдущий вариант синтаксиса, но дополнительный входной параметр ini_state задает начальное состояние демодулятора. Этот параметр должен содержать последние полсимвола из принятого ранее фрагмента сигнала. Таким образом, параметр ini_state должен представлять собой матрицу с nsamp строками и C столбцами, где C - число каналов (столбцов) в сигнале y.

[z,phaseout] = mskdemod(...)

То же, что предыдущие варианты синтаксиса, но в данном случае функция возвращает дополнительный результат phaseout - конечное значение фазы принимаемого колебания. Это значение может затем использоваться в качестве входного параметра ini_phase при реализации блоковой демодуляции сигнала. Вектор phaseout имеет такой же размер, как входной параметр ini_phase, и может содержать значения, равные 0, pi/2, pi или 3*pi/2.

[z,phaseout,stateout] = mskdemod(...)

То же, что предыдущие варианты синтаксиса, но в данном случае функция, помимо параметра phase_out, возвращает дополнительный результат stateout - конечное состояние демодулятора, то есть последние nsamp отсчетов сигнала y. Это значение может затем использоваться в качестве входного параметра ini_state при реализации блоковой демодуляции сигнала. Матрица stateout имеет такие же размеры, как входной параметр ini_state.

Примеры:

Приведенный ниже код иллюстрирует блоковую обработку сигнала функциями mskmod и mskdemod. Для обеспечения непрерывности фазовой функции сигнала и правильности его демодуляции использован синтаксис вызова указанных функций с установкой начальных и сохранением конечных значений фазы сигнала и внутреннего состояния демодулятора.

% задание параметров
numbits = 99; % число бит на итерацию
numchans = 2; % число каналов (столбцов) сигнала
nsamp = 16;   % число отсчетов на символ
% инициализация
numerrs = 0;  % счетчик числа ошибок демодуляции 
demod_ini_phase = zeros(1,numchans);  % текущая фаза демодулятора
mod_ini_phase   = zeros(1,numchans);  % текущая фаза модулятора
ini_state = complex(zeros(nsamp,numchans)); % текущее состояние демодулятора
% основной цикл
for iRuns = 1 : 10
    x = randint(numbits,numchans); % двоичный сигнал
    [y,mod_ini_phase] = mskmod(x,nsamp,[],mod_ini_phase); % модуляция
    [z,demod_ini_phase,ini_state] = mskdemod(y,nsamp,[],demod_ini_phase,ini_state); % демодуляция
    numerrs = numerrs + biterr(x,z); % накопление числа ошибок
end
disp(['Total number of bit errors = ' num2str(numerrs)])

Ниже приведен результат работы этого кода.

Total number of bit errors = 0

Литература

1. Pasupathy, Subbarayan, "Minimum Shift Keying: A Spectrally Efficient Modulation", IEEE Communications Magazine, July, 1979, pp. 14-22.

Сопутствующие функции: mskmod, fskmod, fskdemod

  В оглавление \ К следующему разделу \ К предыдущему разделу

 

Поиск по сайту:


Система Orphus