Этот пример показывает вмешательство межсимвола (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')

Этот объект конструирует полифазный КИХ-фильтр прямой формы с единичной энергией. У фильтра есть заказ 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')

Мы генерируем биполярную последовательность данных. Мы используем приподнятый косинусный фильтр для формирования формы сигнала без введения 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')

В следующей таблице мы сравним вычислительную стоимость полифазного фильтра интерполяции 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