Адаптивная коррекция

Этот пример показывает как модели линия связи с модуляцией PSK, повышенным формированием импульса косинуса, многопутевым исчезновением и адаптивной коррекцией.

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

Чтобы экспериментировать с различными настройками симуляции, можно отредактировать пример. Например, можно установить свойство ResetBeforeFiltering объекта эквалайзера к 0, который заставит эквалайзер сохранять состояние от одного блока до следующего.

Блок передачи

Установите параметры, связанные с блоком передачи, который состоит из трех частей: обучающая последовательность, полезная нагрузка и последовательность хвоста. Все три используют ту же схему PSK; обучение и последовательности хвоста используются для коррекции. Мы используем генератор случайных чисел по умолчанию, чтобы гарантировать воспроизводимость результатов.

Rsym      = 1e6;  % Symbol rate (Hz)
nTrain    = 100;  % Number of training symbols
nPayload  = 400;  % Number of payload symbols
nTail     = 20;   % Number of tail symbols
% Set random number generator for repeatability
hStream   = RandStream.create('mt19937ar', 'seed', 12345);

Модуляция PSK

Сконфигурируйте Систему модуляции и демодуляции PSK objects™.

bitsPerSym = 2;                              % Number of bits per PSK symbol
M = 2^bitsPerSym;                            % Modulation order
hPSKMod   = comm.PSKModulator(M, ...
    'PhaseOffset',0, ...
    'SymbolMapping','Binary');
hPSKDemod = comm.PSKDemodulator(M, ...
    'PhaseOffset',0, ...
    'SymbolMapping','Binary');

PSKConstellation = constellation(hPSKMod).'; % PSK constellation

Обучение и последовательности хвоста

Сгенерируйте последовательности хвоста и обучение.

xTrainData = randi(hStream, [0 M-1], nTrain, 1);
xTailData  = randi(hStream, [0 M-1], nTail, 1);
xTrain     = step(hPSKMod,xTrainData);
xTail      = step(hPSKMod,xTailData);

Передайте и получите фильтры

Сконфигурируйте повышенную передачу косинуса и получите Системные объекты фильтра. Фильтры включают повышающую дискретизацию и субдискретизацию, соответственно.

chanFilterSpan = 8;  % Filter span in symbols
sampPerSymChan = 4;  % Samples per symbol through channels
hTxFilt = comm.RaisedCosineTransmitFilter( ...
    'RolloffFactor',0.25, ...
    'FilterSpanInSymbols',chanFilterSpan, ...
    'OutputSamplesPerSymbol',sampPerSymChan);

hRxFilt = comm.RaisedCosineReceiveFilter( ...
    'RolloffFactor',0.25, ...
    'FilterSpanInSymbols',chanFilterSpan, ...
    'InputSamplesPerSymbol',sampPerSymChan, ...
    'DecimationFactor',sampPerSymChan);

% Calculate the samples per symbol after the receive filter
sampPerSymPostRx = sampPerSymChan/hRxFilt.DecimationFactor;
% Calculate the delay in samples from both channel filters
chanFilterDelay = chanFilterSpan*sampPerSymPostRx;

Канал AWGN

Сконфигурируйте Системный объект канала AWGN с набором свойств NoiseMethod к Signal to noise ratio (Es/No) и набором Es/No к дБ 20.

hAWGNChan = comm.AWGNChannel( ...
    'NoiseMethod','Signal to noise ratio (Es/No)', ...
    'EsNo',20, ...
    'SamplesPerSymbol',sampPerSymChan);

Симуляция 1: линейная коррекция для плоского частотой исчезновения

Начните с одно пути, плоского частотой исчезающего канала. Для этого канала получатель использует простой LMS с 1 касанием (наименьшее количество среднего квадратичного) эквалайзер, который реализует автоматическое усиление и регулировку фазы.

Скрипт commadapteqloop.m запускается многократно. Каждое выполнение соответствует блоку передачи. Эквалайзер сбрасывает свое состояние, и взвесьте каждый блок передачи. Чтобы сохранить состояние от одного блока до следующего, можно установить свойство ResetBeforeFiltering объекта эквалайзера к false.

Перед первым показом commadapteqloop.m отображает Системный объект канала Рейли и свойства объекта эквалайзера. Для каждого выполнения фигура MATLAB показывает визуализацию обработки сигналов. Красные круги в графиках сигнального созвездия соответствуют ошибкам символа. В графике "Весов" синие и пурпурные строки соответствуют действительным и мнимым частям, соответственно.

simName = 'Linear equalization for frequency-flat fading';  % Used to label figure window

% Configure a frequency-flat Rayleigh channel System object with the
% RandomStream property set to 'mt19937ar with seed' for repeatability.
hRayleighChan = comm.RayleighChannel( ...
    'SampleRate',Rsym*sampPerSymChan, ...
    'MaximumDopplerShift',30);

% Configure an adaptive equalizer object
nWeights = 1;  % Single weight
stepSize = 0.1; % Step size for LMS algorithm
alg = lms(stepSize);  % Adaptive algorithm object
eqObj = lineareq(nWeights,alg,PSKConstellation);  % Equalizer object
% Delay in symbols from the equalizer
eqDelayInSym = (eqObj.RefTap-1)/sampPerSymPostRx;

% Link simulation
nBlocks = 50;  % Number of transmission blocks in simulation
for block = 1:nBlocks
    commadapteqloop;
end
System: comm.RayleighChannel

  Properties:
             SampleRate: 4000000              
             PathDelays: 0                    
       AveragePathGains: 0                    
     NormalizePathGains: true                 
    MaximumDopplerShift: 30                   
        DopplerSpectrum: [1x1 struct]         
           RandomStream: 'mt19937ar with seed'
                   Seed: 73                   
    PathGainsOutputPort: false                
                                              
                  EqType: 'Linear Equalizer'
                 AlgType: 'LMS'
                nWeights: 1
             nSampPerSym: 1
                  RefTap: 1
                SigConst: [1.0000 + 0.0000i 0.0000 + 1.0000i -1.0000 + 0.0000i -0.0000 - 1.0000i]
                StepSize: 0.1000
           LeakageFactor: 1
                 Weights: 0
            WeightInputs: 0
    ResetBeforeFiltering: 1
     NumSamplesProcessed: 0

Симуляция 2: линейная коррекция для выборочного частотой исчезновения

Моделируйте выборочный частотой Канал с релеевским замиранием с тремя путями. Получатель использует линейный RLS с 8 касаниями (рекурсивные наименьшие квадраты) эквалайзер с расположенными с интервалами символом касаниями.

simName = 'Linear equalization for frequency-selective fading';

% Reset transmit and receive filters
reset(hTxFilt);
reset(hRxFilt);

% Set the Rayleigh channel System object to be frequency-selective
release(hRayleighChan);
hRayleighChan.PathDelays = [0 0.9 1.5]/Rsym;
hRayleighChan.AveragePathGains = [0 -3 -6];

% Configure an adaptive equalizer
nWeights = 8;
forgetFactor = 0.99;  % RLS algorithm forgetting factor
alg = rls(forgetFactor);  % RLS algorithm object
eqObj = lineareq(nWeights,alg,PSKConstellation);
eqObj.RefTap = 3;  % Reference tap
eqDelayInSym = (eqObj.RefTap-1)/sampPerSymPostRx;

% Link simulation and store BER values
BERvect = zeros(1,nBlocks);
for block = 1:nBlocks
    commadapteqloop;
    BERvect(block) = BEREq;
end
avgBER2 = mean(BERvect)
System: comm.RayleighChannel

  Properties:
             SampleRate: 4000000              
             PathDelays: [0 9e-07 1.5e-06]    
       AveragePathGains: [0 -3 -6]            
     NormalizePathGains: true                 
    MaximumDopplerShift: 30                   
        DopplerSpectrum: [1x1 struct]         
           RandomStream: 'mt19937ar with seed'
                   Seed: 73                   
    PathGainsOutputPort: false                
                                              
                  EqType: 'Linear Equalizer'
                 AlgType: 'RLS'
                nWeights: 8
             nSampPerSym: 1
                  RefTap: 3
                SigConst: [1.0000 + 0.0000i 0.0000 + 1.0000i -1.0000 + 0.0000i -0.0000 - 1.0000i]
            ForgetFactor: 0.9900
             InvCorrInit: 0.1000
           InvCorrMatrix: [8x8 double]
                 Weights: [0 0 0 0 0 0 0 0]
            WeightInputs: [0 0 0 0 0 0 0 0]
    ResetBeforeFiltering: 1
     NumSamplesProcessed: 0


avgBER2 =

   3.0000e-04

Симуляция 3: коррекция обратной связи решения (DFE) для Выборочного Частотой Исчезновения

Получатель использует DFE с незначительно расположенным с интервалами прямым фильтром с шестью касаниями (две выборки на символ) и два веса обратной связи. DFE использует тот же алгоритм RLS в качестве в Симуляции 2. Получить структура фильтра восстановлена, чтобы составлять увеличенное число выборок на символ.

simName = 'Decision feedback equalization (DFE) for frequency-selective fading';

% Reset transmit filter and adjust receive filter decimation factor
reset(hTxFilt);
release(hRxFilt);
hRxFilt.DecimationFactor = 2;
sampPerSymPostRx = sampPerSymChan/hRxFilt.DecimationFactor;
chanFilterDelay = chanFilterSpan*sampPerSymPostRx;

% Reset fading channel
reset(hRayleighChan);

% Configure an adaptive equalizer object
nFwdWeights = 6;  % Number of feedforward equalizer weights
nFbkWeights = 2;  % Number of feedback filter weights
eqObj = dfe(nFwdWeights, nFbkWeights,alg,PSKConstellation,sampPerSymPostRx);
eqObj.RefTap = 3;
eqDelayInSym = (eqObj.RefTap-1)/sampPerSymPostRx;

for block = 1:nBlocks
    commadapteqloop;
    BERvect(block) = BEREq;
end
avgBER3 = mean(BERvect)
System: comm.RayleighChannel

  Properties:
             SampleRate: 4000000              
             PathDelays: [0 9e-07 1.5e-06]    
       AveragePathGains: [0 -3 -6]            
     NormalizePathGains: true                 
    MaximumDopplerShift: 30                   
        DopplerSpectrum: [1x1 struct]         
           RandomStream: 'mt19937ar with seed'
                   Seed: 73                   
    PathGainsOutputPort: false                
                                              
                  EqType: 'Decision Feedback Equalizer'
                 AlgType: 'RLS'
                nWeights: [6 2]
             nSampPerSym: 2
                  RefTap: 3
                SigConst: [1.0000 + 0.0000i 0.0000 + 1.0000i -1.0000 + 0.0000i -0.0000 - 1.0000i]
            ForgetFactor: 0.9900
             InvCorrInit: 0.1000
           InvCorrMatrix: [8x8 double]
                 Weights: [0 0 0 0 0 0 0 0]
            WeightInputs: [0 0 0 0 0 0 0 0]
    ResetBeforeFiltering: 1
     NumSamplesProcessed: 0


avgBER3 =

     0

Сводные данные

Этот пример показал относительную производительность линейных и эквалайзеров обратной связи решения и в плоских частотой и в выборочных частотой исчезающих каналах. Это показало, как эквалайзер с одним касанием достаточен компенсировать плоский частотой канал, но что выборочный частотой канал требует эквалайзера с несколькими касаниями. Наконец, это показало, что эквалайзер обратной связи решения превосходит линейный эквалайзер в выборочном частотой канале.

Приложение

Этот пример использует следующий скрипт и функции помощника: