(57)【特許請求の範囲】
【請求項１】
周波数軸上の周波数応答係数を格納した周波数応答係数記憶手段と、
前記周波数応答係数記憶手段から読み出された周波数軸上の周波数応答係数に基づく、周波数軸上のスペクトルパワーの絶対値と、前記周波数軸上において、位相を特定するための所定の位相関数の関数値とに基づいて、周波数軸上のスペクトルパワーの実数部および虚数部を算出する個別位相情報生成手段と、
前記周波数軸上のスペクトルパワーの実数部および虚数部をフーリエ逆変換して得た時間軸上の係数を参照して、ＦＩＲフィルタ係数の先頭とすべき時間軸上の所定の先頭位置を特定する全体位相情報生成手段と、
前記時間軸上の所定の先頭位置に基づいて、前記係数を再配置して、再配置された係数をＦＩＲフィルタ係数として、ＦＩＲフィルタ係数記憶手段に格納する係数再配置手段と、を備えたことを特徴とするＦＩＲフィルタ係数算出装置。
【請求項２】
前記周波数軸上のレベルとしてユーザにより入力されたユーザ入力係数を受け入れ、前記ユーザ入力係数を、前記音響信号データのサンプリング周波数の１／２の周波数を対称軸として折り返すことで、周波数軸上の周波数応答係数を生成する周波数応答係数生成手段を有することを特徴とする請求項１に記載のＦＩＲフィルタ係数算出装置。
【請求項３】
前記個別位相情報生成手段が、前記周波数軸上の位置ｊについて、
実数部ｒｅ［ｊ］＝Ｐｏｗｅｒ［ｊ］×ｃｏｓ（［Ｔｈｅｔａ（ｊ）］）
虚数部ｉｍ［ｊ］＝Ｐｏｗｅｒ［ｊ］×ｓｉｎ（［Ｔｈｅｔａ（ｊ）］）
ただし、Ｐｏｗｅｒ［ｊ］は位置ｊにおけるスペクトルパワーの絶対値、Ｔｈｅｔａ（ｊ）は、位置ｊにおける位相関数Ｔｈｅｔａの関数値
を算出することを特徴とする請求項１または２に記載のＦＩＲフィルタ係数算出装置。
【請求項４】
前記個別位相情報生成手段が、前記所定の位相関数として、値として極大、極小をもたない一様な関数を用いることを特徴とする請求項１ないし３の何れか一項に記載のＦＩＲフィルタ係数算出装置。
【請求項５】
前記全体位相情報生成手段が、時間軸上の所定の位置から右側に位置する係数の積分値と、当該所定の位置から左側に位置する係数の積分値との差分値が最大となるような前記所定の位置を、前記時間軸上の先頭位置と決定することを特徴とする請求項１ないし４の何れか一項に記載のＦＩＲフィルタ係数算出装置。
【請求項６】
前記全体位相情報生成手段が、当該係数がピークとなる時間軸上の位置を見出し、前記所定の位置が、前記ピークとなる時間軸上の位置から所定の範囲内である場合に、前記時間軸上の先頭位置と決定することを特徴とする請求項５に記載のＦＩＲフィルタ係数算出装置。
【請求項７】
前記係数再配置手段が、もとの時間軸上の末尾位置の後ろに、もとの時間軸上の「０」以降が引き続くように、前記係数を再配置することを特徴とする請求項１ないし６の何れか一項に記載のＦＩＲフィルタ係数算出装置。
【請求項８】
請求項１ないし７に記載のＦＩＲフィルタ係数算出装置と、
時間軸上の一連の音響信号データを格納した音響信号記憶手段と、
前記音響信号記憶手段から前記音響信号データを読み出し、かつ、前記ＦＩＲ係数算出装置により算出されたＦＩＲフィルタ係数を格納した前記ＦＩＲフィルタ係数記憶手段から、前記ＦＩＲフィルタ係数を読み出して、前記前記音響信号データと対応する前記ＦＩＲフィルタ係数とを乗算し、当該乗算結果を累算して、累算結果を出力する積和演算手段と、を備えたことを特徴とするＦＩＲフィルタ装置。
【請求項９】
周波数軸上の周波数応答係数を格納した周波数応答係数記憶装置を備えたコンピュータに、
前記周波数応答係数記憶装置から読み出された周波数軸上の周波数応答係数に基づく、周波数軸上のスペクトルパワーの絶対値と、前記周波数軸上において、位相を特定するための所定の位相関数の関数値とに基づいて、周波数軸上のスペクトルパワーの実数部および虚数部を算出する個別位相情報生成ステップと、
前記周波数軸上のスペクトルパワーの実数部および虚数部をフーリエ逆変換して得た時間軸上の係数を参照して、ＦＩＲフィルタ係数の先頭とすべき時間軸上の所定の先頭位置を特定する全体位相情報生成ステップと、
前記時間軸上の所定の先頭位置に基づいて、前記係数を再配置して、再配置された係数をＦＩＲフィルタ係数として、前記コンピュータに備えられたＦＩＲフィルタ係数記憶装置に格納する係数再配置ステップと、を実行させることを特徴とするＦＩＲフィルタ係数算出プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＦＩＲ（有限インパルス応答）フィルタのインパルス応答係数を算出する装置、当該ＦＩＲフィルタ係数算出装置により算出されたインパルス応答係数と入力信号との積和演算を行なうＦＩＲフィルタ、および、ＦＩＲフィルタ係数算出プログラムに関する。
【背景技術】
【０００２】
電子楽器やオーディオ機器からの楽音信号に共鳴音を付加する種々の装置が知られている。ここに、共鳴音には、ホールなど楽音が発生される場所における残響音や、楽器自体の共鳴音などが含まれる。
【０００３】
共鳴音を発生するためには、共鳴音付加装置は、ディジタルの楽音信号データを受け入れて、楽音信号データにディジタルフィルタによるフィルタ処理を施すのが一般的である。フィルタ処理においては、ＦＩＲ（有限インパルス応答：Finite Impulse Response）フィルタ或いはＩＩＲ（無限インパルス応答：Infinite Impulse
Response）フィルタが利用される。
【０００４】
ＦＩＲフィルタを利用する場合には、入力された楽音信号データｘ（ｎ−ｊ）と、音楽ホールの残響特性などから得たインパルス応答ｈｎ（ｊ）を畳み込み演算することで、共鳴音ｙ（ｎ）＝Σｘ（ｎ−ｊ）×ｈｎ（ｊ）のデータを得ることができる。しかしながら、ＦＩＲフィルタにおいては、インパルス応答データの数、つまり、フィルタの次数を高くすることにしたがって、より理想的なフィルタ特性に近づけることができる。その一方、フィルタの次数を上げるにしたがって、演算量も多量となるという問題点がある。
【特許文献１】特開２０００−１６３０８６号公報
【特許文献２】特開２００６−１０１４６１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
たとえば、特許文献１には、ＦＩＲフィルタにおいて少ないパラメータで多数の反射音を生成するための技術が開示されている。特許文献１においては、ＦＩＲフィルタを縦列に接続して、前段のＦＩＲフィルタには、比較的まばら、つまり、時間的に間隔をおいて、かつ、長時間にわたるようなパラメータ（フィルタ係数）が用いられる。その一方、後段のＦＩＲフィルタには、密になるように、狭い時間間隔となるようなパラメータ（フィルタ係数）が用いられる。また、特許文献２においても、同様に、特性の異なる２つのＦＩＲフィルタを設け、前段のＦＩＲフィルタの出力を、後段のＦＩＲフィルタに入力させることが開示されている。上述したようにＦＩＲフィルタを直列に接続させることで、より多くの反射音など共鳴音を得るようにしている。
【０００６】
その一方、ユーザが所望の周波数特性を設定して、それに応じたＦＩＲフィルタ係数を算出する技術も提案されている。このようなＦＩＲフィルタ係数の算出に際しては、より多くの反射音を得ることも重要であるが、特に、ＳＮ比や応答性能が良好であることが望まれる。
【０００７】
本発明は、設定された周波数特性に基づいてＳＮ比および応答特性が良好なＦＩＲフィルタ係数を算出するＦＩＲフィルタ係数算出装置、ＦＩＲフィルタ装置、および、ＦＩＲフィルタ係数算出プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の目的は、周波数軸上の周波数応答係数を格納した周波数応答係数記憶手段と、
前記周波数応答係数記憶手段から読み出された周波数軸上の周波数応答係数に基づく、周波数軸上のスペクトルパワーの絶対値と、前記周波数軸上において、位相を特定するための所定の位相関数の関数値とに基づいて、周波数軸上のスペクトルパワーの実数部および虚数部を算出する個別位相情報生成手段と、
前記周波数軸上のスペクトルパワーの実数部および虚数部をフーリエ逆変換して得た時間軸上の係数を参照して、ＦＩＲフィルタ係数の先頭とすべき時間軸上の所定の先頭位置を特定する全体位相情報生成手段と、
前記時間軸上の所定の先頭位置に基づいて、前記係数を再配置して、再配置された係数をＦＩＲフィルタ係数として、ＦＩＲフィルタ係数記憶手段に格納する係数再配置手段と、を備えたことを特徴とするＦＩＲフィルタ係数算出装置により達成される。
【０００９】
好ましい実施態様においては、前記周波数軸上のレベルとしてユーザにより入力されたユーザ入力係数を受け入れ、前記ユーザ入力係数を、前記音響信号データのサンプリング周波数の１／２の周波数を対称軸として折り返すことで、周波数軸上の周波数応答係数を生成する周波数応答係数生成手段を有する。
【００１０】
また、別の好ましい実施態様においては、前記個別位相情報生成手段が、前記周波数軸上の位置ｊについて、
実数部ｒｅ［ｊ］＝Ｐｏｗｅｒ［ｊ］×ｃｏｓ（［Ｔｈｅｔａ（ｊ）］）
虚数部ｉｍ［ｊ］＝Ｐｏｗｅｒ［ｊ］×ｓｉｎ（［Ｔｈｅｔａ（ｊ）］）
ただし、Ｐｏｗｅｒ［ｊ］は位置ｊにおけるスペクトルパワーの絶対値、Ｔｈｅｔａ（ｊ）は、位置ｊにおける位相関数Ｔｈｅｔａの関数値
を算出する。
【００１１】
また、好ましい実施態様においては、前記個別位相情報生成手段が、前記所定の位相関数として、値として極大、極小をもたない一様な関数を用いる。
【００１２】
別の好ましい実施態様においては、前記全体位相情報生成手段が、時間軸上の所定の位置から右側に位置する係数の積分値と、当該所定の位置から左側に位置する係数の積分値との差分値が最大となるような前記所定の位置を、前記時間軸上の先頭位置と決定する。
【００１３】
より好ましい実施態様においては、前記全体位相情報生成手段が、当該係数がピークとなる時間軸上の位置を見出し、前記所定の位置が、前記ピークとなる時間軸上の位置から所定の範囲内である場合に、前記時間軸上の先頭位置と決定する。
【００１４】
好ましい実施態様においては、前記係数再配置手段が、もとの時間軸上の末尾位置の後ろに、もとの時間軸上の０以降が引き続くように、前記係数を再配置する。
【００１５】
また、本発明の目的は、上述したＦＩＲフィルタ係数算出装置と、
時間軸上の一連の音響信号データを格納した音響信号記憶手段と、
前記音響信号記憶手段から前記音響信号データを読み出し、かつ、前記ＦＩＲ係数算出装置により算出されたＦＩＲフィルタ係数を格納した前記ＦＩＲフィルタ係数記憶手段から、前記ＦＩＲフィルタ係数を読み出して、前記前記音響信号データと対応する前記ＦＩＲフィルタ係数とを乗算し、当該乗算結果を累算して、累算結果を出力する積和演算手段と、を備えたことを特徴とするＦＩＲフィルタ装置により達成される。
【００１６】
さらに、本発明の目的は、周波数軸上の周波数応答係数を格納した周波数応答係数記憶装置を備えたコンピュータに、
前記周波数応答係数記憶装置から読み出された周波数軸上の周波数応答係数に基づく、周波数軸上のスペクトルパワーの絶対値と、前記周波数軸上において、位相を特定するための所定の位相関数の関数値とに基づいて、周波数軸上のスペクトルパワーの実数部および虚数部を算出する個別位相情報生成ステップと、
前記周波数軸上のスペクトルパワーの実数部および虚数部をフーリエ逆変換して得た時間軸上の係数を参照して、ＦＩＲフィルタ係数の先頭とすべき時間軸上の所定の先頭位置を特定する全体位相情報生成ステップと、
前記時間軸上の所定の先頭位置に基づいて、前記係数を再配置して、再配置された係数をＦＩＲフィルタ係数として、前記コンピュータに備えられたＦＩＲフィルタ係数記憶装置に格納する係数再配置ステップと、を実行させることを特徴とするＦＩＲフィルタ係数算出プログラムにより達成される。
【発明の効果】
【００１７】
本発明によれば、設定された周波数特性に基づいてＳＮ比および応答特性が良好なＦＩＲフィルタ係数を算出するＦＩＲフィルタ係数算出装置、ＦＩＲフィルタ装置、および、ＦＩＲフィルタ係数算出プログラムを提供することが可能となる。
【発明を実施するための最良の形態】
【００１８】
以下、添付図面を参照して、本発明の実施の形態について説明する。図１は、本発明の実施の形態にかかるＦＩＲフィルタ係数算出部を含む楽音発生装置の構成を示すブロックダイヤグラムである。図１に示すように、楽音発生装置は、ＣＰＵ１１、入力装置１２、表示装置１３、ＲＯＭ１４、ＲＡＭ１５、サウンドシステム１６を備える。サウンドシステム１６は、楽音発生回路１７、共鳴音付加回路１８、増幅器（図示せず）、スピーカ（図示せず）などを含み、ＣＰＵ１１からの指示にしたがって、所定の楽音信号データを生成し、かつ、楽音信号データに基づいて、その共鳴音を再現した共鳴音データを生成し、生成された共鳴音データと楽音信号データとが合成された合成データに基づく音響信号を出力する。
【００１９】
図１に示すように、楽音発生装置は、通常のパーソナルコンピュータによって実現され得る。或いは、鍵盤（図示せず）を有する鍵盤楽器の形態を取っていても良い。ＣＰＵ１１は、システム制御、ＦＩＲフィルタ係数の算出、表示装置１３の画面上に表示すべき画像データの生成などの処理を実行する。入力装置１２は、たとえば、キーボードやマウスを有し、操作者が所望の指示を入力することができるようになっている。表示装置１３の画面上には、操作者が入力した指示や処理結果が表示可能である。
【００２０】
ＲＯＭ１４は、ＦＩＲフィルタ係数を算出するためのプログラム、楽音信号データを生成するためのプログラム、プログラムの実行の際に使用される定数、楽音信号データを生成するための各種音色の波形データなどを記憶する。ＲＡＭ１５は、プログラムの実行の過程で必要な変数、パラメータ、入力データ、出力データなどを一時的に記憶する。楽音発生回路１７は、鍵盤の押鍵や自動演奏データにおけるある音高の楽音のオン（ノートオン）に応じて、所定の音高の楽音信号データを出力する。共鳴音付加回路１８は、楽音信号データを受け入れて、楽音信号データにＦＩＲフィルタ処理を施す。
【００２１】
図２は、本実施の形態にかかるＦＩＲフィルタ係数算出部の構成を示すブロックダイヤグラムである。図２に示すように、ＦＩＲフィルタ係数算出部２０は、周波数応答係数編集部２１、個別位相情報生成部２２、全体位相情報生成部２３、画像生成部２４、および、係数順序変更部２５を有する。これらにおいて実行される詳細な処理については後述する。
【００２２】
周波数応答係数編集部２１は、入力部１２から、ユーザの操作により入力されたパラメータを受け入れ、ＦＩＲフィルタ係数を算出するためのもととなるユーザ設定係数を、ユーザ設定係数メモリ３０に格納する。ユーザ設定係数は、周波数特性を表す周波数軸上の係数（周波数応答係数）である。
【００２３】
また、個別位相情報生成部２２、全体位相情報生成部２３および係数順序変更部２５は、ユーザ設定係数などに基づいて、ＦＩＲフィルタ係数を算出して、算出されたＦＩＲフィルタ係数をＦＩＲフィルタ係数メモリ３１に格納する。また、画像生成部２４は、処理の過程或いは処理結果に関する画像データを生成して、表示部１３の画面上に表示する。
【００２４】
図２において、周波数応答係数編集部２１、個別位相情報生成部２２、全体位相情報生成部２３、画像生成部２４および係数順序生成部２５の機能は、主として図１に示すＣＰＵ１１により実現される。また、ユーザ設定係数メモリ３０およびＦＩＲフィルタ係数メモリ３１は、ＲＡＭ１５中に設けられる。なお、ユーザ設定係数メモリ３０には、上記ユーザ入力に基づく係数のほか、個別位相情報生成部２２、全体位相情報生成部２３および係数順序変更部２５による処理の過程で算出された係数やパラメータが一時的に記憶される。
【００２５】
図３は、本実施の形態にかかる共鳴音付加回路１８の構成を示すブロックダイヤグラムである。図３に示すように、共鳴音付加回路１８は、楽音信号データバッファ３２、応答係数バッファ３３、積和演算回路３４、共鳴音データバッファ３５および加算回路３６を有する。
【００２６】
楽音信号データバッファ３２は、楽音発生回路から出力された楽音信号データを一時的に記憶し、それぞれのデータを所定の時間だけ遅延させて、遅延させた楽音信号データＸ（ｊ）を積和演算回路３４に出力する。応答係数バッファ３３は、ＦＩＲフィルタ係数メモリ３１から出力されたＦＩＲフィルタ係数を一時的に記憶して、それぞれのデータを所定の時間だけ遅延させて、遅延させたＦＩＲフィルタ係数（インパルス応答係数）ａｊを積和演算回路３４に出力する。
【００２７】
積和演算回路３４は、楽音信号データＸ（ｊ）（たとえば、ｊ＝０、１、・・・、ｎ−１）と、対応するインパルス応答係数ａｊ（ｊ＝０、１、・・・、ｎ−１）とを乗算し、乗算結果を順次累算して、Σａｊ×Ｘ（ｊ）を求め、共鳴音データＹとして出力する。共鳴音データＹは、共鳴音データバッファ３５に一時的に記憶され、楽音発生回路１７から出力された楽音信号データと、共鳴音データバッファ３５から出力された共鳴音データとが加算回路３６により加算され、合成データが出力される。
【００２８】
次に、本実施の形態にかかるＣＰＵ１１（ＦＩＲフィルタ係数算出部２０）において実行されるＦＩＲフィルタ係数算出処理について説明する。図４は、本実施の形態にかかるＦＩＲフィルタ係数算出処理の例を示すフローチャートである。図４に示すように、ＦＩＲフィルタ係数算出部２０の周波数応答係数編集部２１は、処理に使用するパラメータ、ユーザ設定係数メモリ３０やＦＩＲフィルタ係数メモリ３１のデータなどを初期化する（ステップ４０１）。次いで、ユーザの操作により終了指示があったか否かを判断する（ステップ４０２）。
【００２９】
ステップ４０２でＮｏと判断された場合には、入力部２１から、ユーザ操作によりフィルタ係数の入力があったか否かを判断する（ステップ４０３）。ステップ４０３でＹｅｓと判断された場合には、周波数応答係数編集部２１は、データ入力処理を実行する（ステップ４０４）。データ入力処理においては、たとえば、周波数応答係数編集部２１が、画像生成部２４に指示を与え、図５に示すように、横軸を鍵域、縦軸をレベルとするようなグラフを生成させて、表示装置１３の画面上に表示し、ユーザが、入力装置１２のマウス、キーを操作して、グラフ上に所望の周波数特性を入力する。なお、縦軸のレベルは、後述するスペクトルパワー値の実数部に相当する。また、本実施の形態では、ユーザは可聴範囲において所望の周波数特性を入力すればよい。
【００３０】
図５では、表示装置１３の画面上に表示されたグラフ５００において、曲線５０１が入力されている。各鍵の鍵名は周波数と対応付けられるため、データ入力処理において、周波数応答係数編集部２１は、ユーザ入力された曲線に基づいて、周波数軸上の所定の位置（周波数）における周波数応答係数を得る。この周波数軸上の周波数応答係数は、ユーザ設定係数としてユーザ設定係数メモリ３０に格納される。なお、本実施の形態においては、ユーザが直感的に把握することを容易にするために、グラフにおいて横軸を鍵域としているため、対数軸となっている。
【００３１】
また、データ入力処理においては、後述するデータ出力処理において利用される位相を示す関数およびそのパラメータ値の入力が受理され、関数の情報およびパラメータ値がＲＡＭ１５に記憶される。
【００３２】
次いで、ＦＩＲフィルタ係数算出部２０は、データ出力処理を実行する必要があるか否かを判断する（ステップ４０５）。データ入力処理４０４で、新たにユーザ設定係数メモリ３０にユーザ設定係数が格納され、或いは、ユーザ設定係数メモリ３０に格納された情報が更新された場合には、ステップ４０５でＹｅｓと判断されて、データ出力処理が実行される。
【００３３】
図６は、本実施の形態にかかるデータ出力処理の例を示すフローチャートである。図６に示すように、ＦＩＲフィルタ係数算出部２０の個別位相情報生成部２２は、ユーザ設定係数メモリ３０に格納されたユーザ設定係数を読み出して、読み出したユーザ設定係数を指数変換する（ステップ６０１）。ここに指数変換は、ユーザによるユーザ設定係数の入力の際には、横軸が対数軸となっているため、これをもとに戻すために実行される。
【００３４】
次いで、個別位相情報生成部２２は、周波数軸上でＦＳ／２を中心（対称軸）として、ＦＳ／２より低い周波数側のユーザ設定係数を、ＦＳ／２より高い周波数側にコピーする（ステップ６０２）。
【００３５】
ユーザ設定係数を、ｒｅ［ｊ］とすると、コピーによるＦＳ／２より高い周波数側のフィルタ係数は以下のように表される。なお、ｒｅ［ｊ］は、スペクトルパワー値の実数部を表すが、ユーザ設定係数は、実数部のみを有する。
【００３６】
ｒｅ［Ｎ−１−ｊ］＝ｒｅ［ｊ］
ただし、ＮはＦＩＲフィルタのタップ数である。
【００３７】
図７に示すように、周波数軸上でＦＳ／２を対称軸として、その右側に、左側にあったユーザ設定係数を折り返した形状の周波数応答係数が配置される。たとえば、第ｑ番のフィルタ係数ｒｅ［ｑ］と、第（Ｎ−１−ｑ）番のフィルタ係数ｒｅ［Ｎ−１−ｑ］は一致する。また、図７において、タップ数の第（Ｎ−１）番が、周波数ＦＳに相当する。
【００３８】
次いで、個別位相情報生成部２２は、パラメータｊを「０」に初期化して（ステップ６０４）、ｊ≧Ｎ（ステップ６０４でＹｅｓ）になるまで、以下の処理を実行する。個別位相情報生成部２２は、各パラメータｊに関して、スペクトルパワー値を算出する（ステップ６０５）。スペクトルパワー値Ｐｏｗｅｒ［ｊ］は、以下のように算出される。
【００３９】
Ｐｏｗｅｒ［ｊ］＝ｒｅ［ｊ］
実際には、スペクトルパワー値は、ｉｍ［ｊ］は、スペクトルパワー値の虚数部も考慮して、Ｐｏｗｅｒ［ｊ］＝ｓｑｒｔ（ｒｅ［ｊ］２＋ｉｍ［ｊ］２）  （ｓｑｒｔは、カッコ内の値の平方根）となるが、ステップ６０５では、ｉｍ［ｊ］＝０であるため、実数部のみに基づく値となる。
【００４０】
次に、個別位相情報生成部２２は、位相Ｔｈｅｔａ［ｊ］を算出する（ステップ６０６）。本実施の形態においては、位相Ｔｈｅｔａ［ｊ］は、極大或いは極小をもたない一様な関数（一様に増大或いは減少する関数）である。たとえば、本実施の形態においては、以下の関数のうちいずれかが選択できるようになっている。
【００４１】
Ｔｈｅｔａ１［ｊ］＝ｐ１×ｊ２
Ｔｈｅｔａ２［ｊ］＝ｐ２×ｊ３
Ｔｈｅｔａ３［ｊ］＝ｐ３×ｊ４
Ｔｈｅｔａ４［ｊ］＝ｐ４×ｓｑｒｔ（ｊ）
Ｔｈｅｔａ５［ｊ］＝ｐ５×ｌｏｇ（ｊ＋１）
なお、データ入力処理において、関数Ｔｈｅｔａ１［ｊ］〜Ｔｈｅｔａ５［ｊ］のいずれかが選択される。ｐ１〜ｐ５は、ユーザが入力する正または負の係数であり、これもデータ入力処理において入力され、ＲＡＭ１５に記憶されている。
【００４２】
個別位相情報生成部２２は、ステップ６０６で算出された位相に基づいて、位相を考慮したスペクトルパワー値の実数部（ステップ６０７）およびスペクトルパワー値の虚数部（ステップ６０８）を算出する。スペクトルパワー値の実数部ｒｅ［ｊ］および虚数部ｉｍ［ｊ］は以下のように算出される。
【００４３】
ｒｅ［ｊ］＝Ｐｏｗｅｒ［ｊ］×ｃｏｓ（Ｔｈｅｔａ［ｊ］）
ｉｍ［ｊ］＝Ｐｏｗｅｒ［ｊ］×ｓｉｎ（Ｔｈｅｔａ［ｊ］）
その後、個別位相情報生成部２２は、パラメータｊをインクリメントして（ステップ６０９）、ステップ６０４に戻る。
【００４４】
ステップ６０４〜ステップ６０９によって、ユーザ設定係数に基づいて、位相を考慮したスペクトルパワー値を求めることが可能となる。
【００４５】
ステップ６０４でＹｅｓと判断されると、個別位相情報生成部２２は、得られたｒｅ［ｊ］およびｉｍ［ｊ］（ｊ＝０、１、・・・、（Ｎ−１））に逆ＦＦＴ（逆高速フーリエ変換）処理を施す（ステップ６１０）。これにより、ＦＩＲフィルタ係数を得ることができる。逆ＦＦＴにより、時間軸方向、つまり、時間領域にＮ個の実数を得ることができる。実際には、実数部ＲＥ［ｊ］および虚数部ＩＭ［ｊ］が得られるが、虚数部ＩＭ［ｊ］は「０」となるため、Ｎ個の実数値のみが得られることになる。これらがインパルス応答係数（ＦＩＲフィルタ係数）に相当する。逆ＦＦＴ処理により得られたＦＩＲフィルタ係数は、ユーザ設定係数メモリ３０に一時的に記憶される。
【００４６】
次いで、全体位相情報生成部２３が、全体位相情報生成処理を実行する（ステップ６１１）。図８および図９は、本実施の形態にかかる全体位相情報生成処理の例を示すフローチャートである。全体位相情報生成部２３は、ユーザ設定係数メモリ３０に一時的に記憶されたＦＩＲフィルタ係数を読み出して、その値を調べて、値がピークポイントとなる時間軸上の値ＰＰを特定する（ステップ８０１）。
【００４７】
図１０は、逆ＦＦＴにより得られたＦＩＲフィルタ係数の例を示す図である。ＦＩＲフィルタ係数は、符号１０００に示すようなグラフとなる。この正或いは負のピーク値をとるような時間軸上の値がＰＰとなる。
【００４８】
次いで、全体位相情報生成部２３は、パラメータｊおよびＭａｘを、ともに「０」に初期化して（ステップ８０２）、ｊ≧Ｎとなるまで（ステップ８０３でＹｅｓ）、ステップ８０４以降の処理を実行する。全体位相情報生成部２３は、（ＰＰ−ｊ＋Ｎ）のＮによる剰余（（ＰＰ−ｊ＋Ｎ）  ｍｏｄ  Ｎ）が、所定値Ｎ／４より小さいか否かを判断する（ステップ８０４）。ステップ８０４は、図１０において符号１００１で表す時間長が、所定値より小さいか否かを判断することを意味している。
【００４９】
本実施の形態においては、後述するように、位置ｊを中心として、右側に存在する一定の時間長ｗｉｄの区間（符号１００３参照）におけるＦＩＲフィルタ係数の積分値Ｒと、左側に存在する一定の時間長ｗｉｄの区間（符号１００２参照）におけるＦＩＲフィルタ係数の積分値Ｌとを算出している。位置ｊと、ピークポイントＰＰとの間隔が一定値より小さい場合のみ、積分値を有効としている。位置ｊとピークポイントＰＰとの間隔があまりに大きいことは、ＦＩＲフィルタの応答特性の劣化を招くため、上記間隔が所定の値より小さいことを条件としている。
【００５０】
ステップ８０４でＮｏと判断された場合には、全体位相情報生成部２３は、パラメータｊをインクリメントして（ステップ９０８）、ステップ８０３に戻る。その一方、ステップ８０４でＹｅｓと判断された場合には、図１０における、位置ｊより右側に存在する一定の時間長ｗｉｄの区間１００３におけるＦＩＲフィルタ係数の積分値Ｒが算出される（ステップ８０５〜８０８）。
【００５１】
より詳細には、全体位相情報生成部２３は、パラメータｋおよび積分値Ｒを「０」に初期化して（ステップ８０５）、ｋ≧ｗｉｄとなるまで（ステップ８０６でＹｅｓ）、ステップ８０７、８０８を繰り返す。ステップ８０７においては、全体位相情報生成部２３は、もとの積分値Ｒに、加算の対象となった位置（（ｋ＋ｊ）  ｍｏｄ  Ｎ）のＦＩＲフィルタ係数の絶対値｜ＲＥ［（ｋ＋ｊ）  ｍｏｄ  Ｎ］｜を加算して、これを新たな積分値Ｒとする（ステップ８０７）。次いで、全体位相情報生成部２３はパラメータｋをインクリメントする（ステップ８０８）。
【００５２】
ステップ８０６でＹｅｓと判断されると、図１０における、位置ｊより左側に存在する一定の時間長ｗｉｄの区間１００２におけるＦＩＲフィルタ係数の積分値Ｌが算出される（ステップ９０１〜９０４）。
【００５３】
より詳細には、全体位相情報生成部２３は、パラメータｋおよび積分値Ｌを「０」に初期化して（ステップ９０１）、ｋ≦−ｗｉｄとなるまで（ステップ９０２でＹｅｓ）、ステップ９０３、９０４を繰り返す。ステップ９０３においては、全体位相情報生成部２３は、もとの積分値Ｌに、加算の対象となった位置（（ｋ＋ｊ＋Ｎ）  ｍｏｄ  Ｎ）のＦＩＲフィルタ係数の絶対値｜ＲＥ［（ｋ＋ｊ＋Ｎ）  ｍｏｄ  Ｎ］｜を加算して、これを新たな積分値Ｌとする（ステップ９０３）。次いで、全体位相情報生成部２３はパラメータｋをディクリメントする（ステップ９０４）。
【００５４】
ステップ９０２でＹｅｓと判断されると、全体位相情報生成部２３は、右側の積分値Ｒと左側の積分値Ｌとの差異の最大値を算出する。より詳細には、全体位相情報生成部２３は、右側の積分値Ｒと左側の積分値Ｌとの差分値Ｄｅｖ（＝Ｒ−Ｌ）を算出する（ステップ９０５）。次いで、全体位相情報生成部２３は、算出された差分値Ｄｅｖが、それ以前の処理において得られていた差分値の最大値Ｍａｘ以上であるか否かを判断する（ステップ９０６）。
【００５５】
ステップ９０６でＹｅｓと判断された場合には、全体位相情報生成部２３は、位置ｊを、最大値を表す位置ＳＰとするとともに、差分値Ｄｅｖを最大値Ｍａｘとする（ステップ９０７）。位置ＳＰおよび最大値Ｍａｘは、ＲＡＭ１５に記憶される。
【００５６】
その後、全体位相情報生成部２３は、パラメータｊをインクリメントして（ステップ９０８）、左右の積分値を算出するための中心位置を移動させて、ステップ８０３に戻る。
【００５７】
全体位相情報生成処理（ステップ６１１）が終了すると、係数順序変更部２５は、ＦＩＲフィルタ係数メモリ３１に格納されたＦＩＲフィルタ係数を読み出して、その順序を、位置ＳＰにおける値ｒｅ［ＳＰ］が先頭となるように変更して、変更後のＦＩＲフィルタ係数を、ＦＩＲフィルタ係数メモリ３１に格納する（ステップ６１２）。図１１は、係数順序変更部２５による処理にしたがったＦＩＲフィルタ係数について説明する図である。
【００５８】
図１１に示すように、ＦＩＲフィルタ係数メモリ３１には、Ｎ個のＦＩＲフィルタ係数の列（符号１１００参照）が、ｒｅ［０］、ｒｅ［１］・・・、ｒｅ［ＳＰ］     、ｒｅ［ＳＰ＋１］、・・・、ｒｅ［Ｎ−２］、ｒｅ［Ｎ−１］の順で格納されている。係数順序変更部２５は、全体位相情報生成部２３による処理の結果、右側の積分値Ｒと左側の積分値Ｌとの差が最大となるような位置ＳＰにおけるＦＩＲフィルタ係数ｒｅ［ＳＰ］を先頭として、元のＦＩＲフィルタ係数の列の末尾であったｒｅ［Ｎ−１］まで続き、その後ろに、ｒｅ［０］、ｒｅ［１］、・・・、ｒｅ［ＳＰ−１］が配置されたような、変更後の新たなＦＩＲフィルタ係数の列（符号１１０１参照）を生成して、ＦＩＲフィルタ係数メモリ３１に格納する。
【００５９】
係数の順序を、左右の積分値の差分値が最大となるような位置が先頭となるように再配置することは以下のような理由による。基本的に、ＦＩＲフィルタ係数のピークが時間軸上で早く出現することは応答特性が良好であることを意味している。しかしながら、ピークの出現には、一定の過渡状態が存在する。つまり、ＦＩＲフィルタ係数のピークが、時間軸上の先頭に出現することは、逆に不自然な状態となる。そこで、本実施の形態においては、左右の積分値の差分値が最大となるような位置を見出して、そのような位置が先頭となるように、ＦＩＲフィルタ係数の右側を先頭として、左側をそれに引き続くように配置することで、過渡状態を考慮しつつ、ピークが時間軸上で早く出現するようなＦＩＲフィルタ係数を得ている。
【００６０】
ＦＩＲフィルタ係数メモリ３１に格納された新たなＦＩＲフィルタ係数の列が、共鳴音データの生成に利用されるＦＩＲフィルタ係数となる。したがって、図３に示す共鳴音付加回路１８は、ＦＩＲフィルタ係数メモリ３１中の、新たなＦＩＲフィルタ係数を、その順序にしたがって読み出して、応答係数バッファ３３に一時的に記憶して、積和演算回路３４における楽音信号データとの積和演算に利用する。
【００６１】
図１２〜図１４は、それぞれ、個別位相情報生成部２２による処理（図６のステップ６０１〜６０９）の結果の例を説明するグラフである。図１２（ａ）、図１３（ａ）および図１４（ａ）は、横軸が周波数軸、縦軸を位相としたグラフである。これらの図においては、図６のステップ６０６で算出された位相が示される。図１２の例では、位相関数Ｔｈｅｔａ（ｊ）＝２．２３ｅ１×ｓｑｒｔ（ｊ）＝２２．３×ｓｑｒｔ（ｊ）、図１３の例では、位相関数Ｔｈｅｔａ（ｊ）＝−１．６ｅ−１０×ｊ４＝−１．６×１０＾−１０×ｊ４、図１４の例では、位相関数Ｔｈｅｔａ（ｊ）＝−１．１４ｅ−７×ｊ３＝−１．１４×１０＾−７××ｊ３である。
【００６２】
図１２（ｂ）、図１３（ｂ）および図１４（ｃ）は、音名Ｃ−１〜Ａ９までのそれぞれに同じレベルのユーザ設定係数が与えられたことを示している。図において、縦線が各音名に与えられたユーザ設定係数のレベルを示している。
【００６３】
図１２（ｃ）、図１３（ｃ）において図１４（ｃ）は、それぞれ、個別位相情報生成部２２による処理（図６のステップ６０１〜６０９）が終了し、かつ、スペクトルパワー値の実数部および虚数部に逆ＦＦＴ処理が施されたときのＦＩＲフィルタ係数の例を示す。これらの図においては、横軸は時間軸、縦軸はＦＩＲフィルタ係数の係数値である。図１２（ｃ）、図１３（ｃ）および図１４（ｃ）においては、全体位相情報生成部２３および係数順序変更部２５による処理の前であり、ピークの出現する位置は、時間軸上でほぼ中央部となっている。
【００６４】
図１５は、個別位相情報処理部２２、全体位相情報生成部２３および係数順序変更部２５による処理結果の例を示すグラフである。図１５の例では、位相関数として、Ｔｈｅｔａ（ｊ）＝１．６５ｅ１×ｓｑｒｔ（ｊ）＝１６．５×ｓｑｒｔ（ｊ）を用いている。図１５（ｂ）は、図１２（ｂ）、図１３（ｂ）および図１４（ｃ）と同様に、音名Ｃ−１〜Ａ９までのそれぞれに同じレベルのユーザ設定係数が与えられたことを示している。図１５（ａ）は、横軸を周波数軸、縦軸をスペクトルパワーとしたグラフである。図１５（ｂ）に示すように同じレベルのユーザ設定係数が与えられているため、スペクトルパワーの値も一定である。図１５（ｃ）は、最終的に得られたＦＩＲフィルタ係数の例を示す。図１５（ｃ）において、横軸は時間軸、縦軸はＦＩＲフィルタ係数の係数値である。図１５（ｃ）を参照すると、ＦＩＲフィルタ係数が、一定の過渡状態を経てピークに至っていることが理解できる。
【００６５】
本実施の形態によれば、個別位相情報算出部２２が、周波数軸上の周波数応答係数に基づく、周波数軸上のスペクトルパワーの絶対値Ｐｏｗｅｒ［ｊ］と、周波数軸上において、位相を特定するための所定の位相関数の関数値Ｔｈｅｔａ［ｊ］とに基づいて、周波数軸上のスペクトルパワーの実数部ｒｅ［ｊ］および虚数部ｉｍ［ｊ］を算出する。これにより、後に時間軸に変換したときに応答特性の良い係数列を得る事ができる。
【００６６】
また、全体位相情報生成部２３は、実数部ｒｅ［ｊ］および虚数部ｉｍ［ｊ］を逆フーリエ変換して得た時間軸状の係数ＲＥ［ｊ］に基づいて、ＦＩＲフィルタ係数の先頭位置ＳＰを見出す。その後、係数順序変更部２５が、位置ＳＰを先頭として、もとの時間軸上の末尾位置の後ろに、もとの時間軸上の「０」以降が引き続くように、係数を再配置し、これをＦＩＲフィルタ係数とする。これにより、係数のピークが適切な位置に出現するようなＦＩＲフィルタ係数を取得することが可能となる。
【００６７】
また、本実施の形態によれば、周波数応答係数編集部２１は、周波数軸上のレベルとしてユーザにより入力されたユーザ入力係数を受け入れ、受け入れたユーザ入力係数を、楽音信号データのサンプリング周波数ＦＳの１／２の周波数を対称軸として折り返すことで、周波数軸上の周波数応答係数を生成する。これにより、ユーザは、可聴範囲における所望の周波数特性を入力すれば良い。
【００６８】
さらに、本実施の形態によれば、個別位相情報生成部２２は、周波数軸上の位置ｊについて、
実数部ｒｅ［ｊ］＝Ｐｏｗｅｒ［ｊ］×ｃｏｓ（［Ｔｈｅｔａ（ｊ）］）
虚数部ｉｍ［ｊ］＝Ｐｏｗｅｒ［ｊ］×ｓｉｎ（［Ｔｈｅｔａ（ｊ）］）
（ただし、Ｐｏｗｅｒ［ｊ］は位置ｊにおけるスペクトルパワーの絶対値、Ｔｈｅｔａ（ｊ）は、位置ｊにおける位相関数Ｔｈｅｔａの関数値）を算出する。
【００６９】
このように実数部および虚数部を算出することで、位相が最適化されたＦＩＲフィルタ係数を得ることが可能となる。
【００７０】
所定の位相関数として、値として極大、極小をもたない一様な関数を用いるのが望ましい。本実施の形態では、たとえば、以下のような位相関数が用いられる。
Ｔｈｅｔａ１［ｊ］＝ｐ１×ｊ２
Ｔｈｅｔａ２［ｊ］＝ｐ２×ｊ３
Ｔｈｅｔａ３［ｊ］＝ｐ３×ｊ４
Ｔｈｅｔａ４［ｊ］＝ｐ４×ｓｑｒｔ（ｊ）
Ｔｈｅｔａ５［ｊ］＝ｐ５×ｌｏｇ（ｊ＋１）
Ｐ１〜Ｐ５は、それぞれ正または負の係数
【００７１】
位相関数として極大、極小をもたない一様な関数を用いることで、応答性能の良好なＦＩＲフィルタ係数の係数列を得ることが可能となる。
【００７２】
また、本実施の形態においては、全体位相情報生成部２３が、時間軸上の所定の位置から右側に位置する係数の積分値Ｒと、所定の位置から左側に位置する係数の積分値Ｌとの差分値Ｄｅｖが最大となるような所定の位置を、時間軸上の先頭位置ＳＰと決定している。これにより、ＦＩＲフィルタ係数のピークの出現には、一定の過渡状態が存在することを考慮したＦＩＲフィルタ係数の係数列を得ることができる。
【００７３】
さらに、全体位相情報生成部２３は、係数がピークとなる時間軸上の位置を見出し、ピークとなる時間軸上の位置から所定の範囲内である場合にのみ、左右の積分値の差分値Ｄｅｖが最大となるような所定の位置を、時間軸上の先頭位置ＳＰと決定する。一定の過渡状態を考えても、ピークが出現するまでの時間長があまり長い場合には応答性能が劣化することを考慮している。
【００７４】
本発明は、以上の実施の形態に限定されることなく、特許請求の範囲に記載された発明の範囲内で、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
【００７５】
たとえば、位相関数Ｔｈｅｔａ（ｊ）は、上記実施の形態に列挙したものに限定されるものではない。
【００７６】
また、前記実施の形態において、ＦＩＲフィルタ係数の先頭からピークポイントＰＰとの距離（時間長）が、Ｎ／４より小さいか否かを判断している（ステップ８０４）。この時間長はＮ／４に限定されるものではない。
【００７７】
さらに、  前記実施の形態においては、鍵盤の押鍵や自動演奏データにおけるある音高の楽音のオン（ノートオン）に応じて生成された楽音信号データにＦＩＲフィルタ処理を施して、共鳴音データを生成している。しかしながら、これに限定されるものではなく、オーディオ機器から出力されるデータにＦＩＲフィルタ処理を施して、共鳴音データを生成しても良い。つまり、本件においてフィルタ処理を施す対象は、楽音信号データを含む音響信号データである。
【図面の簡単な説明】
【００７８】
【図１】図１は、本発明の実施の形態にかかるフィルタ係数算出部を含む楽音発生装置の構成を示すブロックダイヤグラムである。
【図２】図２は、本実施の形態にかかるＦＩＲフィルタ係数算出部の構成を示すブロックダイヤグラムである。
【図３】図３は、本実施の形態にかかる共鳴音付加回路の構成を示すブロックダイヤグラムである。
【図４】図４は、本実施の形態にかかるＦＩＲフィルタ係数算出処理の例を示すフローチャートである。
【図５】図５は、ユーザが入力するフィルタ特性の例を示すグラフである。
【図６】図６は、本実施の形態にかかるデータ出力処理の例を示すフローチャートである。
【図７】図７は、周波数軸上でＦＳ／２を対称軸として、その右側に、左側にあったユーザ設定係数を折り返した形状の周波数応答係数の例を示す図である。
【図８】図８は、本実施の形態にかかる全体位相情報生成処理の例を示すフローチャートである。
【図９】図９は、本実施の形態にかかる全体位相情報生成処理の例を示すフローチャートである。
【図１０】図１０は、本実施の形態における積分値を説明する図である。
【図１１】図１１は、本実施の形態にかかる係数順序変更部によるＦＩＲフィルタ係数の再配置を説明する図である。
【図１２】図１２は、本実施の形態にかかる個別位相情報生成部による処理（図６のステップ６０１〜６０９）の結果の例を説明するグラフである。
【図１３】図１３は、本実施の形態にかかる個別位相情報生成部による処理（図６のステップ６０１〜６０９）の結果の例を説明するグラフである。
【図１４】図１４は、本実施の形態にかかる個別位相情報生成部による処理（図６のステップ６０１〜６０９）の結果の例を説明するグラフである。
【図１５】図１５は、本実施の形態にかかる個別位相情報処理部、全体位相情報生成部および係数順序変更部による処理結果の例を示すグラフである。
【符号の説明】
【００７９】
１１        ＣＰＵ
１２        入力装置
１３        表示装置
１４        ＲＯＭ
１５        ＲＡＭ
１６        サウンドシステム
１７        楽音発生装置
１８        共鳴音付加回路
２０        ＦＩＲフィルタ係数算出部
２１        周波数応答係数編集部
２２        個別位相情報生成部
２３        全体位相情報生成部
２４        画像生成部
２５        係数順序変更部
３０        ユーザ設定係数メモリ
３１        ＦＩＲフィルタ係数メモリ
【図１】
0005092902.tif 000002
【図２】
0005092902.tif 000003
【図３】
0005092902.tif 000004
【図４】
0005092902.tif 000005
【図５】
0005092902.tif 000006
【図６】
0005092902.tif 000007
【図７】
0005092902.tif 000008
【図８】
0005092902.tif 000009
【図９】
0005092902.tif 000010
【図１１】
0005092902.tif 000011
【図１０】
0005092902.tif 000012
【図１２】
0005092902.tif 000013
【図１３】
0005092902.tif 000014
【図１４】
0005092902.tif 000015
【図１５】
0005092902.tif 000016