デジタルオーディオ等の分野では、様々なサンプリング周波数に対応した装置が提供されているため、サンプリング周波数の異なる装置同士が接続される場合も多い。そのような場合、前段の装置から後段の装置に供給されるオーディオサンプル等のサンプルのサンプリング周波数を後段の装置のサンプリング周波数に合わせるサンプリング周波数変換装置が両装置間に設けられる。
図12はこの種のサンプリング周波数変換装置の構成例を示すブロック図である。このサンプリング周波数変換装置は、前段の装置が出力する第1のサンプリング周波数f1のサンプルxに補間演算を施すことにより、後段の装置が要求する第2のサンプリング周波数f2の補間サンプルyに変換して出力する装置である。
図12に示すように、サンプリング周波数変換装置は、装置全体と制御する制御部1と、補間部2と、RAMなどにより構成されたFIFO(First−In First−Out)3と、インタフェース4とにより構成されている。
補間部2には、サンプリング周波数変換装置の前段の装置から第1のサンプリング周波数f1の入力サンプルxが与えられる。補間部2は、制御部1による制御の下、過去入力された所定個数の入力サンプルxの列に補間演算を施すことにより、後段の装置が要求する第2のサンプリング周波数f2の補間サンプルyを発生し、書き込み要求信号WEとともに出力する。制御部1は、この書き込み要求信号WEが出力されるのに応じて、FIFO3に与える書き込みアドレスを更新する。
FIFO3は、制御部1による制御の下、補間部2から書き込み要求信号WEとともに与えられる補間サンプルyを順次記憶し、インタフェース4から読み出し要求信号REが与えられるのに応じて、記憶したサンプルyを古いものから順次読み出し、サンプルzとしてインタフェース4に供給する先入れ先出し方式のバッファである。
インタフェース4は、後段の装置からのワードクロックLRCKに応じて、読み出し要求信号REをFIFO3および制御部1に出力する。制御部1は、この読み出し要求信号REに応じて、FIFO3に与える読み出しアドレスを更新し、読み出し未了の補間サンプルyのうち最も古いものをFIFO3から出力させるための制御を行う。インタフェース4は、このようにして制御部1への読み出し要求信号REの出力に応じてFIFO3から読み出されるサンプルzを受け取る。そして、受け取ったサンプルzをシリアルなビット列SDOに変換し、ビット列SDOの各ビットを後段の装置から供給されるビットクロックBCKに同期して出力する。ワードクロックLRCKは、後段の装置が要求する第2のサンプリング周波数f2と同じ周波数のクロックである。
図13は、補間部2によって行われる補間演算の内容を示す図である。この図13において、黒丸マークは補間部2に与えられる入力サンプルxを例示しており、白抜き三角マークは補間部2が発生すべき補間サンプルyを例示している。発生すべき補間サンプルyの周期1/f2を入力サンプルxの周期(サンプル間の時間間隔)1/f1により割り算して得られる比(1/f2)/(1/f1)=f1/f2を変換比βとした場合、補間演算により発生すべき補間サンプルyは、入力サンプルxが示す波形をβ周期(1周期=1/f1)間隔でサンプリングし直したものとなる。図13に示す例では、第1のサンプリング周波数f1が48kHz、第2のサンプリング周波数f2が22.05kHzであるため、変換比βは48kHz/22.05kHz=2.1768となる。このため、入力サンプルxが示す波形を2.1768周期の時間間隔でサンプリングし直したものを補間サンプルyとしている。
このような補間演算を行うため、補間部2は、図12に示すように、入力サンプルレジスタ201と、係数発生回路202と、畳み込み演算部203とを有している。ここで、入力サンプルレジスタ201は、例えばN段(Nは所定の整数)のシフトレジスタであり、第1のサンプリング周波数f1と同一周波数のクロックφ1により、第1のサンプリング周波数f1の入力サンプルxを順次取り込み、取り込んだ過去N個分のサンプル列x[i−k](k=0〜N−1;ただし、iは時刻に対応したインデックス、x[i−0]が最新のサンプル、x[i−(N−1)]が最古のサンプルである。)を補間演算用入力サンプル列として保持する。
クロックφ1が入力サンプルレジスタ201に与えられる度に、最新のサンプルxが入力サンプルレジスタ201に書き込まれ、入力サンプルレジスタ201に記憶された最古のサンプルが廃棄される。従って、入力サンプルレジスタ201に入力される補間演算用入力サンプル列x[i−k](k=0〜N−1)は、1サンプリング周期1/f1が経過する毎に1サンプリング周期1/f1分だけ位相が進んだものに更新される。
そして、入力サンプルレジスタ201の補間演算用入力サンプル列x[i−k](k=0〜N−1)の位相が補間サンプルyの補間演算に適した位相になったとき、補間演算を要求する演算要求信号CRQと補間比αが制御部1から供給される。ここで、補間比αは、補間部2において発生すべき補間サンプルyのサンプリング点の位相を示している。
さらに詳述すると、このサンプリング周波数変換装置において、補間部2は、入力サンプルレジスタ201に保持された補間演算用入力サンプル列x[i−k](k=0〜N−1)の中のサンプルx[i−m](例えばm=N/2)とサンプルx[i−m+1]との間に補間サンプルyが存在する状態になったときに、この補間サンプルyを補間演算により求める。そして、補間比αは、時間軸上においてサンプルx[i−m]のサンプリング点とサンプルx[i−m+1]のサンプリング点との間のどの位置に補間演算により求めるべき補間サンプルyのサンプリング点があるかを示している。具体的には、補間比αは、補間サンプルyのサンプリング点が入力サンプルレジスタ201内のサンプルx[i−m]のサンプリング点からα周期(1周期は1/f1)だけ進んだところに位置していることを示す。
係数発生回路202は、この補間比αに対応した補間係数列h[k](k=0〜N−1)を出力する回路である。そして、畳み込み演算部203は、演算要求信号CRQが与えられるのに応じて、補間係数列h[k](k=0〜N−1)と入力サンプルレジスタ201に記憶された補間演算用入力サンプル列x[i−k](k=0〜N−1)とを用いた畳み込み演算を行い、補間サンプルyを出力する回路である。
図14〜図16は、22次の補間演算を行う場合を例に、係数発生回路202における補間係数列h[k](k=0〜N−1)の発生方法を説明する図である。係数発生回路202は、理想ローパスフィルタのインパルス応答である標本化関数上の複数点の関数値を示す標本化関数テーブルを記憶している(図14にはその一部が“既知の標本化関数の点”として示されている。)。係数発生回路202は、図14および図15に示すように、標本化関数のピーク点を補間サンプルyのサンプリング点に一致させた場合において、入力サンプルレジスタ201に記憶された補間演算用入力サンプル列x[i−k](k=0〜N−1)の各サンプルと同一位相を持つ標本化関数上の各点の関数値を補間係数h[k](k=1〜N−1)として算出する。図15にも示すように、この補間係数h[k](k=1〜N−1)は、標本化関数において、そのピーク点から補間比α相当の時間だけ負側に移動した点における関数値が補間係数h[m]となり、この補間係数h[m]のある位置を中心として1/48kHzの間隔を空けて並んだ各点における標本化関数の関数値が他のN−1個の補間係数h[k](k=0〜m−1、m+1〜N−1)となる。
ここで、補間比αが例えば12ビット表現のデータである場合、補間比αにより定まる補間サンプルyのサンプリング点の時間分解能は、1/48kHzの期間を4096分割したものとなる。この場合、補間比αがとりうる全ての値に対応して、補間係数h[k](k=1〜N−1)を発生するためには、1個の補間係数h[k]当たり4096通りの標本化関数値を発生する能力が求められる。しかし、そのような標本化関数値を標本化関数テーブルに収めるとなると、標本化関数テーブルの記憶に必要なメモリ容量が膨大なものとなって得策ではない。そこで、一般には、以下説明するように、標本化関数テーブルの参照と直線補間とを併用した方法により補間係数h[k](k=0〜N−1)の算出が行われる。
図16は、補間係数h[m]を例に、その算出方法を説明するものである。図16に示すように、1種類の補間係数h[m]は、1/48kHzの区間内のいずれかの標本化関数値をとりうる。そこで、1種類の補間係数h[m]当たり、1/48kHzの区間を32分割する32個の標本化関数値を標本化関数テーブルに収める。
そして、補間係数h[m]の算出に当たっては、まず、12ビットの補間比αの上位6ビットに基づき、32分割された区間内のどの区間に求めるべき補間係数h[m]が所在するかを特定し、その特定した区間の両端点をなす2個の標本化関数値を標本化関数テーブルから読み出す。次に12ビットの補間比αの下位6ビットに基づき、読み出した2個の標本化関数値を用いた直線補間を行い、補間係数h[m]を算出するのである。
次に制御部1の処理内容について説明する。制御部1が行う処理の1つとして、位相情報Pの更新処理がある。位相情報Pは、次に発生すべき補間サンプルyのサンプリング点と入力サンプルレジスタ201内の補間演算用入力サンプル列x[i−k](k=0〜N−1)との位相関係を示す情報である。上述した通り、補間演算用入力サンプル列x[i−k](k=0〜N−1)の内容は、第1のサンプリング周波数f1と同一周波数のクロックφ1に同期して更新される。このため、制御部1は、位相情報Pの更新処理を第1のサンプリング周波数f1と同一周波数のクロックφmに同期して実行する。上述した演算要求信号CRQおよび補間比αは、この位置情報Pの更新処理の過程において発生される。
図17は、制御部1によって行われる位相情報Pの更新処理の過程を例示する図である。この図において、上下方向は時間軸である。図17にはクロックφmに同期して位相情報Pが更新される様子が示されている。また、クロックφmに従って補間サンプルyと補間演算用入力サンプル列x[i−k](k=0〜N−1)との位相関係が変化する様子を分かりやすくするため、入力サンプルレジスタ201に記憶された入力サンプル列補間演算用入力サンプル列x[i−k](k=0〜N−1)が黒丸マークで、補間サンプルyの位置が白丸マークで示されている。
位相情報Pは、次に発生すべき補間サンプルyの位相が補間演算用入力サンプル列x[i−k](k=0〜N−1)の中のサンプルx[i−m](例えばm=N/2)の位相からどれだけ進んでいるかを示す情報である。すなわち、位相情報Pは、次に発生すべき補間サンプルyの位相が現時点iにおけるサンプルx[i−m]の位相からP周期(1周期は1/f1)だけ進んだ位置にあることを示す。
制御部1は、クロックφmが立ち上がる毎に、この位相情報Pを1だけ減少させる。これはクロックφmが立ち上がる毎に補間演算用入力サンプル列x[i−k](k=0〜N−1)の位相が1周期(=1/f1)だけ進むからである。
クロックφmに同期して位相情報Pを1だけ減少させてゆくと、やがて位相情報Pは1より小さな値になる。このとき、補間サンプルyのサンプリング点は、補間演算用入力サンプル列x[i−k](k=0〜N−1)の中のサンプルx[i−m](図示の例ではm=N/2)のサンプリング点とサンプルx[i−m+1]のサンプリング点との間に位置している。そこで、制御部1は、演算要求信号CRQを補間部2に送るとともに、位相情報Pの小数部を補間比αとして補間部2に送る。これにより補間部2では、上述した方法により補間比αに対応した補間係数列h[k](k=0〜N−1)が発生され、これが補間演算用入力サンプル列x[i−k](k=0〜N−1)に畳み込まれ、補間サンプルyが発生される。
一方、演算要求信号CRQおよび補間比αを出力した制御部1は、次に発生すべき補間サンプルyの位相を示した内容となるように、位相情報Pの更新を行う。具体的には、変換比β=f1/f2を位相情報Pに加算する。この位相情報Pは、その後、クロックφmが立ち上がる毎に1ずつ減算されてゆく。そして、位相情報Pが1より小さな値になると、演算要求信号CRQおよび補間比αの補間部2への供給と、位相情報Pに対する変換比βの加算が行われるのである。
このような処理が繰り返される結果、変換比βに反比例した時間密度で演算要求信号CRQおよび補間比αが補間部2に送られ、図13に例示したように、β周期間隔で並んだ補間サンプルyが補間部2により順次発生される。そして、この補間サンプルyは、FIFO3およびインタフェース4を介して、後段の装置に送られるのである。
さて、以上説明したサンプリング周波数変換装置は、後段の装置から与えられるワードクロックLRCKの周波数が第2のサンプリング周波数f2と同一周波数であることを前提としている。ワードクロックLRCKにジッタがなく、ワードクロックLRCKの周波数が常に一定である理想的な状況では、変換比βをf1/f2に固定してもよい。しかし、実際にはワードクロックLRCKにはどうしてもジッタが発生する。
そして、瞬時的なワードクロックLRCKの周波数が第2のサンプリング周波数f2よりも低い状態が続くと、FIFO3内における読み出し未了の補間サンプルyの残量が増加し、これを放置すると、FIFO3のオーバフローを引き起こす。一方、瞬時的なワードクロックLRCKの周波数が第2のサンプリング周波数f2よりも高い状態が続くと、FIFO3内における読み出し未了の補間サンプルyの残量が減少し、これを放置すると、FIFO3のアンダフローを引き起こす。
制御部1は、ワードクロックLRCKのジッタを吸収して、このようなFIFO3のオーバフローやアンダフローの発生を防止するため、いわばPLL(Phase Locked Loop)制御を行う。すなわち、制御部1は、FIFO3内の読み出し未了の補間サンプルyの残量を監視し、残量が適正値を維持するように、残量の変動に応じて、FIFO3におけるサンプル入力速度を増減する。
具体的には、FIFO3内の読み出し未了の補間サンプルyの残量が適正範囲から外れて大きくなるときには、制御部1は、変換比βを増加させることにより、演算指令信号CRQが発生する時間密度を減少させ、FIFO3におけるサンプル入力速度を低下させる。一方、FIFO3内の読み出し未了の補間サンプルyの残量が適正範囲から外れて小さくなるときには、変換比βを減少させることにより、演算指令信号CRQが発生する時間密度を増加させ、FIFO3におけるサンプル入力速度を上昇させる。このようなPLL制御により、補間部2からFIFO3への補間サンプルyの入力速度がワードクロックLRCKの周波数に追従したものとなり、FIFO3内の読み出し未了の補間サンプルyの残量が適正範囲内に維持される。
なお、この種のサンプリング周波数変換装置に関する文献として、例えば特許文献1、2がある。
特開2006−238044号公報
特開2006−261812号公報
以下、図面を参照して、本発明を実施するための最良の実施の形態について説明する。
図1はこの発明の一実施形態によるサンプリング周波数変換装置の構成を示すブロック図である。この図において、FIFO3およびインタフェース4は、前掲図12のものと同様である。本実施形態によるサンプリング周波数変換装置では、前掲図12における制御部1および補間部2が制御部1aおよび補間部2aに置き換えられている。本実施形態の特徴は、この制御部1aおよび補間部2aに関する次の改良点にある。
改良点1:補間部2aは、前段の装置から与えられた入力サンプル列を用いて補間演算により補間サンプルyを算出する際、見かけ上の零点挿入による2倍オーバサンプリングを行う。
改良点2:制御部1aは、前段の装置から与えられる入力サンプルxのサンプリング周波数f1の2倍の周波数のメインクロックφmに同期して、位置情報Pの更新処理を行う。
以下では、まず、改良点1を中心に補間部2aの詳細について説明し、次いで改良点2を中心に制御部1aの詳細について説明する。
上述した従来技術における補間部2では、例えばサンプリング周波数f1が48kHzである入力サンプルxが前段の装置から与えられる場合、図2に示すように、例えば現時点iまでに入力された22個の入力サンプルx[i−k](k=0〜21)(図2では図示が煩雑になるのを防ぐため、x[21]〜x[0]としている。)に22個の補間係数h[k](k=0〜21)を畳み込む22次の補間演算を行って補間サンプルyを算出した。このため、従来のサンプリング周波数変換装置では、変換後のサンプリング周波数が変換前のサンプリング周波数と同じ48kHzである場合に、後段の装置から与えられるワードクロックLRCKのジッタの影響により補間比αが負になり、補間演算においてエラーが発生する場合があった。
このような補間演算のエラーの発生を回避するための方法として、前段の装置から与えられる48kHzのサンプリング周波数のサンプルxに2倍のオーバサンプリングを施し、補間演算に用いるサンプル列のサンプリング周波数を入力サンプル列の本来のサンプリング周波数よりも高くする方法が考えられる。より具体的には、図3に示すように、現時点までに与えられた22個の入力サンプルx[21]〜x[0]の各間に零点を挿入し、これにデシメーション処理(ローパスフィルタ処理)を施してサンプリング周波数f1が96kHzである44個の入力サンプル列x’[43]〜x’[0]とし、これに44個の補間係数h[k](k=0〜43)を畳み込む44次の補間演算を行って補間サンプルyを算出するのである。
しかし、この方法により2倍のオーバサンプリングを実際に行うとなると、そのための処理負担が補間部2aに掛かる。また、オーバサンプリング後に行う補間演算の次数も2倍になるため、そのための処理負担が補間部2aに掛かる。従って、このような方法により2倍のオーバサンプリングを行うのは得策でない。
ところで、既に述べたように、補間サンプルyを得るために行う補間演算は、理想的なローパスフィルタのインパルス応答である標本化関数の関数値列を入力サンプル列に畳み込むものであるため、デシメーション処理(ローパスフィルタ処理)としての役割を果たす。従って、2倍のオーバサンプリングのための零点挿入とデシメーション処理のうちデシメーション処理は省略可能である。そこで、48kHzの22個の入力サンプルx[21]〜x[0]の各間に零点を挿入して、96kHzの44個の入力サンプルx’[43]〜x’[0]とし、これに補間演算を施して補間サンプルyを算出する方法が考えられる。しかし、この場合、補間演算の次数が2倍の44次になるため、そのための処理負担が補間部2aに掛かる。
そこで、本実施形態では、“見かけ上の”零点挿入による2倍のオーバサンプリングを行うことにより入力サンプルx[i−k](k=0〜N−1)から補間サンプルyを算出する。すなわち、入力サンプルレジスタ201に記憶された入力サンプルx[i−k](k=0〜N−1)に対する零点挿入やデシメーション処理は実際には行わず、入力サンプルx[i−k](k=0〜N−1)に対して零点挿入による2倍のオーバサンプリングを行ったのと同様の効果を発生させる態様で補間サンプルyの算出を行う。具体的には次の通りである。
図4は、1/48kHzの周期で前段の装置から入力サンプルxが順次与えられる状況において、入力サンプル列に対して実際に零点挿入を行い、1/96kHzの周期で、この零点挿入後の44個の入力サンプル列を用いて44次の補間演算を行う場合の処理内容を例示するものである。なお、図4では、図示が煩雑になるのを防止するため、前段の装置から与えられた入力サンプルx[i−k](k=0〜21)がx[21]〜x[0]、零点挿入後の補間演算用のサンプル列x’[i−k](k=0〜43)がx’[43]〜x’[0]とされている。
入力サンプルxのサンプリング周波数が48kHzである場合、1/48kHzの周期内においては、補間演算用入力サンプル列x’[43]〜x’[0]に新たに加わるサンプルはなく、また、この補間演算用入力サンプル列x’[43]〜x’[0]から追い出されるサンプルもない。
1/48kHzの周期の前半の1/96kHzの周期において、補間演算用入力サンプル列x’[43]〜x’[0]では、サンプルx’[43]、x’[41]、…、x’[1]の内容が元の入力サンプルx[21]〜x[0]となっており、サンプルx’[42]、x’[40]、…、x’[0]の内容が零点となっている。そして、この補間演算用入力サンプル列x’[43]〜x’[0]に対し、44次の補間演算のための補間係数h[0]、h[1]、…、h[42]、h[43]が畳み込まれる。
この畳み込み演算において、零点であるサンプルx’[42]、x’[40]、…、x’[0]に対して、奇数番目の補間係数h[1]、h[3]、…、h[43]が各々乗算されるが、それらの乗算結果は全て0となる。一方、零点でないサンプルx’[43]、x’[41]、…、x’[1]は、元の48kHzの入力サンプルx[21]〜x[0]であり、これらには偶数番目の補間係数h[0]、h[2]、…、h[42]が各々乗算される。
1/48kHzの周期の後半の1/96kHzの周期になると、補間演算用入力サンプル列x’[43]〜x’[0]について1サンプル分のシフトが行われる。その際、最後尾(最も古い)のサンプルx’[0]の中身(この場合、零点)が追い出され、先頭(最も新しい)のサンプルx[43]に零点が代入される。このため、補間演算用の入力サンプル列x’[43]〜x’[0]では、サンプルx’[42]、x’[40]、…、x’[0]の内容が元の入力サンプルx[21]〜x[0]となり、サンプルx’[43]、x’[41]、…、x’[1]の内容が零点となる。そして、この補間演算用の入力サンプル列x’[43]〜x’[0]に対し、44次の補間演算のための補間係数h[43]、h[42]、…、h[1]、h[0]が畳み込まれる。
この畳み込み演算において、零点であるサンプルx’[43]、x’[41]、…、x’[1]に対して、偶数番目の補間係数h[0]、h[2]、…、h[42]が各々乗算されるが、それらの乗算結果は全て0となる。一方、零点でないx’[42]、x’[40]、…、x’[0]は、元の48kHzの入力サンプルx[21]〜x[0]であり、これらには奇数番目の補間係数h[1]、h[3]、…、h[43]が各々乗算される。
以上説明したように、48kHzのサンプリング周波数の入力サンプル列に対して実際に零点挿入を行い、1/96kHzの周期で、この零点挿入後の入力サンプル列を用いて補間演算を行うと、零点と補間係数との乗算処理が発生する。このような乗算処理は無駄であり、実行する必要はない。一方、1/96kHzの周期で行う補間演算において、補間演算用の入力サンプル列のうち挿入された零点以外のサンプルは、元の48kHzの入力サンプルである。前半の1/96kHzの周期と後半の1/96Hzの周期とで異なるのは、元の48kHzの入力サンプルとの乗算に用いられる補間係数が前半の1/96kHzの周期では偶数番目の補間係数であるのに対し、後半の1/96kHzの周期では奇数番目の補間係数である、という点である。
以上の点に鑑み、本実施形態では、図5に示す方法により、入力サンプルに対する補間演算を行う。まず、図1における入力サンプルレジスタ201には、従来技術と同様、入力サンプルxのサンプリング周波数f1と同じ周波数のクロックに同期して記憶内容(補間演算用入力サンプル列)の更新を行わせる。
そして、入力サンプルレジスタ201に同一内容の補間演算用入力サンプル列が保持される1/48kHzのサンプリング周期を前半の1/96kHzの周期(以下、偶数周期)と後半の1/96kHzの周期(以下、奇数周期)に分ける。
そして、偶数周期における補間サンプルyの算出を行うときには、補間比αに対応した2N次補間のための2N個の補間係数h(k)(k=0〜2N−1)(図5ではh[0]〜h[43])のうち偶数番目の補間係数を発生して、入力サンプルレジスタ201に記憶された補間演算用入力サンプル列x[i−k](k=0〜N−1)(図5ではx[21]〜x[0])に畳み込む。一方、奇数周期における補間サンプルyの算出を行うときには、補間比αに対応した2N次補間のための2N個の補間係数h(k)(k=0〜2N−1)(図5ではh[0]〜h[43])のうち奇数番目の補間係数を発生して、入力サンプルレジスタ201に記憶された補間演算用入力サンプル列x[i−k](k=0〜N−1)(図5ではx[21]〜x[0])に畳み込む。
この方法によれば、入力サンプル列x[i−k](k=0〜N−1)に対して、零点挿入による2倍オーバサンプリングを行って、本来の倍の次数の補間演算により補間サンプルyの算出を行うのと同様な効果が得られる。
本実施形態では、偶数周期における補間サンプルyの算出と奇数周期における補間サンプルyの算出の両方が行われ得るため、制御部1aは、サンプリング周波数f1=48kHzの2倍の周波数fm(=2f1=96kHz)のメインクロックφmに同期して、位相情報Pの更新処理を行う(図1参照)。演算指令信号CRQおよび補間比αは、この位相情報Pの更新処理の過程において発生される。また、本実施形態では、演算指令信号CRQおよび補間比αの発生タイミングが偶数周期に属するか奇数周期に属するかを区別する必要があるため、制御部1aは、メインクロックφmのカウントを行うことにより、偶数周期において“0”、奇数周期において“1”となる1ビットの奇偶指示信号O/Eを補間部2aに出力する。
図1に示すように、補間部2aには、演算指令信号CRQを保持するための2個のレジスタ210および211と、補間比αを保持するための2個のレジスタ220および221が設けられている。ここで、レジスタ210および220は偶数周期用のレジスタであり、レジスタ211および221は奇数周期用のレジスタである。すなわち、奇偶指示信号O/Eが“0”である偶数周期において制御部1aから出力された演算指令信号CRQおよび補間比αは、レジスタ210および220に各々保持され、奇偶指示信号O/Eが“1”である奇数周期において制御部1aから出力された演算指令信号CRQおよび補間比αは、レジスタ211および221に各々保持される。
偶数周期用のレジスタ210および220に演算指令信号CRQおよび補間比αが保持された場合、係数発生回路202aは、保持された補間比αに対応した44個の補間係数h[k](k=0〜43)のうち22個の偶数番目の補間係数を発生して畳み込み演算部203aに与える。
図6は、この場合の補間係数の発生方法を例示する図である。本実施形態において、偶数周期において発生する補間比αは、求めるべき補間サンプルyのサンプリング点が入力サンプルレジスタ201に記憶されたサンプルx[i−k](k=0〜21)のうちのサンプルx[i−m]のサンプリング点からα周期(ただし、1周期は、上記従来技術と異なり、1/96kHzである。)だけ進んだところにあることを示す。偶数周期において補間比αが演算指令信号CRQとともに発生した場合、係数発生回路202aは、サンプルx[i−m]のサンプリング点からα周期だけ位相が進んだ点に標本化関数のピーク点を位置させた状態において、サンプルx[i−k](k=0〜21)の各サンプリング点と同一の位相を持つ標本化関数値を補間係数として出力する。これらは、仮想的な零点も含めた44個のサンプルと乗算される44個の補間係数のうちの22個の偶数番目の補間係数である。
一方、奇数周期用のレジスタ211および221に演算指令信号CRQおよび補間比αが保持された場合、係数発生回路202aは、保持された補間比αに対応した44個の補間係数h[k](k=0〜43)のうち22個の奇数番目の補間係数を発生して畳み込み演算部203aに与える。
図7は、この場合の補間係数の発生方法を例示する図である。本実施形態において、奇数周期において発生する補間比αは、求めるべき補間サンプルyのサンプリング点が入力サンプルレジスタ201に記憶されたサンプルx[i−k](k=0〜21)のうちのサンプルx[i−m]とサンプルx[i−m+1]との間の仮想的な零点からα周期(ただし、1周期は、上記従来技術と異なり、1/96kHzである。)だけ進んだところにあることを示す。奇数周期において補間比αが演算指令信号CRQとともに発生した場合、係数発生回路202aは、サンプルx[i−m]とサンプルx[i−m+1]との間の仮想的な零点からα周期だけ位相が進んだ点に標本化関数のピーク点を位置させた状態において、サンプルx[i−k](k=0〜21)の各サンプリング点と同一の位相を持つ関数値を補間係数として出力する。これらは、仮想的な零点も含めた44個のサンプルと乗算される44個の補間係数のうちの22個の奇数番目の補間係数である。
畳み込み演算部203aは、以上のようにして係数発生回路202aから出力される22個の補間係数を入力サンプルレジスタ201に記憶された22個の補間演算用入力サンプル列x[i−k](k=0〜21)に畳み込み、補間サンプルyを算出し、書き込み要求信号WEとともにFIFO3に与える。
ここで、偶数周期における補間サンプルyは、1/48kHzのサンプリング周期内のどのようなタイミングで算出してもよく、同様に、奇数周期における補間サンプルyも、1/48kHzのサンプリング周期内のどのようなタイミングで算出してもよい。
本実施形態では、1/48kHzのサンプリング周期内において偶数周期における補間サンプルyの算出と奇数周期における補間サンプルyの算出の両方についての演算指令信号CRQおよび補間比αが発生される場合がある。この場合、補間部2aでは、1/48kHzのサンプリング周期内において偶数周期における補間サンプルyと奇数周期における補間サンプルyを順次算出する。
以上が補間部2aの詳細である。
次に図8を参照し、制御部1aの詳細について説明する。
ライトポインタ101は、補間部2aから書き込み要求信号WEが出力されるのに応じて書き込みアドレスを順次インクリメントし、FIFO3に供給する回路である。補間部2aが補間サンプルyを書き込み要求信号WEとともに出力すると、補間部2aからの補間サンプルyは、ライトポインタ101が出力する書き込みアドレスにより指定されるFIFO3内のエリアに書き込まれる。リードポインタ102は、インタフェース4からの読み出し要求信号REに応じて読み出しアドレスを順次インクリメントし、FIFO3へ供給する。ここで、読み出しアドレスは、FIFO3内に残存している読み出し未了の補間サンプルyのうち最も古いものを指定する。この読み出しアドレスにより指定された補間サンプルyは、読み出し要求信号REによりFIFO3から読み出され、インタフェース4に供給される。
残量検出部103は、ライトポインタ101が発生している書き込みアドレスとリードポインタ102が発生している読み出しアドレスとの差分、すなわち、現時点においてFIFO3に残存する読み出し未了の補間サンプルyの残量を検出する回路である。ジッタ補正値テーブル104は、補間サンプルyの残量をジッタ補正値に対応付けるテーブルであり、残量検出部103によって検出された残量に対応付けられたジッタ補正値を出力する。ここで、ジッタ補正値は、演算指令信号CRQが発生する時間密度を決定する変換比βを補正するための補正値である。ジッタ補正値テーブル104において、適正範囲内の残量は値が0であるジッタ補正値に対応付けられている。また、適正範囲よりも大きな区間における残量は、その値が大きいほど負方向に大きな値のジッタ補正値に対応つけられており、適正範囲よりも小さな区間における残量は、その値が小さいほど正方向に大きな値のジッタ補正値に対応付けられている。残量増減検出回路105は、残量検出部103によって検出される残量の急激な変化を検出する回路である。セレクタ106は、残量増減検出回路105によって残量の急激な変化が検出されたときにジッタ補正値テーブル104から出力されたジッタ補正値を選択して出力し、そうでない場合にはジッタ補正値として0を選択して出力する。
周波数補正部110は、ジッタ補正値に応じて変換比βの補正を行う回路であり、加算器111と、リミタ112と、ラッチ113とにより構成されている。ここで、ラッチ113には、クロックφaが与えられる。このクロックφaは、メインクロックφmよりも高速であり、周波数は例えば9MHzである。このサンプリング周波数変換装置が動作を開始するとき、ラッチ113には、メインクロックφmの周波数fmを変換後のサンプリング周波数f2により除算した値fm/f2が変換比βの初期値として設定される。その後、ラッチ113は、クロックφaが与えられる毎に変換比βを加算器111からリミタ112を介して与えられる変換比βにより更新する。加算器111は、ラッチ113から出力される変換比βにセレクタ106から与えられるジッタ補正値を加算して出力する。リミタ112は、この加算器111から出力される変換比βが適正範囲から外れた場合に適正範囲内に制限する役割を果たす。この構成によれば、セレクタ106から値が0のジッタ補正値が出力されているときはラッチ113から出力される変換比βは変化しない。そして、セレクタ106から負のジッタ補正値が出力されているときはラッチ113から出力される変換比βが時間経過に伴って減少し、正のジッタ補正値が出力されているときはラッチ113から出力される変換比βが時間経過に伴って増加する。変換比βの減少の時間勾配、増加の時間勾配はジッタ補正値の絶対値が大きくなるほど大きくなる。
位相情報更新部120は、メインクロックφmに同期して位相情報Pを更新し、その更新過程において、変換比βに反比例した時間密度で演算指令信号CRQを発生する回路であり、セレクタ121と、加算器122と、ラッチ123と、演算指令発生部124とにより構成されている。セレクタ121は、演算指令信号CRQが非アクティブレベルのときには−1を加算器122に出力し、アクティブレベルのときには周波数補正部110から与えられる変換比βから1を減算したデータを加算器122に出力する。加算器122は、ラッチ123に保持された位相情報Pにセレクタ121を介して与えられるデータを加算して位相情報Pの更新を行う回路である。ラッチ123は、加算器122から出力される位相情報Pをメインクロックφmが与えられる毎に保持する回路である。演算指令発生部124は、ラッチ123から出力される位相情報Pが1以上であるときは演算指令信号CRQを非アクティブレベルとする。また、演算指令発生部124は、位相情報Pが1より小さくなったとき、クロックφmの1周期相当の期間、演算指令信号CRQをアクティブレベルとする。このような構成によれば、位相情報Pが1以上である期間は、演算指令信号CRQが非アクティブレベルになってセレクタ121を介して−1が加算器122に与えられるため、メインクロックφmが発生する毎にラッチ123が出力する位相情報Pが1ずつ減算される。そして、位相情報Pが1より小さくなると、演算指令信号CRQがアクティブレベルになってセレクタ121を介して変換比βから1を減じたデータが加算器122に与えられ、位相情報Pはβ−1だけ増加する。従って、変換比βに反比例した時間密度で演算指令信号CRQがアクティブレベルとされる。
クロックカウンタ130は、メインクロックφmが発生する毎に、奇偶指示信号O/Eを反転させる1ビットのカウンタである。ここで、クロックカウンタ130は、入力サンプルレジスタ201が同一内容の補間演算用入力サンプル列x[i−k](k=0〜21)を保持する1サンプリング周期(1/48kHz)内において前半の偶数周期では奇偶指示信号O/Eを“0”とし、奇数周期ではは奇偶指示信号O/Eを“1”とする。そして、位相情報Pの小数部のビット列に対し、この奇偶指示信号O/Eを最上位ビットとして加えたものが補間比αとされ、この補間比αが演算指令信号CRQとともに補間部2aに供給される。
以上が制御部1aの構成の詳細である。
図9および図10は本実施形態の動作例を示すものである。図9に示す例では、後段の装置から与えられるワードクロックLRCKの周波数f2が22.05kHzとなっている。制御部1aでは、FIFO3内の補間サンプルyの残量が残量検出部103によって検出される。
そして、残量が適正範囲よりも大きい場合には変換比βを増加させ、演算指令信号CRQが発生する時間密度を減少させ、補間部2aからFIFO3への補間サンプルyの入力速度を低下させる制御が行われる。一方、残量が適正範囲よりも小さい場合には変換比βを減少させ、演算指令信号CRQが発生する時間密度を増加させ、補間部2aからFIFO3への補間サンプルyの入力速度を上昇させる制御が行われる。
この制御が繰り返される結果、変換比βが96kHz/22.05kHz=4.3537となったときに、96kHzのメインクロックφmに同期して発生される演算指令信号CRQの時間密度がワードクロックLRCKの周波数f2=22.05kHzと一致した状態となり、FIFO3内の補間サンプルyの残量は適正範囲内に収束する。そして、変換比βを4.3537としたサンプリング周波数変換が行われ、サンプリング周波数変換により得られた22.05kHzの補間サンプルyがFIFO3およびインタフェース4を介して後段の装置に送られる。
本実施形態では、96kHzの周波数fmのクロックφmに同期して位相情報Pの更新および更新結果に基づく演算指令信号CRQの発生が行われるため、演算指令信号CRQは、クロックφmの偶数周期において発生される場合もあり、奇数周期において発生される場合もある。しかしながら、この例の場合、変換比βが4.3537であるため、位相情報Pが1より小さくなって、演算指令信号CRQを発生し、その次のメインクロックφmが発生するとき、位相情報Pはβ−1=3.3537だけ増加する。従って、補間比αが負になることはない。
図10に示す例では、後段の装置から与えられるワードクロックLRCKの周波数f2が59.07kHzであり、前段の装置からの入力サンプルxのサンプリング周波数f1=48kHzよりも高い。上述した従来のサンプリング周波数変換装置では、このような入力サンプルxのサンプリング周波数f1よりも高い周波数のワードクロックLRCKが後段の装置から与えられた場合、補間比αが負になり、補間演算がエラーになる場合があった。しかしながら、本実施形態の場合、このような補間演算のエラーは発生しない。
本実施形態では、ワードクロックLRCKの周波数f2が59.07kHzである場合、変換比βが96kHz/59.07kHz=1.625となったときに、96kHzのメインクロックφmに同期して発生される演算指令信号CRQの時間密度がワードクロックLRCKの周波数f2=59.07kHzと一致した状態となり、FIFO3内の補間サンプルyの残量は適正範囲内に収束する。そして、変換比βを1.625としたサンプリング周波数変換が行われ、サンプリング周波数変換により得られた59.07kHzの補間サンプルyがFIFO3およびインタフェース4を介して後段の装置に送られる。
この場合、変換比βが1.625であるため、位相情報Pが1より小さくなって、演算指令信号CRQを発生し、その次のメインクロックφmが発生するとき、位相情報Pはβ−1=0.625だけ増加する。従って、補間比αが負になることはない。従って、上述した従来の技術において発生したような補間演算のエラーは発生しない。
以上のように本実施形態によれば、後段の装置から与えられるワードクロックLRCKの周波数f2が前段の装置から与えられる入力サンプルxのサンプリング周波数f1よりも高くなる状況でも、補間演算のエラーを発生させることなく、ワードクロックLRCKの周波数へのサンプリング周波数変換を行うことができる。従って、本実施形態によれば、ワードクロックLRCKにジッタがある場合でも、補間演算のエラーを発生させることなく、入力サンプルのサンプリング周波数と同一のサンプリング周波数へのサンプリング変換を行うことができる。また、本実施形態によれば、入力サンプルのサンプリング周波数の2倍以下であり、かつ、入力サンプルのサンプリング周波数よりも高い周波数へのサンプリング周波数変換を行うことも可能である。
また、本実施形態によれば、補間演算の時間分解能が同じであるならば、係数発生回路202aとして従来のサンプリング周波数変換装置において使用した係数発生回路202をそのまま流用することができるという効果がある。以下、図11を参照し、この効果について説明する。
図11(a)は、従来のサンプリング周波数変換装置において、補間演算の際に補間サンプルyのサンプリング点の直前のサンプルx[i−m]に乗算される補間係数h[m]の範囲を示している。この図11(a)に示すように、標本化関数においてピーク点の左側(負側)の1/48kHzの時間長の区間内の関数値が補間係数h[m]として発生される。ここで、補間比αが12ビットのデータである場合、この1/48kHzの区間を4096分割した各点の関数値の中から0〜4095の範囲の値をとりうる補間比αの値に対応したものを係数発生回路202が発生すればよい。
図11(b)は、本実施形態によるサンプリング周波数変換装置において、補間演算の際に補間サンプルyのサンプリング点の直前のサンプルx[i−m]に乗算される補間係数h[2m]およびh[2m+1]の範囲を示している。
本実施形態では、補間サンプルyのサンプリング点が偶数周期に属する場合には偶数番目の補間係数h[2m]を発生してサンプルx[i−m]に乗算し、補間サンプルyのサンプリング点が奇数周期に属する場合には奇数番目の補間係数h[2m+1]を発生してサンプルx[i−m]に乗算する。
しかし、図11(b)に示すように、標本化関数においてピーク点の左側(負側)の1/96kHzの時間長の区間内の関数値が補間係数h[2m]となり、その左隣の1/96kHzの時間長の区間内の関数値が補間係数h[2m+1]となる。結局、本実施形態と従来技術とで、サンプルx[i−m]に乗算される補間係数の範囲は同じである。
従って、奇偶指示信号O/Eを最上位ビットとして位相情報Pの小数部11ビットに付加し、従来技術と同様な12ビットの補間比αを構成するのであれば、係数発生回路202aとして、従来のサンプリング周波数変換装置において使用した係数発生回路202をそのまま流用することができる。
以上、この発明の一実施形態について説明したが、この発明には他にも実施形態が考えられる。例えば次の通りである。
(1)メインクロックφmを1/2分周して入力サンプルレジスタ201に与えるクロックφ1を生成してもよい。ここで、クロックφ1の立ち上がり時に入力サンプルxの入力サンプルレジスタ201への書き込みが行われる場合には、クロックφ1がHレベルである期間をメインクロックφmの偶数周期、クロックφ1がLレベルである期間を奇数周期とし、クロックφ1を奇偶指示信号O/Eの代わりに用いてもよい。この態様によれば、奇偶指示信号O/Eを生成するためのクロックカウンタ130を省略することができる。
(2)上記実施形態では、位相情報Pの一部(小数部)である補間比αを補間部2aに送って補間演算を行わせたが、演算指令信号CRQが発生するときには位相情報Pの整数部は0になっているので、位相情報P全体を補間部2aに送っても問題ない。
(3)上記実施形態では、位相情報Pが1より小さくなったときに演算指令信号CRQを発生したが、1より大きな所定数未満になったとき、演算指令信号CRQを発生するようにしてもよい。すなわち、演算指令信号CRQは、補間演算用入力サンプル列と補間サンプルyとの位相関係が所定の条件を満たしたことが位相情報Pから検出されたときに発生させればよい。
(4)上記実施形態では、インタフェース4が後段の装置から要求されるサンプリング周波数と同一周波数のワードクロックLRCKを受け取り、算出された補間サンプルをこのワードクロックLRCKに同期させて後段の装置に送信した。しかし、このようなワードクロックLRCKを受け取ることなく、例えば通信開始前のネゴシエーションなどにより後段の装置が要求するサンプリング周波数を検知し、このサンプリング周波数を持った補間サンプルを入力サンプルxを用いて算出し、後段の装置に送るようにサンプリング周波数変換装置を構成してもよい。
1a…制御部、2a…補間部、201…入力サンプルレジスタ、202a…係数発生回路、203a…畳み込み演算部、210,220…偶数周期用レジスタ、211,221…奇数周期用レジスタ、3…FIFO、4…インタフェース、101…リードポインタ、102…ライトポインタ、103…残量検出部、105…残量増減検出回路、104…ジッタ補正値テーブル、106…セレクタ、110…周波数補正部、120…位相情報更新部、130…クロックカウンタ。