Повышенная фильтрация косинуса

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

Технические требования фильтра приподнятого косинуса

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

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. Можно использовать свойство Gain нормировать коэффициенты фильтра так, чтобы отфильтрованные и неотфильтрованные данные соответствовали когда overlayed.

% 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.

Вычислительная стоимость

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

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