Восстановите биты для систем координат DVB-S2 PL
[
восстанавливает пользовательские пакеты (ВЗЛЕТЫ) или поток текущих данных, BITS
,NUMFRAMESLOST
] = dvbs2BitRecover(RXFRAME
,NVAR
)BITS
, и количество потерянных основополосных систем координат, NUMFRAMESLOST
. Введите RXFRAME
полученные комплексные символы синфазной квадратуры (IQ) в форме систем координат физического уровня (PL) Второго поколения Спутника Цифрового телевидения (DVB-S2) передача. Введите NVAR
шумовая оценка отклонения, используемая, чтобы вычислить мягкие биты.
[
также возвращает состояние контроля циклическим избыточным кодом (CRC) UP.BITS
,NUMFRAMESLOST
,PKTCRCSTATUS
] = dvbs2BitRecover(RXFRAME
,NVAR
)
Восстановите пользовательские пакеты (ВЗЛЕТЫ) для нескольких систем координат физического уровня (PL) в одном транспортном потоковом Втором поколении Спутника Цифрового телевидения (DVB-S2) передача.
Этот пример использует MAT-файлы с матрицами четности LDPC. Если MAT-файлы не доступны на пути, загрузите и разархивируйте MAT-файлы путем ввода этого кода в командной строке MATLAB.
if ~exist('dvbs2xLDPCParityMatrices.mat','file') if ~exist('s2xLDPCParityMatrices.zip','file') url = 'https://ssd.mathworks.com/supportfiles/spc/satcom/DVB/s2xLDPCParityMatrices.zip'; websave('s2xLDPCParityMatrices.zip',url); unzip('s2xLDPCParityMatrices.zip'); end addpath('s2xLDPCParityMatrices'); end
Задайте количество систем координат PL на поток. Создайте Системный объект DVB-S2.
nFrames = 2; s2WaveGen = dvbs2WaveformGenerator;
Создайте битовый вектор информационных битов, data
, из конкатенированных ВЗЛЕТОВ TS.
syncBits = [0 1 0 0 0 1 1 1]'; % Sync byte for TS packet is 47 Hex pktLen = 1496; % UP length without sync bits is 1496 numPkts = s2WaveGen.MinNumPackets*nFrames; txRawPkts = randi([0 1],pktLen,numPkts); txPkts = [repmat(syncBits,1,numPkts); txRawPkts]; data = txPkts(:);
Сгенерируйте форму волны временного интервала DVB-S2 с помощью битов информации о входе. Сбросьте фильтр передачи, чтобы обработать задержку фильтра и восстановить полную последнюю систему координат.
txWaveform = [s2WaveGen(data); flushFilter(s2WaveGen)];
Добавьте аддитивный белый Гауссов шум (AWGN) в сгенерированную форму волны.
sps = s2WaveGen.SamplesPerSymbol;
EsNodB = 1;
snrdB = EsNodB - 10*log10(sps);
rxIn = awgn(txWaveform,snrdB,'measured');
Создайте повышенный фильтр приемника косинуса.
rxFilter = comm.RaisedCosineReceiveFilter( ... 'RolloffFactor',s2WaveGen.RolloffFactor, ... 'InputSamplesPerSymbol',sps,... 'DecimationFactor',sps); s = coeffs(rxFilter); rxFilter.Gain = sum(s.Numerator);
Примените согласованную фильтрацию и удалите задержку фильтра.
filtOut = rxFilter(rxIn); rxFrame = filtOut(rxFilter.FilterSpanInSymbols+1:end);
Восстановите ВЗЛЕТЫ. Отобразите потерянное количество кадров и состояние контроля циклическим избыточным кодом (CRC) UP.
[bits,FramesLost,pktCRCStat] = dvbs2BitRecover(rxFrame,10^(-EsNodB/10)); disp(FramesLost)
0
disp(pktCRCStat)
{20×1 logical}
Восстановите пользовательские биты в мультивходном Втором поколении Спутника Цифрового телевидения типового потока (GS) (DVB-S2) передача с переменной схемой модуляции и кодирования.
Этот пример использует MAT-файлы с матрицами четности LDPC. Если MAT-файлы не доступны на пути, загрузите и разархивируйте MAT-файлы путем ввода этого кода в командной строке MATLAB.
if ~exist('dvbs2xLDPCParityMatrices.mat','file') if ~exist('s2xLDPCParityMatrices.zip','file') url = 'https://ssd.mathworks.com/supportfiles/spc/satcom/DVB/s2xLDPCParityMatrices.zip'; websave('s2xLDPCParityMatrices.zip',url); unzip('s2xLDPCParityMatrices.zip'); end addpath('s2xLDPCParityMatrices'); end
Задайте количество систем координат физического уровня (PL) на поток.
nFrames = 1;
Создайте Системный объект DVB-S2 с переменной настройкой кодирования и модуляции для мультивхода GS. Задайте схему модуляции и уровень прямого исправления ошибок (FEC) (MODCOD) и длину поля данных (DFL).
s2WaveGen = dvbs2WaveformGenerator; s2WaveGen.StreamFormat = "GS"; s2WaveGen.NumInputStreams = 3; s2WaveGen.MODCOD = [10 15 6]; % QPSK 8/9, 8PSK 5/6, and QPSK 2/3 s2WaveGen.DFL = [44500 51387 42960];
Создайте немного вектора битов информации о входе для каждого входного потока.
data = cell(s2WaveGen.NumInputStreams,1); for i = 1:s2WaveGen.NumInputStreams data{i} = randi([0 1],s2WaveGen.DFL(i)*nFrames,1); end
Сгенерируйте форму волны временного интервала DVB-S2 с битами информации о входе. Сбросьте фильтр передачи, чтобы обработать задержку фильтра и восстановить полную систему координат.
txWaveform = [s2WaveGen(data); flushFilter(s2WaveGen)];
Добавьте аддитивный белый Гауссов шум (AWGN) в сгенерированную форму волны. Задайте выборки на символ для основополосного фильтра.
sps = s2WaveGen.SamplesPerSymbol;
EsNodB = 10;
snrdB = EsNodB - 10*log10(sps);
rxIn = awgn(txWaveform,snrdB,'measured');
Создайте повышенный фильтр приемника косинуса.
rxFilter = comm.RaisedCosineReceiveFilter( ... 'RolloffFactor',s2WaveGen.RolloffFactor, ... 'InputSamplesPerSymbol',sps,... 'DecimationFactor',sps); s = coeffs(rxFilter); rxFilter.Gain = sum(s.Numerator);
Примените согласованную фильтрацию и удалите задержку фильтра.
filtOut = rxFilter(rxIn); rxFrame = filtOut(rxFilter.FilterSpanInSymbols+1:end);
Восстановите пользовательские биты. Включите раннее завершение декодера имеющих малую плотность кодов четности (LDPC).
[bits,FramesLost] = dvbs2BitRecover(rxFrame,10^(-EsNodB/10),1);
Отобразите потерянное количество кадров и количество битовых ошибок в каждом потоке.
fprintf('Number of frames lost = %d\n',FramesLost)
Number of frames lost = 0
for i = 1:s2WaveGen.NumInputStreams fprintf('Number of bit errors in stream %d = %d\n',i, ... sum(data{i}~=bits{i})) end
Number of bit errors in stream 1 = 0 Number of bit errors in stream 2 = 0 Number of bit errors in stream 3 = 0
Восстановите пользовательские пакеты (ВЗЛЕТЫ) в мультивходном Втором поколении Спутника Цифрового телевидения транспортного потока (TS) (DVB-S2) передача с постоянным кодированием и модуляцией.
Этот пример использует MAT-файлы с матрицами четности LDPC. Если MAT-файлы не доступны на пути, загрузите и разархивируйте MAT-файлы путем ввода этого кода в командной строке MATLAB.
if ~exist('dvbs2xLDPCParityMatrices.mat','file') if ~exist('s2xLDPCParityMatrices.zip','file') url = 'https://ssd.mathworks.com/supportfiles/spc/satcom/DVB/s2xLDPCParityMatrices.zip'; websave('s2xLDPCParityMatrices.zip',url); unzip('s2xLDPCParityMatrices.zip'); end addpath('s2xLDPCParityMatrices'); end
Задайте количество систем координат физического уровня (PL) на поток.
numFrames = 1;
Создайте Системный объект DVB-S2 с постоянной настройкой кодирования и модуляции для мультивхода TS. Задайте короткий формат системы координат прямого исправления ошибок (FEC) и включите входную потоковую синхронизацию (ISSY).
s2WaveGen = dvbs2WaveformGenerator; s2WaveGen.NumInputStreams = 3; s2WaveGen.FECFrame = "short"; s2WaveGen.MODCOD = 10; % QPSK 8/9 s2WaveGen.DFL = 13920; s2WaveGen.ISSYI = true;
Создайте немного вектора информационных битов конкатенированных ВЗЛЕТОВ TS.
syncBits = [0 1 0 0 0 1 1 1]'; % Sync byte for TS packet is 47 Hex pktLen = 1496; % UP length without sync bits is 1496 data = cell(1,s2WaveGen.NumInputStreams); for i = 1:s2WaveGen.NumInputStreams numPkts = s2WaveGen.MinNumPackets(i)*numFrames; txRawPkts = randi([0 1],pktLen,numPkts); ISSY = randi([0 1],16,numPkts); % ISCRFormat is 'short' by default % 'short' implies the default length of ISSY as 2 bytes txPkts = [repmat(syncBits,1,numPkts); txRawPkts; ISSY]; % ISSY is appended at the end of UP data{i} = txPkts(:); end
Сгенерируйте форму волны временного интервала DVB-S2 с помощью битов информации о входе. Сбросьте фильтр передачи, чтобы обработать задержку фильтра и восстановить полную систему координат.
txWaveform = [s2WaveGen(data); flushFilter(s2WaveGen)];
Добавьте аддитивный белый Гауссов шум (AWGN) в сгенерированную форму волны. Задайте выборки на символ для основополосного фильтра.
sps = s2WaveGen.SamplesPerSymbol;
EsNodB = 12;
snrdB = EsNodB - 10*log10(sps);
rxIn = awgn (txWaveform,snrdB,'measured');
Создайте повышенный фильтр приемника косинуса.
rxFilter = comm.RaisedCosineReceiveFilter( ... 'RolloffFactor',s2WaveGen.RolloffFactor, ... 'InputSamplesPerSymbol',sps,... 'DecimationFactor', sps); s = coeffs(rxFilter); rxFilter.Gain = sum(s.Numerator);
Примените согласованную фильтрацию и удалите задержку фильтра.
filtOut = rxFilter(rxIn); rxFrame = filtOut(rxFilter.FilterSpanInSymbols+1:end);
Восстановите ВЗЛЕТЫ. Отобразите потерянное количество кадров и количество битовых ошибок в каждом потоке.
[bits,FramesLost,pktCRCStat] = dvbs2BitRecover(rxFrame,10^(-EsNodB/10));
fprintf('Number of frames lost = %d\n',FramesLost)
Number of frames lost = 0
for i = 1:s2WaveGen.NumInputStreams fprintf('Number of bit errors in stream %d = %d\n',i, ... numel(pktCRCStat{i})-sum(pktCRCStat{i})) end
Number of bit errors in stream 1 = 0 Number of bit errors in stream 2 = 0 Number of bit errors in stream 3 = 0
RXFRAME
— Полученные символы IQ от систем координат PL передачи DVB-S2Полученные символы IQ от систем координат PL одно входа DVB-S2 или мультивходной передачи в виде вектор-столбца. RXFRAME
может содержать одну или несколько систем координат PL.
Длина RXFRAME
зависит от значения свойств FECFrame
, MODCOD
, и HasPilots
из dvbs2WaveformGenerator
Система object™.
Типы данных: double
Поддержка комплексного числа: Да
NVAR
— Шумовая оценка отклоненияШумовая оценка отклонения, что функция добавляет к символам входа IQ в виде неотрицательного скаляра. NVAR
используется в качестве масштабного коэффициента, чтобы вычислить мягкие биты от символов IQ.
Когда вы задаете NVAR
как 0
, функция использует значение 1e-5, который соответствует отношению сигнал-шум (SNR) 50 дБ.
Типы данных: double
EARLYTERM
— Отметьте для раннего завершения декодера LDPC
или false
(значение по умолчанию) | 1
или true
Отметьте для раннего завершения декодера LDPC, когда всем проверкам четности удовлетворят в виде набора логический 1
TRUE
) или 0
ложь
). Когда установлено в 1
TRUE
), декодер LDPC отключен, когда всем проверкам четности удовлетворяют.
Когда вы устанавливаете это значение к 0
ложь
), максимальный предел итерации декодирования равняется 50.
Типы данных: логический
BITS
— Восстановленные биты данныхВосстановленные биты данных, возвращенные как массив ячеек вектор-столбцов. Каждый элемент массива ячеек имеет тип данных int8
. Этим выходом могут быть или ВЗЛЕТЫ или типовой поток данных, в зависимости от StreamFormat
свойство dvbs2WaveformGenerator
Системный объект.
Для мультивходной потоковой передачи каждый элемент массива ячеек соответствует отдельному входному потоку.
Типы данных: cell
NUMFRAMESLOST
— Количество потерянных основополосных систем координатКоличество потерянных основополосных систем координат, возвращенных как неотрицательное целое число. Если основополосный CRC заголовка перестал работать, система координат рассматривается потерянной.
Типы данных: double
PKTCRCSTATUS
— Состояние UP CRCСостояние UP CRC, возвращенное как массив ячеек вектор-столбцов. Каждый элемент массива ячеек имеет тип данных logical
. Для мультивходной потоковой передачи каждый элемент массива ячеек соответствует отдельному входному потоку.
PKTCRCSTATUS
запрашивает только входные потоки где значение UPL
свойство dvbs2WaveformGenerator
Системный объект является ненулевым.
Типы данных: cell
[1] EN 302 307-1 V1.4.1 Стандарта ETSI (2014-11). Цифровое телевидение (DVB); Структура Структурирования Второго поколения, Кодирование Канала и Системы Модуляции для Широковещательной передачи, Interactive Services, Сбора Новостей и других Широкополосных Спутниковых Приложений (DVB-S2).
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.