Signal Processing Toolbox    

upfirdn

FIRフィルタの適用とサンプリングレート変換

表示

詳細

upfirdnは、つぎの3つの操作をカスケードに実行します。

  1. 行列xの中の入力データに対して、整数pによるアップサンプリング(ゼロ挿入)
  2. ベクトルまたは行列hに与えられたインパルス応答で、1.のデータにFIRフィルタ処理
  3. 整数qによるダウンサンプリング(サンプルを間引き)

upfirdnは、処理を最速にするためMEXファイルとして提供されているので、実際に必要な出力のみを計算します。FIRフィルタは通常ローパスフィルタで、remezfir1などの別の関数を使って設計する必要があります。

yout = upfirdn(xin,h) は、FIRインパルス応答hで、入力信号xinをフィルタ処理した結果の出力信号youtを出力します。xinが行ベクトルか列ベクトルの場合、1つの信号を表します。xinが配列の場合、各列が別々の出力となります。hが行ベクトルまたは列ベクトルの場合、これは、一つのFIRフィルタを表しています。hが行列の場合、各列は、別々の独立したFIRインパルス応答列を表しています。一つの行ベクトルまたは列ベクトルをもつ場合、それは、一つの信号を表しています。行列の場合は、各列が別々の独立した出力になります。この書式で、アップサンプリングもダウンサンプリングも行わないこともできます。

yout = upfirdn(xin,h,p) は、アップサンプリング係数pを設定します。pは整数で、デフォルトは1です。

yout = upfirdn(xin,h,p,q) は、ダウンサンプリング係数qを設定します。qは整数で、デフォルトは1です。

[yout,zf] = upfirdn(xin,h,...,zi) は、ベクトルziに初期条件を設定します。

初期条件ベクトルziのサイズは、length(h)-1に等しく、FIRフィルタの遅れ数に対応します。

xin がベクトルの場合、最終条件ベクトルzfのサイズは、length(h)-1になり、フィルタ内の遅れ数に対応します。xinが行列の場合、zfは、(length(h)-1)size(xin,2)列の行列になります。

注意

通常、入力xinとフィルタhはベクトルで、1つの出力信号のみが作成されます。ただし、これらの引数が配列の場合、各列は別々の信号またはフィルタとして扱われます。有効な組合せは、つぎのとおりです。

  1. xinh が共にベクトル

    フィルタと信号は1つずつであるため、関数はxinhとのコンボリューションを行います。出力信号youtは、xinが行の場合、行ベクトルとなり、その他の場合、列ベクトルとなります。

  1. xinが配列で、 h がベクトル

    1つのフィルタと複数の信号があるため、関数はhxinの各列とのコンボリューションを行います。得られるyoutは、xinと同数の列をもつ配列となります。

  1. xinがベクトルで、hが行列

    複数のフィルタと1つの信号があるため、関数はhの各列とxinとのコンボリューションを行います。youtは、hと同数の列をもつ配列となります。

  1. xinh が、同じ列数をもつ行列

    フィルタと信号は共に複数あるため、関数はxinhの対応する列のコンボリューションを行います。youtは、xinおよびhと同数の列をもつ配列となります。

例題

pqが共に1(すなわち、レート変更をしない)の場合、結果は2つの信号の通常のコンボリューションとなります(convと等価)。

この例題では、7つの異なるフィルタと1つの入力信号とのコンボリューションを行うことにより、7チャンネルフィルタバンクを実現し、そして、5回のダウンサンプリングを行います。

44.1 kHz(CDのサンプリングレート)から48 kHz(DATのサンプリングレート)へのサンプルレート変更、すなわち、160/147の比率に変更します。これには、c = 2/160にカットオフ周波数をもつローパスフィルタが必要です。

この例題では、フィルタ設計とリサンプリングは別々のステップです。resampleは、両方のステップを1つのステップとして実行します。

アルゴリズム

upfirdnは、ポリフェーズ補間構造を使用します。ポリフェーズ構造での乗算-加算演算の回数は、およそ(LhLx-pLx)/q となります。ここで、Lhと Lxは、それぞれh[n] とx[n] の長さです。

プログラムではより正確なflops回数が計算されますが、実際の回数はやはり近似値です。長い信号x[n],に対しては、この公式はほとんどの場合、正確です。

参考

conv
コンボリューションおよび多項式乗算
decimate
データ列に対するサンプリングレートの低減 (間引き)
filter
巡回型(IIR)または非巡回型(FIR)フィルタによるデータのフィルタリング
interp
整数ファクタをもとにサンプリングレートを高くする (内挿)
intfilt
内挿FIRフィルタ設計
resample
任意のファクタによるサンプリングレートの変更

参考文献

[1] Crochiere, R.E., and L.R. Rabiner, Multi-Rate Signal Processing, Prentice-Hall, Englewood Cliffs, NJ, 1983, pp. 88-91.

[2] Crochiere, R.E., "A General Program to Perform Sampling Rate Conversion of Data by Rational Ratios," Programs for Digital Signal Processing, IEEE Press, New York, 1979, pp. 8.2-1 to 8.2-7.


  unwrap vco