Фильтр приподнятого косинуса

В этом примере показана возможность отклонения межсимвольных помех (ISI) приподнятого косинусоидного фильтра и как разделить фильтр приподнятого косинуса между передатчиком и приемником, используя системные объекты приподнятого косинусоидного и приёмного фильтров (comm.ReasedCosineTransmitFilter и comm.RaisedCosineReceivefilterFilter, соответственно).

Спецификации Фильтр приподнятого косинуса

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

% 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