В этом примере показано, как сконструировать фильтр FIR с формированием гауссовых импульсов и параметры, влияющие на эту конструкцию. Конструкция КИХ Гауссова фильтра формирования импульсов выполняется путем усечения дискретизированного варианта импульсной характеристики непрерывного времени Гауссова фильтра, который задается:
securityae-security2t2a2
Параметр «a» связан с произведением 3-dB времени символа полосы пропускания (B * Ts) гауссова фильтра, как задано:
1BTslog22
В этой конструкции есть две ошибки аппроксимации: ошибка усечения и ошибка дискретизации. Ошибка усечения обусловлена аппроксимацией конечного времени (FIR) теоретически бесконечной импульсной характеристики идеального гауссова фильтра. Ошибка дискретизации (сглаживание) обусловлена тем, что гауссова частотная характеристика в строгом смысле не ограничена полосой (т.е. энергия гауссова сигнала за пределами определенной частоты не является точно нулевой). Это можно отметить из передаточной функции гауссова фильтра непрерывного времени, которая приведена ниже:
e-a2f2
С увеличением f частотная характеристика стремится к нулю, но никогда не является точно нулевой, что означает, что она не может быть дискретизирована без некоторого наложения.
Для построения гауссова фильтра непрерывного времени давайте определим время символа (Ts) равным 1 микросекунде и число символов между началом импульсной характеристики и ее концом (диапазон фильтра) равным 6. Из вышеприведенных уравнений можно видеть, что импульсная характеристика и частотная характеристика гауссова фильтра зависят от параметра «a», который связан с временным произведением 3 дБ полосы пропускания и символа. Чтобы изучить влияние этого параметра на конструкцию гауссова фильтра FIR, мы определим различные значения «a» в терминах Ts и вычислим соответствующие полосы пропускания. Затем мы построим график импульсной характеристики для каждого «a» и амплитудной характеристики для каждой полосы пропускания.
Ts = 1e-6; % Symbol time (sec) span = 6; % Filter span in symbols a = Ts*[.5, .75, 1, 2]; B = sqrt(log(2)/2)./(a); t = linspace(-span*Ts/2,span*Ts/2,1000)'; hg = zeros(length(t),length(a)); for k = 1:length(a) hg(:,k) = sqrt(pi)/a(k)*exp(-(pi*t/a(k)).^2); end plot(t/Ts,hg) title({'Impulse response of a continuous-time Gaussian filter';... 'for various bandwidths'}); xlabel('Normalized time (t/Ts)') ylabel('Amplitude') legend(sprintf('a = %g*Ts',a(1)/Ts),sprintf('a = %g*Ts',a(2)/Ts),... sprintf('a = %g*Ts',a(3)/Ts),sprintf('a = %g*Ts',a(4)/Ts)) grid on;

Следует отметить, что импульсные характеристики нормализуются к времени символа.
Мы вычисляем и строим график частотной характеристики гауссовых фильтров непрерывного времени с различными полосами пропускания. На графике ниже отсечение 3-dB обозначается красными кругами ('o') на кривой амплитудной характеристики. Следует отметить, что 3-dB полоса пропускания находится между DC и B.
f = linspace(0,32e6,10000)'; Hideal = zeros(length(f),length(a)); for k = 1:length(a) Hideal(:,k) = exp(-a(k)^2*f.^2); end plot(f,20*log10(Hideal)) titleStr = {'Ideal magnitude response for a continuous-time ';... 'Gaussian filter for various bandwidths'}; title(titleStr); legend(sprintf('B = %g',B(1)),sprintf('B = %g',B(2)),... sprintf('B = %g',B(3)),sprintf('B = %g',B(4))) hold on for k = 1:length(a) plot(B,20*log10(exp(-a.^2.*B.^2)),'ro','HandleVisibility','off') end axis([0 5*max(B) -50 5]) xlabel('Frequency (Hz)') ylabel('Magnitude (dB)') grid on;

Мы разработаем фильтр FIR Gaussian, используя функцию gaussdesign. Исходные данные к этой функции - продукт времени символа пропускной способности на 3 дБ, количество периодов символа между началом и концом ответа импульса фильтра, т.е. фильтруют промежуток в символах и фактор сверхвыборки (т.е. количество образцов за символ).
Коэффициент избыточной дискретизации (OVSF) определяет частоту дискретизации и длину фильтра и, следовательно, играет значительную роль в конструкции гауссова КИХ-фильтра. Ошибки аппроксимации в конструкции могут быть уменьшены при соответствующем выборе коэффициента избыточной дискретизации. Мы иллюстрируем это сравнением гауссовых фильтров FIR, разработанных с двумя различными коэффициентами избыточной выборки.
Во-первых, мы рассмотрим коэффициент избыточной выборки 16 для проектирования дискретного гауссова фильтра.
ovsf = 16; % Oversampling factor (samples/symbol) h = zeros(97,4); iz = zeros(97,4); for k = 1:length(a) BT = B(k)*Ts; h(:,k) = gaussdesign(BT,span,ovsf); [iz(:,k),t] = impz(h(:,k)); end figure('Color','white') t = (t-t(end)/2)/Ts; stem(t,iz) title({'Impulse response of the Gaussian FIR filter for ';... 'various bandwidths, OVSF = 16'}); xlabel('Normalized time (t/Ts)') ylabel('Amplitude') legend(sprintf('a = %g*Ts',a(1)/Ts),sprintf('a = %g*Ts',a(2)/Ts),... sprintf('a = %g*Ts',a(3)/Ts),sprintf('a = %g*Ts',a(4)/Ts)) grid on;

Вычислим частотную характеристику гауссова КИХ фильтра с коэффициентом избыточной дискретизации 16 и сравним ее с идеальной частотной характеристикой (т.е. частотной характеристикой гауссова фильтра непрерывного времени).
Fs = ovsf/Ts; fvtool(h(:,1),1,h(:,2),1,h(:,3),1,h(:,4),1,... 'FrequencyRange', 'Specify freq. vector', ... 'FrequencyVector',f,'Fs',Fs,'Color','white'); title('Ideal magnitude responses and FIR approximations, OVSF = 16') hold on plot(f*Ts,20*log10(Hideal),'--') hold off axis([0 32 -350 5]) legend(append(["B = " "Ideal, B = "],string(num2str(B','%g'))), ... 'NumColumns',2,'Location','best')

Обратите внимание, что первые два фильтра FIR имеют ошибки наложения, а последние два фильтра FIR - ошибки усечения. Сглаживание происходит, когда частота дискретизации не превышает частоту Найквиста. В случае первых двух фильтров ширина полосы достаточно велика, чтобы коэффициент избыточной дискретизации не разделял спектральные реплики достаточно, чтобы избежать наложения. Однако величина сглаживания не очень значительна.
С другой стороны, последние два фильтра КИХ показывают ограничение аппроксимации КИХ до того, как может произойти любое наложение. Амплитудные характеристики этих двух фильтров достигают нижнего предела, прежде чем они могут перекрываться со спектральными репликами.
Ошибки наложения и усечения изменяются в зависимости от коэффициента избыточной дискретизации. Если коэффициент избыточной дискретизации уменьшен, эти ошибки будут более серьезными, поскольку это уменьшает частоту дискретизации (тем самым перемещая реплики ближе), а также уменьшает длины фильтра (увеличивая ошибку в приближении FIR).
Например, если мы выберем коэффициент избыточной дискретизации 4, мы увидим, что все фильтры FIR обнаруживают ошибки наложения, поскольку частота дискретизации недостаточно велика, чтобы избежать перекрытия спектральных реплик.
ovsf = 4; % Oversampling factor (samples/symbol) h = zeros(25,4); iz = zeros(25,4); for k = 1:length(a) BT = B(k)*Ts; h(:,k) = gaussdesign(BT,span,ovsf); [iz(:,k),t] = impz(h(:,k)); end figure('Color','white') t = (t-t(end)/2)/Ts; stem(t,iz) title({'Impulse response of the Gaussian FIR filter'; 'for various bandwidths, OVSF = 4'}); xlabel('Normalized time (t/Ts)') ylabel('Amplitude') legend(sprintf('a = %g*Ts',a(1)/Ts),sprintf('a = %g*Ts',a(2)/Ts),... sprintf('a = %g*Ts',a(3)/Ts),sprintf('a = %g*Ts',a(4)/Ts)) grid on;

Мы построим график и изучим частотную характеристику гауссова фильтра FIR, разработанного с коэффициентом избыточной выборки 4. Меньший коэффициент избыточной дискретизации означает меньшую частоту дискретизации. В результате эта частота дискретизации недостаточна для того, чтобы избежать спектрального перекрытия, и все фильтры аппроксимации КИХ проявляют сглаживание.
Fs = ovsf/Ts; fvtool(h(:,1),1,h(:,2),1,h(:,3),1,h(:,4),1,... 'FrequencyRange', 'Specify freq. vector', ... 'FrequencyVector',f,'Fs',Fs,'Color','white'); title('Ideal magnitude responses and FIR approximations, OVSF = 4') hold on plot(f*Ts,20*log10(Hideal),'--') hold off axis([0 32 -350 5]) legend(append(["B = " "Ideal, B = "],string(num2str(B','%g'))), ... 'NumColumns',2,'Location','southeast')
