petrov 7 2 июня, 2020 Опубликовано 2 июня, 2020 · Жалоба Nabokov Но это вроде бы не отвечает на мой вопрос. Зачем на приемной стороне устанавливать фильтр raised cosine (т.е. когда в параметрах стоит Normal)? Вопрос некорректный, откуда зачем появляется, где он на приёмной стороне стоит? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nabokov 0 2 июня, 2020 Опубликовано 2 июня, 2020 · Жалоба 47 минут назад, petrov сказал: Вопрос некорректный, откуда зачем появляется, где он на приёмной стороне стоит? Попробую переформулировать. В хелпах матлаба есть пример симулинковской модели, где сравниваются эти два фильтра: В верхней ветке после модулятора стоит sqr-вариант raised cosine фильтра. Для того, чтобы в моменты взятия отсчетов на приемной стороне отсутствовала межсимвольная интерференция, необходимо сигнал пропустить через такой же фильтр. В нижней же ветке используется просто raised cosine. В моменты взятия отсчетов ИХ фильтра равна нулю => вклада от соседних импульсов нет => интерференции нет => просто выбираем отсчеты в нужные моменты времени с помощью downsample. Прошу поправить меня, если в чем-то неправ. Если открыть блок Raised Cosine Receive Filter, то там в параметре Pulse Shape вместо square root варианта можно выбрать просто raised cosine. Вопрос - зачем такая возможность присутствует именно на приемной стороне? Ведь либо фильтровать сигнал вообще не надо (если на передающей стороне использовался raised cosine), либо нужно фильтровать square root cosine фильтром (если на передающей стороне тоже стоял он). В каких ситуациях может возникнуть необходимость ставить raised cosine фильтр на приемной стороне? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grizzly 0 2 июня, 2020 Опубликовано 2 июня, 2020 · Жалоба 37 минут назад, Nabokov сказал: Если открыть блок Raised Cosine Receive Filter, то там в параметре Pulse Shape вместо square root варианта можно выбрать просто raised cosine. Вопрос - зачем такая возможность присутствует именно на приемной стороне? Так используется же один и тот же блок Simulink, поэтому логично, что в его настройках есть оба типа фильтров. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 7 2 июня, 2020 Опубликовано 2 июня, 2020 · Жалоба Nabokov стоит sqr-вариант raised cosine фильтра Сквозная характеристика получается приподнятый косинус. А разделяется она на два фильтра корень из приподнятого косинуса между передатчиком и приёмником чтобы была согласованная фильтрация на приёме. Вопрос - зачем такая возможность присутствует именно на приемной стороне? Именно приёмная сторона берётся ниоткуда, если вы поставили на приёме, то вам и объяснять, зачем вы это делаете. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 3 июня, 2020 Опубликовано 3 июня, 2020 · Жалоба Но вообще, в свое время носились у меня мысли сделать передатчик по классическому найквисту: проще фильтр на 2sps, уже полоса можно символьную в маску вписать, меньше пикфактор, а вот в приемнике, для согласования полосы использовался такойже фильтр, но рассчитанный на большее скругление + эквалайзер) но до аппаратной реализации не довел) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nabokov 0 3 июня, 2020 Опубликовано 3 июня, 2020 · Жалоба Всем спасибо за ответы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nabokov 0 4 июня, 2020 Опубликовано 4 июня, 2020 · Жалоба Появились еще вопросы. Составил такую модель в симулинке: 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'. Не могу понять, как правильно его задавать. Буду рад помощи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 7 5 июня, 2020 Опубликовано 5 июня, 2020 · Жалоба Nabokov Мало ли из каких соображений там gain выбирают, слишком ничтожный вопрос, чтобы на него столько времени тратить, он может не совпадать с вашими целями, например, нам нам нужно чтобы не было переполнения разрядной сетки в передающем фильтре, для этого важнее представлять полифазную структуру фильтра, как данные суммируются в фазах этого фильтра, какое будет максимальное значение, на которое мы должны промасштабировать коэффициенты, чтобы не было переполнения в наихудшем случае. Для приподнятого косинуса лучше использовать блок Digital Filter Design, там больше важных вещей задаётся и видно. Пытаюсь повторить такой же эксперимент в коде матлаба Лишняя повторная работа ИМХО, симулинк облегчает понимание, код матлабовский приводит к самозапутыванию, когда понимания нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nabokov 0 5 июня, 2020 Опубликовано 5 июня, 2020 · Жалоба 19 минут назад, petrov сказал: Лишняя повторная работа ИМХО, симулинк облегчает понимание, код матлабовский приводит к самозапутыванию, когда понимания нет. Абсолютно с вами согласен. Просто я симулинком не пользовался никогда с целью моделирования. Все писал кодом. Сейчас решил попробовать, но столкнулся с тем, что результаты разные, что неприятно. 22 минуты назад, petrov сказал: Для приподнятого косинуса лучше использовать блок Digital Filter Design, там больше важных вещей задаётся и видно. То есть, в этом блоке задавать коэффициенты, например, и вместо блока Raised Cosine Transmiter\Receiver filter использовать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 7 5 июня, 2020 Опубликовано 5 июня, 2020 · Жалоба Nabokov То есть, в этом блоке задавать коэффициенты, например, и вместо блока Raised Cosine Transmiter\Receiver filter использовать? Да. Мы же фильтр с характеристикой корень из приподнятого косинуса с какой-то целью используем. С какой? Ведь можно взять просто прямоугольные импульсы, согласованный фильтр для них тоже не даёт МСИ. В симулинке лучше придерживаться sample based принципа моделирования для данной темы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nabokov 0 5 июня, 2020 Опубликовано 5 июня, 2020 · Жалоба 52 минуты назад, petrov сказал: Мы же фильтр с характеристикой корень из приподнятого косинуса с какой-то целью используем. С какой? Ведь можно взять просто прямоугольные импульсы, согласованный фильтр для них тоже не даёт МСИ. я пытаюсь промоделировать работу одной системы связи. Там используется именно rasied cosine (НЕ square root). 58 минут назад, petrov сказал: В симулинке лучше придерживаться sample based принципа моделирования для данной темы. А не могли бы вы пояснить, почему? Чтобы проще было отслеживать изменения сигналов во времени, например? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 7 5 июня, 2020 Опубликовано 5 июня, 2020 · Жалоба Nabokov я пытаюсь промоделировать работу одной системы связи. Там используется именно rasied cosine (НЕ square root). Тогда возможно вся эта специфика приподнятого косинуса не имеет значения, и он используется как подходящий ФНЧ. Чтобы проще было отслеживать изменения сигналов во времени, например? Да, и всякие временные синхронизации естественнее воспринимаются при моделировании отсчёт за отсчётом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nabokov 0 5 июня, 2020 Опубликовано 5 июня, 2020 · Жалоба petrov Благодарю за помощь! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться