Этот пример показов, как спроектировать Гауссов импульсно-формирующий конечную импульсную характеристику фильтр и параметры, влияющие на этот проект. Конечная импульсная характеристика создания фильтра формирования Гауссова импульса осуществляется путем усечения дискретизированной версии импульсной характеристики Гауссова фильтра в непрерывном времени, которая задается:
Параметр 'a' связан с продуктом 3-dB времени полосы пропускания (B * Ts) Гауссова фильтра, как задано:
В этом проекте есть две ошибки приближения: ошибка усечения и ошибка дискретизации. Ошибка усечения связана с конечновременным (КИХ) приближением теоретически бесконечной импульсной характеристики идеального Гауссова фильтра. Ошибка дискретизации (сглаживание) связана с тем, что Гауссова частотная характеристика на самом деле не ограничена полосой в строгом смысле (то есть энергия Гауссова сигнала сверх определенной частоты не совсем равна нулю). Это можно отметить из передаточной функции Гауссова фильтра в непрерывном времени, который приведен ниже:
Когда f увеличивается, частотная характеристика стремится к нулю, но никогда не является в точности нулем, что означает, что она не может быть дискретизирована без некоторого сглаживания.
Чтобы спроектировать Гауссов фильтр в непрерывном времени, давайте определим время символа (Ts), которое должно быть 1 микросекунда, и количество символов между началом импульсной характеристики и ее концом (пролет фильтра), чтобы быть 6. Из приведенных выше уравнений можно увидеть, что импульсная характеристика и частотная характеристика Гауссова фильтра зависят от параметра 'a', который связан с временным продуктом полоса пропускания-символ 3 дБ. Чтобы изучить эффект этого параметра на конечную импульсную характеристику Гауссова создания фильтра, мы зададим различные значения '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;
Мы разработаем Конечная Импульсная Характеристика Гауссова с помощью функции гауссдизайна. Входами для этой функции являются 3-dB продукт времени полосы пропускания-символа, количество периодов символа между началом и концом импульсной характеристики фильтра, то есть диапазон фильтра в символах, и коэффициент избыточной дискретизации (то есть количество выборок на символ).
Коэффициент избыточной дискретизации (OVSF) определяет частоту дискретизации и длину фильтра и, следовательно, играет значительную роль в конечной импульсной характеристике Гауссова создания фильтра. Ошибки приближения в проекте могут быть уменьшены при соответствующем выборе коэффициента избыточной дискретизации. Мы иллюстрируем это, сравнивая Гауссовы конечная импульсная характеристика, разработанные с двумя различными факторами избыточной дискретизации.
Во-первых, мы рассмотрим коэффициент избыточной дискретизации 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')
Заметьте, что первые два фильтра конечной импульсной характеристики показывают ошибки сглаживания, а последние два фильтра конечной импульсной характеристики - ошибки усечения. Сглаживание происходит, когда частота дискретизации не больше частоты Найквиста. В случае первых двух фильтров полоса пропускания достаточно велика, чтобы коэффициент избыточной дискретизации не разделял спектральные реплики достаточно, чтобы избежать сглаживания. Однако величина сглаживания не очень значительна.
С другой стороны, последние две конечные импульсные характеристики фильтра показывают ограничение конечной импульсной характеристики приближения, прежде чем может произойти любое сглаживание. Отклики величины этих двух фильтров достигают пола, прежде чем они могут перекрываться со спектральными репликами.
Ошибки сглаживания и усечения варьируются в зависимости от коэффициента избыточной дискретизации. Если коэффициент избыточной дискретизации уменьшается, эти ошибки будут более серьезными, поскольку это уменьшает частоту дискретизации (тем самым перемещая реплики ближе), а также уменьшает длины фильтра (увеличивая ошибку в конечную импульсную характеристику приближения).
Для примера, если мы выберем коэффициент избыточной дискретизации 4, мы увидим, что все фильтры конечной импульсной характеристики показывают ошибки сглаживания, поскольку частота дискретизации недостаточно велика, чтобы избежать перекрытия спектральных реплик.
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;
Мы построим и изучим частотную характеристику для Гауссовой конечной импульсной характеристики фильтра, разработанного с коэффициентом избыточной дискретизации 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')