Перейти к содержанию
    

Nabokov

Но это вроде бы не отвечает на мой вопрос. Зачем на приемной стороне устанавливать фильтр raised cosine (т.е. когда в параметрах стоит Normal)?

Вопрос некорректный, откуда зачем появляется, где он на приёмной стороне стоит?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

47 минут назад, petrov сказал:

Вопрос некорректный, откуда зачем появляется, где он на приёмной стороне стоит?

Попробую переформулировать.

В хелпах матлаба есть пример симулинковской модели, где сравниваются эти два фильтра:

690086851_2020-06-0218-18-32.thumb.png.051748bc22b69f45b80e8c05be7f883c.png

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

В нижней же ветке используется просто raised cosine. В моменты взятия отсчетов ИХ фильтра равна нулю => вклада от соседних импульсов нет => интерференции нет => просто выбираем отсчеты в нужные моменты времени с помощью downsample.

Прошу поправить меня, если в чем-то неправ.

Если открыть блок Raised Cosine Receive Filter, то там в параметре Pulse Shape вместо square root варианта можно выбрать просто raised cosine. Вопрос - зачем такая возможность присутствует именно на приемной стороне? Ведь либо фильтровать сигнал вообще не надо (если на передающей стороне использовался raised cosine), либо нужно фильтровать square root cosine фильтром (если на передающей стороне тоже стоял он). В каких ситуациях может возникнуть необходимость ставить raised cosine фильтр на приемной стороне?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

37 минут назад, Nabokov сказал:

Если открыть блок Raised Cosine Receive Filter, то там в параметре Pulse Shape вместо square root варианта можно выбрать просто raised cosine. Вопрос - зачем такая возможность присутствует именно на приемной стороне?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Nabokov

стоит sqr-вариант raised cosine фильтра

Сквозная характеристика получается приподнятый косинус. А разделяется она на два фильтра корень из приподнятого косинуса между передатчиком и приёмником чтобы была согласованная фильтрация на приёме.

Вопрос - зачем такая возможность присутствует именно на приемной стороне?

Именно приёмная сторона берётся ниоткуда, если вы поставили на приёме, то вам и объяснять, зачем вы это делаете.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но вообще, в свое время носились у меня мысли сделать передатчик по классическому найквисту: проще фильтр на 2sps, уже полоса можно символьную в маску вписать, меньше пикфактор, а вот в приемнике, для согласования полосы использовался такойже фильтр, но рассчитанный на большее скругление + эквалайзер) но до аппаратной реализации не довел)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Появились еще вопросы.

Составил такую модель в симулинке:

1825511049_2020-06-0420-00-47.thumb.png.13425d465dd0bd85ff90777ea338b11f.png

BER совпадает с теоретическим при использовании обоих фильтров (проверял по bertool'у).

1) Смущает, что в блоках raised cosine filter в параметре Linear amplitude filter gain по умолчанию задается функция rcfiltgaincompat(gcbh). Внутри функции рассчитывается значение к-нта усиления таким образом (g - то что идет на выход функции):

switch filtType
  case 'Normal'
    b = rcosdesign(R, filtSpan, N, 'normal');
    g = 1 / max(b);
  case 'Square root'
    b = rcosdesign(R, filtSpan, N, 'sqrt');
    g = 1 / max(b) * ((-1/(pi*N)*(pi*(R-1)-4*R))) * sqrt(N);
end

Если в первом случае, допустим, осуществляется просто нормирование к максимуму ИХ, то что такое ((-1/(pi*N)*(pi*(R-1)-4*R))) * sqrt(N) я понять не могу. Кто-нибудь может подсказать, для чего это?

2) Пытаюсь повторить такой же эксперимент в коде матлаба:

SamplePerSymbol = 4;      
m = 2;              
M = 2^m;            
numBit = 5e6;       

dqpskMod = comm.DQPSKModulator('PhaseRotation',pi/4, ...
                               'BitInput',true, ...
                               'SymbolMapping','Gray');
dqpskDemod = comm.DQPSKDemodulator('PhaseRotation', pi/4, ...
                                   'BitOutput', true, ...
                                   'SymbolMapping', 'Gray');
FilterParams.Shape = 'Normal';
FilterParams.RollOffFactor = 0.2;
FilterParams.FilterSpan = 16;
FilterParams.Gain = 1.93;

txFilt = comm.RaisedCosineTransmitFilter(...             
  'Shape', FilterParams.Shape, ...
  'RolloffFactor', FilterParams.RollOffFactor, ...
  'OutputSamplesPerSymbol', SamplePerSymbol, ...
  'FilterSpanInSymbols', FilterParams.FilterSpan, ...
  'Gain', FilterParams.Gain);
rxFilt = comm.RaisedCosineReceiveFilter(...
  'Shape',FilterParams.Shape, ...
  'RolloffFactor',FilterParams.RollOffFactor, ...
  'InputSamplesPerSymbol',SamplePerSymbol, ...
  'FilterSpanInSymbols', FilterParams.FilterSpan, ...
  'DecimationFactor', SamplePerSymbol, ...
  'Gain', FilterParams.Gain);

if(strcmp(FilterParams.Shape,'Square root'))
    errorRate = comm.ErrorRate('ReceiveDelay',2*FilterParams.FilterSpan);
elseif(strcmp(FilterParams.Shape,'Normal'))
    errorRate = comm.ErrorRate('ReceiveDelay',FilterParams.FilterSpan);
end
EbN0 = 10;
BER = 0;
for i = 1:length(EbN0)
    %% Модуляция и фильтрация
    bits = randi([0 1],1,numBit);
    modSymbols = dqpskMod.step(bits.');
    signal = txFilt(modSymbols);
    %% Шум
    signalNoise = awgn(signal,EbN0(i) - 10*log10(SamplePerSymbol) + 10*log10(log2(M)),'measured').';
    %% Демодуляция
    if(strcmp(FilterParams.Shape,'Square root'))
        signalDownsampled = rxFilt(signalNoise.');
    elseif(strcmp(FilterParams.Shape,'Normal'))
        signalDownsampled = downsample(signalNoise,SamplePerSymbol).';
    end 
    demodBits = dqpskDemod(signalDownsampled).';
    errors = errorRate(bits',demodBits');
    BER = errors(1)
end

Для 'Square root' BER совпадает с тем, что получилось в симулинке. И результат не зависит от параметра 'Gain'

В случае когда использую форму ИХ фильтра 'Normal', параметр 'Gain' выбираю такой, какой возвращается функцией rcfiltgaincompat(gcbh) из симулинка (для фильтра с параметром 'Normal', само собой), при этом BER ухудшается на два порядка.

Сразу хочу сказать, что при EbNo = inf ошибок нет, все работает правильно.

Предполагаю, что тут проблема в этом параметре 'Gain'. Не могу понять, как правильно его задавать.

Буду рад помощи.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Nabokov

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

Для приподнятого косинуса лучше использовать блок Digital Filter Design, там больше важных вещей задаётся и видно.

Пытаюсь повторить такой же эксперимент в коде матлаба

Лишняя повторная работа ИМХО, симулинк облегчает понимание, код матлабовский приводит к самозапутыванию, когда понимания нет.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

19 минут назад, petrov сказал:

Лишняя повторная работа ИМХО, симулинк облегчает понимание, код матлабовский приводит к самозапутыванию, когда понимания нет.

Абсолютно с вами согласен. Просто я симулинком не пользовался никогда с целью моделирования. Все писал кодом. Сейчас решил попробовать, но столкнулся с тем, что результаты разные, что неприятно.

22 минуты назад, petrov сказал:

Для приподнятого косинуса лучше использовать блок Digital Filter Design, там больше важных вещей задаётся и видно.

То есть, в этом блоке задавать коэффициенты, например, и вместо блока Raised Cosine Transmiter\Receiver filter использовать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Nabokov

То есть, в этом блоке задавать коэффициенты, например, и вместо блока Raised Cosine Transmiter\Receiver filter использовать?

Да. Мы же фильтр с характеристикой корень из приподнятого косинуса с какой-то целью используем. С какой? Ведь можно взять просто прямоугольные импульсы, согласованный фильтр для них тоже не даёт МСИ.

В симулинке лучше придерживаться sample based принципа моделирования для данной темы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

52 минуты назад, petrov сказал:

Мы же фильтр с характеристикой корень из приподнятого косинуса с какой-то целью используем. С какой? Ведь можно взять просто прямоугольные импульсы, согласованный фильтр для них тоже не даёт МСИ.

я пытаюсь промоделировать работу одной системы связи. Там используется именно rasied cosine (НЕ square root).

58 минут назад, petrov сказал:

В симулинке лучше придерживаться sample based принципа моделирования для данной темы.

А не могли бы вы пояснить, почему? Чтобы проще было отслеживать изменения сигналов во времени, например?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Nabokov

я пытаюсь промоделировать работу одной системы связи. Там используется именно rasied cosine (НЕ square root).

Тогда возможно вся эта специфика приподнятого косинуса не имеет значения, и он используется как подходящий ФНЧ.

Чтобы проще было отслеживать изменения сигналов во времени, например?

Да, и всякие временные синхронизации естественнее воспринимаются при моделировании отсчёт за отсчётом.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...