Найдите задержку кодируемого и фильтрованного сообщения

Определите задержку convolutionally закодированной и отфильтрованной ссылки. Используйте задержку, чтобы точно определить количество битовых ошибок.

Создайте модулятор QPSK и пару демодулятора. Задайте объекты работать с битами.

qpskmod = comm.QPSKModulator('BitInput',true);
qpskdemod = comm.QPSKDemodulator('BitOutput',true);

Создайте повышенную передачу косинуса и получите пару фильтра.

txfilt = comm.RaisedCosineTransmitFilter;
rxfilt = comm.RaisedCosineReceiveFilter;

Создайте сверточную пару энкодера и Декодера Витерби.

convEnc = comm.ConvolutionalEncoder;
vitDec = comm.ViterbiDecoder('InputFormat','Hard');

Сгенерируйте случайные двоичные данные. Convolutionally кодируют данные.

txData = randi([0 1],1000,1);
encData = convEnc(txData);

Модулируйте закодированные данные. Передайте модулируемые данные через повышенный фильтр передачи косинуса.

modSig = qpskmod(encData);
txSig = txfilt(modSig);

Передайте пропущенный сигнал через канал AWGN.

rxSig = awgn(txSig,20,'measured');

Отфильтруйте и затем демодулируйте полученный сигнал.

filtSig = rxfilt(rxSig);
demodSig = qpskdemod(filtSig);

Декодируйте демодулируемые данные.

rxData = vitDec(demodSig);

Найдите задержку между переданными и полученными двоичными данными при помощи функции finddelay.

td = finddelay(txData,rxData)
td = 44

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

tdexpected = (txfilt.FilterSpanInSymbols + rxfilt.FilterSpanInSymbols)/2 + ...
    vitDec.TracebackDepth;
isequal(td,tdexpected)
ans = logical
   1

Вычислите количество битовых ошибок путем отбрасывания последних битов td от переданной последовательности и отбрасывания первых битов td от полученной последовательности.

numErrors = biterr(txData(1:end-td),rxData(td+1:end))
numErrors = 0