このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
FIR ガウス パルス整形フィルター設計
この例は、ガウス型パルス整形 FIR フィルターの設計方法と、この設計に影響を与えるパラメーターを示します。FIR ガウス パルス整形フィルターを設計するには、以下で得られるガウス フィルターの連続時間インパルス応答のサンプリング バージョンを打ち切ります。
パラメーター 'a' は、以下で得られるガウス フィルターの 3-dB 帯域幅シンボル時間積 (B*Ts) に関連しています。
設計には 2 つの近似誤差があります。これらは切り捨て誤差とサンプリング誤差です。打ち切り誤差は、理論的にはガウス フィルターの無限インパルス応答の有限時間 (FIR) を近似するために起こります。サンプリングの誤差 (エイリアシング) は、ガウスの周波数応答が厳密な意味において、実際には帯域制限されていない (すなわち、ある周波数を超えるガウス信号のエネルギーは正確に 0 ではない) という事実によるものです。これは、以下で得られる連続時間ガウス フィルターの伝達関数から示すことができます。
f が増加すると、周波数応答は 0 になる傾向がありますが、これは、エイリアシングを起こさずにサンプリングすることはできないことを意味します。正確には決して 0 にはなりません。
連続時間ガウス フィルター
連続時間ガウス フィルターを設計するには、シンボル時間 (Ts) を 1 μs に定義し、インパルス応答の開始点と終了点の間 (フィルター スパン) のシンボル数を 6 に定義します。上記の式から、ガウス フィルターのインパルス応答と周波数応答は、3 dB の帯域幅とシンボル時間の積に関連するパラメーター 'a' によって決定されることがわかります。ガウス FIR フィルター設計に対するこのパラメーターの影響を調べるため、Ts に関してさまざまな値 'a' を定義し、対応する帯域幅を計算します。次に、各 '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;
インパルス応答はシンボル時間に正規化されます。
連続時間ガウス フィルターの周波数応答
帯域幅が異なる連続時間ガウス フィルターの周波数応答を計算してプロットします。次のグラフでは、振幅応答曲線の赤い円 ('o') は 3-dB のカットオフを示しています。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 近似
関数 gaussdesign を使用して FIR ガウス フィルターを設計します。この関数への入力は、3 dB の帯域幅とシンボル時間の積、フィルターのインパルス応答の開始点と終了点の間にあるシンボル周期の数 (シンボル数単位のフィルター スパン) およびオーバーサンプリング係数 (シンボルあたりのサンプル数) です。
オーバーサンプリング係数 (OVSF) はサンプリング周波数とフィルター長を決定し、ガウス FIR フィルター設計の重要な要素をなしています。設計時の近似誤差は、オーバーサンプリング係数を適切に選択することで軽減できます。ここでは、2 つの異なるオーバーサンプリング係数を使用して設計されたガウス 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;
FIR ガウス フィルターの周波数応答 (オーバーサンプリング係数 = 16)
オーバーサンプリング係数 16 を使用してガウス FIR フィルターの周波数応答を計算し、理想的な周波数応答 (連続時間ガウス フィルターの周波数応答など) と比較します。
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')
最初の 2 つの FIR フィルターはエイリアシング誤差を示し、最後の 2 つの FIR フィルターは打ち切り誤差を示しています。エイリアシングは、サンプリング周波数がナイキスト周波数以下である場合に発生します。最初の 2 つのフィルターでは帯域幅が大きいため、オーバーサンプリング係数によって、エイリアシングを防げるだけのスペクトルの複製が分割されません。ただし、エイリアシングの量はあまり重要ではありません。
一方、最後の 2 つの FIR フィルターは、エイリアシングが発生する前の FIR 近似限界を示しています。これらの 2 つのフィルターの振幅応答は、スペクトルの複製と重なる前に底に達します。
オーバーサンプリング係数の重要性
エイリアシングと打ち切り誤差は、オーバーサンプリング係数に応じて変わります。オーバーサンプリング係数が減少すると、サンプリング周波数が減少し (これによって複製が接近する)、フィルター長も減少するため (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)
オーバーサンプリング係数を 4 に指定して設計したガウス FIR フィルターの周波数応答をプロットして、検討します。オーバーサンプリング係数が小さくなると、サンプリング周波数も小さくなります。その結果、このサンプリング周波数がスペクトルのオーバーラップを防ぐのに十分な大きさでなくなり、すべての FIR 近似フィルターでエイリアシングが生じます。
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')