exponenta event banner

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

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

Создайте пару модулятора и демодулятора 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');

Создание случайных двоичных данных. Сверточное кодирование данных.

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

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

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