Этот пример показывает интерференцию межсимвола (ISI) возможность отклонения повышенного фильтра косинуса, и как разделить повышенную фильтрацию косинуса между передатчиком и получателем, с помощью повышенной передачи косинуса и получить Систему фильтра objects™ коммуникация. 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) % Visualize the impulse response fvtool(rctFilt, 'Analysis', 'impulse')
rctFilt = comm.RaisedCosineTransmitFilter with properties: Shape: 'Normal' RolloffFactor: 0.5000 FilterSpanInSymbols: 6 OutputSamplesPerSymbol: 8 Gain: 1
Этот объект разрабатывает прямую форму многофазный КИХ-фильтр с модульной энергией. Фильтр имеет порядок 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')
Мы генерируем последовательность данных, содержащих положительные и отрицательные значения. Мы используем повышенный фильтр косинуса, чтобы сформировать форму волны, не вводя 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')
Этот шаг компенсирует повышенную групповую задержку фильтра косинуса путем задержки входного сигнала. Теперь легко, чтобы видеть, как повышенный фильтр косинуса сверхдискретизировал и фильтрует сигнал. Отфильтрованный сигнал идентичен задержанному входному сигналу во входных шагах расчета. Это показывает повышенную возможность фильтра косинуса пределу полосы сигнал при предотвращении 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')
Этот шаг показывает эффект, что изменение фактора спада от.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')
Типичное использование повышенной фильтрации косинуса должно разделить фильтрацию между передатчиком и получателем. И передатчик и получатель используют повышенные фильтры косинуса квадратного корня. Комбинация фильтров передатчика и получателя является повышенным фильтром косинуса, который приводит к минимальному 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')
Переданный сигнал (пурпурная кривая) затем отфильтрован в получателе. Мы не десятикратно уменьшали вывод фильтра, чтобы показать полную форму волны. Модульная энергетическая нормализация по умолчанию гарантирует, что усиление комбинации передачи и получает фильтры, совпадает с усилением нормированного повышенного фильтра косинуса. Отфильтрованный полученный сигнал, который фактически идентичен сигналу, отфильтрованному с помощью одного повышенного фильтра косинуса, изображен синей кривой в получателе.
% 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')
В следующей таблице мы сравниваем вычислительную стоимость многофазного КИХ-фильтра интерполяции и многофазного КИХ-децимирующего фильтра.
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