ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

FIR 間引き

この例では、DSP System Toolbox™ の FIR 間引きを使用して信号のサンプルレートを低減する方法を示します。

FIR 間引きの作成

DSP System Toolbox はさまざまな FIR ベースの構造や CIC を含む間引きを実行するためにさまざまな構造をサポートしています。間引き係数 M が与えられた場合、通常 FIR 間引きフィルターはカットオフ周波数が pi/M のナイキスト フィルターとして設計されます。間引きフィルターの設計についての詳細は、関数 FIRHALFBAND、FIRNYQUIST、FIREQINT および INTFILT に加え、FDESIGN.DECIMATOR および FDESIGN.NYQUIST を参照してください。

M  = 3; % Decimation factor
Hf = fdesign.decimator(M,'Nyquist',M);
Hd = design(Hf,'SystemObject',true); % Polyphase FIR Decimator

より効率的な実装は転置構成 FIR ポリフェーズ構造です。この構造では遅延や乗数を共有できます。

Hd.Structure = 'Direct form transposed';

小数ファクターで間引くには、直接型 FIR ポリフェーズ サンプル レート変換を使用できます。この構造は、L ポリフェーズ サブフィルターを使用します。

L   = 2; % Interpolation factor
Hf  = fdesign.rsrc(L,M,'Nyquist',max(L,M));
Hd2 = design(Hf,'SystemObject',true); % Polyphase FIR Fractional Decimator

FIR 間引きを使用したフィルター処理

入力信号 x[n] は、44.1 kHz でサンプリングされた 1 kHz 正弦波です。

N = 159;
Fs = 44.1e3;
n = (0:N-1)';
x = sin(2*pi*n*1e3/Fs);

直接型 FIR ポリフェーズ間引きを使用してフィルター処理します。

y = step(Hd,x);

間引きの過渡特性の応答の長さは、ポリフェーズ サブフィルターの次数の半分に等しい値です。また、これはフィルターの群遅延でもあります。

delay = mean(grpdelay(Hd)); % Constant group delay equal to its mean
tx = delay+(1:length(x));
ty = 1:M:M*length(y);

直接型 FIR ポリフェーズ間引きの出力を表示し、元の信号のシフト済みのバージョンに重ねます。

stem(tx,x,'k');hold on;stem(ty,y,'filled');
axis([0 90 -Inf Inf])
legend('Original signal','Decimated signal')
xlabel('Samples'); ylabel('Amplitude');

内挿信号の周波数領域解析

入力信号および間引き後の信号の両方のパワー スペクトル密度を計算します。

% Create an audio file reader and point to an audio file with sound sampled
% at 48 kHz
Ha = dsp.AudioFileReader('audio48kHz.wav');

% Create a spectrum analyzer to view the spectrum of the input and
% decimated audio.
Hs = dsp.SpectrumAnalyzer('SampleRate',48e3,'ShowLegend',true,...
  'SpectralAverages',10);

% Design an decimate-by-2 filter to decimate the signal from 48 kHz
% to 24 kHz
M  = 2;
Hf = fdesign.decimator(M,'Halfband');
Hd = design(Hf,'SystemObject',true);

入力スペクトルと出力スペクトルを同時にプロットするために、各サンプルの間にゼロを挿入することで、出力は 48 kHz に個別にアップサンプリングされます。同じパワー レベルを維持するために、アップサンプリングされた信号をアップサンプリング係数で乗算します。

while ~isDone(Ha)
    x  = step(Ha);        % Original 48 kHz audio
    y  = step(Hd,x);      % Decimated 24 kHz audio
    yu = M*upsample(y,M); % Insert a zero every other sample to compare
    step(Hs,[x,yu]);
end

% Release Audio File Reader
release(Ha);

予想どおり、間引き後の信号のスペクトルの複製は低サンプリング周波数 (24 kHz) の倍数を中心としています。

この情報は役に立ちましたか?