JPWO2005104365A1 - デジタルフィルタの設計方法および設計装置、デジタルフィルタ設計用プログラム、デジタルフィルタ、所望周波数特性の数値列の生成方法および生成装置、所望周波数特性の数値列生成用プログラム - Google Patents
デジタルフィルタの設計方法および設計装置、デジタルフィルタ設計用プログラム、デジタルフィルタ、所望周波数特性の数値列の生成方法および生成装置、所望周波数特性の数値列生成用プログラム Download PDFInfo
- Publication number
- JPWO2005104365A1 JPWO2005104365A1 JP2006512475A JP2006512475A JPWO2005104365A1 JP WO2005104365 A1 JPWO2005104365 A1 JP WO2005104365A1 JP 2006512475 A JP2006512475 A JP 2006512475A JP 2006512475 A JP2006512475 A JP 2006512475A JP WO2005104365 A1 JPWO2005104365 A1 JP WO2005104365A1
- Authority
- JP
- Japan
- Prior art keywords
- function
- filter
- interpolation function
- frequency
- digital filter
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Images
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03H—IMPEDANCE NETWORKS, e.g. RESONANT CIRCUITS; RESONATORS
- H03H17/00—Networks using digital techniques
- H03H17/02—Frequency selective networks
- H03H17/06—Non-recursive filters
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03H—IMPEDANCE NETWORKS, e.g. RESONANT CIRCUITS; RESONATORS
- H03H17/00—Networks using digital techniques
- H03H2017/0072—Theoretical filter design
Landscapes
- Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Mathematical Physics (AREA)
- Complex Calculations (AREA)
- Filters That Use Time-Delay Elements (AREA)
Abstract
標準関数を入力してこれから有限長の補間関数を計算し、補間関数の周波数特性を周波数軸方向に所望量だけシフトすることによって、仕様に基づく入力周波数特性を定める。そして、この入力周波数特性を表す数値列を逆FFTすることによってフィルタ係数化し、係数値に基づく丸め処理によって少ない数のフィルタ係数を得るようにすることにより、フィルタ係数の数を少なくするための演算として窓掛けを不要とし、所望の周波数特性を有するFIRフィルタを簡易的に設計できるようにする。
Description
本発明はデジタルフィルタの設計方法および設計装置、デジタルフィルタ設計用プログラム、デジタルフィルタ、所望周波数特性の数値列の生成方法および生成装置、所望周波数特性の数値列生成用プログラムに関し、特に、複数の遅延器から成るタップ付き遅延線を備え、各タップの信号をそれぞれ数倍した後、それらの乗算結果を加算して出力するタイプのFIRフィルタおよびその設計法、更にはそのフィルタ設計で用いる入力周波数特性を表す数値列の生成法に関するものである。
様々な技術分野で提供されている種々の電子機器においては、その内部で何らかのデジタル信号処理を行っているのが通常である。デジタル信号処理の最も重要な基本操作に、各種の信号や雑音が混在している入力信号の中から、必要な周波数帯域の信号のみを取り出すフィルタリング処理がある。このために、デジタル信号処理を行う電子機器では、デジタルフィルタが用いられることが多い。
デジタルフィルタとしては、IIR(Infinite Impulse Response:無限長インパルス応答)フィルタやFIR(Finite Impulse Response:有限長インパルス応答)フィルタが多く用いられる。このうちFIRフィルタは、次のような利点を持つ。第1に、FIRフィルタの伝達関数の極はz平面の原点のみにあるため、回路は常に安定である。第2に、フィルタ係数が対称型であれば、完全に正確な直線位相特性を実現することが可能である。
このFIRフィルタは、有限時間長で表されるインパルス応答がそのままフィルタ係数となっている。したがって、FIRフィルタを設計するということは、希望の周波数特性が得られるようにフィルタ係数を決定するということである。従来、フィルタ係数を算出する方法として、いくつかの方法が提案されてきた。
例えば、目標とする周波数特性のサンプリング周波数とカットオフ周波数との比率をもとに、チェビシェフ近似式を用いた畳み込み演算等によりフィルタ係数を求める方法が存在する。また、所望の周波数特性の波形を数値列もしくは関数として入力し、当該入力した数値列もしくは関数を逆フーリエ変換(逆FFT)してその結果の実数項を抽出することによってフィルタ係数を求める方法も存在する(例えば、特許文献1,2参照)。
特開昭63−234617号公報 特開2003−168958号公報
しかしながら、上記従来の技術で求められるフィルタ係数の数は膨大であり、しかもそれらの数値は非常に複雑でランダムな値である。そのため、得られたフィルタ係数を全て使用すると、フィルタ回路のタップ数が非常に多くなるばかりでなく、複雑でランダムなフィルタ係数値を乗算するために多くの乗算器が必要になってしまう。つまり、大規模な回路構成が必要となり、現実的でない。そこで、窓関数を用いた窓掛け演算によってフィルタ係数の数を実用上耐えうる程度に減らす必要があった。
ところが、フィルタ係数の数を減らすために窓掛けを行うと、周波数特性に大きな影響を与えるフィルタ係数も打ち切られてしまうことが多く、目標とする良好な周波数特性を得ることができなくなってしまう。また、入力した波形の数値列を逆FFTすることによってフィルタ係数を求める方法では、入力波形を表す数値列や関数次第で周波数特性が決まるが、そもそもこの数値列や関数を求めること自体が難しかった。そのため、従来の何れのフィルタ設計法を用いても、所望の周波数特性を実現するのは非常に困難という問題があった。
また、窓掛けを行う従来のフィルタ設計法で所望の周波数特性を得るためには、仮に求めたフィルタ係数をFFTしてその周波数特性を確認しながらの試行錯誤が必要となる。特に、入力波形を逆FFTする手法の場合は、その入力波形の数値列や関数自体を試行錯誤して求めなければならない。したがって、従来は熟練した技術者が時間と手間をかけて設計する必要があり、所望特性のFIRフィルタを容易には設計できないという問題もあった。
デジタルフィルタとしては、IIR(Infinite Impulse Response:無限長インパルス応答)フィルタやFIR(Finite Impulse Response:有限長インパルス応答)フィルタが多く用いられる。このうちFIRフィルタは、次のような利点を持つ。第1に、FIRフィルタの伝達関数の極はz平面の原点のみにあるため、回路は常に安定である。第2に、フィルタ係数が対称型であれば、完全に正確な直線位相特性を実現することが可能である。
このFIRフィルタは、有限時間長で表されるインパルス応答がそのままフィルタ係数となっている。したがって、FIRフィルタを設計するということは、希望の周波数特性が得られるようにフィルタ係数を決定するということである。従来、フィルタ係数を算出する方法として、いくつかの方法が提案されてきた。
例えば、目標とする周波数特性のサンプリング周波数とカットオフ周波数との比率をもとに、チェビシェフ近似式を用いた畳み込み演算等によりフィルタ係数を求める方法が存在する。また、所望の周波数特性の波形を数値列もしくは関数として入力し、当該入力した数値列もしくは関数を逆フーリエ変換(逆FFT)してその結果の実数項を抽出することによってフィルタ係数を求める方法も存在する(例えば、特許文献1,2参照)。
しかしながら、上記従来の技術で求められるフィルタ係数の数は膨大であり、しかもそれらの数値は非常に複雑でランダムな値である。そのため、得られたフィルタ係数を全て使用すると、フィルタ回路のタップ数が非常に多くなるばかりでなく、複雑でランダムなフィルタ係数値を乗算するために多くの乗算器が必要になってしまう。つまり、大規模な回路構成が必要となり、現実的でない。そこで、窓関数を用いた窓掛け演算によってフィルタ係数の数を実用上耐えうる程度に減らす必要があった。
ところが、フィルタ係数の数を減らすために窓掛けを行うと、周波数特性に大きな影響を与えるフィルタ係数も打ち切られてしまうことが多く、目標とする良好な周波数特性を得ることができなくなってしまう。また、入力した波形の数値列を逆FFTすることによってフィルタ係数を求める方法では、入力波形を表す数値列や関数次第で周波数特性が決まるが、そもそもこの数値列や関数を求めること自体が難しかった。そのため、従来の何れのフィルタ設計法を用いても、所望の周波数特性を実現するのは非常に困難という問題があった。
また、窓掛けを行う従来のフィルタ設計法で所望の周波数特性を得るためには、仮に求めたフィルタ係数をFFTしてその周波数特性を確認しながらの試行錯誤が必要となる。特に、入力波形を逆FFTする手法の場合は、その入力波形の数値列や関数自体を試行錯誤して求めなければならない。したがって、従来は熟練した技術者が時間と手間をかけて設計する必要があり、所望特性のFIRフィルタを容易には設計できないという問題もあった。
本発明は、このような問題を解決するために成されたものであり、フィルタ係数の数が少なく小さな回路規模で所望の周波数特性を高精度に実現することが可能なFIRデジタルフィルタを、試行錯誤を殆ど要することなく簡易的に設計できるようにすることを目的とする。
上記した課題を解決するために、本発明では、標準関数を入力してこれから有限長の補間関数を計算することによって、仕様に基づく入力周波数特性を定める。そして、この入力周波数特性を表す数値列を逆フーリエ変換することによってフィルタ係数化し、係数値に基づく丸め処理によって処理ビット数に応じた少ない数のフィルタ係数を得るようにしている。
上記のように構成した本発明によれば、専門知識がなくても、ローパスフィルタ、ハイパスフィルタ、バンドパスフィルタ、バンドエミリネーションフィルタなどの所望の周波数特性を有するFIRデジタルフィルタを簡易的に設計することができる。また、本発明によれば、フィルタ係数の数を減らすために窓掛けが不要で、数値の丸め演算によって、周波数特性の精度を落とさずにフィルタ係数の数(デジタルフィルタのタップ数)を減らすことができる。つまり、タップ数が少なく、かつ、リップルの少ない通過域特性と一様な減衰特性とを有する良好な周波数特性のFIRフィルタを簡易的に設計することができる。
上記した課題を解決するために、本発明では、標準関数を入力してこれから有限長の補間関数を計算することによって、仕様に基づく入力周波数特性を定める。そして、この入力周波数特性を表す数値列を逆フーリエ変換することによってフィルタ係数化し、係数値に基づく丸め処理によって処理ビット数に応じた少ない数のフィルタ係数を得るようにしている。
上記のように構成した本発明によれば、専門知識がなくても、ローパスフィルタ、ハイパスフィルタ、バンドパスフィルタ、バンドエミリネーションフィルタなどの所望の周波数特性を有するFIRデジタルフィルタを簡易的に設計することができる。また、本発明によれば、フィルタ係数の数を減らすために窓掛けが不要で、数値の丸め演算によって、周波数特性の精度を落とさずにフィルタ係数の数(デジタルフィルタのタップ数)を減らすことができる。つまり、タップ数が少なく、かつ、リップルの少ない通過域特性と一様な減衰特性とを有する良好な周波数特性のFIRフィルタを簡易的に設計することができる。
図1は、本実施形態によるデジタルフィルタの設計方法の処理手順を示すフローチャートである。
図2は、図1のステップS1における入力周波数特性の第1の生成方法に係る計算手順を示すフローチャートである。
図3は、図1のステップS1における入力周波数特性の第2の生成方法に係る計算手順を示すフローチャートである。
図4は、第2の生成方法によって生成される補間関数(設計仕様に基づくローパスフィルタ)の周波数振幅特性を示す図である。
図5は、図1のステップS3における並べ替え処理を説明するための図である。
図6は、図2のステップS11で入力するローパスフィルタの標準関数の例を示す図である。
図7は、図6の標準関数から計算される補間関数の例を示す図である。
図8は、図7の補間関数を所望量だけシフトして得られる周波数特性を示す図である。
図9は、図8の周波数特性を左右対称型に変換して生成した入力周波数特性を示す図である。
図10は、図46に示す仕様のローパスフィルタについて、図6に示す標準関数から本実施形態のフィルタ設計法に従って求めたフィルタ係数(丸め処理前のもの)の分布を示す図である。
図11は、図10に示すフィルタ係数に対して丸め演算を実施した後のフィルタ係数の分布を拡大して示す図である。
図12は、図11に示すフィルタ係数によって実現されるFIRローパスフィルタの周波数振幅特性を示す図である。
図13は、図2のステップS11で入力するローパスフィルタの標準関数およびこれから計算される補間関数の他の例を示す図である。
図14は、図2のステップS11で入力するローパスフィルタの標準関数およびこれから計算される補間関数の他の例を示す図である。
図15は、図46に示す仕様のローパスフィルタについて、図13に示す標準関数から本実施形態のフィルタ設計法に従って求めたフィルタ係数(丸め処理前のもの)の分布を示す図である。
図16は、図46に示す仕様のローパスフィルタについて、図14に示す標準関数から本実施形態のフィルタ設計法に従って求めたフィルタ係数(丸め処理前のもの)の分布を示す図である。
図17は、図2のステップS11で入力するハイパスフィルタの標準関数の例を示す図である。
図18は、図17の標準関数から計算される補間関数の例を示す図である。
図19は、図18の補間関数を所望量だけシフトして得られる周波数特性を示す図である。
図20は、図19の周波数特性を左右対称型に変換して生成した入力周波数特性を示す図である。
図21は、第2の生成方法によって生成される補間関数(設計仕様に基づくハイパスフィルタ)の周波数振幅特性を示す図である。
図22は、図47に示す仕様のハイパスフィルタについて、図17に示す標準関数から本実施形態のフィルタ設計法に従って求めたフィルタ係数(丸め処理前のもの)の分布を示す図である。
図23は、図22に示すフィルタ係数に対して丸め演算を実施した後のフィルタ係数の分布を拡大して示す図である。
図24は、図23に示すフィルタ係数によって実現されるFIRハイパスフィルタの周波数振幅特性を示す図である。
図25は、図48に示す仕様のバンドパスフィルタを設計する場合に図6および図17の標準関数から計算される補間関数の例を示す図である。
図26は、図25の補間関数を所望量だけシフトして得られる周波数特性を示す図である。
図27は、図26の周波数特性を左右対称型に変換して生成した入力周波数特性を示す図である。
図28は、第2の生成方法によって生成される補間関数(設計仕様に基づくバンドパスフィルタ)の周波数振幅特性を示す図である。
図29は、図48に示す仕様のハイパスフィルタについて、図25に示す補間関数から本実施形態のフィルタ設計法に従って求めたフィルタ係数(丸め処理前のもの)の分布を示す図である。
図30は、図29に示すフィルタ係数に対して丸め演算を実施した後のフィルタ係数の分布を拡大して示す図である。
図31は、図30に示すフィルタ係数によって実現されるFIRバンドパスフィルタの周波数振幅特性を示す図である。
図32は、図2のステップS11で入力するローパスフィルタの他の標準関数の例を示す図である。
図33は、図32の標準関数から計算される補間関数の例を示す図である。
図34は、図2のステップS11で入力するローパスフィルタの標準関数およびこれから計算される補間関数の他の例を示す図である。
図35は、図46に示す仕様のローパスフィルタについて、図34に示す標準関数から本実施形態のフィルタ設計法に従って求めたフィルタ係数(丸め処理前のもの)の分布を示す図である。
図36は、図2のステップS11で入力するローパスフィルタの標準関数およびこれから計算される補間関数の他の例を示す図である。
図37は、図46に示す仕様のローパスフィルタについて、図36に示す標準関数から本実施形態のフィルタ設計法に従って求めたフィルタ係数(丸め処理前のもの)の分布を示す図である。
図38は、図2のステップS11で入力するローパスフィルタの更に別の標準関数の例を示す図である。
図39は、図38の標準関数から計算される補間関数の例を示す図である。
図40は、3種類の標準関数、これら標準関数から計算される3種類の補間関数、補間関数をシフトして定めた入力周波数特性を逆FFTすることによって得られる3種利のフィルタ係数の分布を示す図である。
図41は、丸め演算の際に使うxの値(丸め後のビット数x)と必要なタップ数との関係を示す図である。
図42は、本実施形態によるデジタルフィルタの構成例を示す図である。
図43は、本実施形態によるデジタルフィルタの他の構成例を示すブロック図である。
図44は、本実施形態によるデジタルフィルタの他の構成例を示すブロック図である。
図45は、本実施形態によるデジタルフィルタの他の構成例を示すブロック図である。
図46は、ローパスフィルタの設計仕様例を示す図である。
図47は、ハイパスフィルタの設計仕様例を示す図である。
図48は、バンドパスフィルタの設計仕様例を示す図である。
図2は、図1のステップS1における入力周波数特性の第1の生成方法に係る計算手順を示すフローチャートである。
図3は、図1のステップS1における入力周波数特性の第2の生成方法に係る計算手順を示すフローチャートである。
図4は、第2の生成方法によって生成される補間関数(設計仕様に基づくローパスフィルタ)の周波数振幅特性を示す図である。
図5は、図1のステップS3における並べ替え処理を説明するための図である。
図6は、図2のステップS11で入力するローパスフィルタの標準関数の例を示す図である。
図7は、図6の標準関数から計算される補間関数の例を示す図である。
図8は、図7の補間関数を所望量だけシフトして得られる周波数特性を示す図である。
図9は、図8の周波数特性を左右対称型に変換して生成した入力周波数特性を示す図である。
図10は、図46に示す仕様のローパスフィルタについて、図6に示す標準関数から本実施形態のフィルタ設計法に従って求めたフィルタ係数(丸め処理前のもの)の分布を示す図である。
図11は、図10に示すフィルタ係数に対して丸め演算を実施した後のフィルタ係数の分布を拡大して示す図である。
図12は、図11に示すフィルタ係数によって実現されるFIRローパスフィルタの周波数振幅特性を示す図である。
図13は、図2のステップS11で入力するローパスフィルタの標準関数およびこれから計算される補間関数の他の例を示す図である。
図14は、図2のステップS11で入力するローパスフィルタの標準関数およびこれから計算される補間関数の他の例を示す図である。
図15は、図46に示す仕様のローパスフィルタについて、図13に示す標準関数から本実施形態のフィルタ設計法に従って求めたフィルタ係数(丸め処理前のもの)の分布を示す図である。
図16は、図46に示す仕様のローパスフィルタについて、図14に示す標準関数から本実施形態のフィルタ設計法に従って求めたフィルタ係数(丸め処理前のもの)の分布を示す図である。
図17は、図2のステップS11で入力するハイパスフィルタの標準関数の例を示す図である。
図18は、図17の標準関数から計算される補間関数の例を示す図である。
図19は、図18の補間関数を所望量だけシフトして得られる周波数特性を示す図である。
図20は、図19の周波数特性を左右対称型に変換して生成した入力周波数特性を示す図である。
図21は、第2の生成方法によって生成される補間関数(設計仕様に基づくハイパスフィルタ)の周波数振幅特性を示す図である。
図22は、図47に示す仕様のハイパスフィルタについて、図17に示す標準関数から本実施形態のフィルタ設計法に従って求めたフィルタ係数(丸め処理前のもの)の分布を示す図である。
図23は、図22に示すフィルタ係数に対して丸め演算を実施した後のフィルタ係数の分布を拡大して示す図である。
図24は、図23に示すフィルタ係数によって実現されるFIRハイパスフィルタの周波数振幅特性を示す図である。
図25は、図48に示す仕様のバンドパスフィルタを設計する場合に図6および図17の標準関数から計算される補間関数の例を示す図である。
図26は、図25の補間関数を所望量だけシフトして得られる周波数特性を示す図である。
図27は、図26の周波数特性を左右対称型に変換して生成した入力周波数特性を示す図である。
図28は、第2の生成方法によって生成される補間関数(設計仕様に基づくバンドパスフィルタ)の周波数振幅特性を示す図である。
図29は、図48に示す仕様のハイパスフィルタについて、図25に示す補間関数から本実施形態のフィルタ設計法に従って求めたフィルタ係数(丸め処理前のもの)の分布を示す図である。
図30は、図29に示すフィルタ係数に対して丸め演算を実施した後のフィルタ係数の分布を拡大して示す図である。
図31は、図30に示すフィルタ係数によって実現されるFIRバンドパスフィルタの周波数振幅特性を示す図である。
図32は、図2のステップS11で入力するローパスフィルタの他の標準関数の例を示す図である。
図33は、図32の標準関数から計算される補間関数の例を示す図である。
図34は、図2のステップS11で入力するローパスフィルタの標準関数およびこれから計算される補間関数の他の例を示す図である。
図35は、図46に示す仕様のローパスフィルタについて、図34に示す標準関数から本実施形態のフィルタ設計法に従って求めたフィルタ係数(丸め処理前のもの)の分布を示す図である。
図36は、図2のステップS11で入力するローパスフィルタの標準関数およびこれから計算される補間関数の他の例を示す図である。
図37は、図46に示す仕様のローパスフィルタについて、図36に示す標準関数から本実施形態のフィルタ設計法に従って求めたフィルタ係数(丸め処理前のもの)の分布を示す図である。
図38は、図2のステップS11で入力するローパスフィルタの更に別の標準関数の例を示す図である。
図39は、図38の標準関数から計算される補間関数の例を示す図である。
図40は、3種類の標準関数、これら標準関数から計算される3種類の補間関数、補間関数をシフトして定めた入力周波数特性を逆FFTすることによって得られる3種利のフィルタ係数の分布を示す図である。
図41は、丸め演算の際に使うxの値(丸め後のビット数x)と必要なタップ数との関係を示す図である。
図42は、本実施形態によるデジタルフィルタの構成例を示す図である。
図43は、本実施形態によるデジタルフィルタの他の構成例を示すブロック図である。
図44は、本実施形態によるデジタルフィルタの他の構成例を示すブロック図である。
図45は、本実施形態によるデジタルフィルタの他の構成例を示すブロック図である。
図46は、ローパスフィルタの設計仕様例を示す図である。
図47は、ハイパスフィルタの設計仕様例を示す図である。
図48は、バンドパスフィルタの設計仕様例を示す図である。
以下、本発明の一実施形態を図面に基づいて説明する。図1は、本実施形態によるデジタルフィルタの設計方法の処理手順を示すフローチャートである。ここで設計するデジタルフィルタは、複数の遅延器から成るタップ付き遅延線を備え、各タップから取り出した信号に各フィルタ係数をそれぞれ乗算した後、それらの乗算結果を加算して出力するタイプのFIRフィルタである。図1のフローチャートは、FIRフィルタにおけるフィルタ係数の決定方法を示している。
図1に示すように、まず、設計したいフィルタの仕様に基づいて補間関数を計算し、計算した補間関数を用いて入力周波数特性を定める(ステップS1)。ここで計算する補間関数は、設計したいフィルタの仕様に基づく周波数振幅特性の最大振幅値と最小振幅値との間を補間する関数である。また、この補間関数によって定める入力周波数特性は、設計したいフィルタの周波数特性そのものを表すものである。補間関数の計算方法については、図2および図3のフローチャートを用いて後で詳述する。
次に、このようにして入力した補間関数により定まる数値列を逆FFTし、その結果の実数項を抽出する(ステップS2)。周知のように、ある数値列に対してFFTの処理を行うと、その数値列に対応した周波数特性が得られる。したがって、補間関数により入力した周波数特性を表す数値列を逆FFTし、その実数項を抽出すれば、当該入力周波数特性を実現するのに必要な数値列が得られる。この数値列が、求めるフィルタ係数に相当するものである。
ただし、ステップS1で計算した補間関数から逆FFTにより求められる数値列そのものは、必ずしもフィルタ係数としてそのまま使える順番には並んでいない。すなわち、どのようなタイプのデジタルフィルタでも、フィルタ係数の数値列は、中央値が最も大きく、中央から離れるに従って振幅を繰り返しながら値が徐々に小さくなるという対称性を持っている。これに対して、補間関数から逆FFTにより求められる数値列は、中央値が最も小さく、端の値が最も大きくなっている。
そこで、図5に示すように、逆FFTにより求められた数値列の最大値が中央部にくるように、数値列を前半部と後半部とに分けてそれらを並べ替える(ステップS3)。
このようにして得られた数値列をそのまま求めるフィルタ係数として決定することも可能であるが、本実施形態では更に、以下に述べる丸め演算を行うことによって、フィルタ係数を必要な数に減らすとともに、その数値を簡素化するようにしている(ステップS4)。
例えば、ステップS3において適宜並べ替えが行われた後の数値列がyビットのデータである場合、当該yビットのデータを2x倍して小数点以下を丸める処理を行うことによってxビット(x<y)の整数化されたデータを求め、これをフィルタ係数として利用するようにする。また、yビットのデータに対して丸め処理を行うことによってxビット(x<y)のデータとし、これを2x倍することによって値を整数化するようにしても良い。
このような整数化の丸め演算を行うと、デジタルフィルタは、図43に示すように、複数の遅延器(D型フリップフロップ)1から成るタップ付き遅延線の各タップからの出力信号に対して整数のフィルタ係数を複数の係数器2で個別に乗算し、それぞれの乗算出力を複数の加算器3で全て加算した後に、1つのシフト演算器4でまとめて1/2x倍するように構成することが可能となる。しかも、整数のフィルタ係数は、2i+2j+・・・(i,jは任意の整数)のように2進数の足し算で表現できる。これにより、乗算器の代わりにビットシフト回路で係数器2を構成することができるので、FIRフィルタ全体として乗算器や加算器などの使用数を大きく削減し、デジタルフィルタの回路規模を大幅に削減することができる。
本実施形態では、このような丸め演算によって求められた数値列を、求めるフィルタ係数として決定する。なお、上述のステップS3とステップS4の処理は必ずしもこの順番で行う必要はなく、この順番を逆にしても良い。
次に、ステップS1における入力周波数特性の計算方法を具体例に沿って詳細に説明する。ここでは、入力周波数特性を求める方法を2通り示す。
<第1の生成方法>
図2は、本実施形態による入力周波数特性の第1の生成方法に係る計算手順を示すフローチャートである。図2において、まず、標準関数を入力する(ステップS11)。ここで入力する標準関数は、そのインパルス応答が一定の領域内でのみ“0”以外の有限な値を有し、それ以外の領域では値が全て“0”となるような関数、つまり所定の標本位置において値が“0”に収束するインパルス応答を持った係数列を有する関数であることが好ましい。
このように、局所的な領域で“0”以外の有限の値を有し、それ以外の領域で値が“0”となるような有限台のインパルス応答を持つ係数列の例として、本発明者が発案した特願2003−56265号に記載のような数値列が存在する。例えば、図46に示すような仕様のローパスフィルタを設計する場合には、標準関数XF1として、特願2003−56265号に記載の数値列を利用して次の(式1)に示すような関数を入力する。
XF1=8/16+9/16*cos(2πt)−1/16*cos(6πt) ・・・(式1)
ここで、(式1)で示される関数は、振幅最大値=1、周波数最大値=1で基準化されている。この(式1)における各項の係数{8/16,9/16,0,−1/16}(“0”はcos(4πt)の項の係数)は、特願2003−56265号に記載されているローパスフィルタのフィルタ係数{−1,0,9,16,9,0,−1}/16をその中央で半分に分けたものの片側に相当する数値列である。特願2003−56265号に詳細に記述しているように、{−1,0,9,16,9,0,−1}/16の数値列をフィルタ係数とするローパスフィルタのインパルス応答は有限台であり、滑らかな波形となるために必要なサンプル点を全て通る。{8,9,0,−1}/16の数値列も同様に、有限台のインパルス応答を有する数値列である。
図46に示すような仕様のローパスフィルタを設計する場合には、例えばこのような有限台のインパルス応答を持った係数{8,9,0,−1}/16によって特定される(式1)のような標準関数XF1を入力する。具体的には、(式1)中のサンプリング時間(クロック)tの値を0/1024から1023/1024まで変化させて計算した結果の1024個の数値列を入力する。図6は、この1024個の数値列をグラフ化したものである。これから分かるように、標準関数を入力するということは、例えば有限台のインパルス応答を持った数値列によって特定される所望の周波数特性の波形を入力することに相当する。
標準関数XF1の数値列を入力したら、次に、この標準関数XF1を基にして補間関数を求める(ステップS12)。ここで求める補間関数は、周波数振幅特性の振幅値“1”と“0”との間を補間するための関数である。補間関数を求める際には、まず、標準関数XF1によって特定される周波数特性における遷移域の全領域に対する比率(以下、標準遷移域比率R1sと言う)を求める。ここで遷移域とは、通過域と遮断域との間における傾斜部分の領域を言う。第1の生成方法においては、傾斜部分における代表の2点間(例えば、振幅が−0.3dBの点から−45dBの点までの範囲)を遷移域と考える。
通過域の振幅値を“1”とした場合、標準関数XF1の−0.3dBの振幅値は0.966051、−45dBの振幅値は0.005623となる。図6に示す周波数特性前半上でこれらの振幅値に対応する基準化クロックTdの値を計算すると、それぞれTd−0.3=0.107878,Td−45=0.432775となる。よって、標準関数XF1の遷移域の基準幅Lsは、Ls=Td−45−Td−0.3=0.324897となる。一方、標準関数XF1の周波数特性前半の基準化クロック数は0.5である。したがって、標準関数XF1の標準遷移域比率Rtsは、Rts=Ls/0.5=0.649794と求まる。
次に、この標準遷移域比率Rtsから補間関数長Liを求める。補間関数長Liとは、求める補間関数の有効領域の長さ(基準化クロック数)を言う。この補間関数長Liは、設計したいFIRフィルタの遷移域のクロック幅Ldと、上述の標準遷移域比率Rtsとから求める。図46に示す仕様のローパスフィルタを設計する場合、遷移域幅の仕様は8.5MHz〜11.8MHzである。サンプリング周波数80MHzのクロック幅が1024であるから、8.5MHzに対応するクロックはT8.5M=109、11.8MHzに対応するクロックはT11.8M=151となり、設計したい遷移域のクロック幅LdはLd=T11.8M−T8.5M=42となる。この場合、補間関数長Liは、Li=Ld/Rts=64.576539と求まる。
ローパスフィルタにおいてタップ数を削減するためには、補間関数長Liは計算値より大きい偶整数とすることが望ましい。そこで、この場合の補間関数長Liは66とする。補間関数長Liが66クロックの補間関数I(LPF1)は、次の区分方程式(式2−1)(式2−2)のように求まる。
I(LPF1)=8/16+9/16*cos(2πt/66)−1/16*cos(6πt/66)
(0/1024≦t≦65/1024のとき) ・・・(式2−1)
I(LPF1)=0
(65/1024<t≦1023/1024のとき)・・・(式2−2)
上述の補間関数I(LPF1)は、具体的には、(式2−1,2−2)中のクロックtの値を0/1024から1023/1024まで変化させて計算した結果の1024個の数値列として求める。図7は、この1024個の数値列をグラフ化したものである。
このようにして補間関数I(LPF1)を求めたら、次に、この補間関数I(LPF1)の周波数特性を周波数軸方向(クロック方向)にシフトさせ、振幅値の“1”と“0”とをこのシフトした補間関数I(LPF1)で繋ぐ(ステップS13)。具体的には、(式2−1)で求められた基準化クロックt=0/1024〜65/1024の位置に対応する66個の数値列を基準化クロックt=i/1024〜(i+65)/1024の位置にシフトさせ(iは整数)、基準化クロックt=0/1024〜(i−1)/1024の位置の数値列を全て“1”、基準化クロックt=(i+66)/1024〜1023/1024の位置の数値列を全て“0”とする。図8は、このように補間関数I(LPF1)をシフトして求めた1024個の数値列をグラフ化したものである。
次に、図8にて示される周波数特性を、クロックt=0.5の位置を境界として左右対称となるように変換する(ステップS14)。具体的には、基準化クロックt=0/1024以外のt=1/1024〜511/1024の数値列を、その並び順を逆にして基準化クロックt=512/1024〜1023/1024の位置にコピーする。このようにして左右対称型とした1024個の数値列を、図1のステップS1における入力周波数特性の数値列として決定する。図9は、図8の周波数特性を左右対称型に変換した結果の周波数特性を示す図である。
なお、補間関数のシフト量iは、補間関数の振幅値“0.5”が周波数軸の1/8,2/8,3/8の位置にくるような値に設定すると、図1のステップS2で入力周波数特性の数値列を逆FFTした結果として得られるフィルタ係数が単純になり、結果として少ないタップ数のFIRフィルタを設計することが可能である。
<第2の生成方法>
次に、入力周波数特性数を求める第2の方法について説明する。図3は、本実施形態による入力周波数特性の第2の生成方法に係る計算手順を示すフローチャートである。また、図4は、第2の生成方法を説明するための図であり、第2の生成方法によって生成される補間関数(設計仕様に基づくローパスフィルタ)の周波数振幅特性を示している。
図3において、まず、標準関数を入力する(ステップS21)。ここで入力する標準関数は、第1の生成方法で入力したものと同様に有限台の関数であり、例えば(式1)で示される標準関数XF1である。
標準関数XF1の数値列を入力したら、次に、この標準関数XF1を基にして補間関数を求める(ステップS22)。ここで求める補間関数は、周波数振幅特性の振幅値“1”と“0”との間を補間するための関数であり、要求されるデジタルフィルタの設計仕様に基づき周波数シフトされたものである。
周波数シフトされた補間関数を求める際には、まず、標準関数XF1から生成しようとする補間関数が持つ遷移域(デジタルフィルタの設計仕様に基づく遷移域)の、標準関数XF1が持つ遷移域に対する比率(以下、要求遷移域比率Rtrと言う)を求める。第2の生成方法で言う遷移域は、第1の生成方法のそれと異なり、振幅値が“1”と“0”との間に基準化された周波数振幅特性において、振幅値が“1”および“0”以外の値をとる領域を言う。要求遷移域比率Rtrを求める際には、遷移域における代表の2点(例えば、振幅が−0.3dBの点、−45dBの点)の情報を用いる。
通過域の振幅値を“1”とした場合、標準関数XF1の−0.3dBの振幅値は0.966051、−45dBの振幅値は0.005623となる。図6に示す周波数特性前半上でこれらの振幅値に対応する基準化クロックTdを計算すると、それぞれTd−0.3=0.107878,Td−45=0.432775となる。したがって、標準関数XF1の遷移域の基準幅Lsは、Ls=Td−45−Td−0.3=0.324897となる。一方、図46のフィルタ規格より、要求されるデジタルフィルタの遷移域の基準幅Lrdは、Lrd=(11.8−8.5)/80=0.04125となる。したがって、要求されるデジタルフィルタ(補間関数)の要求遷移域比率Rtrは、Rtr=Lrd/Ls=0.126963と求まる。
次に、要求されるデジタルフィルタの基準化クロックt=0から遷移域の開始点t=k1(図4参照)までのクロック数Lhsを計算する。遷移域の開始点k1から−0.3dBの点k2までのクロック数をTk1−k2、−0.3dBの点k2の基準化クロックをTk2とすると、基準化クロックt=0から遷移域の開始点t=k1までのクロック数Lhsは、Lhs=Tk2−Tk1−k2で求められる。ここで、図46に示すフィルタ規格より−0.3dBの周波数は8.5MHZであるから、これに相当する点k2の基準化クロックTk2は、Tk2=8.5/80=0.10625となる。一方、遷移域の開始点k1から−0.3dBの点k2までのクロック数Tk1−k2は、標準関数XF1における遷移域の開始点(t=0の点)から−0.3dBの点までのクロック数Td−0.3と要求遷移域比率R1rとを用いて、Td−0.3*Rtrで求められる。上述のように、Td−0.3=0.107878、Rtr=0.126963であるから、Tk1−k2=0.107878*0.126963=0.013697となる。したがって、遷移域の開始点k1までのクロック数Lhsは、Lhs=0.10625−0.013697=0.092553と求まる。
さらに、要求されるデジタルフィルタの基準化クロックt=0から遷移域の終了点t=k4までのクロック数Lheを計算する。遷移域の開始点k1から終了点k4までのクロック数をTk1−k4とすると、基準化クロックt=0から遷移域の終了点t=k4までのクロック数Lheは、Lhe=Lhs+Tk1−k4で求められる。ここで、遷移域の開始点k1から終了点k4までのクロック数Tk1−k4は、標準関数XF1における遷移域の開始点(t=0の点)から終了点(t=511/1024の点)までのクロック数(=0.5)と要求遷移域比率Rtrとを用いて、0.5*Rtrで求められる。上述のように、Rtr=0.126963であるから、Tk1−k4=0.5*0.126963=0.063482となる。したがって、基準化クロックt=0から遷移域の終了点t=k4までのクロック数Lheは、Lhe=0.092553+0.063482=0.156035と求まる。
以上の結果、補間関数I(LPF1)は、次の区分方程式(式3−1,3−2,3−3)のように求まる。
I(LPF1)=1
(0/1024≦t<Lhsのとき) ・・・(式3−1)
I(LPF1)=8/16+9/16*cos((2π(t−Lhs)/Rtr))−1/16*cos((6π(t−Lhs)/Rtr))
(Lhs≦t≦Lhcのとき)・・・(式3−2)
I(LPF1)=0
(Lhc<t≦1023/1024のとき)・・・(式3−3)
上述の補間関数I(LPF1)は、具体的には、(式3)中のクロックtの値を0/1024から1023/1024まで変化させて計算した結果の1024個の数値列として求める。このような1024個の数値列をグラフ化すると、第1の生成方法で求めた図8のグラフとほぼ同様になる。ただし、上述した第1の生成方法では、計算によって求めた補間関数長Liを計算値より大きい偶整数に丸めている。また、当該丸めた偶整数の補間関数長Liで定まる補間関数を周波数軸方向にクロック単位でしかシフトしていない。これに対して、第2の生成方法では、求めた要求遷移比率Rtrを精度の良い計算値のまま用い、当該要求遷移比率Rtrを用いて周波数シフト(遷移域の開始点と終了点)まで含めて計算式で補間関数を求めているので、図46に示した設計仕様に基づく遷移域の位置をより正確に実現することができる。
次に、図8にて示される周波数特性を、基準化クロックt=0.5の位置を境界として左右対称となるように変換する(ステップS23)。具体的には、基準化クロックt=0/1024以外のt=1/1024〜511/1024の数値列を、その並び順を逆にしてクロックt=512/1024〜1023/1024の位置にコピーする。このようにして左右対称型とした1024個の数値列を、図1のステップS1における入力周波数特性の数値列として決定する。
図10は、図46に示す仕様のローパスフィルタについて、図1および図2の手順に従って例えば32ビット(y=32)の演算精度で実際に求めたフィルタ係数(ステップS4における丸め処理前のもの)の分布を示す図である。なお、ここでは、フィルタ係数の絶対値をとって、正の係数も負の係数も同じ象現に図示している。
図10に示すように、本実施形態のフィルタ設計法によって求められるフィルタ係数の値は、中央部(基準化クロックt=511/1024の位置)で最大となる。そして、各フィルタ係数の分布は、中央付近の局所的な領域で値が大きくなり、他の領域では値が小さくなるとともに、中央付近のフィルタ係数値と周辺のフィルタ係数値との差が極めて大きくなるといった尖鋭度の高い分布となる。図1および図3の手順に従ってフィルタ係数を求めた場合も同様である。そのため、所定の閾値より小さい値のフィルタ係数を丸め処理によって破棄しても、周波数特性を決定付ける主要なフィルタ係数は殆ど残り、周波数特性に悪影響を与えることは殆どない。また、周波数特性の帯域外減衰量はフィルタ係数のビット数によって制約を受けるが、本実施形態のフィルタ設計法によって得られる周波数特性は非常に深い減衰を持っているので、ビット数を多少減らしても、所望の減衰量は確保できる。
したがって、丸め処理により不要なフィルタ係数を大幅に削減することができる。例えば、フィルタ係数の下位数ビットを切り捨ててビット数を減らすことにより、その下位数ビットだけで表される最大値よりも小さい値のフィルタ係数を全て“0”に丸めて破棄することができる。
このように、本実施形態では係数値を利用した丸め演算によってフィルタ係数の数を減らすことが可能であり、従来のような窓掛けは必ずしも必要でない。なお、上述したように、最初にステップS1で入力する標準関数は、そのインパルス応答が有限台の関数である。そのため、この標準関数をもとに設計されるフィルタ係数の数は、従来に比べてそもそも少なく、丸め処理をすることなくそのまま使用することも可能である。しかし、よりタップ数を少なくするために、ビット数を減らす丸め処理を行うのが好ましい。
このように係数値を利用した丸め演算を行える点は、従来のフィルタ設計法と大きく異なる本実施形態の特徴点である。すなわち、従来のフィルタ設計法では、求められる各フィルタ係数の分布で尖鋭度がそれほど大きくならないため、フィルタ係数の値で丸め処理をすると、周波数特性を決定付ける主要なフィルタ係数も破棄されてしまうことが多い。また、非常に深い帯域外減衰量を持った周波数特性を得ることも困難なため、フィルタ係数のビット数を減らすと必要な帯域外減衰量を確保できなくなってしまう。よって、従来はビット数を減らす丸め処理を行うことができず、窓掛けによってフィルタ係数の数を減らさざるを得なかった。そのため、周波数特性に打ち切り誤差が発生し、所望の周波数特性を得ることが極めて困難であった。
これに対して、本実施形態では窓掛けを行うことなくFIRフィルタの設計ができるので、周波数特性に打ち切り誤差が生じることはない。したがって、遮断特性の極めて大きな改善が可能となり、位相特性も直線で優れたフィルタ特性を得ることができる。つまり、リップルの少ない通過域特性と一様な減衰特性とを有する良好な周波数特性を実現することができる。
図11は、x=10とした場合、つまり逆FFTによって求められた32ビットのフィルタ係数を210倍して小数点以下を切り捨て、その結果を1/210倍することによって得られたフィルタ係数を示す分布図であり、t=511/1024の中央付近を拡大して示している。また、図12は、図11に示すフィルタ係数によって実現されるFIRローパスフィルタの周波数振幅特性を示す図であり、(a)はゲインを対数目盛りで示し、(b)はゲインを直線目盛りで示している。
図11に示すように、本実施形態のフィルタ設計法によると、最終的に求められるフィルタ係数の数は僅か43個となる。また、図12からよく分かるように、本実施形態ではフィルタ設計の際に窓掛けを行っていないので、周波数振幅特性における平坦部のリップルが極めて小さく、±0.3dBの範囲内に充分収まっている。また、丸め処理後の帯域外減衰量は約45dBとなっており、僅か43タップでも図46に示す仕様を満たしている。
なお、ここではローパスフィルタを設計する場合に(式1)のような標準関数XF1を用いる例について説明しているが、この(式1)は単なる例に過ぎない。例えば、次の(式4)または(式5)で表される標準関数XF2,XF3を用いても良い。
XF2=1/2+cos(2πt) ・・・(式4)
XF3=cos(πt)+1/8*cos(3πt)−1/8*cos(5πt) ・・・(式5)
ここで、(式4)における各項の係数{1/2,1}は、数値列{1,2,1}/2をその中央で半分に分けたものの片側に相当する数値列である。また、(式5)における各項の係数{1,1/8,−1/8}は、特願2003−56265号に記載されている基本ローパスフィルタL4a3の数値列{−1,1,8,8,1,−1}/8をその中央で半分に分けたものの片側に相当する数値列である。
なお、特願2003−56265号には、これら(式1)(式4)(式5)における各項の係数に対応する数値列以外にもローパスフィルタに対応する数値列が幾つか示されており、それらの数値列に対応する関数を本実施形態の標準関数として用いても良い。
図13は、(式4)で表される標準関数XF2およびこれから求められる補間関数I(LPF2)をグラフ化した図である。図14は、(式5)で表される標準関数XF3およびこれから求められる補間関数I(LPF3)をグラフ化した図である。また、図15は、補間関数I(LPF2)を用いて図1および図2の手順に従って例えば32ビットの演算精度で実際に求めたフィルタ係数(丸め処理前のもの)の分布を示す図である。図16は、補間関数I(LPF3)を用いて図1および図2の手順に従って例えば32ビットの演算精度で実際に求めたフィルタ係数(丸め処理前のもの)の分布を示す図である。これらの図15および図16においても、フィルタ係数の絶対値をとって、正の係数も負の係数も同じ象現に図示している。
図15および図16に示すように、(式4)または(式5)のような標準関数XF2,XF3を用いた場合にも、本実施形態のフィルタ設計法によって求められるフィルタ係数の値は、中央(クロックt=511/1024の位置)で最大となる。そして、各フィルタ係数の分布は、中央付近の局所的な領域で値が大きくなり、他の領域では値が小さくなるとともに、中央付近のフィルタ係数値と周辺のフィルタ係数値との差が極めて大きくなるといった尖鋭度の高い分布となる。図1および図3の手順に従ってフィルタ係数を求めた場合も同様である。
そのため、所定の閾値より小さい値のフィルタ係数を丸め処理によって破棄しても、周波数特性を決定付ける主要なフィルタ係数は殆ど残り、周波数特性に悪影響を与えることは殆どない。したがって、丸め処理によって不要なフィルタ係数を大幅に削減することができる。例えば、フィルタ係数の下位数ビットを切り捨ててビット数を減らすことにより、その下位数ビットだけで表される最大値よりも小さい値のフィルタ係数を全て“0”に丸めて破棄することができる。
次に、図47に示すような仕様のハイパスフィルタを設計する場合を例にとって説明する。
<第1の生成方法>
上述した第1の生成方法によって入力周波数特性を生成する場合は、まず、次の(式6)に示すような標準関数XF4を入力する。ここで入力する標準関数XF4も、そのインパルス応答が局所的な領域内で“0”以外の有限な値を有し、それ以外の領域では値が全て“0”となるような有限台の関数である。
XF4=8/16−9/16*cos(2πt)+1/16*cos(6πt) ・・・(式6)
ここで、(式6)で示される関数は、振幅最大値=1、周波数最大値=1で基準化されている。この(式6)における各項の係数{8/16,−9/16,0,1/16}(“0”はcos(4πt)の項の係数)は、特願2003−56265号に記載されているハイパスフィルタのフィルタ係数{1,0,−9,16,−9,0,1}/16をその中央で半分に分けたものの片側に相当する数値列である。特願2003−56265号に詳細に記述しているように、{1,0,−9,16,−9,0,1}/16の数値列をフィルタ係数とするハイパスフィルタのインパルス応答は有限台であり、滑らかな波形となるために必要なサンプル点を全て通る。{8,−9,0,1}/16の数値列も同様に、有限台のインパルス応答を有する数値列である。
図47に示すような仕様のハイパスフィルタを設計する場合は、例えばこのような有限台のインパルス応答を持った係数{8,−9,0,1}/16によって特定される(式6)のような標準関数XF4を入力する。具体的には、(式6)中のクロックtの値を0/1024から1023/1024まで変化させて計算した結果の1024個の数値列を入力する。図17は、この1024個の数値列をグラフ化したものである。
標準関数XF4の数値列を入力したら、次に、この標準関数XF4を基にして補間関数を求める。この補間関数を求める際には、まず、標準関数XF4によって特定される周波数特性の標準遷移域比率Rtsを求める。
通過域の振幅値を“1”とした場合、標準関数XF4の−0.3dBの振幅値は0.966051、−45dBの振幅値は0.005623となる。図17に示す周波数特性前半上でこれらの振幅値に対応する基準化クロックTuの値を計算すると、それぞれTu−0.3=0.392122,Tu−45=0.067225となる。よって、標準関数XF4の遷移域の基準幅Lsは、Ls=Tu−0.3−Tu−45=0.324897となる。一方、標準関数XF4の周波数特性前半の基準化クロック数は0.5である。したがって、標準関数XF4の標準遷移域比率Rtsは、Rts=Ls/0.5=0.649794と求まる。
次に、標準遷移域比率Rtsから補間関数長Liを求める。図47に示す仕様のハイパスフィルタを設計する場合、遷移域幅の仕様は8.5MHz〜11.8MHzである。サンプリング周波数80MHzのクロック幅が1024であるから、8.5MHzに対応するクロックはT8.5M=109、11.8MHzに対応するクロックはT11.8M=151となり、設計したい遷移域のクロック幅はLd=T11.8M−T8.5M=42となる。この場合、補間関数長Liは、Li=Ld/Rts=64.576539と求まる。
ハイパスフィルタにおいてタップ数を削減するためには、補間関数長Liは計算値より大きい偶整数とすることが望ましい。そこで、この場合の補間関数長Liは66とする。補間関数長Liが66クロックの補間関数I(HPF)は、次の区分方程式(式7−1)(式7−2)のように求まる。
I(HPF)=8/16−9/16*cos(2πt/66)+1/16*cos(6πt/66)
(0/1024≦t≦65/1024のとき) ・・・(式7−1)
I(HPF)=1
(65/1024<t≦1023/1024のとき)・・・(式7−2)
上述の補間関数I(HPF)は、具体的には、(式7−1,7−2)中のクロックtの値を0/1024から1023/1024まで変化させて計算した結果の1024個の数値列として求める。図18は、この1024個の数値列をグラフ化したものである。
このようにして補間関数I(HPF)を求めたら、次に、この補間関数I(HPF)の周波数特性を周波数軸方向(クロック方向)にシフトさせ、振幅値の“1”と“0”とをこのシフトした補間関数I(HPF)で繋ぐ。具体的には、(式7−1)で求められた基準化クロックt=0/1024〜65/1024の位置に対応する66個の数値列をクロックt=i/1024〜(i+65)/1024の位置にシフトさせ(iは整数)、基準化クロックt=0/1024〜(i−1)/1024の位置の数値列を全て“0”、基準化クロックt=(i+66)/1024〜1023/1024の位置の数値列を全て“1”とする。図19は、このように補間関数I(HPF)をシフトして求めた1024個の数値列をグラフ化したものである。
次に、図19にて示される周波数特性を、クロックt=0.5の位置を境界として左右対称となるように変換する。具体的には、クロックt=0/1024以外のt=1/1024〜511/1024の数値列を、その並び順を逆にしてクロックt=512/1024〜1023/1024の位置にコピーする。このようにして左右対称型とした1024個の数値列を、図1のステップS1における入力周波数特性の数値列として決定する。図20は、図19の周波数特性を左右対称型に変換した結果の周波数特性を示す図である。
この場合の補間関数のシフト量iも、補間関数の振幅値“0.5”が周波数軸の1/8,2/8,3/8の位置にくるような値に設定すると、図1のステップS2で入力周波数特性の数値列を逆FFTした結果として得られるフィルタ係数が単純になり、結果として少ないタップ数のFIRフィルタを設計することが可能である。
<第2の生成方法>
図21は、第2の生成方法を説明するための図であり、第2の生成方法によって生成される補間関数(設計仕様に基づくハイパスフィルタ)の周波数振幅特性を示している。
第2の生成方法によって入力周波数特性を生成する場合は、まず、(式6)に示したような標準関数XF4を入力する。標準関数XF4の数値列を入力したら、次に、この標準関数XF4を基にして、周波数シフトを含んだ補間関数を求める。
周波数シフトされた補間関数を求める際には、まず、標準関数XF4に対する補間関数の要求遷移域比率Rtrを求める。要求遷移域比率Rtrを求める際には、遷移域における代表の2点(例えば、振幅が−0.3dB,−45dBとなる点)の情報を用いる。
通過域の振幅値を“1”とした場合、標準関数XF4の−0.3dBの振幅値は0.966051、−45dBの振幅値は0.005623となる。図17に示す周波数特性前半上でこれらの振幅値に対応する基準化クロックTuを計算すると、それぞれTu−0.3=0.392122,Tu−45=0.067225となる。したがって、標準関数XF4の遷移域の基準幅Lsは、Ls=Tu−0.3−Tu−45=0.324897となる。一方、図47のフィルタ規格より、要求されるデジタルフィルタの遷移域の基準幅Lrdは、Lrd=(11.8−8.5)/80=0.04125となる。したがって、要求されるデジタルフィルタ(補間関数)の要求遷移域比率Rtrは、Rtr=Lrd/Ls=0.126963と求まる。
次に、要求されるデジタルフィルタの基準化クロックt=0から遷移域の開始点t=k1(図21参照)までのクロック数Lhsを計算する。遷移域の開始点k1から−45dBの点k3までのクロック数をTk1−k3、−45dBの点k3の基準化クロックをTk3とすると、基準化クロックt=0から遷移域の開始点t=k1までのクロック数Lhsは、Lhs=Tk3−Tk1−k3で求められる。ここで、図47に示すフィルタ規格より−45dBの周波数は8.5MHzであるから、これに相当する点k3の基準化クロックTk3は、Tk3=8.5/80=0.10625となる。一方、遷移域の開始点k1から−45dBの点k3までのクロック数Tk1−k3は、標準関数XF4における遷移域の開始点(t=0の点)から−45dBの点までのクロック数Tu−45と要求遷移域比率Rtrとを用いて、Tu−45*Rtrで求められる。上述のように、Tu−45=0.067225、Rtr=0.126963であるから、Tk1−k3=0.067225*0.126963=0.008535となる。したがって、遷移域の開始点k1までのクロック数Lhsは、Lhs=0.10625−0.008535=0.097715と求まる。
さらに、要求されるデジタルフィルタの基準化クロックt=0から遷移域の終了点t=k4までのクロック数Lheを計算する。遷移域の開始点k1から終了点k4までのクロック数をTk1−k4とすると、基準化クロックt=0から遷移域の終了点t=k4までのクロック数Lheは、Lhe=Lhs+Tk1−k4で求められる。ここで、遷移域の開始点k1から終了点k4までのクロック数Tk1−k4は、標準関数XF4における遷移域の開始点(t=0の点)から終了点(t=511/1024の点)までのクロック数(=0.5)と要求遷移域比率Rtrとを用いて、0.5*Rtrで求められる。上述のように、Rtr=0.126963であるから、Tk1−k4=0.5*0.126963=0.063482となる。したがって、基準化クロックt=0から遷移域の終了点t=k4までのクロック数Lheは、Lhe=0.097715+0.063482=0.161197と求まる。
以上の結果、補間関数I(HPF)は、次の区分方程式(式8−1,8−2,8−3)のように求まる。
I(HPF)=0
(0/1024≦t<Lhsのとき) ・・・(式8−1)
I(HPF)=8/16−9/16*cos((2π(t−Lhs)/Rtr))+1/16*cos((6π(t−Lhs)/Rtr)
(Lhs≦t≦Lheのとき)・・・(式8−2)
I(HPF)=1
(Lhe<t≦1023/1024のとき)・・・(式8−3)
上述の補間関数I(HPF)は、具体的には、(式8)中のクロックtの値を0/1024から1023/1024まで変化させて計算した結果の1024個の数値列として求める。このような1024個の数値列をグラフ化すると、第1の生成方法で求めた図19のグラフとほぼ同様になる。ただし、上述した第1の生成方法で求めた周波数特性に比べて、図47に示した設計仕様に基づく遷移域の位置をより正確に実現することができる。
次に、図19にて示される周波数特性を、基準化クロックt=0.5の位置を境界として左右対称となるように変換する。具体的には、基準化クロックt=0/1.024以外のt=1/1024〜511/1024の数値列を、その並び順を逆にしてクロックt=512/1024〜1023/1024の位置にコピーする。このようにして左右対称型とした1024個の数値列を、図1のステップS1における入力周波数特性の数値列として決定する。
図22は、図47に示す仕様のハイパスフィルタについて、図1および図2の手順に従って例えば32ビットの演算精度で実際に求めたフィルタ係数(丸め処理前のもの)の分布を示す図である。なお、ここでは、フィルタ係数の絶対値をとって、正の係数も負の係数も同じ象現に図示している。
図22に示すように、本実施形態のフィルタ設計法によって求められるフィルタ係数の値は、中央部(クロックt=512/1024の位置)で最大となる。そして、各フィルタ係数の分布は、中央付近の局所的な領域で値が大きくなり、他の領域では値が小さくなるとともに、中央付近のフィルタ係数値と周辺のフィルタ係数値との差が極めて大きくなるといった尖鋭度の高い分布となる。図1および図3の手順に従ってフィルタ係数を求めた場合も同様である。
そのため、所定の閾値より小さい値のフィルタ係数を丸め処理によって破棄しても、周波数特性を決定付ける主要なフィルタ係数は殆ど残り、周波数特性に悪影響を与えることは殆どない。また、本実施形態のフィルタ設計法によって得られる周波数特性は非常に深い減衰を持っているので、ビット数を多少減らしても、所望の減衰量は確保できる。
したがって、丸め処理によって不要なフィルタ係数を大幅に削減することができる。例えば、フィルタ係数の下位数ビットを切り捨ててビット数を減らすことによって、その下位数ビットだけで表される最大値よりも小さい値のフィルタ係数を全て“0”に丸めて破棄することができる。
このように、本実施形態では係数値を利用した丸め演算によってフィルタ係数の数を減らすことが可能であり、従来のような窓掛けは必ずしも必要でない。なお、上述したように、最初にステップS1で入力する標準関数は、そのインパルス応答が有限台の関数である。そのため、この標準関数をもとに設計されるフィルタ係数の数は、従来に比べてそもそも少なく、丸め処理をすることなくそのまま使用することも可能である。しかし、より回路を簡素化するために、ビット数を減らす丸め処理を行うのが好ましい。
図23は、x=10とした場合、つまり逆FFTによって求められた32ビットのフィルタ係数を210倍して小数点以下を切り捨て、その結果を1/210倍することによって得られたフィルタ係数を示す分布図であり、t=512/1024の中央付近を拡大して示している。また、図24は、図23に示すフィルタ係数によって実現されるFIRハイパスフィルタの周波数振幅特性を示す図であり、(a)はゲインを対数目盛りで示し、(b)はゲインを直線目盛りで示している。
図23に示すように、本実施形態のフィルタ設計法によると、最終的に求められるフィルタ係数の数は僅か59個となる。また、図24からよく分かるように、本実施形態ではフィルタ設計の際に窓掛けを行っていないので、周波数振幅特性における平坦部のリップルが極めて小さく、±0.3dBの範囲内に充分収まっている。また、丸め処理後の帯域外減衰量は約45dBとなっており、僅か59タップでも図47に示す仕様を満たしている。
なお、ここではハイパスフィルタを設計する場合に(式6)のような標準関数XF4を用いる例について説明しているが、ローパスフィルタの標準関数XF1を用いて、クロックを0.5だけシフトしてもよい。また、この(式6)は単なる例に過ぎない。例えば、次の(式9)または(式10)で表される標準関数XF5,XF6を用いても良い。
XF5=1/2+sin(2πt) ・・・(式9)
XF6=cos(πt)−1/8*cos(3πt)−1/8*cos(5πt) ・・・(式10)
ここで、(式9)における各項の係数{−1/2,1}は、数値列{−1,2,−1}/2をその中央で半分に分けたものの片側に相当する数値列である。また、(式10)における各項の係数{1,−1/8,−1/8}は、特願2003−56265号に記載されている基本ハイパスフィルタH4a3の数値列{1,1,−8,8,−1,−1}/8をその中央で半分に分けたものの片側に相当する数値列である。
なお、特願2003−56265号には、これら(式6)(式9)(式10)における各項の係数に対応する数値列以外にもハイパスフィルタに対応する数値列が幾つか示されており、それらの数値列に対応する関数を本実施形態の標準関数として用いても良い。
特に図示はしないが、(式6)だけでなく、例えば(式9)または(式10)のような標準関数を用いた場合にも、本実施形態のフィルタ設計法によって求められるフィルタ係数の値は、中央(クロックt=512/1024の位置)で最大となる。そして、各フィルタ係数の分布は、中央付近の局所的な領域で値が大きくなり、他の領域では値が小さくなるとともに、中央付近のフィルタ係数値と周辺のフィルタ係数値との差が極めて大きくなるといった尖鋭度の高い分布となる。
そのため、所定の閾値より小さい値のフィルタ係数を丸め処理によって破棄しても、周波数特性を決定付ける主要なフィルタ係数は殆ど残り、周波数特性に悪影響を与えることは殆どない。したがって、丸め処理によって不要なフィルタ係数を大幅に削減することができる。例えば、フィルタ係数の下位数ビットを切り捨ててビット数を減らすことにより、その下位数ビットだけで表される最大値よりも小さい値のフィルタ係数を全て“0”に丸めて破棄することができる。
次に、図48に示すような仕様のバントパスフィルタを設計する場合を例にとって説明する。
<第1の生成方法>
第1の生成方法によって入力周波数特性を生成する場合は、まず、例えば上述した(式1)に示すローパスフィルタの標準関数XF1および(式6)に示すハイパスフィルタの標準関数XF4(図6、図17参照)を入力する。
標準関数XF1,XF4を入力したら、次に、この標準関数XF1,XF4を基にして補間関数を求める。この補間関数を求める際には、まず、標準関数XF1,XF4によって特定される周波数特性の標準遷移域比率RtsL,RtsHを求める。
通過域の振幅値を“1”とした場合、−0.3dBの振幅値は0.966051、−45dBの振幅値は0.005623となる。例えば、図6に示す周波数特性前半上でこれらの振幅値に対応する基準化クロックTdの値を計算すると、それぞれTd−0.3=0.107878,Td−45=0.432775となる。よって、標準関数XF1の遷移域の基準幅LsLは、LsL=Td−45−Td−0.3=0.324897となる。また、図17に示す周波数特性前半上でこれらの振幅値に対応する基準化クロックTuの値を計算すると、それぞれTu−0.3=0.392122,Tu−45=0.067225となる。よって、標準関数XF4の遷移域の基準幅LsHは、LsH=Tu−0.3−Tu−45=0.324897となる。一方、標準関数XF1,XF4の周波数特性前半の基準化クロック数は0.5である。したがって、標準関数XF1,XF4の標準遷移域比率RtsL,RtsHは、RtsL=LsL/0.5=0.649794、RtsH=LsH/0.5=0.649794と求まる。
次に、この標準遷移域比率RtsL,RtsHからローパスフィルタおよびハイパスフィルタの補間関数長LiL,LiHを求める。図48に示す仕様のバンドパスフィルタを設計する場合、遷移域幅の仕様は5MHz〜8.5MHzおよび12.5MHz〜16MHzである。サンプリング周波数80MHzのクロック幅が1024であるから、ローパスフィルタの遷移域に関する12.5MHzに対応するクロックはT12.5M=160、16MHzに対応するクロックはT16M=205となり、設計したい遷移域のクロック幅はLdL=T16M−T12.5M=45となる。この場合、ローパスフィルタの補間関数長LiLは、LiL=LdL/RtsL=69.189149と求まる。
ハイパスフィルタの遷移域に関しては、5MHzに対応するクロックはT5M=64、8.5MHzに対応するクロックはT8.5M=109となり、設計したい遷移域のクロック幅はLdH=T8.5M−T5M=45となる。したがって、ハイパスフィルタの補間関数長LiHも、LiH=LdH/RtsH=69.189149と求まる。
バンドパスフィルタフィルタにおいてタップ数を削減するためには、補間関数長LiL,LiHは計算値より大きい偶整数とすることが望ましい。そこで、この場合の補間関数長LiL,LiHは共に70とする。
補間関数長LiLが70クロックのローパスフィルタの補間関数I(LPFB)は、次の区分方程式(式11−1)(式11−2)のように求まる。
I(LPFB)=8/16+9/16*cos(2πt/70)−1/16*cos(6πt/70)
(0/1024≦t≦69/1024のとき) ・・・(式11−1)
I(LPFB)=0
(69/1024<t≦1023/1024のとき)・・・(式11−2)
また、補間関数長LiHが70クロックのハイパスフィルタの補間関数I(HPFB)は、次の区分方程式(式12−1)(式12−2)のように求まる。
I(HPFB)=8/16−9/16*cos(2πt/70)+1/16*cos(6πt/70)
(0/1024≦t≦69/1024のとき) ・・・(式12−1)
I(HPFB)=1
(69/1024<t≦1023/1024のとき)・・・(式12−2)
図25は、(式11−1,11−2)で表されるローパスフィルタの補間関数I(LPFB)および(式12−1,12−2)で表されるハイパスフィルタの補間関数I(HPFB)を示す図である。図25(a)がローパスフィルタの補間関数I(LPFB)を示し、図25(b)がハイパスフィルタの補間関数I(HPFB)を示している。
このようにしてローパスフィルタおよびハイパスフィルタの補間関数I(LPFB),I(HPFB)を求めたら、次に、これらの補間関数I(LPFB),I(HPFB)の周波数特性を周波数軸方向(クロック方向)にシフトさせ、振幅値の“1”と“0”とをこのシフトした補間関数I(LPFB),I(HPFB)で繋ぐ。具体的には、(式11−1)で求められたクロックt=0/1024〜69/1024の位置に対応する70個の数値列をクロックt=i/1024〜(i+69)/1024(iは整数)の位置にシフトさせるとともに、(式12−1)で求められたクロックt=0/1024〜69/1024の位置に対応する70個の数値列をクロックt=j/1024〜(j+69)/1024(i>j:jは整数)の位置にシフトさせる。そして、クロックt=1/1024〜(j−1)/1024,(i±70)/1024〜1023/1024の位置の数値列を全て“0”とし、クロックt=(j+70)/1024〜(i−1)/1024の位置の数値列を全て“1”とする。図26は、このように補間関数I(LPFB),I(HPFB)をシフトして求めた1024個の数値列をグラフ化したものである。
次に、図26にて示される周波数特性を、クロックt=0.5の位置を境界として左右対称となるように変換する。具体的には、クロックt=0/1024以外のt=1/1024〜511/1024の数値列を、その並び順を逆にしてクロックt=512/1024〜1023/1024の位置にコピーする。このようにして左右対称型とした1024個の数値列を、図1のステップS1における入力周波数特性の数値列として決定する。図27は、図26の周波数特性を左右対称型に変換した結果の周波数特性を示す図である。
この場合の補間関数のシフト量i,jも、補間関数の振幅値“0.5”が周波数軸の1/8,2/8,3/8の位置にくるような値に設定すると、図1のステップS2で入力周波数特性の数値列を逆FFTした結果として得られるフィルタ係数が単純になり、結果として少ないタップ数のFIRフィルタを設計することが可能である。
<第2の生成方法>
図28は、第2の生成方法を説明するための図であり、第2の生成方法によって生成される補間関数(設計仕様に基づくバンドパスフィルタ)の周波数振幅特性を示している。
第2の生成方法によって入力周波数特性を生成する場合は、まず、(式1)および(式6)に示したような標準関数XF1,XF4を入力する。標準関数XF1,XF4の数値列を入力したら、次に、この標準関数XF1,XF4を基にして、周波数シフトを含んだ補間関数を求める。
周波数シフトされた補間関数を求める際には、まず、標準関数XF1,XF4に対する補間関数の要求遷移域比率RtrL,RtrHを求める。要求遷移域比率Rtrを求める際には、遷移域における代表の2点(例えば、振幅が−0.3dB,−45dBとなる点)の情報を用いる。
通過域の振幅値を“1”とした場合、標準関数XF1,XF4の−0.3dBの振幅値は0.966051、−45dBの振幅値は0.005623となる。図6および図17に示す周波数特性前半上でこれらの振幅値に対応する基準化クロックを計算すると、それぞれTd−0.3=0.107878,Td−45=0.432775、Tu−0.3=0.392122,Tu− 45=0.067225となる。したがって、標準関数XF1,XF4の遷移域の基準幅Lsd,Lsuは、Lsd=Td−45−Td−0.3=0.324897、Lsu=Tu−0.3−Tu−45=0.324897となる。一方、図47のフィルタ規格より、要求されるデジタルフィルタの遷移域の基準幅LrdL,LrdHは、LrdH=(11.8−8.5)/80=0.04125、LrdL=(16−12.5)/80=0.04375となる。したがって、要求されるデジタルフィルタ(補間関数)の要求遷移域比率RtrL,RtrHは、RtrL=LrdL/Lsd=0.134658、RtrH=LrdH/Lsu=0.126963と求まる。
次に、要求されるデジタルフィルタの基準化クロックt=0から遷移域の開始点t=k1(図28参照)までのクロック数LhsHを計算する。遷移域の開始点k1から−45dBの点k3までのクロック数をTk1−k3、−45dBの点k3の基準化クロックをTk3とすると、基準化クロックt=0から遷移域の開始点t=k1までのクロック数LhsHは、LhsH=Tk3−Tk1−k3で求められる。ここで、図48に示すフィルタ規格より−45dBの周波数は8.5MHzであるから、これに相当する点k3の基準化クロックTk3は、Tk3=8.5/80=0.10625となる。一方、遷移域の開始点k1から−45dBの点k3までのクロック数Tk1−k3は、標準関数XF4における遷移域の開始点(t=0の点)から−45dBの点までのクロックTu−45と要求遷移域比率RtrHとを用いて、Tu−45*RtrHで求められる。上述のように、Tu−45=0.067225、RtrH=0.126963であるから、Tk1−k3=0.067225*0.126963=0.008535となる。したがって、遷移域の開始点k1までのクロック数LhsHは、LhsH=0.10625−0.008535=0.097715と求まる。
次に、要求されるデジタルフィルタの基準化クロックt=0から遷移域の終了点t=k4までのクロック数LheHを計算する。遷移域の開始点k1から終了点k4までのクロック数をTk1−k4とすると、基準化クロックt=0から遷移域の開始点t=k4までのクロック数LheHは、LheH=LhsH+Tk1−k4で求められる。ここで、遷移域の開始点k1から終了点k4までのクロック数Tk1−k4は、標準関数XF4における遷移域の開始点(t=0の点)から終了点(t=511/1024の点)までのクロック数(=0.5)と要求遷移域比率RtrHとを用いて、0.5*RtrHで求められる。上述のように、RtrH=0.126963であるから、Tk1−k4=0.5*0.126963=0.063482となる。したがって、基準化クロックt=0から遷移域の終了点t=k4までのクロック数LheHは、LheH=0.097715+0.063482=0.161197と求まる。
次に、要求されるデジタルフィルタの基準化クロックt=0から遷移域の開始点t=k5までのクロック数LhsLを計算する。遷移域の開始点k5から−0.3dBの点k2’までのクロック数をTk5−k2’、−0.3dBの点k2の基準化クロックをTk2’とすると、基準化クロックt=0から遷移域の開始点t=k5までのクロック数LhsLは、LhsL=Tk2’−Tk5−k2’で求められる。ここで、図48に示すフィルタ規格より−0.3dBの周波数は1.6MHZであるから、これに相当する点k2’の基準化クロックTk2’は、Tk2’=16/80=0.2となる。一方、遷移域の開始点k5から−0.3dBの点k2’までのクロック数Tk5−k2’は、標準関数XF1における遷移域の開始点(t=0の点)から−0.3dBの点中でのクロック数Td−0.3と要求遷移域比率RtrLとを用いて、Td−0.3*RtrLで求められる。上述のように、Td−0.3=0.107878、RtrL=0.134658であるから、Tk5−k2’=0.107878*0.134658=0.014527となる。したがって、遷移域の開始点k5までのクロック数LhsLは、LhsL=0.2−0.014527=0.185473と求まる。
さらに、要求されるデジタルフィルタの基準化クロックt=0から遷移域の終了点t=k6までのクロック数LheLを計算する。遷移域の開始点k5から終了点k6までのクロック数をTk5−k6とすると、基準化クロックt=0から遷移域の終了点t=k6までのクロック数LheLは、LheL=LhsL+Tk5−k6で求められる。ここで、遷移域の開始点k5から終了点k6までのクロック数Tk5−k6は、標準関数XF1における遷移域の開始点(t=0の点)から終了点(t=511/1024の点)までのクロック数(=0.5)と要求遷移域比率RtrLとを用いて、0.5*RtrLで求められる。上述のように、RtrL=0.134658であるから、Tk5−k6=0.5*0.134658=0.067329となる。したがって、基準化クロックt=0から遷移域の終了点、t=k6までのクロック数LheLは、LheL=0.185473+0.067329=0.252802と求まる。
以上の結果、補間関数(BPF)は、次の区分方程式(式13−1,13−2,13−3,13−4,13−5)のように求まる。
I(BPF)=0
(0/1024≦t<LhsHのとき) ・・・(式13−1)
I(BPF)=8/16−9/16*cos((2π(t−LhsH)/RtrH))+1/16*cos((6π(t−LhsH)/RtrH))
(LhsH≦t≦LheHのとき)・・・(式13−2)
I(BPF)=1
(LheH<t<LhsLのとき)・・・(式13−3)
I(BPF)=8/16+9/16*cos((2π(t−LhsL)/RtrL))+1/16*cos((6π(t−LhsL)/RtrL))
(LhsL≦t≦LheLのとき)・・・(式13−4)
I(BPF)=0
(LheL<t≦1023/1024のとき)・・・(式13−5)
上述の補間関数I(BPF)は、具体的には、(式13)中のクロックtの値を0/1024から1023/1024まで変化させて計算した結果の1024個の数値列として求める。このような1024個の数値列をグラフ化すると、第1の生成方法で求めた図26のグラフとほぼ同様になる。ただし、上述した第1の生成方法で求めた周波数特性に比べて、図48に示した設計仕様に基づく遷移域の位置をより正確に実現することができる。
次に、図26にて示される周波数特性を、基準化クロックt=0.5の位置を境界として左右対称となるように変換する。具体的には、基準化クロックt=0/1024以外のt=1/1024〜511/1024の数値列を、その並び順を逆にしてクロックt=512/1024〜1023/1024の位置にコピーする。このようにして左右対称型とした1024個の数値列を、図1のステップS1における入力周波数特性の数値列として決定する。
図29は、図48に示す仕様のバンドパスフィルタについて、図1および図2の手順に従って例えば32ビットの演算精度で実際に求めたフィルタ係数(丸め処理前のもの)の分布を示す図である。なお、ここでは、フィルタ係数の絶対値をとって、正の係数も負の係数も同じ象現に図示している。
図29に示すように、本実施形態のフィルタ設計法によって求められるフィルタ係数の値は、中央部(クロックt=512/1024の位置)で最大となる。そして、各フィルタ係数の分布は、中央付近の局所的な領域で値が大きくなり、他の領域では値が小さくなるとともに、中央付近のフィルタ係数値と周辺のフィルタ係数値との差が極めて大きくなるといった尖鋭度の高い分布となる。図1および図3の手順に従ってフィルタ係数を求めた場合も同様である。
そのため、所定の閾値より小さい値のフィルタ係数を丸め処理によって破棄しても、周波数特性を決定付ける主要なフィルタ係数は殆ど残り、周波数特性に悪影響を与えることは殆どない。また、本実施形態のフィルタ設計法によって得られる周波数特性は非常に深い減衰を持っているので、ビット数を多少減らしても、所望の減衰量は確保できる。
したがって、丸め処理によって不要なフィルタ係数を大幅に削減することができる。例えば、フィルタ係数の下位数ビットを切り捨ててビット数を減らすことによって、その下位数ビットだけで表される最大値よりも小さい値のフィルタ係数を全て“0”に丸めて破棄することができる。
このように、本実施形態では係数値を利用した丸め演算によってフィルタ係数の数を減らすことが可能であり、従来のような窓掛けは必ずしも必要でない。なお、上述したように、最初にステップS1で入力する標準関数は、そのインパルス応答が有限台の関数である。そのため、この標準関数をもとに設計されるフィルタ係数の数は、従来に比べてそもそも少なく、丸め処理をすることなくそのまま使用することも可能である。しかし、より回路を簡素化するために、ビット数を減らす丸め処理を行うのが好ましい。
図30は、x=10とした場合、つまり逆FFTによって求められた32ビットのフィルタ係数を210倍して小数点以下を切り捨て、その結果を1/210倍することによって得られたフィルタ係数を示す分布図であり、t=512/1024の中央付近を拡大して示している。また、図31は、図30に示すフィルタ係数によって実現されるFIRハイパスフィルタの周波数振幅特性を示す図であり、(a)はゲインを対数目盛りで示し、(b)はゲインを直線目盛りで示している。
図30に示すように、本実施形態のフィルタ設計法によると、最終的に求められるフィルタ係数の数は僅か53個となる。また、図31からよく分かるように、本実施形態ではフィルタ設計の際に窓掛けを行っていないので、周波数振幅特性における平坦部のリップルが極めて小さく、±0.3dBの範囲内に充分収まっている。また、丸め処理後の帯域外減衰量は約45dBとなっており、僅か53タップでも図48に示す仕様を満たしている。
以上のように、本実施形態のフィルタ設計法によれば、リップル特性の良好なローパスフィルタ、ハイパスフィルタ、バンドパスフィルタを設計することができる。また、窓掛け演算を行うことは必ずしも必要でなく、窓掛け演算を行わなくてもタップ数を非常に少なくすることができる。さらに、丸め演算の際にフィルタ係数を2x倍して整数化するので、乗算器の使用数を少なくすることができる。これにより、フィルタ回路を小面積でIC化することができる。また、所望の周波数特性のフィルタ係数を求めるのに試行錯誤が殆ど不要であり、FIRフィルタを容易に設計することができる。
次に、図46に示した仕様のローパスフィルタを、上述した標準関数XF1〜XF3と異なる標準関数から設計する場合について説明する。例えば、標準関数として他のCOS関数を入力する場合について以下に説明する。このCOS関数も、そのインパルス応答が局所的な領域内で“0”以外の有限な値を有し、それ以外の領域では値が全て“0”となるような有限台の関数であることが好ましい。ここでは、COS関数の一例として、次の(式14)で表される関数を標準関数XS1として用いる場合について説明する。
XS1=1/2+1/2*cos(2πt) ・・・(式14)
図32は、この(式14)に示すCOS関数の数値列((式14)中におけるクロックtの値を0/1024から1023/1024まで変化させて計算した結果の1024個の数値列)をグラフ化したものである。
このようなCOS関数XS1から補間関数を求める際にも、上述した第1の生成方法および第2の生成方法の何れも適用することが可能である。ここでは代表として、第1の生成方法によって補間関数を求める方法について説明する。
第1の生成方法によって補間関数を求める際には、まず、COS関数XS1の標準遷移域比率Rtsを求める。通過域の振幅値を“1”とした場合、−0.3dBの振幅値は0.966051、−45dBの振幅値は0.005623となる。図32に示すCOS関数XS1の周波数特性前半上でこれらの振幅値に対応する基準化クロックTdの値を計算すると、それぞれTd−0.3=0.059570,Td−45=0.476563となる。よって、COS関数XS1の遷移域の基準幅Lsは、Ls=Td−45−Td−0.3=0.416993となる。一方、COS関数XS1の周波数特性前半の基準化クロック数は0.5である。したがって、COS関数XS1の標準遷移域比率Rtsは、Rts=Ls/0.5=0.833986と求まる。
次に、この標準遷移域比率Rtsから補間関数長Liを求める。図46に示す仕様のローパスフィルタを設計する場合、遷移域幅の仕様は8.5MHz〜11.8MHzである。サンプリング周波数80MHzのクロック幅が1024であるから、8.5MHzに対応するクロックはT8.5M=109、11.8MHzに対応するクロックはT11.8M=151となり、設計したい遷移域のクロック幅LdはLd=T11.8M−T8.5M=42となる。この場合、補間関数長Liは、Li=42/Rts=50.360558と求まる。
ローパスフィルタにおいてタップ数を削減するためには、補間関数長Liは計算値より大きい偶整数とすることが望ましい。そこで、この場合の補間関数長Liは52とする。COS関数XS1に基づく補間関数長Liが52クロックの補間関数II(LPF1)は、次の区分方程式(式15−1)(式15−2)のように求まる。
II(LPF1)=1/2+1/2*cos(2πt/52)
(0/1024≦t≦51/1024のとき) ・・・(式15−1)
II(LPF1)=0
(51/1024<t≦1023/1024のとき)・・・(式15−2)
上述の補間関数II(LPF1)は、具体的には、(式15−1,15−2)中のクロックtの値を0/1024から1023/1024まで変化させて計算した結果の1024個の数値列として求める。図33は、この1024個の数値列をグラフ化したものである。
このようにして補間関数II(LPF1)を求めたら、次に、この補間関数II(LPF1)の周波数特性を周波数軸方向(クロック方向)にシフトさせ、振幅値の“1”と“0”とをこのシフトした補間関数II(LPF1)で繋ぐ。具体的には、(式15−1)で求められた基準化クロックt=0/1024〜51/1024の位置に対応する52個の数値列をクロックt=i/1024〜(i+51)/1024の位置にシフトさせ(iは整数)、クロックt=0/1024〜(i−1)/1024の位置の数値列を全て“1”、クロックt=(i+52)/1024〜1023/1024の位置の数値列を全て“0”とする。
次に、このようにして生成した数値列で表される周波数特性を、クロックt=0.5の位置を境界として左右対称となるように変換する。具体的には、基準化クロックt=0/1024以外のt=1/1024〜511/1024の数値列を、その並び順を逆にしてクロックt=512/1024〜1023/1024の位置にコピーする。このようにして左右対称型とした1024個の数値列を、図1のステップS1における入力周波数特性の数値列として決定する。
この場合の補間関数のシフト量iも、補間関数の振幅値“0.5”が周波数軸の1/8,2/8,3/8の位置にくるような値に設定すると、図1のステップS2で入力周波数特性の数値列を逆FFTした結果として得られるフィルタ係数が単純になり、結果として少ないタップ数のFIRフィルタを設計することが可能である。
なお、次のようなスプライン関数を標準関数として用いることもできる。
XS2=1−2t2
(0/1024≦t≦511/1024のとき) ・・・(式16−1)
XS2=2(t−1)2
(511/1024<t≦1023/1024のとき) ・・・(式16−2)
図34は、上記(式16−1,16−2)で表される標準関数XS2およびこれから求められる補間関数II(LPF2)をグラフ化した図である。また、図35は、補間関数II(LPF2)を用いて図1および図2の手順に従って例えば32ビットの演算精度で実際に求めたフィルタ係数(丸め処理前のもの)の分布を示す図である。この図35においても、フィルタ係数の絶対値をとって、正の係数も負の係数も同じ象現に図示している。
また、次の(式17−1,17−2)で表されるスプライン関数XS3を標準関数として用いても良い。
XS3=1−8t2
(0/1024≦t≦255/1024のとき) ・・・(式17−1)
XS3=8(1/2−t)2
(255/1024<t≦511/1024のとき) ・・・(式17−2)
図36は、上記(式17−1,17−2)で表される標準関数XS3およびこれから求められる補間関数II(LPF3)をグラフ化した図である。また、図37は、補間関数II(LPF3)を用いて図1および図2の手順に従って例えば32ビットの演算精度で実際に求めたフィルタ係数(丸め処理前のもの)の分布を示す図である。この図37においても、フィルタ係数の絶対値をとって、正の係数も負の係数も同じ象現に図示している。
図35および図37に示すように、(式16−1,16−2)または(式17−1,17−2)のような標準関数XS2,XS3を用いた場合も、本実施形態のフィルタ設計法によって求められるフィルタ係数の値は、中央部(基準化クロックt=511/1024の位置)で最大となる。そして、各フィルタ係数の分布は、中央付近の局所的な領域で値が大きくなり、他の領域では値が小さくなるとともに、中央付近のフィルタ係数値と周辺のフィルタ係数値との差が極めて大きくなるといった尖鋭度の高い分布となる。図1および図3の手順に従ってフィルタ係数を求めた場合も同様である。
そのため、所定の閾値より小さい値のフィルタ係数を丸め処理によって破棄しても、周波数特性を決定付ける主要なフィルタ係数は殆ど残り、周波数特性に悪影響を与えることは殆どない。また、本実施形態のフィルタ設計法によって得られる周波数特性は非常に深い減衰を持っているので、ビット数を多少減らしても、所望の減衰量は確保できる。したがって、丸め処理によって不要なフィルタ係数を大幅に削減することができる。例えば、フィルタ係数の下位数ビットを切り捨ててビット数を減らすことにより、その下位数ビットだけで表される最大値よりも小さい値のフィルタ係数を全て“0”に丸めて破棄することができる。
なお、本実施形態に適用可能なスプライン関数は以上の例に限定されない。すなわち、有限台のスプライン関数を標準関数として用いれば、図35や図37と同様の好適な結果を得ることができる。
この他、標準関数として、リニア関数を用いることも可能である。標準関数としてリニア関数を用いる場合、当該標準関数XLは次の区分方程式(式18−1)(式18−2)のように表される。
XL=1−t/512
(0/1024≦t≦511/1024のとき) ・・・(式18−1)
XL=0
(511/1024<t≦1023/1024のとき) ・・・(式18−2)
図38は、この(式18−1,18−2)に示すリニア関数XLの数値列をグラフ化したものである。
このようなリニア関数XLから補間関数を求める際にも、上述した第1の生成方法および第2の生成方法の何れも適用することが可能である。ここでは代表として、第1の生成方法によって補間関数を求める方法について説明する。
第1の生成方法によって補間関数を求める際には、まず、リニア関数XLの標準遷移域比率Rtsを求める。通過域の振幅値を“1”とした場合、−0.3dBの振幅値は0.966051、−45dBの振幅値は0.005623となる。図38に示すリニア関数XLの周波数特性前半上でこれらの振幅値に対応する基準化クロックTdの値を計算すると、それぞれTd−0.3=0.016602,Td−45=0.497070となる。よって、リニア関数XLの遷移域の基凖幅Lsは、Ls=Td−45−Td−0.3=0.480468となる。一方、リニア関数XLの周波数特性前半の基準化クロック数は0.5である。したがって、リニア関数XLの標準遷移域比率Rtsは、Rts=Ls/0.5=0.960936と求まる。
次に、この標準遷移域比率Rtsから補間関数長Liを求める。図46に示す仕様のローパスフィルタを設計する場合、遷移域幅の仕様は8.5MHz〜11.8MHzである。サンプリング周波数80MHzのクロック幅が1024であるから、8.5MHzに対応するクロックはT8.5M=109、11.8MHzに対応するクロックはT11.8M=151となり、設計したい遷移域のクロック幅LdはLd=T11.8M−T8.5M=42となる。この場合、補間関数長Liは、Li=42/Rts=42/0.960938=43.707385と求まる。
ローパスフィルタにおいてタップ数を削減するためには、補間関数長Liは計算値より大きい偶整数とすることが望ましい。そこで、この場合の補間関数長Liは44とする。リニア関数XLに基づく補間関数長Liが44クロックの補間関数III(LPF)は、次の区分方程式(式19−1)(式19−2)のように求まる。
III(LPF)=1−t/44
(0/1024≦t≦43/1024のとき) ・・・(式19−1)
III(LPF)=0
(43/1024<t≦1023/1024のとき)・・・(式19−2)
上述の補間関数III(LPF)は、具体的には、(式19−1,19−2)中のクロックtの値を0/1024から1023/1024まで変化させて計算した結果の1024個の数値列として求める。図39は、この1024個の数値列をグラフ化したものである。
このようにして補間関数III(LPF)を求めたら、次に、この補間関数III(LPF)の周波数特性を周波数軸方向(クロック方向)にシフトさせ、振幅値の“1”と“0”とをこのシフトした補間関数III(LPF)で繋ぐ。具体的には、(式19−1)で求められた基準化クロックt=0/1024〜43/1024の位置に対応する44個の数値列をクロックt=i/1024〜(i+43)/1024の位置にシフトさせ(iは整数)、クロックt=0/1024〜(i−1)/1024の位置の数値列を全て“1”、クロックt=(i+44)/1024〜1023/1024の位置の数値列を全て“0”とする。
次に、このようにして生成した数値列で表される周波数特性を、クロックt=0.5の位置を境界として左右対称となるように変換する。具体的には、基準化クロックt=0/1024以外のt=1/1024〜511/1024の数値列を、その並び順を逆にしてクロックt=512/1024〜1023/1024の位置にコピーする。このようにして左右対称型とした1024個の数値列を、図1のステップS1における入力周波数特性の数値列として決定する。
この場合の補間関数のシフト量iも、補間関数の振幅値“0.5”が周波数軸の1/8,2/8,3/8の位置にくるような値に設定すると、図1のステップS2で入力周波数特性の数値列を逆FFTした結果として得られるフィルタ係数が単純になり、結果として少ないタップ数のFIRフィルタを設計することが可能である。
図40は、(式1)、(式14)、(式18−1,18−2)によって示される3種類の標準関数XF1,XS1,XL、これら標準関数から計算される3種類の補間関数I(LPF1),II(LPF1),III(LPF)、これら補間関数を周波数シフトして定めた入力周波数特性を逆FFTすることによって得られるフィルタ係数(丸め処理前のもの)の分布を示す図である。図40(a)が(式1)、図40(b)が(式14)、図40(c)が(式18−1,18−2)に対応するものである。また、図41は、丸め演算の際に使うxの値(丸め後のビット数x)と必要なタップ数との関係を示す図である。
図40に示すように、(式1)に示す関数を用いた場合には、(式14)に示すCOS関数や(式18−1,18−2)に示すリニア関数を用いた場合に比べて、係数分布の尖鋭度が高く、中央付近のフィルタ係数値と周辺のフィルタ係数値との差がより大きな分布なる。そのため、丸め演算でxの値を10より大きくしても、必要となるタップ数の増加度はCOS関数やリニア関数に比べてはるかに小さい。
一般に、フィルタの帯域外減衰量は、実装しようとするハードウェアで対応可能なビット数によって制約される。したがって、ハードウェア規模の制約がなければ、丸め処理後のビット数xを大きくして、より減衰の深い帯域外減衰特性を得ることができる。(式1)に示す標準関数を用いてフィルタ設計を行った場合には、丸め処理後のフィルタ係数のビット数を16ビットとしても、殆どタップ数は増えず、周波数特性の帯域外減衰量を−45dBよりも大きくとることが可能である。
これに対して、標準関数としてCOS関数やスプライン関数、リニア関数を用いた場合は、丸め処理後のフィルタ係数のビット数xを大きくすると、必要なタップ数が多くなっていく。しかし、フィルタ係数のビット数をある程度小さくすれば、必要なタップ数は(式1)に示す関数を用いた場合と同等程度まで少なくすることができる。したがって、丸め処理によってビット数をある程度小さくすることが可能な条件の下では、COS関数やスプライン関数、リニア関数を標準関数として用いたフィルタ設計法も有効である。
ちなみに、デジタルフィルタの分野で多く用いられる12ビット精度であれば、(式1)に示す関数、(式14)に示すCOS関数、(式18−1,18−2)に示すリニア関数のどれを用いても、タップ数に大きな差はない。よって、どの関数を標準関数として用いたフィルタ設計法も有効である。
以上に説明した本実施形態によるデジタルフィルタの設計方法を実現するための装置は、ハードウェア構成、DSP、ソフトウェアの何れによっても実現することが可能である。例えばソフトウェアによって実現する場合、本実施形態のフィルタ設計装置は、実際にはコンピュータのCPUあるいはMPU、RAM、ROMなどで構成され、RAMやROMあるいはハードディスク等に記憶されたプログラムが動作することによって実現できる。
例えば、パーソナルコンピュータ等にインストールされている表計算ソフトの関数機能などを利用して、標準関数の入力、標準関数から補間関数の計算、補間関数の周波数シフト、補間関数をシフトして生成した入力周波数特性の逆FFT演算、数値列の並び替え演算、丸め演算などを行うようにすることも可能である。この場合の演算は、実際には、表計算ソフトがインストールされているパーソナルコンピュータ等のCPU、ROM、RAMなどによって行われる。
また、0dBからの各減衰値と、所定の標準関数上で各減衰値に対応する基準化クロックの値とを関連付けたテーブル情報を記憶するテーブル情報記憶部と、図46〜図48のような要求仕様に関する情報を入力するための入力デバイスと、入力された要求仕様に関する情報と上述のテーブル情報とを用いて補間関数を算出するための演算を行う演算装置とを備えて本実施形態のフィルタ設計装置を構成しても良い。このように構成した場合は、入力デバイスを用いて要求仕様に関する情報を入力するだけで、その要求仕様に合致する補間関数(逆FFTするための入力周波数特性)を自動的に求めることができる。
また、求めたフィルタ係数を自動的にFFT変換し、その結果を周波数特性図としてディスプレイ画面に表示するようにしても良い。このようにすれば、設計したフィルタの周波数特性を視覚的に確認することができ、フィルタ設計をより容易に行うことができる。
実際にデジタルフィルタを電子機器内や半導体ICに実装する場合には、以上のようなフィルタ設計装置によって最終的に求められた数値列をフィルタ係数として持つFIRフィルタを構成すればよい。すなわち、図42に示すように、単に複数のD型フリップフロップ1と、複数の係数器2と、複数の加算器3とにより1つのデジタルフィルタを構成し、以上のような手順で求めた最終的なフィルタ係数を、当該デジタルフィルタ内の複数の係数器2に設定する形で構成する。フィルタ係数を2x倍して整数化した場合は、図43のようにデジタルフィルタを構成することが可能である。
以上詳しく説明したように、本実施形態では、標準関数を入力してこれから補間関数を計算することによって入力周波数特性を定める。そして、この入力周波数特性を表す数値列を逆FFTすることによってフィルタ係数を求めるようにしたので、特別な数学知識や電気工学知識がなくても、所望の周波数特性を実現するFIRデジタルフィルタの係数を簡単に決定することができる。さらに特筆すべきは、ローパスフィルタのみならず、ハイパスフィルタやバンドパスフィルタ、バンドエミリネーションフィルタ、コムフィルタなども、同一の手法で簡単に設計することができる。
また、本実施形態によれば、フィルタ係数の数を減らすために窓掛け演算は必ずしも必要でなく、数値の丸め演算によって、周波数特性の精度を落とさずにフィルタ係数の数を減らすことができる。また、本実施形態では、逆FFTにより求められた数値列に対して整数化の演算を行うことにより、フィルタ係数の値を簡素化することもできる。これにより、フィルタ構成要素の乗算器の使用数を大幅に削減してデジタルフィルタの構成を簡略化することができるとともに、希望する周波数特性を高精度に実現することができる。
なお、上記実施形態では、標準関数XF1〜XF6,XS1〜XS3,XLを用いる例について説明したが、本発明で用いることが可能な標準関数はこれに限定されない。
また、上記実施形態では、整数化演算の例として、数値列を2x倍して小数点以下を切り捨てる処理について説明したが、本発明はこれに限定されない。例えば、数値列を2x倍して小数点以下を切り上げたり、四捨五入したりするようにしても良い。
整数化演算の他の例として、フィルタ係数の数値列をN倍(Nは2のべき乗以外の値)して小数点以下を丸める(切り捨て、切り上げ、四捨五入など)ようにしても良い。このようなN倍の丸め演算を行った場合、デジタルフィルタは、図44に示すように、複数の遅延器(D型フリップフロップ)1から成るタップ付き遅延線の各タップからの出力信号に対して整数のフィルタ係数を複数の係数器2で個別に乗算し、それぞれの乗算出力を複数の加算器3で全て加算した後に、1つの乗算器5でまとめて1/N倍するように構成することが可能となる。しかも、整数のフィルタ係数は、2i+2j+・・・(i,jは任意の整数)のように2進数の足し算で表現できる。これにより、乗算器の代わりにビットシフト回路で係数器を構成し、実装するデジタルフィルタの構成を簡素化することができる。
また、数値列を2x倍する場合はフィルタ係数に対してビット単位の丸めを実施することができるのに対し、数値列をN倍する場合はフィルタ係数に対してビット間の丸めを実施することができる。ビット単位の丸め処理とは、例えば係数値を2x倍して小数点以下を切り捨てる場合には、2x〜2x+1の範囲に属する数値は全て2xに丸めるといったように、係数値を1/2xの整数倍とする処理を言う。また、ビット間の丸め処理とは、例えば係数値をN倍(例えば、2x−1<N<2x)して小数点以下を切り捨てる場合には、N〜N+1の範囲に属する数値は全てNに丸めるといったように、係数値を1/Nの整数倍とする処理を言う。N倍の丸め演算を行うことにより、整数化されるフィルタ係数の値を、2のべき乗以外の任意の値に調整することが可能である。このようにすれば、デジタルフィルタで使用するフィルタ係数の数(タップの数)を微妙に調整することができる。
その他、整数化を伴う丸め演算の例として、yビットのフィルタ係数のデータ値が1/2xより小さいものは全てゼロとし、当該データ値が1/2x以上のものについては、当該データ値を2x+X倍(x+X<y)して小数点以下を丸める(切り捨て、切り上げ、四捨五入など)ようにしても良い。
このような丸め処理を行った場合、デジタルフィルタは、図45に示すように、複数の遅延器(D型フリップフロップ)1から成るタップ付き遅延線の各タップからの出力信号に対して整数のフィルタ係数を複数の係数器2で個別に乗算し、それぞれの乗算出力を複数の加算器3で全て加算した後に、1つのシフト演算器6でまとめて1/2x+X倍するように構成することが可能となる。しかも、整数のフィルタ係数は、2i+2j+・・・(i,jは任意の整数)のように2進数の足し算で表現できる。これにより、乗算器の代わりにビットシフト回路で係数器を構成し、実装するデジタルフィルタの構成を簡素化することができる。
また、データ値が1/2xより小さいものは全てゼロとして切り捨てることによってフィルタ係数の数(タップ数)を大幅に削減できると同時に、xビットに比べてビット数が多い(x+X)ビットの精度の良いフィルタ係数を求めることができるので、より良好な周波数特性を得ることもできる。
その他、上記実施形態は、何れも本発明を実施するにあたっての具体化の一例を示したものに過ぎず、これによって本弁明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその精神、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
図1に示すように、まず、設計したいフィルタの仕様に基づいて補間関数を計算し、計算した補間関数を用いて入力周波数特性を定める(ステップS1)。ここで計算する補間関数は、設計したいフィルタの仕様に基づく周波数振幅特性の最大振幅値と最小振幅値との間を補間する関数である。また、この補間関数によって定める入力周波数特性は、設計したいフィルタの周波数特性そのものを表すものである。補間関数の計算方法については、図2および図3のフローチャートを用いて後で詳述する。
次に、このようにして入力した補間関数により定まる数値列を逆FFTし、その結果の実数項を抽出する(ステップS2)。周知のように、ある数値列に対してFFTの処理を行うと、その数値列に対応した周波数特性が得られる。したがって、補間関数により入力した周波数特性を表す数値列を逆FFTし、その実数項を抽出すれば、当該入力周波数特性を実現するのに必要な数値列が得られる。この数値列が、求めるフィルタ係数に相当するものである。
ただし、ステップS1で計算した補間関数から逆FFTにより求められる数値列そのものは、必ずしもフィルタ係数としてそのまま使える順番には並んでいない。すなわち、どのようなタイプのデジタルフィルタでも、フィルタ係数の数値列は、中央値が最も大きく、中央から離れるに従って振幅を繰り返しながら値が徐々に小さくなるという対称性を持っている。これに対して、補間関数から逆FFTにより求められる数値列は、中央値が最も小さく、端の値が最も大きくなっている。
そこで、図5に示すように、逆FFTにより求められた数値列の最大値が中央部にくるように、数値列を前半部と後半部とに分けてそれらを並べ替える(ステップS3)。
このようにして得られた数値列をそのまま求めるフィルタ係数として決定することも可能であるが、本実施形態では更に、以下に述べる丸め演算を行うことによって、フィルタ係数を必要な数に減らすとともに、その数値を簡素化するようにしている(ステップS4)。
例えば、ステップS3において適宜並べ替えが行われた後の数値列がyビットのデータである場合、当該yビットのデータを2x倍して小数点以下を丸める処理を行うことによってxビット(x<y)の整数化されたデータを求め、これをフィルタ係数として利用するようにする。また、yビットのデータに対して丸め処理を行うことによってxビット(x<y)のデータとし、これを2x倍することによって値を整数化するようにしても良い。
このような整数化の丸め演算を行うと、デジタルフィルタは、図43に示すように、複数の遅延器(D型フリップフロップ)1から成るタップ付き遅延線の各タップからの出力信号に対して整数のフィルタ係数を複数の係数器2で個別に乗算し、それぞれの乗算出力を複数の加算器3で全て加算した後に、1つのシフト演算器4でまとめて1/2x倍するように構成することが可能となる。しかも、整数のフィルタ係数は、2i+2j+・・・(i,jは任意の整数)のように2進数の足し算で表現できる。これにより、乗算器の代わりにビットシフト回路で係数器2を構成することができるので、FIRフィルタ全体として乗算器や加算器などの使用数を大きく削減し、デジタルフィルタの回路規模を大幅に削減することができる。
本実施形態では、このような丸め演算によって求められた数値列を、求めるフィルタ係数として決定する。なお、上述のステップS3とステップS4の処理は必ずしもこの順番で行う必要はなく、この順番を逆にしても良い。
次に、ステップS1における入力周波数特性の計算方法を具体例に沿って詳細に説明する。ここでは、入力周波数特性を求める方法を2通り示す。
<第1の生成方法>
図2は、本実施形態による入力周波数特性の第1の生成方法に係る計算手順を示すフローチャートである。図2において、まず、標準関数を入力する(ステップS11)。ここで入力する標準関数は、そのインパルス応答が一定の領域内でのみ“0”以外の有限な値を有し、それ以外の領域では値が全て“0”となるような関数、つまり所定の標本位置において値が“0”に収束するインパルス応答を持った係数列を有する関数であることが好ましい。
このように、局所的な領域で“0”以外の有限の値を有し、それ以外の領域で値が“0”となるような有限台のインパルス応答を持つ係数列の例として、本発明者が発案した特願2003−56265号に記載のような数値列が存在する。例えば、図46に示すような仕様のローパスフィルタを設計する場合には、標準関数XF1として、特願2003−56265号に記載の数値列を利用して次の(式1)に示すような関数を入力する。
XF1=8/16+9/16*cos(2πt)−1/16*cos(6πt) ・・・(式1)
ここで、(式1)で示される関数は、振幅最大値=1、周波数最大値=1で基準化されている。この(式1)における各項の係数{8/16,9/16,0,−1/16}(“0”はcos(4πt)の項の係数)は、特願2003−56265号に記載されているローパスフィルタのフィルタ係数{−1,0,9,16,9,0,−1}/16をその中央で半分に分けたものの片側に相当する数値列である。特願2003−56265号に詳細に記述しているように、{−1,0,9,16,9,0,−1}/16の数値列をフィルタ係数とするローパスフィルタのインパルス応答は有限台であり、滑らかな波形となるために必要なサンプル点を全て通る。{8,9,0,−1}/16の数値列も同様に、有限台のインパルス応答を有する数値列である。
図46に示すような仕様のローパスフィルタを設計する場合には、例えばこのような有限台のインパルス応答を持った係数{8,9,0,−1}/16によって特定される(式1)のような標準関数XF1を入力する。具体的には、(式1)中のサンプリング時間(クロック)tの値を0/1024から1023/1024まで変化させて計算した結果の1024個の数値列を入力する。図6は、この1024個の数値列をグラフ化したものである。これから分かるように、標準関数を入力するということは、例えば有限台のインパルス応答を持った数値列によって特定される所望の周波数特性の波形を入力することに相当する。
標準関数XF1の数値列を入力したら、次に、この標準関数XF1を基にして補間関数を求める(ステップS12)。ここで求める補間関数は、周波数振幅特性の振幅値“1”と“0”との間を補間するための関数である。補間関数を求める際には、まず、標準関数XF1によって特定される周波数特性における遷移域の全領域に対する比率(以下、標準遷移域比率R1sと言う)を求める。ここで遷移域とは、通過域と遮断域との間における傾斜部分の領域を言う。第1の生成方法においては、傾斜部分における代表の2点間(例えば、振幅が−0.3dBの点から−45dBの点までの範囲)を遷移域と考える。
通過域の振幅値を“1”とした場合、標準関数XF1の−0.3dBの振幅値は0.966051、−45dBの振幅値は0.005623となる。図6に示す周波数特性前半上でこれらの振幅値に対応する基準化クロックTdの値を計算すると、それぞれTd−0.3=0.107878,Td−45=0.432775となる。よって、標準関数XF1の遷移域の基準幅Lsは、Ls=Td−45−Td−0.3=0.324897となる。一方、標準関数XF1の周波数特性前半の基準化クロック数は0.5である。したがって、標準関数XF1の標準遷移域比率Rtsは、Rts=Ls/0.5=0.649794と求まる。
次に、この標準遷移域比率Rtsから補間関数長Liを求める。補間関数長Liとは、求める補間関数の有効領域の長さ(基準化クロック数)を言う。この補間関数長Liは、設計したいFIRフィルタの遷移域のクロック幅Ldと、上述の標準遷移域比率Rtsとから求める。図46に示す仕様のローパスフィルタを設計する場合、遷移域幅の仕様は8.5MHz〜11.8MHzである。サンプリング周波数80MHzのクロック幅が1024であるから、8.5MHzに対応するクロックはT8.5M=109、11.8MHzに対応するクロックはT11.8M=151となり、設計したい遷移域のクロック幅LdはLd=T11.8M−T8.5M=42となる。この場合、補間関数長Liは、Li=Ld/Rts=64.576539と求まる。
ローパスフィルタにおいてタップ数を削減するためには、補間関数長Liは計算値より大きい偶整数とすることが望ましい。そこで、この場合の補間関数長Liは66とする。補間関数長Liが66クロックの補間関数I(LPF1)は、次の区分方程式(式2−1)(式2−2)のように求まる。
I(LPF1)=8/16+9/16*cos(2πt/66)−1/16*cos(6πt/66)
(0/1024≦t≦65/1024のとき) ・・・(式2−1)
I(LPF1)=0
(65/1024<t≦1023/1024のとき)・・・(式2−2)
上述の補間関数I(LPF1)は、具体的には、(式2−1,2−2)中のクロックtの値を0/1024から1023/1024まで変化させて計算した結果の1024個の数値列として求める。図7は、この1024個の数値列をグラフ化したものである。
このようにして補間関数I(LPF1)を求めたら、次に、この補間関数I(LPF1)の周波数特性を周波数軸方向(クロック方向)にシフトさせ、振幅値の“1”と“0”とをこのシフトした補間関数I(LPF1)で繋ぐ(ステップS13)。具体的には、(式2−1)で求められた基準化クロックt=0/1024〜65/1024の位置に対応する66個の数値列を基準化クロックt=i/1024〜(i+65)/1024の位置にシフトさせ(iは整数)、基準化クロックt=0/1024〜(i−1)/1024の位置の数値列を全て“1”、基準化クロックt=(i+66)/1024〜1023/1024の位置の数値列を全て“0”とする。図8は、このように補間関数I(LPF1)をシフトして求めた1024個の数値列をグラフ化したものである。
次に、図8にて示される周波数特性を、クロックt=0.5の位置を境界として左右対称となるように変換する(ステップS14)。具体的には、基準化クロックt=0/1024以外のt=1/1024〜511/1024の数値列を、その並び順を逆にして基準化クロックt=512/1024〜1023/1024の位置にコピーする。このようにして左右対称型とした1024個の数値列を、図1のステップS1における入力周波数特性の数値列として決定する。図9は、図8の周波数特性を左右対称型に変換した結果の周波数特性を示す図である。
なお、補間関数のシフト量iは、補間関数の振幅値“0.5”が周波数軸の1/8,2/8,3/8の位置にくるような値に設定すると、図1のステップS2で入力周波数特性の数値列を逆FFTした結果として得られるフィルタ係数が単純になり、結果として少ないタップ数のFIRフィルタを設計することが可能である。
<第2の生成方法>
次に、入力周波数特性数を求める第2の方法について説明する。図3は、本実施形態による入力周波数特性の第2の生成方法に係る計算手順を示すフローチャートである。また、図4は、第2の生成方法を説明するための図であり、第2の生成方法によって生成される補間関数(設計仕様に基づくローパスフィルタ)の周波数振幅特性を示している。
図3において、まず、標準関数を入力する(ステップS21)。ここで入力する標準関数は、第1の生成方法で入力したものと同様に有限台の関数であり、例えば(式1)で示される標準関数XF1である。
標準関数XF1の数値列を入力したら、次に、この標準関数XF1を基にして補間関数を求める(ステップS22)。ここで求める補間関数は、周波数振幅特性の振幅値“1”と“0”との間を補間するための関数であり、要求されるデジタルフィルタの設計仕様に基づき周波数シフトされたものである。
周波数シフトされた補間関数を求める際には、まず、標準関数XF1から生成しようとする補間関数が持つ遷移域(デジタルフィルタの設計仕様に基づく遷移域)の、標準関数XF1が持つ遷移域に対する比率(以下、要求遷移域比率Rtrと言う)を求める。第2の生成方法で言う遷移域は、第1の生成方法のそれと異なり、振幅値が“1”と“0”との間に基準化された周波数振幅特性において、振幅値が“1”および“0”以外の値をとる領域を言う。要求遷移域比率Rtrを求める際には、遷移域における代表の2点(例えば、振幅が−0.3dBの点、−45dBの点)の情報を用いる。
通過域の振幅値を“1”とした場合、標準関数XF1の−0.3dBの振幅値は0.966051、−45dBの振幅値は0.005623となる。図6に示す周波数特性前半上でこれらの振幅値に対応する基準化クロックTdを計算すると、それぞれTd−0.3=0.107878,Td−45=0.432775となる。したがって、標準関数XF1の遷移域の基準幅Lsは、Ls=Td−45−Td−0.3=0.324897となる。一方、図46のフィルタ規格より、要求されるデジタルフィルタの遷移域の基準幅Lrdは、Lrd=(11.8−8.5)/80=0.04125となる。したがって、要求されるデジタルフィルタ(補間関数)の要求遷移域比率Rtrは、Rtr=Lrd/Ls=0.126963と求まる。
次に、要求されるデジタルフィルタの基準化クロックt=0から遷移域の開始点t=k1(図4参照)までのクロック数Lhsを計算する。遷移域の開始点k1から−0.3dBの点k2までのクロック数をTk1−k2、−0.3dBの点k2の基準化クロックをTk2とすると、基準化クロックt=0から遷移域の開始点t=k1までのクロック数Lhsは、Lhs=Tk2−Tk1−k2で求められる。ここで、図46に示すフィルタ規格より−0.3dBの周波数は8.5MHZであるから、これに相当する点k2の基準化クロックTk2は、Tk2=8.5/80=0.10625となる。一方、遷移域の開始点k1から−0.3dBの点k2までのクロック数Tk1−k2は、標準関数XF1における遷移域の開始点(t=0の点)から−0.3dBの点までのクロック数Td−0.3と要求遷移域比率R1rとを用いて、Td−0.3*Rtrで求められる。上述のように、Td−0.3=0.107878、Rtr=0.126963であるから、Tk1−k2=0.107878*0.126963=0.013697となる。したがって、遷移域の開始点k1までのクロック数Lhsは、Lhs=0.10625−0.013697=0.092553と求まる。
さらに、要求されるデジタルフィルタの基準化クロックt=0から遷移域の終了点t=k4までのクロック数Lheを計算する。遷移域の開始点k1から終了点k4までのクロック数をTk1−k4とすると、基準化クロックt=0から遷移域の終了点t=k4までのクロック数Lheは、Lhe=Lhs+Tk1−k4で求められる。ここで、遷移域の開始点k1から終了点k4までのクロック数Tk1−k4は、標準関数XF1における遷移域の開始点(t=0の点)から終了点(t=511/1024の点)までのクロック数(=0.5)と要求遷移域比率Rtrとを用いて、0.5*Rtrで求められる。上述のように、Rtr=0.126963であるから、Tk1−k4=0.5*0.126963=0.063482となる。したがって、基準化クロックt=0から遷移域の終了点t=k4までのクロック数Lheは、Lhe=0.092553+0.063482=0.156035と求まる。
以上の結果、補間関数I(LPF1)は、次の区分方程式(式3−1,3−2,3−3)のように求まる。
I(LPF1)=1
(0/1024≦t<Lhsのとき) ・・・(式3−1)
I(LPF1)=8/16+9/16*cos((2π(t−Lhs)/Rtr))−1/16*cos((6π(t−Lhs)/Rtr))
(Lhs≦t≦Lhcのとき)・・・(式3−2)
I(LPF1)=0
(Lhc<t≦1023/1024のとき)・・・(式3−3)
上述の補間関数I(LPF1)は、具体的には、(式3)中のクロックtの値を0/1024から1023/1024まで変化させて計算した結果の1024個の数値列として求める。このような1024個の数値列をグラフ化すると、第1の生成方法で求めた図8のグラフとほぼ同様になる。ただし、上述した第1の生成方法では、計算によって求めた補間関数長Liを計算値より大きい偶整数に丸めている。また、当該丸めた偶整数の補間関数長Liで定まる補間関数を周波数軸方向にクロック単位でしかシフトしていない。これに対して、第2の生成方法では、求めた要求遷移比率Rtrを精度の良い計算値のまま用い、当該要求遷移比率Rtrを用いて周波数シフト(遷移域の開始点と終了点)まで含めて計算式で補間関数を求めているので、図46に示した設計仕様に基づく遷移域の位置をより正確に実現することができる。
次に、図8にて示される周波数特性を、基準化クロックt=0.5の位置を境界として左右対称となるように変換する(ステップS23)。具体的には、基準化クロックt=0/1024以外のt=1/1024〜511/1024の数値列を、その並び順を逆にしてクロックt=512/1024〜1023/1024の位置にコピーする。このようにして左右対称型とした1024個の数値列を、図1のステップS1における入力周波数特性の数値列として決定する。
図10は、図46に示す仕様のローパスフィルタについて、図1および図2の手順に従って例えば32ビット(y=32)の演算精度で実際に求めたフィルタ係数(ステップS4における丸め処理前のもの)の分布を示す図である。なお、ここでは、フィルタ係数の絶対値をとって、正の係数も負の係数も同じ象現に図示している。
図10に示すように、本実施形態のフィルタ設計法によって求められるフィルタ係数の値は、中央部(基準化クロックt=511/1024の位置)で最大となる。そして、各フィルタ係数の分布は、中央付近の局所的な領域で値が大きくなり、他の領域では値が小さくなるとともに、中央付近のフィルタ係数値と周辺のフィルタ係数値との差が極めて大きくなるといった尖鋭度の高い分布となる。図1および図3の手順に従ってフィルタ係数を求めた場合も同様である。そのため、所定の閾値より小さい値のフィルタ係数を丸め処理によって破棄しても、周波数特性を決定付ける主要なフィルタ係数は殆ど残り、周波数特性に悪影響を与えることは殆どない。また、周波数特性の帯域外減衰量はフィルタ係数のビット数によって制約を受けるが、本実施形態のフィルタ設計法によって得られる周波数特性は非常に深い減衰を持っているので、ビット数を多少減らしても、所望の減衰量は確保できる。
したがって、丸め処理により不要なフィルタ係数を大幅に削減することができる。例えば、フィルタ係数の下位数ビットを切り捨ててビット数を減らすことにより、その下位数ビットだけで表される最大値よりも小さい値のフィルタ係数を全て“0”に丸めて破棄することができる。
このように、本実施形態では係数値を利用した丸め演算によってフィルタ係数の数を減らすことが可能であり、従来のような窓掛けは必ずしも必要でない。なお、上述したように、最初にステップS1で入力する標準関数は、そのインパルス応答が有限台の関数である。そのため、この標準関数をもとに設計されるフィルタ係数の数は、従来に比べてそもそも少なく、丸め処理をすることなくそのまま使用することも可能である。しかし、よりタップ数を少なくするために、ビット数を減らす丸め処理を行うのが好ましい。
このように係数値を利用した丸め演算を行える点は、従来のフィルタ設計法と大きく異なる本実施形態の特徴点である。すなわち、従来のフィルタ設計法では、求められる各フィルタ係数の分布で尖鋭度がそれほど大きくならないため、フィルタ係数の値で丸め処理をすると、周波数特性を決定付ける主要なフィルタ係数も破棄されてしまうことが多い。また、非常に深い帯域外減衰量を持った周波数特性を得ることも困難なため、フィルタ係数のビット数を減らすと必要な帯域外減衰量を確保できなくなってしまう。よって、従来はビット数を減らす丸め処理を行うことができず、窓掛けによってフィルタ係数の数を減らさざるを得なかった。そのため、周波数特性に打ち切り誤差が発生し、所望の周波数特性を得ることが極めて困難であった。
これに対して、本実施形態では窓掛けを行うことなくFIRフィルタの設計ができるので、周波数特性に打ち切り誤差が生じることはない。したがって、遮断特性の極めて大きな改善が可能となり、位相特性も直線で優れたフィルタ特性を得ることができる。つまり、リップルの少ない通過域特性と一様な減衰特性とを有する良好な周波数特性を実現することができる。
図11は、x=10とした場合、つまり逆FFTによって求められた32ビットのフィルタ係数を210倍して小数点以下を切り捨て、その結果を1/210倍することによって得られたフィルタ係数を示す分布図であり、t=511/1024の中央付近を拡大して示している。また、図12は、図11に示すフィルタ係数によって実現されるFIRローパスフィルタの周波数振幅特性を示す図であり、(a)はゲインを対数目盛りで示し、(b)はゲインを直線目盛りで示している。
図11に示すように、本実施形態のフィルタ設計法によると、最終的に求められるフィルタ係数の数は僅か43個となる。また、図12からよく分かるように、本実施形態ではフィルタ設計の際に窓掛けを行っていないので、周波数振幅特性における平坦部のリップルが極めて小さく、±0.3dBの範囲内に充分収まっている。また、丸め処理後の帯域外減衰量は約45dBとなっており、僅か43タップでも図46に示す仕様を満たしている。
なお、ここではローパスフィルタを設計する場合に(式1)のような標準関数XF1を用いる例について説明しているが、この(式1)は単なる例に過ぎない。例えば、次の(式4)または(式5)で表される標準関数XF2,XF3を用いても良い。
XF2=1/2+cos(2πt) ・・・(式4)
XF3=cos(πt)+1/8*cos(3πt)−1/8*cos(5πt) ・・・(式5)
ここで、(式4)における各項の係数{1/2,1}は、数値列{1,2,1}/2をその中央で半分に分けたものの片側に相当する数値列である。また、(式5)における各項の係数{1,1/8,−1/8}は、特願2003−56265号に記載されている基本ローパスフィルタL4a3の数値列{−1,1,8,8,1,−1}/8をその中央で半分に分けたものの片側に相当する数値列である。
なお、特願2003−56265号には、これら(式1)(式4)(式5)における各項の係数に対応する数値列以外にもローパスフィルタに対応する数値列が幾つか示されており、それらの数値列に対応する関数を本実施形態の標準関数として用いても良い。
図13は、(式4)で表される標準関数XF2およびこれから求められる補間関数I(LPF2)をグラフ化した図である。図14は、(式5)で表される標準関数XF3およびこれから求められる補間関数I(LPF3)をグラフ化した図である。また、図15は、補間関数I(LPF2)を用いて図1および図2の手順に従って例えば32ビットの演算精度で実際に求めたフィルタ係数(丸め処理前のもの)の分布を示す図である。図16は、補間関数I(LPF3)を用いて図1および図2の手順に従って例えば32ビットの演算精度で実際に求めたフィルタ係数(丸め処理前のもの)の分布を示す図である。これらの図15および図16においても、フィルタ係数の絶対値をとって、正の係数も負の係数も同じ象現に図示している。
図15および図16に示すように、(式4)または(式5)のような標準関数XF2,XF3を用いた場合にも、本実施形態のフィルタ設計法によって求められるフィルタ係数の値は、中央(クロックt=511/1024の位置)で最大となる。そして、各フィルタ係数の分布は、中央付近の局所的な領域で値が大きくなり、他の領域では値が小さくなるとともに、中央付近のフィルタ係数値と周辺のフィルタ係数値との差が極めて大きくなるといった尖鋭度の高い分布となる。図1および図3の手順に従ってフィルタ係数を求めた場合も同様である。
そのため、所定の閾値より小さい値のフィルタ係数を丸め処理によって破棄しても、周波数特性を決定付ける主要なフィルタ係数は殆ど残り、周波数特性に悪影響を与えることは殆どない。したがって、丸め処理によって不要なフィルタ係数を大幅に削減することができる。例えば、フィルタ係数の下位数ビットを切り捨ててビット数を減らすことにより、その下位数ビットだけで表される最大値よりも小さい値のフィルタ係数を全て“0”に丸めて破棄することができる。
次に、図47に示すような仕様のハイパスフィルタを設計する場合を例にとって説明する。
<第1の生成方法>
上述した第1の生成方法によって入力周波数特性を生成する場合は、まず、次の(式6)に示すような標準関数XF4を入力する。ここで入力する標準関数XF4も、そのインパルス応答が局所的な領域内で“0”以外の有限な値を有し、それ以外の領域では値が全て“0”となるような有限台の関数である。
XF4=8/16−9/16*cos(2πt)+1/16*cos(6πt) ・・・(式6)
ここで、(式6)で示される関数は、振幅最大値=1、周波数最大値=1で基準化されている。この(式6)における各項の係数{8/16,−9/16,0,1/16}(“0”はcos(4πt)の項の係数)は、特願2003−56265号に記載されているハイパスフィルタのフィルタ係数{1,0,−9,16,−9,0,1}/16をその中央で半分に分けたものの片側に相当する数値列である。特願2003−56265号に詳細に記述しているように、{1,0,−9,16,−9,0,1}/16の数値列をフィルタ係数とするハイパスフィルタのインパルス応答は有限台であり、滑らかな波形となるために必要なサンプル点を全て通る。{8,−9,0,1}/16の数値列も同様に、有限台のインパルス応答を有する数値列である。
図47に示すような仕様のハイパスフィルタを設計する場合は、例えばこのような有限台のインパルス応答を持った係数{8,−9,0,1}/16によって特定される(式6)のような標準関数XF4を入力する。具体的には、(式6)中のクロックtの値を0/1024から1023/1024まで変化させて計算した結果の1024個の数値列を入力する。図17は、この1024個の数値列をグラフ化したものである。
標準関数XF4の数値列を入力したら、次に、この標準関数XF4を基にして補間関数を求める。この補間関数を求める際には、まず、標準関数XF4によって特定される周波数特性の標準遷移域比率Rtsを求める。
通過域の振幅値を“1”とした場合、標準関数XF4の−0.3dBの振幅値は0.966051、−45dBの振幅値は0.005623となる。図17に示す周波数特性前半上でこれらの振幅値に対応する基準化クロックTuの値を計算すると、それぞれTu−0.3=0.392122,Tu−45=0.067225となる。よって、標準関数XF4の遷移域の基準幅Lsは、Ls=Tu−0.3−Tu−45=0.324897となる。一方、標準関数XF4の周波数特性前半の基準化クロック数は0.5である。したがって、標準関数XF4の標準遷移域比率Rtsは、Rts=Ls/0.5=0.649794と求まる。
次に、標準遷移域比率Rtsから補間関数長Liを求める。図47に示す仕様のハイパスフィルタを設計する場合、遷移域幅の仕様は8.5MHz〜11.8MHzである。サンプリング周波数80MHzのクロック幅が1024であるから、8.5MHzに対応するクロックはT8.5M=109、11.8MHzに対応するクロックはT11.8M=151となり、設計したい遷移域のクロック幅はLd=T11.8M−T8.5M=42となる。この場合、補間関数長Liは、Li=Ld/Rts=64.576539と求まる。
ハイパスフィルタにおいてタップ数を削減するためには、補間関数長Liは計算値より大きい偶整数とすることが望ましい。そこで、この場合の補間関数長Liは66とする。補間関数長Liが66クロックの補間関数I(HPF)は、次の区分方程式(式7−1)(式7−2)のように求まる。
I(HPF)=8/16−9/16*cos(2πt/66)+1/16*cos(6πt/66)
(0/1024≦t≦65/1024のとき) ・・・(式7−1)
I(HPF)=1
(65/1024<t≦1023/1024のとき)・・・(式7−2)
上述の補間関数I(HPF)は、具体的には、(式7−1,7−2)中のクロックtの値を0/1024から1023/1024まで変化させて計算した結果の1024個の数値列として求める。図18は、この1024個の数値列をグラフ化したものである。
このようにして補間関数I(HPF)を求めたら、次に、この補間関数I(HPF)の周波数特性を周波数軸方向(クロック方向)にシフトさせ、振幅値の“1”と“0”とをこのシフトした補間関数I(HPF)で繋ぐ。具体的には、(式7−1)で求められた基準化クロックt=0/1024〜65/1024の位置に対応する66個の数値列をクロックt=i/1024〜(i+65)/1024の位置にシフトさせ(iは整数)、基準化クロックt=0/1024〜(i−1)/1024の位置の数値列を全て“0”、基準化クロックt=(i+66)/1024〜1023/1024の位置の数値列を全て“1”とする。図19は、このように補間関数I(HPF)をシフトして求めた1024個の数値列をグラフ化したものである。
次に、図19にて示される周波数特性を、クロックt=0.5の位置を境界として左右対称となるように変換する。具体的には、クロックt=0/1024以外のt=1/1024〜511/1024の数値列を、その並び順を逆にしてクロックt=512/1024〜1023/1024の位置にコピーする。このようにして左右対称型とした1024個の数値列を、図1のステップS1における入力周波数特性の数値列として決定する。図20は、図19の周波数特性を左右対称型に変換した結果の周波数特性を示す図である。
この場合の補間関数のシフト量iも、補間関数の振幅値“0.5”が周波数軸の1/8,2/8,3/8の位置にくるような値に設定すると、図1のステップS2で入力周波数特性の数値列を逆FFTした結果として得られるフィルタ係数が単純になり、結果として少ないタップ数のFIRフィルタを設計することが可能である。
<第2の生成方法>
図21は、第2の生成方法を説明するための図であり、第2の生成方法によって生成される補間関数(設計仕様に基づくハイパスフィルタ)の周波数振幅特性を示している。
第2の生成方法によって入力周波数特性を生成する場合は、まず、(式6)に示したような標準関数XF4を入力する。標準関数XF4の数値列を入力したら、次に、この標準関数XF4を基にして、周波数シフトを含んだ補間関数を求める。
周波数シフトされた補間関数を求める際には、まず、標準関数XF4に対する補間関数の要求遷移域比率Rtrを求める。要求遷移域比率Rtrを求める際には、遷移域における代表の2点(例えば、振幅が−0.3dB,−45dBとなる点)の情報を用いる。
通過域の振幅値を“1”とした場合、標準関数XF4の−0.3dBの振幅値は0.966051、−45dBの振幅値は0.005623となる。図17に示す周波数特性前半上でこれらの振幅値に対応する基準化クロックTuを計算すると、それぞれTu−0.3=0.392122,Tu−45=0.067225となる。したがって、標準関数XF4の遷移域の基準幅Lsは、Ls=Tu−0.3−Tu−45=0.324897となる。一方、図47のフィルタ規格より、要求されるデジタルフィルタの遷移域の基準幅Lrdは、Lrd=(11.8−8.5)/80=0.04125となる。したがって、要求されるデジタルフィルタ(補間関数)の要求遷移域比率Rtrは、Rtr=Lrd/Ls=0.126963と求まる。
次に、要求されるデジタルフィルタの基準化クロックt=0から遷移域の開始点t=k1(図21参照)までのクロック数Lhsを計算する。遷移域の開始点k1から−45dBの点k3までのクロック数をTk1−k3、−45dBの点k3の基準化クロックをTk3とすると、基準化クロックt=0から遷移域の開始点t=k1までのクロック数Lhsは、Lhs=Tk3−Tk1−k3で求められる。ここで、図47に示すフィルタ規格より−45dBの周波数は8.5MHzであるから、これに相当する点k3の基準化クロックTk3は、Tk3=8.5/80=0.10625となる。一方、遷移域の開始点k1から−45dBの点k3までのクロック数Tk1−k3は、標準関数XF4における遷移域の開始点(t=0の点)から−45dBの点までのクロック数Tu−45と要求遷移域比率Rtrとを用いて、Tu−45*Rtrで求められる。上述のように、Tu−45=0.067225、Rtr=0.126963であるから、Tk1−k3=0.067225*0.126963=0.008535となる。したがって、遷移域の開始点k1までのクロック数Lhsは、Lhs=0.10625−0.008535=0.097715と求まる。
さらに、要求されるデジタルフィルタの基準化クロックt=0から遷移域の終了点t=k4までのクロック数Lheを計算する。遷移域の開始点k1から終了点k4までのクロック数をTk1−k4とすると、基準化クロックt=0から遷移域の終了点t=k4までのクロック数Lheは、Lhe=Lhs+Tk1−k4で求められる。ここで、遷移域の開始点k1から終了点k4までのクロック数Tk1−k4は、標準関数XF4における遷移域の開始点(t=0の点)から終了点(t=511/1024の点)までのクロック数(=0.5)と要求遷移域比率Rtrとを用いて、0.5*Rtrで求められる。上述のように、Rtr=0.126963であるから、Tk1−k4=0.5*0.126963=0.063482となる。したがって、基準化クロックt=0から遷移域の終了点t=k4までのクロック数Lheは、Lhe=0.097715+0.063482=0.161197と求まる。
以上の結果、補間関数I(HPF)は、次の区分方程式(式8−1,8−2,8−3)のように求まる。
I(HPF)=0
(0/1024≦t<Lhsのとき) ・・・(式8−1)
I(HPF)=8/16−9/16*cos((2π(t−Lhs)/Rtr))+1/16*cos((6π(t−Lhs)/Rtr)
(Lhs≦t≦Lheのとき)・・・(式8−2)
I(HPF)=1
(Lhe<t≦1023/1024のとき)・・・(式8−3)
上述の補間関数I(HPF)は、具体的には、(式8)中のクロックtの値を0/1024から1023/1024まで変化させて計算した結果の1024個の数値列として求める。このような1024個の数値列をグラフ化すると、第1の生成方法で求めた図19のグラフとほぼ同様になる。ただし、上述した第1の生成方法で求めた周波数特性に比べて、図47に示した設計仕様に基づく遷移域の位置をより正確に実現することができる。
次に、図19にて示される周波数特性を、基準化クロックt=0.5の位置を境界として左右対称となるように変換する。具体的には、基準化クロックt=0/1.024以外のt=1/1024〜511/1024の数値列を、その並び順を逆にしてクロックt=512/1024〜1023/1024の位置にコピーする。このようにして左右対称型とした1024個の数値列を、図1のステップS1における入力周波数特性の数値列として決定する。
図22は、図47に示す仕様のハイパスフィルタについて、図1および図2の手順に従って例えば32ビットの演算精度で実際に求めたフィルタ係数(丸め処理前のもの)の分布を示す図である。なお、ここでは、フィルタ係数の絶対値をとって、正の係数も負の係数も同じ象現に図示している。
図22に示すように、本実施形態のフィルタ設計法によって求められるフィルタ係数の値は、中央部(クロックt=512/1024の位置)で最大となる。そして、各フィルタ係数の分布は、中央付近の局所的な領域で値が大きくなり、他の領域では値が小さくなるとともに、中央付近のフィルタ係数値と周辺のフィルタ係数値との差が極めて大きくなるといった尖鋭度の高い分布となる。図1および図3の手順に従ってフィルタ係数を求めた場合も同様である。
そのため、所定の閾値より小さい値のフィルタ係数を丸め処理によって破棄しても、周波数特性を決定付ける主要なフィルタ係数は殆ど残り、周波数特性に悪影響を与えることは殆どない。また、本実施形態のフィルタ設計法によって得られる周波数特性は非常に深い減衰を持っているので、ビット数を多少減らしても、所望の減衰量は確保できる。
したがって、丸め処理によって不要なフィルタ係数を大幅に削減することができる。例えば、フィルタ係数の下位数ビットを切り捨ててビット数を減らすことによって、その下位数ビットだけで表される最大値よりも小さい値のフィルタ係数を全て“0”に丸めて破棄することができる。
このように、本実施形態では係数値を利用した丸め演算によってフィルタ係数の数を減らすことが可能であり、従来のような窓掛けは必ずしも必要でない。なお、上述したように、最初にステップS1で入力する標準関数は、そのインパルス応答が有限台の関数である。そのため、この標準関数をもとに設計されるフィルタ係数の数は、従来に比べてそもそも少なく、丸め処理をすることなくそのまま使用することも可能である。しかし、より回路を簡素化するために、ビット数を減らす丸め処理を行うのが好ましい。
図23は、x=10とした場合、つまり逆FFTによって求められた32ビットのフィルタ係数を210倍して小数点以下を切り捨て、その結果を1/210倍することによって得られたフィルタ係数を示す分布図であり、t=512/1024の中央付近を拡大して示している。また、図24は、図23に示すフィルタ係数によって実現されるFIRハイパスフィルタの周波数振幅特性を示す図であり、(a)はゲインを対数目盛りで示し、(b)はゲインを直線目盛りで示している。
図23に示すように、本実施形態のフィルタ設計法によると、最終的に求められるフィルタ係数の数は僅か59個となる。また、図24からよく分かるように、本実施形態ではフィルタ設計の際に窓掛けを行っていないので、周波数振幅特性における平坦部のリップルが極めて小さく、±0.3dBの範囲内に充分収まっている。また、丸め処理後の帯域外減衰量は約45dBとなっており、僅か59タップでも図47に示す仕様を満たしている。
なお、ここではハイパスフィルタを設計する場合に(式6)のような標準関数XF4を用いる例について説明しているが、ローパスフィルタの標準関数XF1を用いて、クロックを0.5だけシフトしてもよい。また、この(式6)は単なる例に過ぎない。例えば、次の(式9)または(式10)で表される標準関数XF5,XF6を用いても良い。
XF5=1/2+sin(2πt) ・・・(式9)
XF6=cos(πt)−1/8*cos(3πt)−1/8*cos(5πt) ・・・(式10)
ここで、(式9)における各項の係数{−1/2,1}は、数値列{−1,2,−1}/2をその中央で半分に分けたものの片側に相当する数値列である。また、(式10)における各項の係数{1,−1/8,−1/8}は、特願2003−56265号に記載されている基本ハイパスフィルタH4a3の数値列{1,1,−8,8,−1,−1}/8をその中央で半分に分けたものの片側に相当する数値列である。
なお、特願2003−56265号には、これら(式6)(式9)(式10)における各項の係数に対応する数値列以外にもハイパスフィルタに対応する数値列が幾つか示されており、それらの数値列に対応する関数を本実施形態の標準関数として用いても良い。
特に図示はしないが、(式6)だけでなく、例えば(式9)または(式10)のような標準関数を用いた場合にも、本実施形態のフィルタ設計法によって求められるフィルタ係数の値は、中央(クロックt=512/1024の位置)で最大となる。そして、各フィルタ係数の分布は、中央付近の局所的な領域で値が大きくなり、他の領域では値が小さくなるとともに、中央付近のフィルタ係数値と周辺のフィルタ係数値との差が極めて大きくなるといった尖鋭度の高い分布となる。
そのため、所定の閾値より小さい値のフィルタ係数を丸め処理によって破棄しても、周波数特性を決定付ける主要なフィルタ係数は殆ど残り、周波数特性に悪影響を与えることは殆どない。したがって、丸め処理によって不要なフィルタ係数を大幅に削減することができる。例えば、フィルタ係数の下位数ビットを切り捨ててビット数を減らすことにより、その下位数ビットだけで表される最大値よりも小さい値のフィルタ係数を全て“0”に丸めて破棄することができる。
次に、図48に示すような仕様のバントパスフィルタを設計する場合を例にとって説明する。
<第1の生成方法>
第1の生成方法によって入力周波数特性を生成する場合は、まず、例えば上述した(式1)に示すローパスフィルタの標準関数XF1および(式6)に示すハイパスフィルタの標準関数XF4(図6、図17参照)を入力する。
標準関数XF1,XF4を入力したら、次に、この標準関数XF1,XF4を基にして補間関数を求める。この補間関数を求める際には、まず、標準関数XF1,XF4によって特定される周波数特性の標準遷移域比率RtsL,RtsHを求める。
通過域の振幅値を“1”とした場合、−0.3dBの振幅値は0.966051、−45dBの振幅値は0.005623となる。例えば、図6に示す周波数特性前半上でこれらの振幅値に対応する基準化クロックTdの値を計算すると、それぞれTd−0.3=0.107878,Td−45=0.432775となる。よって、標準関数XF1の遷移域の基準幅LsLは、LsL=Td−45−Td−0.3=0.324897となる。また、図17に示す周波数特性前半上でこれらの振幅値に対応する基準化クロックTuの値を計算すると、それぞれTu−0.3=0.392122,Tu−45=0.067225となる。よって、標準関数XF4の遷移域の基準幅LsHは、LsH=Tu−0.3−Tu−45=0.324897となる。一方、標準関数XF1,XF4の周波数特性前半の基準化クロック数は0.5である。したがって、標準関数XF1,XF4の標準遷移域比率RtsL,RtsHは、RtsL=LsL/0.5=0.649794、RtsH=LsH/0.5=0.649794と求まる。
次に、この標準遷移域比率RtsL,RtsHからローパスフィルタおよびハイパスフィルタの補間関数長LiL,LiHを求める。図48に示す仕様のバンドパスフィルタを設計する場合、遷移域幅の仕様は5MHz〜8.5MHzおよび12.5MHz〜16MHzである。サンプリング周波数80MHzのクロック幅が1024であるから、ローパスフィルタの遷移域に関する12.5MHzに対応するクロックはT12.5M=160、16MHzに対応するクロックはT16M=205となり、設計したい遷移域のクロック幅はLdL=T16M−T12.5M=45となる。この場合、ローパスフィルタの補間関数長LiLは、LiL=LdL/RtsL=69.189149と求まる。
ハイパスフィルタの遷移域に関しては、5MHzに対応するクロックはT5M=64、8.5MHzに対応するクロックはT8.5M=109となり、設計したい遷移域のクロック幅はLdH=T8.5M−T5M=45となる。したがって、ハイパスフィルタの補間関数長LiHも、LiH=LdH/RtsH=69.189149と求まる。
バンドパスフィルタフィルタにおいてタップ数を削減するためには、補間関数長LiL,LiHは計算値より大きい偶整数とすることが望ましい。そこで、この場合の補間関数長LiL,LiHは共に70とする。
補間関数長LiLが70クロックのローパスフィルタの補間関数I(LPFB)は、次の区分方程式(式11−1)(式11−2)のように求まる。
I(LPFB)=8/16+9/16*cos(2πt/70)−1/16*cos(6πt/70)
(0/1024≦t≦69/1024のとき) ・・・(式11−1)
I(LPFB)=0
(69/1024<t≦1023/1024のとき)・・・(式11−2)
また、補間関数長LiHが70クロックのハイパスフィルタの補間関数I(HPFB)は、次の区分方程式(式12−1)(式12−2)のように求まる。
I(HPFB)=8/16−9/16*cos(2πt/70)+1/16*cos(6πt/70)
(0/1024≦t≦69/1024のとき) ・・・(式12−1)
I(HPFB)=1
(69/1024<t≦1023/1024のとき)・・・(式12−2)
図25は、(式11−1,11−2)で表されるローパスフィルタの補間関数I(LPFB)および(式12−1,12−2)で表されるハイパスフィルタの補間関数I(HPFB)を示す図である。図25(a)がローパスフィルタの補間関数I(LPFB)を示し、図25(b)がハイパスフィルタの補間関数I(HPFB)を示している。
このようにしてローパスフィルタおよびハイパスフィルタの補間関数I(LPFB),I(HPFB)を求めたら、次に、これらの補間関数I(LPFB),I(HPFB)の周波数特性を周波数軸方向(クロック方向)にシフトさせ、振幅値の“1”と“0”とをこのシフトした補間関数I(LPFB),I(HPFB)で繋ぐ。具体的には、(式11−1)で求められたクロックt=0/1024〜69/1024の位置に対応する70個の数値列をクロックt=i/1024〜(i+69)/1024(iは整数)の位置にシフトさせるとともに、(式12−1)で求められたクロックt=0/1024〜69/1024の位置に対応する70個の数値列をクロックt=j/1024〜(j+69)/1024(i>j:jは整数)の位置にシフトさせる。そして、クロックt=1/1024〜(j−1)/1024,(i±70)/1024〜1023/1024の位置の数値列を全て“0”とし、クロックt=(j+70)/1024〜(i−1)/1024の位置の数値列を全て“1”とする。図26は、このように補間関数I(LPFB),I(HPFB)をシフトして求めた1024個の数値列をグラフ化したものである。
次に、図26にて示される周波数特性を、クロックt=0.5の位置を境界として左右対称となるように変換する。具体的には、クロックt=0/1024以外のt=1/1024〜511/1024の数値列を、その並び順を逆にしてクロックt=512/1024〜1023/1024の位置にコピーする。このようにして左右対称型とした1024個の数値列を、図1のステップS1における入力周波数特性の数値列として決定する。図27は、図26の周波数特性を左右対称型に変換した結果の周波数特性を示す図である。
この場合の補間関数のシフト量i,jも、補間関数の振幅値“0.5”が周波数軸の1/8,2/8,3/8の位置にくるような値に設定すると、図1のステップS2で入力周波数特性の数値列を逆FFTした結果として得られるフィルタ係数が単純になり、結果として少ないタップ数のFIRフィルタを設計することが可能である。
<第2の生成方法>
図28は、第2の生成方法を説明するための図であり、第2の生成方法によって生成される補間関数(設計仕様に基づくバンドパスフィルタ)の周波数振幅特性を示している。
第2の生成方法によって入力周波数特性を生成する場合は、まず、(式1)および(式6)に示したような標準関数XF1,XF4を入力する。標準関数XF1,XF4の数値列を入力したら、次に、この標準関数XF1,XF4を基にして、周波数シフトを含んだ補間関数を求める。
周波数シフトされた補間関数を求める際には、まず、標準関数XF1,XF4に対する補間関数の要求遷移域比率RtrL,RtrHを求める。要求遷移域比率Rtrを求める際には、遷移域における代表の2点(例えば、振幅が−0.3dB,−45dBとなる点)の情報を用いる。
通過域の振幅値を“1”とした場合、標準関数XF1,XF4の−0.3dBの振幅値は0.966051、−45dBの振幅値は0.005623となる。図6および図17に示す周波数特性前半上でこれらの振幅値に対応する基準化クロックを計算すると、それぞれTd−0.3=0.107878,Td−45=0.432775、Tu−0.3=0.392122,Tu− 45=0.067225となる。したがって、標準関数XF1,XF4の遷移域の基準幅Lsd,Lsuは、Lsd=Td−45−Td−0.3=0.324897、Lsu=Tu−0.3−Tu−45=0.324897となる。一方、図47のフィルタ規格より、要求されるデジタルフィルタの遷移域の基準幅LrdL,LrdHは、LrdH=(11.8−8.5)/80=0.04125、LrdL=(16−12.5)/80=0.04375となる。したがって、要求されるデジタルフィルタ(補間関数)の要求遷移域比率RtrL,RtrHは、RtrL=LrdL/Lsd=0.134658、RtrH=LrdH/Lsu=0.126963と求まる。
次に、要求されるデジタルフィルタの基準化クロックt=0から遷移域の開始点t=k1(図28参照)までのクロック数LhsHを計算する。遷移域の開始点k1から−45dBの点k3までのクロック数をTk1−k3、−45dBの点k3の基準化クロックをTk3とすると、基準化クロックt=0から遷移域の開始点t=k1までのクロック数LhsHは、LhsH=Tk3−Tk1−k3で求められる。ここで、図48に示すフィルタ規格より−45dBの周波数は8.5MHzであるから、これに相当する点k3の基準化クロックTk3は、Tk3=8.5/80=0.10625となる。一方、遷移域の開始点k1から−45dBの点k3までのクロック数Tk1−k3は、標準関数XF4における遷移域の開始点(t=0の点)から−45dBの点までのクロックTu−45と要求遷移域比率RtrHとを用いて、Tu−45*RtrHで求められる。上述のように、Tu−45=0.067225、RtrH=0.126963であるから、Tk1−k3=0.067225*0.126963=0.008535となる。したがって、遷移域の開始点k1までのクロック数LhsHは、LhsH=0.10625−0.008535=0.097715と求まる。
次に、要求されるデジタルフィルタの基準化クロックt=0から遷移域の終了点t=k4までのクロック数LheHを計算する。遷移域の開始点k1から終了点k4までのクロック数をTk1−k4とすると、基準化クロックt=0から遷移域の開始点t=k4までのクロック数LheHは、LheH=LhsH+Tk1−k4で求められる。ここで、遷移域の開始点k1から終了点k4までのクロック数Tk1−k4は、標準関数XF4における遷移域の開始点(t=0の点)から終了点(t=511/1024の点)までのクロック数(=0.5)と要求遷移域比率RtrHとを用いて、0.5*RtrHで求められる。上述のように、RtrH=0.126963であるから、Tk1−k4=0.5*0.126963=0.063482となる。したがって、基準化クロックt=0から遷移域の終了点t=k4までのクロック数LheHは、LheH=0.097715+0.063482=0.161197と求まる。
次に、要求されるデジタルフィルタの基準化クロックt=0から遷移域の開始点t=k5までのクロック数LhsLを計算する。遷移域の開始点k5から−0.3dBの点k2’までのクロック数をTk5−k2’、−0.3dBの点k2の基準化クロックをTk2’とすると、基準化クロックt=0から遷移域の開始点t=k5までのクロック数LhsLは、LhsL=Tk2’−Tk5−k2’で求められる。ここで、図48に示すフィルタ規格より−0.3dBの周波数は1.6MHZであるから、これに相当する点k2’の基準化クロックTk2’は、Tk2’=16/80=0.2となる。一方、遷移域の開始点k5から−0.3dBの点k2’までのクロック数Tk5−k2’は、標準関数XF1における遷移域の開始点(t=0の点)から−0.3dBの点中でのクロック数Td−0.3と要求遷移域比率RtrLとを用いて、Td−0.3*RtrLで求められる。上述のように、Td−0.3=0.107878、RtrL=0.134658であるから、Tk5−k2’=0.107878*0.134658=0.014527となる。したがって、遷移域の開始点k5までのクロック数LhsLは、LhsL=0.2−0.014527=0.185473と求まる。
さらに、要求されるデジタルフィルタの基準化クロックt=0から遷移域の終了点t=k6までのクロック数LheLを計算する。遷移域の開始点k5から終了点k6までのクロック数をTk5−k6とすると、基準化クロックt=0から遷移域の終了点t=k6までのクロック数LheLは、LheL=LhsL+Tk5−k6で求められる。ここで、遷移域の開始点k5から終了点k6までのクロック数Tk5−k6は、標準関数XF1における遷移域の開始点(t=0の点)から終了点(t=511/1024の点)までのクロック数(=0.5)と要求遷移域比率RtrLとを用いて、0.5*RtrLで求められる。上述のように、RtrL=0.134658であるから、Tk5−k6=0.5*0.134658=0.067329となる。したがって、基準化クロックt=0から遷移域の終了点、t=k6までのクロック数LheLは、LheL=0.185473+0.067329=0.252802と求まる。
以上の結果、補間関数(BPF)は、次の区分方程式(式13−1,13−2,13−3,13−4,13−5)のように求まる。
I(BPF)=0
(0/1024≦t<LhsHのとき) ・・・(式13−1)
I(BPF)=8/16−9/16*cos((2π(t−LhsH)/RtrH))+1/16*cos((6π(t−LhsH)/RtrH))
(LhsH≦t≦LheHのとき)・・・(式13−2)
I(BPF)=1
(LheH<t<LhsLのとき)・・・(式13−3)
I(BPF)=8/16+9/16*cos((2π(t−LhsL)/RtrL))+1/16*cos((6π(t−LhsL)/RtrL))
(LhsL≦t≦LheLのとき)・・・(式13−4)
I(BPF)=0
(LheL<t≦1023/1024のとき)・・・(式13−5)
上述の補間関数I(BPF)は、具体的には、(式13)中のクロックtの値を0/1024から1023/1024まで変化させて計算した結果の1024個の数値列として求める。このような1024個の数値列をグラフ化すると、第1の生成方法で求めた図26のグラフとほぼ同様になる。ただし、上述した第1の生成方法で求めた周波数特性に比べて、図48に示した設計仕様に基づく遷移域の位置をより正確に実現することができる。
次に、図26にて示される周波数特性を、基準化クロックt=0.5の位置を境界として左右対称となるように変換する。具体的には、基準化クロックt=0/1024以外のt=1/1024〜511/1024の数値列を、その並び順を逆にしてクロックt=512/1024〜1023/1024の位置にコピーする。このようにして左右対称型とした1024個の数値列を、図1のステップS1における入力周波数特性の数値列として決定する。
図29は、図48に示す仕様のバンドパスフィルタについて、図1および図2の手順に従って例えば32ビットの演算精度で実際に求めたフィルタ係数(丸め処理前のもの)の分布を示す図である。なお、ここでは、フィルタ係数の絶対値をとって、正の係数も負の係数も同じ象現に図示している。
図29に示すように、本実施形態のフィルタ設計法によって求められるフィルタ係数の値は、中央部(クロックt=512/1024の位置)で最大となる。そして、各フィルタ係数の分布は、中央付近の局所的な領域で値が大きくなり、他の領域では値が小さくなるとともに、中央付近のフィルタ係数値と周辺のフィルタ係数値との差が極めて大きくなるといった尖鋭度の高い分布となる。図1および図3の手順に従ってフィルタ係数を求めた場合も同様である。
そのため、所定の閾値より小さい値のフィルタ係数を丸め処理によって破棄しても、周波数特性を決定付ける主要なフィルタ係数は殆ど残り、周波数特性に悪影響を与えることは殆どない。また、本実施形態のフィルタ設計法によって得られる周波数特性は非常に深い減衰を持っているので、ビット数を多少減らしても、所望の減衰量は確保できる。
したがって、丸め処理によって不要なフィルタ係数を大幅に削減することができる。例えば、フィルタ係数の下位数ビットを切り捨ててビット数を減らすことによって、その下位数ビットだけで表される最大値よりも小さい値のフィルタ係数を全て“0”に丸めて破棄することができる。
このように、本実施形態では係数値を利用した丸め演算によってフィルタ係数の数を減らすことが可能であり、従来のような窓掛けは必ずしも必要でない。なお、上述したように、最初にステップS1で入力する標準関数は、そのインパルス応答が有限台の関数である。そのため、この標準関数をもとに設計されるフィルタ係数の数は、従来に比べてそもそも少なく、丸め処理をすることなくそのまま使用することも可能である。しかし、より回路を簡素化するために、ビット数を減らす丸め処理を行うのが好ましい。
図30は、x=10とした場合、つまり逆FFTによって求められた32ビットのフィルタ係数を210倍して小数点以下を切り捨て、その結果を1/210倍することによって得られたフィルタ係数を示す分布図であり、t=512/1024の中央付近を拡大して示している。また、図31は、図30に示すフィルタ係数によって実現されるFIRハイパスフィルタの周波数振幅特性を示す図であり、(a)はゲインを対数目盛りで示し、(b)はゲインを直線目盛りで示している。
図30に示すように、本実施形態のフィルタ設計法によると、最終的に求められるフィルタ係数の数は僅か53個となる。また、図31からよく分かるように、本実施形態ではフィルタ設計の際に窓掛けを行っていないので、周波数振幅特性における平坦部のリップルが極めて小さく、±0.3dBの範囲内に充分収まっている。また、丸め処理後の帯域外減衰量は約45dBとなっており、僅か53タップでも図48に示す仕様を満たしている。
以上のように、本実施形態のフィルタ設計法によれば、リップル特性の良好なローパスフィルタ、ハイパスフィルタ、バンドパスフィルタを設計することができる。また、窓掛け演算を行うことは必ずしも必要でなく、窓掛け演算を行わなくてもタップ数を非常に少なくすることができる。さらに、丸め演算の際にフィルタ係数を2x倍して整数化するので、乗算器の使用数を少なくすることができる。これにより、フィルタ回路を小面積でIC化することができる。また、所望の周波数特性のフィルタ係数を求めるのに試行錯誤が殆ど不要であり、FIRフィルタを容易に設計することができる。
次に、図46に示した仕様のローパスフィルタを、上述した標準関数XF1〜XF3と異なる標準関数から設計する場合について説明する。例えば、標準関数として他のCOS関数を入力する場合について以下に説明する。このCOS関数も、そのインパルス応答が局所的な領域内で“0”以外の有限な値を有し、それ以外の領域では値が全て“0”となるような有限台の関数であることが好ましい。ここでは、COS関数の一例として、次の(式14)で表される関数を標準関数XS1として用いる場合について説明する。
XS1=1/2+1/2*cos(2πt) ・・・(式14)
図32は、この(式14)に示すCOS関数の数値列((式14)中におけるクロックtの値を0/1024から1023/1024まで変化させて計算した結果の1024個の数値列)をグラフ化したものである。
このようなCOS関数XS1から補間関数を求める際にも、上述した第1の生成方法および第2の生成方法の何れも適用することが可能である。ここでは代表として、第1の生成方法によって補間関数を求める方法について説明する。
第1の生成方法によって補間関数を求める際には、まず、COS関数XS1の標準遷移域比率Rtsを求める。通過域の振幅値を“1”とした場合、−0.3dBの振幅値は0.966051、−45dBの振幅値は0.005623となる。図32に示すCOS関数XS1の周波数特性前半上でこれらの振幅値に対応する基準化クロックTdの値を計算すると、それぞれTd−0.3=0.059570,Td−45=0.476563となる。よって、COS関数XS1の遷移域の基準幅Lsは、Ls=Td−45−Td−0.3=0.416993となる。一方、COS関数XS1の周波数特性前半の基準化クロック数は0.5である。したがって、COS関数XS1の標準遷移域比率Rtsは、Rts=Ls/0.5=0.833986と求まる。
次に、この標準遷移域比率Rtsから補間関数長Liを求める。図46に示す仕様のローパスフィルタを設計する場合、遷移域幅の仕様は8.5MHz〜11.8MHzである。サンプリング周波数80MHzのクロック幅が1024であるから、8.5MHzに対応するクロックはT8.5M=109、11.8MHzに対応するクロックはT11.8M=151となり、設計したい遷移域のクロック幅LdはLd=T11.8M−T8.5M=42となる。この場合、補間関数長Liは、Li=42/Rts=50.360558と求まる。
ローパスフィルタにおいてタップ数を削減するためには、補間関数長Liは計算値より大きい偶整数とすることが望ましい。そこで、この場合の補間関数長Liは52とする。COS関数XS1に基づく補間関数長Liが52クロックの補間関数II(LPF1)は、次の区分方程式(式15−1)(式15−2)のように求まる。
II(LPF1)=1/2+1/2*cos(2πt/52)
(0/1024≦t≦51/1024のとき) ・・・(式15−1)
II(LPF1)=0
(51/1024<t≦1023/1024のとき)・・・(式15−2)
上述の補間関数II(LPF1)は、具体的には、(式15−1,15−2)中のクロックtの値を0/1024から1023/1024まで変化させて計算した結果の1024個の数値列として求める。図33は、この1024個の数値列をグラフ化したものである。
このようにして補間関数II(LPF1)を求めたら、次に、この補間関数II(LPF1)の周波数特性を周波数軸方向(クロック方向)にシフトさせ、振幅値の“1”と“0”とをこのシフトした補間関数II(LPF1)で繋ぐ。具体的には、(式15−1)で求められた基準化クロックt=0/1024〜51/1024の位置に対応する52個の数値列をクロックt=i/1024〜(i+51)/1024の位置にシフトさせ(iは整数)、クロックt=0/1024〜(i−1)/1024の位置の数値列を全て“1”、クロックt=(i+52)/1024〜1023/1024の位置の数値列を全て“0”とする。
次に、このようにして生成した数値列で表される周波数特性を、クロックt=0.5の位置を境界として左右対称となるように変換する。具体的には、基準化クロックt=0/1024以外のt=1/1024〜511/1024の数値列を、その並び順を逆にしてクロックt=512/1024〜1023/1024の位置にコピーする。このようにして左右対称型とした1024個の数値列を、図1のステップS1における入力周波数特性の数値列として決定する。
この場合の補間関数のシフト量iも、補間関数の振幅値“0.5”が周波数軸の1/8,2/8,3/8の位置にくるような値に設定すると、図1のステップS2で入力周波数特性の数値列を逆FFTした結果として得られるフィルタ係数が単純になり、結果として少ないタップ数のFIRフィルタを設計することが可能である。
なお、次のようなスプライン関数を標準関数として用いることもできる。
XS2=1−2t2
(0/1024≦t≦511/1024のとき) ・・・(式16−1)
XS2=2(t−1)2
(511/1024<t≦1023/1024のとき) ・・・(式16−2)
図34は、上記(式16−1,16−2)で表される標準関数XS2およびこれから求められる補間関数II(LPF2)をグラフ化した図である。また、図35は、補間関数II(LPF2)を用いて図1および図2の手順に従って例えば32ビットの演算精度で実際に求めたフィルタ係数(丸め処理前のもの)の分布を示す図である。この図35においても、フィルタ係数の絶対値をとって、正の係数も負の係数も同じ象現に図示している。
また、次の(式17−1,17−2)で表されるスプライン関数XS3を標準関数として用いても良い。
XS3=1−8t2
(0/1024≦t≦255/1024のとき) ・・・(式17−1)
XS3=8(1/2−t)2
(255/1024<t≦511/1024のとき) ・・・(式17−2)
図36は、上記(式17−1,17−2)で表される標準関数XS3およびこれから求められる補間関数II(LPF3)をグラフ化した図である。また、図37は、補間関数II(LPF3)を用いて図1および図2の手順に従って例えば32ビットの演算精度で実際に求めたフィルタ係数(丸め処理前のもの)の分布を示す図である。この図37においても、フィルタ係数の絶対値をとって、正の係数も負の係数も同じ象現に図示している。
図35および図37に示すように、(式16−1,16−2)または(式17−1,17−2)のような標準関数XS2,XS3を用いた場合も、本実施形態のフィルタ設計法によって求められるフィルタ係数の値は、中央部(基準化クロックt=511/1024の位置)で最大となる。そして、各フィルタ係数の分布は、中央付近の局所的な領域で値が大きくなり、他の領域では値が小さくなるとともに、中央付近のフィルタ係数値と周辺のフィルタ係数値との差が極めて大きくなるといった尖鋭度の高い分布となる。図1および図3の手順に従ってフィルタ係数を求めた場合も同様である。
そのため、所定の閾値より小さい値のフィルタ係数を丸め処理によって破棄しても、周波数特性を決定付ける主要なフィルタ係数は殆ど残り、周波数特性に悪影響を与えることは殆どない。また、本実施形態のフィルタ設計法によって得られる周波数特性は非常に深い減衰を持っているので、ビット数を多少減らしても、所望の減衰量は確保できる。したがって、丸め処理によって不要なフィルタ係数を大幅に削減することができる。例えば、フィルタ係数の下位数ビットを切り捨ててビット数を減らすことにより、その下位数ビットだけで表される最大値よりも小さい値のフィルタ係数を全て“0”に丸めて破棄することができる。
なお、本実施形態に適用可能なスプライン関数は以上の例に限定されない。すなわち、有限台のスプライン関数を標準関数として用いれば、図35や図37と同様の好適な結果を得ることができる。
この他、標準関数として、リニア関数を用いることも可能である。標準関数としてリニア関数を用いる場合、当該標準関数XLは次の区分方程式(式18−1)(式18−2)のように表される。
XL=1−t/512
(0/1024≦t≦511/1024のとき) ・・・(式18−1)
XL=0
(511/1024<t≦1023/1024のとき) ・・・(式18−2)
図38は、この(式18−1,18−2)に示すリニア関数XLの数値列をグラフ化したものである。
このようなリニア関数XLから補間関数を求める際にも、上述した第1の生成方法および第2の生成方法の何れも適用することが可能である。ここでは代表として、第1の生成方法によって補間関数を求める方法について説明する。
第1の生成方法によって補間関数を求める際には、まず、リニア関数XLの標準遷移域比率Rtsを求める。通過域の振幅値を“1”とした場合、−0.3dBの振幅値は0.966051、−45dBの振幅値は0.005623となる。図38に示すリニア関数XLの周波数特性前半上でこれらの振幅値に対応する基準化クロックTdの値を計算すると、それぞれTd−0.3=0.016602,Td−45=0.497070となる。よって、リニア関数XLの遷移域の基凖幅Lsは、Ls=Td−45−Td−0.3=0.480468となる。一方、リニア関数XLの周波数特性前半の基準化クロック数は0.5である。したがって、リニア関数XLの標準遷移域比率Rtsは、Rts=Ls/0.5=0.960936と求まる。
次に、この標準遷移域比率Rtsから補間関数長Liを求める。図46に示す仕様のローパスフィルタを設計する場合、遷移域幅の仕様は8.5MHz〜11.8MHzである。サンプリング周波数80MHzのクロック幅が1024であるから、8.5MHzに対応するクロックはT8.5M=109、11.8MHzに対応するクロックはT11.8M=151となり、設計したい遷移域のクロック幅LdはLd=T11.8M−T8.5M=42となる。この場合、補間関数長Liは、Li=42/Rts=42/0.960938=43.707385と求まる。
ローパスフィルタにおいてタップ数を削減するためには、補間関数長Liは計算値より大きい偶整数とすることが望ましい。そこで、この場合の補間関数長Liは44とする。リニア関数XLに基づく補間関数長Liが44クロックの補間関数III(LPF)は、次の区分方程式(式19−1)(式19−2)のように求まる。
III(LPF)=1−t/44
(0/1024≦t≦43/1024のとき) ・・・(式19−1)
III(LPF)=0
(43/1024<t≦1023/1024のとき)・・・(式19−2)
上述の補間関数III(LPF)は、具体的には、(式19−1,19−2)中のクロックtの値を0/1024から1023/1024まで変化させて計算した結果の1024個の数値列として求める。図39は、この1024個の数値列をグラフ化したものである。
このようにして補間関数III(LPF)を求めたら、次に、この補間関数III(LPF)の周波数特性を周波数軸方向(クロック方向)にシフトさせ、振幅値の“1”と“0”とをこのシフトした補間関数III(LPF)で繋ぐ。具体的には、(式19−1)で求められた基準化クロックt=0/1024〜43/1024の位置に対応する44個の数値列をクロックt=i/1024〜(i+43)/1024の位置にシフトさせ(iは整数)、クロックt=0/1024〜(i−1)/1024の位置の数値列を全て“1”、クロックt=(i+44)/1024〜1023/1024の位置の数値列を全て“0”とする。
次に、このようにして生成した数値列で表される周波数特性を、クロックt=0.5の位置を境界として左右対称となるように変換する。具体的には、基準化クロックt=0/1024以外のt=1/1024〜511/1024の数値列を、その並び順を逆にしてクロックt=512/1024〜1023/1024の位置にコピーする。このようにして左右対称型とした1024個の数値列を、図1のステップS1における入力周波数特性の数値列として決定する。
この場合の補間関数のシフト量iも、補間関数の振幅値“0.5”が周波数軸の1/8,2/8,3/8の位置にくるような値に設定すると、図1のステップS2で入力周波数特性の数値列を逆FFTした結果として得られるフィルタ係数が単純になり、結果として少ないタップ数のFIRフィルタを設計することが可能である。
図40は、(式1)、(式14)、(式18−1,18−2)によって示される3種類の標準関数XF1,XS1,XL、これら標準関数から計算される3種類の補間関数I(LPF1),II(LPF1),III(LPF)、これら補間関数を周波数シフトして定めた入力周波数特性を逆FFTすることによって得られるフィルタ係数(丸め処理前のもの)の分布を示す図である。図40(a)が(式1)、図40(b)が(式14)、図40(c)が(式18−1,18−2)に対応するものである。また、図41は、丸め演算の際に使うxの値(丸め後のビット数x)と必要なタップ数との関係を示す図である。
図40に示すように、(式1)に示す関数を用いた場合には、(式14)に示すCOS関数や(式18−1,18−2)に示すリニア関数を用いた場合に比べて、係数分布の尖鋭度が高く、中央付近のフィルタ係数値と周辺のフィルタ係数値との差がより大きな分布なる。そのため、丸め演算でxの値を10より大きくしても、必要となるタップ数の増加度はCOS関数やリニア関数に比べてはるかに小さい。
一般に、フィルタの帯域外減衰量は、実装しようとするハードウェアで対応可能なビット数によって制約される。したがって、ハードウェア規模の制約がなければ、丸め処理後のビット数xを大きくして、より減衰の深い帯域外減衰特性を得ることができる。(式1)に示す標準関数を用いてフィルタ設計を行った場合には、丸め処理後のフィルタ係数のビット数を16ビットとしても、殆どタップ数は増えず、周波数特性の帯域外減衰量を−45dBよりも大きくとることが可能である。
これに対して、標準関数としてCOS関数やスプライン関数、リニア関数を用いた場合は、丸め処理後のフィルタ係数のビット数xを大きくすると、必要なタップ数が多くなっていく。しかし、フィルタ係数のビット数をある程度小さくすれば、必要なタップ数は(式1)に示す関数を用いた場合と同等程度まで少なくすることができる。したがって、丸め処理によってビット数をある程度小さくすることが可能な条件の下では、COS関数やスプライン関数、リニア関数を標準関数として用いたフィルタ設計法も有効である。
ちなみに、デジタルフィルタの分野で多く用いられる12ビット精度であれば、(式1)に示す関数、(式14)に示すCOS関数、(式18−1,18−2)に示すリニア関数のどれを用いても、タップ数に大きな差はない。よって、どの関数を標準関数として用いたフィルタ設計法も有効である。
以上に説明した本実施形態によるデジタルフィルタの設計方法を実現するための装置は、ハードウェア構成、DSP、ソフトウェアの何れによっても実現することが可能である。例えばソフトウェアによって実現する場合、本実施形態のフィルタ設計装置は、実際にはコンピュータのCPUあるいはMPU、RAM、ROMなどで構成され、RAMやROMあるいはハードディスク等に記憶されたプログラムが動作することによって実現できる。
例えば、パーソナルコンピュータ等にインストールされている表計算ソフトの関数機能などを利用して、標準関数の入力、標準関数から補間関数の計算、補間関数の周波数シフト、補間関数をシフトして生成した入力周波数特性の逆FFT演算、数値列の並び替え演算、丸め演算などを行うようにすることも可能である。この場合の演算は、実際には、表計算ソフトがインストールされているパーソナルコンピュータ等のCPU、ROM、RAMなどによって行われる。
また、0dBからの各減衰値と、所定の標準関数上で各減衰値に対応する基準化クロックの値とを関連付けたテーブル情報を記憶するテーブル情報記憶部と、図46〜図48のような要求仕様に関する情報を入力するための入力デバイスと、入力された要求仕様に関する情報と上述のテーブル情報とを用いて補間関数を算出するための演算を行う演算装置とを備えて本実施形態のフィルタ設計装置を構成しても良い。このように構成した場合は、入力デバイスを用いて要求仕様に関する情報を入力するだけで、その要求仕様に合致する補間関数(逆FFTするための入力周波数特性)を自動的に求めることができる。
また、求めたフィルタ係数を自動的にFFT変換し、その結果を周波数特性図としてディスプレイ画面に表示するようにしても良い。このようにすれば、設計したフィルタの周波数特性を視覚的に確認することができ、フィルタ設計をより容易に行うことができる。
実際にデジタルフィルタを電子機器内や半導体ICに実装する場合には、以上のようなフィルタ設計装置によって最終的に求められた数値列をフィルタ係数として持つFIRフィルタを構成すればよい。すなわち、図42に示すように、単に複数のD型フリップフロップ1と、複数の係数器2と、複数の加算器3とにより1つのデジタルフィルタを構成し、以上のような手順で求めた最終的なフィルタ係数を、当該デジタルフィルタ内の複数の係数器2に設定する形で構成する。フィルタ係数を2x倍して整数化した場合は、図43のようにデジタルフィルタを構成することが可能である。
以上詳しく説明したように、本実施形態では、標準関数を入力してこれから補間関数を計算することによって入力周波数特性を定める。そして、この入力周波数特性を表す数値列を逆FFTすることによってフィルタ係数を求めるようにしたので、特別な数学知識や電気工学知識がなくても、所望の周波数特性を実現するFIRデジタルフィルタの係数を簡単に決定することができる。さらに特筆すべきは、ローパスフィルタのみならず、ハイパスフィルタやバンドパスフィルタ、バンドエミリネーションフィルタ、コムフィルタなども、同一の手法で簡単に設計することができる。
また、本実施形態によれば、フィルタ係数の数を減らすために窓掛け演算は必ずしも必要でなく、数値の丸め演算によって、周波数特性の精度を落とさずにフィルタ係数の数を減らすことができる。また、本実施形態では、逆FFTにより求められた数値列に対して整数化の演算を行うことにより、フィルタ係数の値を簡素化することもできる。これにより、フィルタ構成要素の乗算器の使用数を大幅に削減してデジタルフィルタの構成を簡略化することができるとともに、希望する周波数特性を高精度に実現することができる。
なお、上記実施形態では、標準関数XF1〜XF6,XS1〜XS3,XLを用いる例について説明したが、本発明で用いることが可能な標準関数はこれに限定されない。
また、上記実施形態では、整数化演算の例として、数値列を2x倍して小数点以下を切り捨てる処理について説明したが、本発明はこれに限定されない。例えば、数値列を2x倍して小数点以下を切り上げたり、四捨五入したりするようにしても良い。
整数化演算の他の例として、フィルタ係数の数値列をN倍(Nは2のべき乗以外の値)して小数点以下を丸める(切り捨て、切り上げ、四捨五入など)ようにしても良い。このようなN倍の丸め演算を行った場合、デジタルフィルタは、図44に示すように、複数の遅延器(D型フリップフロップ)1から成るタップ付き遅延線の各タップからの出力信号に対して整数のフィルタ係数を複数の係数器2で個別に乗算し、それぞれの乗算出力を複数の加算器3で全て加算した後に、1つの乗算器5でまとめて1/N倍するように構成することが可能となる。しかも、整数のフィルタ係数は、2i+2j+・・・(i,jは任意の整数)のように2進数の足し算で表現できる。これにより、乗算器の代わりにビットシフト回路で係数器を構成し、実装するデジタルフィルタの構成を簡素化することができる。
また、数値列を2x倍する場合はフィルタ係数に対してビット単位の丸めを実施することができるのに対し、数値列をN倍する場合はフィルタ係数に対してビット間の丸めを実施することができる。ビット単位の丸め処理とは、例えば係数値を2x倍して小数点以下を切り捨てる場合には、2x〜2x+1の範囲に属する数値は全て2xに丸めるといったように、係数値を1/2xの整数倍とする処理を言う。また、ビット間の丸め処理とは、例えば係数値をN倍(例えば、2x−1<N<2x)して小数点以下を切り捨てる場合には、N〜N+1の範囲に属する数値は全てNに丸めるといったように、係数値を1/Nの整数倍とする処理を言う。N倍の丸め演算を行うことにより、整数化されるフィルタ係数の値を、2のべき乗以外の任意の値に調整することが可能である。このようにすれば、デジタルフィルタで使用するフィルタ係数の数(タップの数)を微妙に調整することができる。
その他、整数化を伴う丸め演算の例として、yビットのフィルタ係数のデータ値が1/2xより小さいものは全てゼロとし、当該データ値が1/2x以上のものについては、当該データ値を2x+X倍(x+X<y)して小数点以下を丸める(切り捨て、切り上げ、四捨五入など)ようにしても良い。
このような丸め処理を行った場合、デジタルフィルタは、図45に示すように、複数の遅延器(D型フリップフロップ)1から成るタップ付き遅延線の各タップからの出力信号に対して整数のフィルタ係数を複数の係数器2で個別に乗算し、それぞれの乗算出力を複数の加算器3で全て加算した後に、1つのシフト演算器6でまとめて1/2x+X倍するように構成することが可能となる。しかも、整数のフィルタ係数は、2i+2j+・・・(i,jは任意の整数)のように2進数の足し算で表現できる。これにより、乗算器の代わりにビットシフト回路で係数器を構成し、実装するデジタルフィルタの構成を簡素化することができる。
また、データ値が1/2xより小さいものは全てゼロとして切り捨てることによってフィルタ係数の数(タップ数)を大幅に削減できると同時に、xビットに比べてビット数が多い(x+X)ビットの精度の良いフィルタ係数を求めることができるので、より良好な周波数特性を得ることもできる。
その他、上記実施形態は、何れも本発明を実施するにあたっての具体化の一例を示したものに過ぎず、これによって本弁明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその精神、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
本発明は、複数の遅延器から成るタップ付き遅延線を備え、各タップの出力信号をそれぞれフィルタ係数により数倍した後、それらの乗算結果を加算して出力するタイプのFIRデジタルフィルタおよびその設計法に有用である。
Claims (24)
- 複数の遅延器から成るタップ付き遅延線における各タップのデータに対して各フィルタ係数をそれぞれ乗算した後、それらの乗算結果を加算して出力するタイプのデジタルフィルタの設計方法であって、
標準関数を入力し、設計すべきフィルタの仕様に基づいて、周波数振幅特性の最大振幅値と最小振幅値との間を繋ぐ有限長の補間関数を上記標準関数から計算し、上記補間関数を用いて、上記設計すべきフィルタの仕様に対応する周波数特性を表す数値列を定める第1のステップと、
上記第1のステップで定めた数値列を逆フーリエ変換してその結果の実数項を抽出する第2のステップと、
上記第2のステップで抽出した実数項から成る数値列に対して、その前半部と後半部とを並べ替える処理を必要に応じて行う第3のステップと、
上記第2のステップあるいは上記第3のステップで算出した数値列の所定ビットのデータに対して下位数ビットを丸める丸め処理を行うことによってビット数を減らす第4のステップとを有し、
上記第4のステップで得られた数値列を上記フィルタ係数として决定するようにしたことを特徴とするデジタルフィルタの設計方法。 - 上記標準関数は、そのインパルス応答が、一定の領域内でのみゼロ以外の有限な値を有し、それ以外の領域では値が全てゼロとなるような関数であることを特徴とする請求の範囲第1項に記載のデジタルフィルタの設計方法。
- 上記第1のステップは、上記標準関数を入力する第5のステップと、
上記標準関数を基にして有限長の上記補間関数を求める第6のステップと、
上記第6のステップで求められた上記補間関数の周波数特性を所望量だけ周波数軸方向にシフトさせ、上記最大振幅値と上記最小振幅値とを当該シフトした補間関数で繋ぐ第7のステップと、
上記第7のステップで求められた補間関数の周波数特性を左右対称型に変換する第8のステップとを有することを特徴とする請求の範囲第1項に記載のデジタルフィルタの設計方法。 - 上記第6のステップは、上記標準関数によって特定される周波数特性における遷移域の全領域に対する比率を求める第9のステップと、
上記第9のステップで求められた遷移域比率と、上記設計すべきフィルタの仕様に基づく遷移域幅とから、上記補間関数の補間関数長を求める第10のステップと、
上記第10のステップで求められた補間関数長を用いて有限長の上記補間関数を求める第11のステップとを有することを特徴とする請求の範囲第3項に記載のデジタルフィルタの設計方法。 - 上記第1のステップは、上記標準関数を入力する第5のステップと、
上記標準関数を基にして、周波数振幅特性上で所望量だけ周波数軸方向にシフトされた位置にて上記最大振幅値と上記最小振幅値との間を繋ぐ有限長の補間関数を求める第6のステップと、
上記第6のステップで求められた補間関数の周波数特性を左右対称型に変換する第7のステップとを有することを特徴とする請求の範囲第1項に記載のデジタルフィルタの設計方法。 - 上記第6のステップは、上記設計すべきフィルタの仕様によって特定される周波数特性における遷移域の、上記標準関数によって特定される周波数特性における遷移域に対する比率を求める第8のステップと、
上記第8のステップで求められた遷移域比率を用いて、上記設計すべきフィルタの仕様によって特定される周波数特性における遷移域の開始点および終了点の位置を求める第9のステップと、
上記第8のステップで求められた遷移域比率と、上記第9のステップで求められた上記遷移域の開始点および終了点の位置とを用いて、上記有限長の補間関数を求める第10のステップとを有することを特徴とする請求の範囲第5項に記載のデジタルフィルタの設計方法。 - 複数の遅延器から成るタップ付き遅延線における各タップのデータに対して各フィルタ係数をそれぞれ乗算した後、それらの乗算結果を加算して出力するタイプのデジタルフィルタの設計装置であって、
標準関数を入力する入力手段と、
設計すべきフィルタの仕様に基づいて、周波数振幅特性の最大振幅値と最小振幅値との間を繋ぐ有限長の補間関数を上記標準関数から計算し、上記補間関数を用いて、上記設計すべきフィルタの仕様に対応する周波数特性を表す数値列を定める第1の演算、当該定めた数値列を逆フーリエ変換してその結果の実数項を抽出する第2の演算、当該抽出した実数項から成る数値列に対して、その前半部と後半部とを並べ替える処理を必要に応じて行う第3の演算、上記実数項から成る数値列の所定ビットのデータに対して下位数ビットを丸める丸め処理を行うことによってビット数を減らす第4の演算を行う演算手段とを備え、
上記第4の演算で得られた数値列を上記フィルタ係数として決定するようにしたことを特徴とするデジタルフィルタの設計装置。 - 上記第1の演算は、上記標準関数によって特定される周波数特性における遷移域の全領域に対する比率である遷移域比率を求める演算と、
上記設計すべきフィルタの仕様に基づく遷移域幅と上記遷移域比率とから上記補間関数の補間関数長を求める演算と、
上記補間関数長を用いて有限長の上記補間関数を求める演算と、
上記補間関数の周波数特性を所望量だけ周波数軸方向にシフトさせ、上記最大振幅値と上記最小振幅値とを当該シフトした補間関数で繋ぐ演算と、
上記シフトされた補間関数の周波数特性を左右対称型に変換する演算とを含むことを特徴とする請求の範囲第7項に記載のデジタルフィルタの設計装置。 - 上記第1の演算は、上記設計すべきフィルタの仕様によって特定される周波数特性における遷移域の、上記標準関数によって特定される周波数特性における遷移域に対する比率である遷移域比率を求める演算と、
上記遷移域比率を用いて、上記設計すべきフィルタの仕様によって特定される周波数特性における遷移域の開始点および終了点の位置を求める演算と、
上記遷移域比率と、上記遷移域の開始点および終了点の位置とを用いて、上記最大振幅値と上記最小振幅値とを繋ぐ有限長の補間関数を求める演算と、
上記補間関数の周波数特性を左右対称型に変換する演算とを含むことを特徴とする請求の範囲第7項に記載のデジタルフィルタの設計装置。 - 請求の範囲第1項〜第6項の何れか1項に記載されたデジタルフィルタの設計方法に関する処理手順をコンピュータに実行させるためのコンピュータ読み取り可能なデジタルフィルタ設計用プログラム。
- 請求の範囲第7項〜第9項の何れか1項に記載の各手段としてコンピュータを機能させるためのコンピュータ読み取り可能なデジタルフィルタ設計用プログラム。
- 請求の範囲第1項〜第6項の何れか1項に記載の設計方法、あるいは、請求の範囲第7項〜第9項の何れか1項に記載の設計装置を用いて算出された数値列をフィルタ係数として持つFIR型のデジタルフィルタ。
- 設計すべきFIRデジタルフィルタの仕様に対応する周波数特性を表す数値列の生成方法であって、
標準関数を入力する第1のステップと、
上記設計すべきFIRデジタルフィルタの仕様に基づいて、周波数振幅特性の最大振幅値と最小振幅値との間を繋ぐ有限長の補間関数を上記標準関数から求める第2のステップと、
上記第2のステップで求められた上記補間関数の周波数特性を所望量だけ周波数軸方向にシフトさせ、上記最大振幅値と上記最小振幅値とを当該シフトした補間関数で繋ぐことによって、上記設計すべきFIRデジタルフィルタの仕様に対応する周波数特性の数値列を求める第3のステップとを有することを特徴とする所望周波数特性の数値列の生成方法。 - 上記標準関数は、そのインパルス応答が、一定の領域内でのみゼロ以外の有限な値を有し、それ以外の領域では値が全てゼロとなるような関数であることを特徴とする請求の範囲第13項に記載の所望周波数特性の数値列の生成方法。
- 上記第2のステップは、上記標準関数によって特定される周波数特性における遷移域の全領域に対する比率を求める第4のステップと、
上記第4のステップで求められた遷移域比率と、上記設計すべきFIRデジタルフィルタの仕様に基づく遷移域幅とから、上記補間関数の補間関数長を求める第5のステップと、
上記第5のステップで求められた補間関数長を用いて有限長の上記補間関数を求める第6のステップとを有することを特徴とする請求の範囲第13項に記載の所望周波数特性の数値列の生成方法。 - 設計すべきFIRデジタルフィルタの仕様に対応する周波数特性を表す数値列の生成方法であって、
標準関数を入力する第1のステップと、
上記設計すべきFIRデジタルフィルタの仕様に基づいて、周波数振幅特性上で所望量だけ周波数軸方向にシフトされた位置にて上記周波数振幅特性の最大振幅値と最小振幅値との間を繋ぐ有限長の補間関数を上記標準関数から求める第2のステップとを有することを特徴とする所望周波数特性の数値列の生成方法。 - 上記標準関数は、そのインパルス応答が、一定の領域内でのみゼロ以外の有限な値を有し、それ以外の領域では値が全てゼロとなるような関数であることを特徴とする請求の範囲第16項に記載の所望周波数特性の数値列の生成方法。
- 上記第2のステップは、上記設計すべきフィルタの仕様によって特定される周波数特性における遷移域の、上記標準関数によって特定される周波数特性における遷移域に対する比率である遷移域比率を求める第3のステップと、
上記第3のステップで求められた遷移域比率を用いて、上記設計すべきフィルタの仕様によって特定される周波数特性における遷移域の開始点および終了点の位置を求める第4のステップと、
上記第3のステップで求められた遷移域比率と、上記第4のステップで求められた上記遷移域の開始点および終了点の位置とを用いて、上記有限長の補間関数を求める第5のステップとを有することを特徴とする請求の範囲第13項に記載の所望周波数特性の数値列の生成方法。 - 設計すべきFIRデジタルフィルタの仕様に対応する周波数特性を表す数値列の生成装置であって、
標準関数を入力する入力手段と、
上記設計すべきFIRデジタルフィルタの仕様に基づいて、周波数振幅特性の最大振幅値と最小振幅値との間を繋ぐ有限長の補間関数を上記標準関数から求める第1の演算、上記第1の演算で求められた上記補間関数の周波数特性を所望量だけ周波数軸方向にシフトさせ、上記最大振幅値と上記最小振幅値とを当該シフトした補間関数で繋ぐことによって、上記設計すべきFIRデジタルフィルタの仕様に対応する周波数特性の数値列を求める第2の演算を行う演算手段とを備えたことを特徴とする所望周波数特性の数値列の生成装置。 - 上記第1の演算は、上記標準関数によって特定される周波数特性における遷移域の全領域に対する比率である遷移域比率を求める演算と、
上記遷移域比率と、上記設計すべきFIRデジタルフィルタの仕様に基づく遷移域幅とから、上記補間関数の補間関数長を求める演算と、
上記補間関数長を用いて有限長の上記補間関数を求める演算とを含むことを特徴とする請求項13に記載の所望周波数特性の数値列の生成装置。 - 設計すべきFIRデジタルフィルタの仕様に対応する周波数特性を表す数値列の生成装置であって、
標準関数を入力する入力手段と、
上記設計すべきFIRデジタルフィルタの仕様に基づいて、周波数振幅特性上で所望量だけ周波数軸方向にシフトされた位置にて上記周波数振幅特性の最大振幅値と最小振幅値との間を繋ぐ有限長の補間関数を上記標準関数から求め、上記設計すべきFIRデジタルフィルタの仕様に対応する周波数特性の数値列を上記補間関数から求める演算を行う演算手段とを備えたことを特徴とする所望周波数特性の数値列の生成装置。 - 上記演算手段は、上記設計すべきフィルタの仕様によって特定される周波数特性における遷移域の、上記標準関数によって特定される周波数特性における遷移域に対する比率である遷移域比率を求める演算と、
上記遷移域比率を用いて、上記設計すべきフィルタの仕様によって特定される周波数特性における遷移域の開始点および終了点の位置を求める演算と、
上記遷移域比率と、上記遷移域の開始点および終了点の位置とを用いて、上記有限長の補間関数を求める演算とを行うことを特徴とする請求の範囲第21項に記載の所望周波数特性の数値列の生成装置。 - 請求の範囲第13項〜第18項の何れか1項に記載された所望周波数特性の数値列の生成方法に関する処理手順をコンピュータに実行させるためのコンピュータ読み取り可能な所望周波数特性の数値列生成用プログラム。
- 請求の範囲第19項〜第22項の何れか1項に記載の各手段としてコンピュータを機能させるためのコンピュータ読み取り可能な所望周波数特性の数値列生成用プログラム。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004123245 | 2004-04-19 | ||
JP2004123245 | 2004-04-19 | ||
PCT/JP2004/017667 WO2005104365A1 (ja) | 2004-04-19 | 2004-11-22 | デジタルフィルタの設計方法および設計装置、デジタルフィルタ設計用プログラム、デジタルフィルタ、所望周波数特性の数値列の生成方法および生成装置、所望周波数特性の数値列生成用プログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JPWO2005104365A1 true JPWO2005104365A1 (ja) | 2008-03-13 |
Family
ID=35197326
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006512475A Withdrawn JPWO2005104365A1 (ja) | 2004-04-19 | 2004-11-22 | デジタルフィルタの設計方法および設計装置、デジタルフィルタ設計用プログラム、デジタルフィルタ、所望周波数特性の数値列の生成方法および生成装置、所望周波数特性の数値列生成用プログラム |
Country Status (6)
Country | Link |
---|---|
US (1) | US20070067377A1 (ja) |
JP (1) | JPWO2005104365A1 (ja) |
CN (1) | CN1969456A (ja) |
GB (1) | GB2430567A (ja) |
TW (1) | TW200536254A (ja) |
WO (1) | WO2005104365A1 (ja) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5446143B2 (ja) * | 2008-06-24 | 2014-03-19 | 日本精工株式会社 | 外乱抑制装置、外乱抑制装置制御方法、外乱抑制型制御装置及び回転型ダイレクト・ドライブ・モータ |
GB2472082B (en) * | 2009-07-23 | 2015-05-27 | Coreoptics Inc | Clock recovery for optical transmission systems |
CN102025343B (zh) * | 2009-09-11 | 2012-12-19 | 联芯科技有限公司 | 滤波方法及装置 |
CN105956338B (zh) * | 2016-06-13 | 2017-04-19 | 西安电子科技大学 | 二维对角方向滤波器的设计方法 |
JP6935370B2 (ja) * | 2018-07-24 | 2021-09-15 | アンリツ株式会社 | 信号発生装置および該装置を用いた周波数特性表示方法 |
CN110768733B (zh) * | 2019-11-26 | 2021-12-14 | 武汉虹信科技发展有限责任公司 | 集成滤波器的大规模阵列天线的测试方法及装置 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0715264A (ja) * | 1993-06-21 | 1995-01-17 | Toa Corp | 信号処理装置 |
JP3309349B2 (ja) * | 1993-07-12 | 2002-07-29 | ティーオーエー株式会社 | イコライザ及び音場補正装置 |
JPH1083191A (ja) * | 1996-09-06 | 1998-03-31 | Toa Corp | 信号処理装置 |
JP3181879B2 (ja) * | 1998-07-22 | 2001-07-03 | シャープ株式会社 | 送信装置 |
JP2003168958A (ja) * | 2001-11-29 | 2003-06-13 | Sakai Yasue | デジタルフィルタの設計方法および設計装置、デジタルフィルタ設計用プログラム、デジタルフィルタ |
US6701335B2 (en) * | 2002-02-27 | 2004-03-02 | Lecroy Corporation | Digital frequency response compensator and arbitrary response generator system |
US7400676B2 (en) * | 2002-05-09 | 2008-07-15 | Neuro Solution Corp. | Tone quality adjustment device designing method and designing device, tone quality adjustment device designing program, and tone quality adjustment device |
US7529788B2 (en) * | 2002-10-21 | 2009-05-05 | Neuro Solution Corp. | Digital filter design method and device, digital filter design program, and digital filter |
TW200501565A (en) * | 2003-05-15 | 2005-01-01 | Neuro Solution Corp | Digital filter and design method, design apparatus, and digital filter design program thereof |
US8301676B2 (en) * | 2007-08-23 | 2012-10-30 | Fisher-Rosemount Systems, Inc. | Field device with capability of calculating digital filter coefficients |
-
2004
- 2004-11-22 WO PCT/JP2004/017667 patent/WO2005104365A1/ja active Application Filing
- 2004-11-22 CN CNA200480043345XA patent/CN1969456A/zh active Pending
- 2004-11-22 GB GB0620502A patent/GB2430567A/en not_active Withdrawn
- 2004-11-22 JP JP2006512475A patent/JPWO2005104365A1/ja not_active Withdrawn
- 2004-12-01 TW TW093137043A patent/TW200536254A/zh unknown
-
2006
- 2006-10-17 US US11/550,345 patent/US20070067377A1/en not_active Abandoned
Also Published As
Publication number | Publication date |
---|---|
TW200536254A (en) | 2005-11-01 |
GB2430567A (en) | 2007-03-28 |
GB0620502D0 (en) | 2006-12-06 |
US20070067377A1 (en) | 2007-03-22 |
CN1969456A (zh) | 2007-05-23 |
WO2005104365A1 (ja) | 2005-11-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7529788B2 (en) | Digital filter design method and device, digital filter design program, and digital filter | |
JPWO2006048958A1 (ja) | デジタルフィルタおよびその設計方法、設計装置、デジタルフィルタ設計用プログラム | |
US20070053420A1 (en) | Method, apparatus, and program for designing digital filters | |
Thyagarajan | Introduction to digital signal processing using MATLAB with application to digital communications | |
US20070067377A1 (en) | Methods, devices, and programs for designing a digital filter and for generating a numerical sequence of desired frequency characteristics | |
JP2008021119A (ja) | デジタルフィルタおよびこれを用いた画像処理装置 | |
US20050289206A1 (en) | Digital filter design method and device, digital filter design program, digital filter | |
Eddla et al. | Low area and power-efficient FPGA implementation of improved AM-CSA-IIR filter design for the DSP application | |
JPWO2004036747A1 (ja) | デジタルフィルタの設計方法および装置、デジタルフィルタ設計用プログラム、デジタルフィルタ | |
US7590675B2 (en) | Digital filter, design method thereof, design device, and digital filter design program | |
JP2010041311A (ja) | フィルタ、フィルタの構成システム及び構成方法 | |
JP2003168958A (ja) | デジタルフィルタの設計方法および設計装置、デジタルフィルタ設計用プログラム、デジタルフィルタ | |
JPWO2004008637A1 (ja) | デジタルフィルタの設計方法、デジタルフィルタ設計用プログラム、デジタルフィルタ | |
US7400676B2 (en) | Tone quality adjustment device designing method and designing device, tone quality adjustment device designing program, and tone quality adjustment device | |
JPWO2004036746A1 (ja) | デジタルフィルタの設計方法および装置、デジタルフィルタ設計用プログラム、デジタルフィルタ | |
JPWO2005057784A1 (ja) | デジタルフィルタの設計方法および設計装置 | |
JPWO2007102611A1 (ja) | 補間関数生成回路 | |
US20050171988A1 (en) | Digital filter design method and device, digital filter design program, and digital filter | |
US20050120067A1 (en) | Digital filter designing method, digital filter designing program, digital filter | |
JP4989575B2 (ja) | フィルタ及びフィルタの構成方法 | |
Ahmed et al. | FPGA based implementation of a multiplier-less fir filter for ECG signal processing | |
JP2019016002A (ja) | データ補間装置、およびデータ補間方法 | |
Yadav et al. | Design of Modified RNS-PPA Based FIR Filter for High-Speed Application | |
JPWO2003096534A1 (ja) | 音質調整装置の設計方法および設計装置、音質調整装置設計用プログラム、音質調整装置 | |
JP2002290209A (ja) | デシメーションフィルタ |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20071018 |
|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A711 Effective date: 20090319 |
|
A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20100121 |