exponenta event banner

Фильтрация приподнятых косинусов

Этот пример показывает вмешательство межсимвола (ISI) способность отклонения поднятого фильтра косинуса, и как разделить поднятую фильтрацию косинуса между передатчиком и приемником, использование поднятого косинуса передает и получает Системные объекты фильтра (коммуникация. RaisedCosineTransmitFilter и коммуникация. RaisedCosineReceiveFilter, соответственно).

Технические характеристики косинусного фильтра

Основным параметром фильтра с увеличенным косинусом является его коэффициент свертывания, который косвенно определяет полосу пропускания фильтра. Идеальные приподнятые косинусные фильтры имеют бесконечное количество отводов. Поэтому практические приподнятые косинусные фильтры являются окнами. Длина окна контролируется с помощью FilterSpanInSymbols собственность. В этом примере мы задаем длину окна как шесть длительностей символа, то есть фильтр охватывает шесть длительностей символа. Такой фильтр также имеет групповую задержку в три длительности символа. Для формирования импульсов используются фильтры с повышенной косинусностью, в которых происходит повышающая дискретизация сигнала. Поэтому нам также необходимо указать коэффициент повышения дискретизации. Ниже приведен список параметров, используемых для проектирования фильтра с увеличенным косинусом в данном примере.

Nsym = 6;           % Filter span in symbol durations
beta = 0.5;         % Roll-off factor
sampsPerSym = 8;    % Upsampling factor

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

rctFilt = comm.RaisedCosineTransmitFilter(...
  'Shape','Normal', ...
  'RolloffFactor',beta, ...
  'FilterSpanInSymbols',Nsym, ...
  'OutputSamplesPerSymbol',sampsPerSym)
rctFilt = 
  comm.RaisedCosineTransmitFilter with properties:

                     Shape: 'Normal'
             RolloffFactor: 0.5000
       FilterSpanInSymbols: 6
    OutputSamplesPerSymbol: 8
                      Gain: 1

% Visualize the impulse response
fvtool(rctFilt,'Analysis','impulse')

Figure Filter Visualization Tool - Impulse Response contains an axes and other objects of type uitoolbar, uimenu. The axes with title Impulse Response contains an object of type stem.

Этот объект конструирует полифазный КИХ-фильтр прямой формы с единичной энергией. У фильтра есть заказ Nsym*sampsPerSym или сигналы Nsym*sampsPerSym+1. Свойство «Коэффициент усиления» можно использовать для нормализации коэффициентов фильтра таким образом, чтобы отфильтрованные и нефильтрованные данные совпадали при наложении.

% Normalize to obtain maximum filter tap value of 1
b = coeffs(rctFilt);
rctFilt.Gain = 1/max(b.Numerator);

% Visualize the impulse response
fvtool(rctFilt,'Analysis','impulse')

Figure Filter Visualization Tool - Impulse Response contains an axes and other objects of type uitoolbar, uimenu. The axes with title Impulse Response contains an object of type stem.

Формирование импульсов с помощью косинусных фильтров

Мы генерируем биполярную последовательность данных. Мы используем приподнятый косинусный фильтр для формирования формы сигнала без введения ISI.

% Parameters
DataL = 20;             % Data length in symbols
R = 1000;               % Data rate
Fs = R * sampsPerSym;   % Sampling frequency

% Create a local random stream to be used by random number generators for
% repeatability
hStr = RandStream('mt19937ar','Seed',0);

% Generate random data
x = 2*randi(hStr,[0 1],DataL,1)-1;
% Time vector sampled at symbol rate in milliseconds
tx = 1000 * (0: DataL - 1) / R;

График сравнивает цифровые данные и интерполированный сигнал. Трудно сравнивать два сигнала, поскольку пиковая характеристика фильтра задерживается групповой задержкой фильтра (Nsym/( 2 * R)). Обратите внимание, что, мы прилагаем ноли Nsym/2 в конце входаx для удаления всех полезных образцов из фильтра.

% Filter
yo = rctFilt([x; zeros(Nsym/2,1)]);
% Time vector sampled at sampling frequency in milliseconds
to = 1000 * (0: (DataL+Nsym/2)*sampsPerSym - 1) / Fs;
% Plot data
fig1 = figure;
stem(tx, x, 'kx'); hold on;
% Plot filtered data
plot(to, yo, 'b-'); hold off;
% Set axes and labels
axis([0 30 -1.7 1.7]);  xlabel('Time (ms)'); ylabel('Amplitude');
legend('Transmitted Data','Upsampled Data','Location','southeast')

Figure contains an axes. The axes contains 2 objects of type stem, line. These objects represent Transmitted Data, Upsampled Data.

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

% Filter group delay, since raised cosine filter is linear phase and
% symmetric.
fltDelay = Nsym / (2*R);
% Correct for propagation delay by removing filter transients
yo = yo(fltDelay*Fs+1:end);
to = 1000 * (0: DataL*sampsPerSym - 1) / Fs;
% Plot data.
stem(tx, x, 'kx'); hold on;
% Plot filtered data.
plot(to, yo, 'b-'); hold off;
% Set axes and labels.
axis([0 25 -1.7 1.7]);  xlabel('Time (ms)'); ylabel('Amplitude');
legend('Transmitted Data','Upsampled Data','Location','southeast')

Figure contains an axes. The axes contains 2 objects of type stem, line. These objects represent Transmitted Data, Upsampled Data.

Коэффициент скатывания

На этом шаге показано влияние изменения коэффициента свертывания с .5 (синяя кривая) на .2 (красная кривая) на результирующий отфильтрованный выходной сигнал. Более низкое значение для скатывания приводит к тому, что фильтр имеет более узкую полосу перехода, что приводит к тому, что избыточное значение отфильтрованного сигнала больше для красной кривой, чем для синей кривой.

% Set roll-off factor to 0.2
rctFilt2 = comm.RaisedCosineTransmitFilter(...
  'Shape',                  'Normal', ...
  'RolloffFactor',          0.2, ...
  'FilterSpanInSymbols',    Nsym, ...
  'OutputSamplesPerSymbol', sampsPerSym);
% Normalize filter
b = coeffs(rctFilt2);
rctFilt2.Gain = 1/max(b.Numerator);
% Filter
yo1 = rctFilt2([x; zeros(Nsym/2,1)]);
% Correct for propagation delay by removing filter transients
yo1 = yo1(fltDelay*Fs+1:end);
% Plot data
stem(tx, x, 'kx'); hold on;
% Plot filtered data
plot(to, yo, 'b-',to, yo1, 'r-'); hold off;
% Set axes and labels
axis([0 25 -2 2]);  xlabel('Time (ms)'); ylabel('Amplitude');
legend('Transmitted Data','beta = 0.5','beta = 0.2',...
    'Location','southeast')

Figure contains an axes. The axes contains 3 objects of type stem, line. These objects represent Transmitted Data, beta = 0.5, beta = 0.2.

Квадратно-корневые косинусные фильтры

Типичное использование косинусной фильтрации состоит в разделении фильтрации между передатчиком и приемником. Как передатчик, так и приемник используют квадратные корневые косинусные фильтры. Комбинация фильтров передатчика и приемника представляет собой фильтр с увеличенным косинусом, что приводит к минимальному ISI. Мы задаем квадратный корень возведенного косинусного фильтра, установив форму 'Квадратный корень'.

% Design raised cosine filter with given order in symbols
rctFilt3 = comm.RaisedCosineTransmitFilter(...
  'Shape',                  'Square root', ...
  'RolloffFactor',          beta, ...
  'FilterSpanInSymbols',    Nsym, ...
  'OutputSamplesPerSymbol', sampsPerSym);

Поток данных усиливается и фильтруется в передатчике с использованием разработанного фильтра. На этом графике показан передаваемый сигнал при фильтрации с использованием фильтра косинуса квадратного корня.

% Upsample and filter.
yc = rctFilt3([x; zeros(Nsym/2,1)]);
% Correct for propagation delay by removing filter transients
yc = yc(fltDelay*Fs+1:end);
% Plot data.
stem(tx, x, 'kx'); hold on;
% Plot filtered data.
plot(to, yc, 'm-'); hold off;
% Set axes and labels.
axis([0 25 -1.7 1.7]);  xlabel('Time (ms)'); ylabel('Amplitude');
legend('Transmitted Data','Sqrt. Raised Cosine','Location','southeast')

Figure contains an axes. The axes contains 2 objects of type stem, line. These objects represent Transmitted Data, Sqrt. Raised Cosine.

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

% Design and normalize filter.
rcrFilt = comm.RaisedCosineReceiveFilter(...
  'Shape',                  'Square root', ...
  'RolloffFactor',          beta, ...
  'FilterSpanInSymbols',    Nsym, ...
  'InputSamplesPerSymbol',  sampsPerSym, ...
  'DecimationFactor',       1);
% Filter at the receiver.
yr = rcrFilt([yc; zeros(Nsym*sampsPerSym/2, 1)]);
% Correct for propagation delay by removing filter transients
yr = yr(fltDelay*Fs+1:end);
% Plot data.
stem(tx, x, 'kx'); hold on;
% Plot filtered data.
plot(to, yr, 'b-',to, yo, 'm:'); hold off;
% Set axes and labels.
axis([0 25 -1.7 1.7]);  xlabel('Time (ms)'); ylabel('Amplitude');
legend('Transmitted Data','Rcv Filter Output', ...
    'Raised Cosine Filter Output','Location','southeast')

Figure contains an axes. The axes contains 3 objects of type stem, line. These objects represent Transmitted Data, Rcv Filter Output, Raised Cosine Filter Output.

Вычислительные затраты

В следующей таблице мы сравним вычислительную стоимость полифазного фильтра интерполяции FIR и полифазного фильтра децимации FIR.

C1 = cost(rctFilt3);
C2 = cost(rcrFilt);
------------------------------------------------------------------------
                    Implementation Cost Comparison
------------------------------------------------------------------------
                        Multipliers  Adders  Mult/Symbol  Add/Symbol
Multirate Interpolator      49         41          49         41
Multirate Decimator         49         48           6.125      6