米国特許情報 | 欧州特許情報 | 国際公開(PCT)情報 | Google の米国特許検索
 
     特許分類
A 農業
B 衣類
C 家具
D 医学
E スポ−ツ;娯楽
F 加工処理操作
G 机上付属具
H 装飾
I 車両
J 包装;運搬
L 化学;冶金
M 繊維;紙;印刷
N 固定構造物
O 機械工学
P 武器
Q 照明
R 測定; 光学
S 写真;映画
T 計算機;電気通信
U 核技術
V 電気素子
W 発電
X 楽器;音響


  ホーム -> 楽器;音響 -> カシオ計算機株式会社

発明の名称 波形データ補間装置
発行国 日本国特許庁(JP)
公報種別 公開特許公報(A)
公開番号 特開2007−25395(P2007−25395A)
公開日 平成19年2月1日(2007.2.1)
出願番号 特願2005−209244(P2005−209244)
出願日 平成17年7月19日(2005.7.19)
代理人 【識別番号】100074099
【弁理士】
【氏名又は名称】大菅 義之
発明者 神保 輝雄
要約 課題
より少ない計算量で補間精度の高い補間を行う波形データ補間装置を提供する。

解決手段
波形サンプル値をサンプリングした連続する2つの点の間の位置を示す、小数アドレス計算ブロック5−2から入力する小数アドレスをxとすると、積和ブロック5−5は、(1−x)の値を、xを表現する全ビットの値を全て反転させた値で近似することにより、x(1−x)の値は排他的論理和の和として算出する。そのようにして算出した値を用いて、小数アドレスxで指定される波形位置の波形サンプル値(波高値)を計算し、その計算結果を用いて時分割処理のDCO出力を生成し累算ブロック5−6に出力する。
特許請求の範囲
【請求項1】
異なる波形位置でそれぞれサンプリングされた複数の波高値を波形サンプル値として示す波形データを対象に、任意の波形位置での波高値の算出を行う波形データ補間装置において、
1から小数点以下の正の数値を減算して得られる減算値を、該数値の全ビットを反転させた値で近似し、該数値と減算値の乗算結果を算出する演算手段と、
前記演算手段を用いて、前記波形データにおける前記任意の波形位置の前2点、後1点のサンプリング点の波形サンプル値を通る第1の曲線、及び該任意の波形位置の前1点、後2点のサンプリング点の波形サンプル値を通る第2の曲線の間を通る第3の曲線上の値を該任意の波形位置の波形サンプル値として算出する補間手段と、
を具備することを特徴とする波形データ補間装置。
【請求項2】
前記演算手段は、排他的論理和の算出、及び該算出した排他的論理和の加算を行い、前記乗算結果を算出する、
ことを特徴とする請求項1記載の波形データ補間装置。
【請求項3】
前記補間手段は、前記小数点以下の正の数値として、該数値を表す下位所定数ビットを切り捨てて得られる値を前記演算手段に入力する、
ことを特徴とする請求項1、または2記載の波形データ補間装置。
発明の詳細な説明
【技術分野】
【0001】
本発明は、異なる波形位置でそれぞれサンプリングされた複数の波高値を波形サンプル値として示す波形データを対象に、任意の波形位置での波高値の算出を行う波形データ補間装置に関する。
【背景技術】
【0002】
電子楽器などの楽音発音装置のなかには、異なる波形位置でそれぞれサンプリングされた複数の波高値を波形サンプル値として示す波形データを用いて発音させるべき楽音の波形サンプル値(波高値)を算出するものがある。そのような楽音発音装置では、一つの波形データで様々なピッチ(音高)の楽音を発音させるために、サンプリング点以外の波高値を補間により求めるようにしている。その補間により、鍵盤上の押鍵された鍵に割り当てられているピッチでの楽音の発音や、デチューン、ビブラートなどの音響効果の付加を行うことができる。
【0003】
上記補間、つまりサンプリング点以外の波高値(以降「補間値」と呼ぶ)の算出は、従来、図6に示すように、隣接するサンプリング点の波形サンプル値を結ぶ直線上の点の値を補間値として算出することで行っていた(直線補間)。図中の丸は、サンプリング点の波形サンプル値を示し、隣接するサンプリング点の波形サンプル値を結ぶ直線上の四角は補間値を示している。
【0004】
しかし、図6に示すような直線補間では、通常、曲線となる波形サンプル値間を直線で近似するため、求まる補間値と実際の波高値との間の差が比較的に大きくなりやすいという不具合がある。その不具合により、高い補間精度は得難く、発音される楽音が大きく歪んでしまうことも多いのが実情である。これは、波形データにサンプリング周波数の半分近くまでの成分が多い場合や、出力時のオーバーサンプリング比の高い場合に特に顕著になる。
【0005】
直線補間には上述したような不具合があることから、より高い補間精度が得られる補間が行われている。その従来の補間を行う波形データ補間装置としては、例えば特許文献1に記載されたものがある。その従来の波形データ補間装置が行う補間について、図7を参照して具体的に説明する。その図7において、X軸は時間(波形位置)、Y軸は波高値をそれぞれ示している。そのX軸では、サンプリング点を単位として時間を示している。
【0006】
特許文献1に記載された従来の波形データ補間装置では、波形データにおける任意の波形位置の前2点、後1点のサンプリング点の波形サンプル値を通る第1の曲線Y1(x)と、その波形位置の前1点、後2点のサンプリング点の波形サンプル値を通る第2の曲線Y2(x)との間(の平均値)を通る第3の曲線YS(x)上の値をその波形位置の補間値として算出するようにしている。このことから、図7では、任意の波形位置の直前に位置するサンプリング点の波形サンプル値を原点に移動させた座標系で各サンプリング点の波形サンプル値を表している。それにより、2つ前のサンプリング点の波形サンプル値は座標(−1,−d0)、直後のサンプリング点の波形サンプル値は座標(1,d1)、2つ後のサンプリング点の波形サンプル値は座標(2,d2)となっている。
【0007】
図7中のd0〜d2は、原点とするサンプリング点の波形サンプル値を基準として算出される差分値をそれぞれ表している。δ-1〜δ+1は、隣接するサンプリング点の波形サンプル値の差分値をそれぞれ表している。このことから、2つ前のサンプリング点の波形サンプル値をL-1、原点とするサンプリング点の波形サンプル値をL0、直後のサンプリング点の波形サンプル値をL+1、2つ後のサンプリング点の波形サンプル値をL+2と表記すると、各差分値d0〜d2はそれぞれ以下のようにして求められる。
【0008】
2=L2−L0
1=L1−L0
0=L0−L-1 ・・・ (1)
また、各差分値δ-1〜δ+1はそれぞれ以下のようにして求めることができる。
【0009】
δ+1=L2−L1
δ0 =L1−L0
δ-1=L0−L-1 ・・・ (2)
特許文献1に記載された従来の波形データ補間装置では、上述したような補間を行うことにより、より高い補間精度を実現させている。しかし、その補間を行うために、直線補間と比較して、計算量はより大きくなっている。
【0010】
補間のための計算は、ソフトウェア処理により行うだけでなく、ハードウェアによっても行わせることができる。ソフトウェア処理で計算を行わせる場合、計算量が大きくなるに従い処理の負荷が重くなる。そのため、より重い負荷の処理を適切に行えるようにするには、より高性能の処理装置を用意するか、或いは専用の処理装置を用意するといった必要性が生じる。このようなことから、計算量はより少なくすることが望ましい。
【0011】
補間のための計算を行わせるハードウェアは、計算量が大きくなるに従い、構成が複雑化する、規模が大きくなる、といったことが生じるのが普通である。それらは共に、製造コストをより増大させる。このことから、ハードウェアで計算を行わせる場合にも、計算量はより少なくすることが望ましいと言える。
【特許文献1】特許第3223280号公報
【発明の開示】
【発明が解決しようとする課題】
【0012】
本発明の課題は、より少ない計算量で補間精度の高い補間を行う波形データ補間装置を提供することにある。
【課題を解決するための手段】
【0013】
本発明の波形データ補間装置は、異なる波形位置でそれぞれサンプリングされた複数の波高値を波形サンプル値として示す波形データを対象に、任意の波形位置での波高値の算出を行うことを前提とし、1から小数点以下の正の数値を減算して得られる減算値を、該数値の全ビットを反転させた値で近似し、該数値と減算値の乗算結果を算出する演算手段と、演算手段を用いて、波形データにおける任意の波形位置の前2点、後1点のサンプリング点の波形サンプル値を通る第1の曲線、及び該任意の波形位置の前1点、後2点のサンプリング点の波形サンプル値を通る第2の曲線の間を通る第3の曲線上の値を該任意の波形位置の波形サンプル値として算出する補間手段と、を具備する。
【0014】
なお、上記演算手段は、排他的論理和の算出、及び該算出した排他的論理和の加算を行い、乗算結果を算出する、ことが望ましい。また、補間手段は、小数点以下の正の数値として、該数値を表す下位所定数ビットを切り捨てて得られる値を演算手段に入力する、ことが望ましい。
【発明の効果】
【0015】
本発明は、1から小数点以下の正の数値を減算して得られる減算値を、その数値の全ビットを反転させた値で近似し、その数値と減算値の乗算結果の算出を個別に行い、その乗算結果を用いて、波形データにおける任意の波形位置の前2点、後1点のサンプリング点の波形サンプル値を通る第1の曲線、及びその任意の波形位置の前1点、後2点のサンプリング点の波形サンプ値を通る第2の曲線の間を通る第3の曲線上の値をその任意の波形位置の波形サンプル値として算出する。
【0016】
1から小数点以下の正の数値を減算して得られる減算値を、その数値の全ビットを反転させた値で近似することにより、その数値と減算値の乗算結果は、例えば排他的論理和の算出、及びその加算により算出できるようになる。演算の対象とすべきビットの組み合わせ数は、それらの乗算を行う場合と比較して、大幅に少なくすることができる。そのため、第3の曲線上の値を任意の波形位置の波形サンプル値として算出するために必要な計算量は大幅に低減させることができる。
【発明を実施するための最良の形態】
【0017】
以下、本発明の実施の形態について、図面を参照しながら詳細に説明する。
<第1の実施の形態>
図1は、第1の実施の形態による波形データ補間装置を搭載した電子楽器の構成図である。
【0018】
その電子楽器は、図1に示すように、楽器全体の制御を行うCPU1と、CPU1が実行するプログラムや各種制御用データ等を格納したプログラムメモリ2と、複数の鍵を備えた鍵盤3と、各種スイッチを備えたスイッチ部4と、発音させるべき楽音の波高値を生成する音源部5と、その波高値生成用の波形データを格納した波形ROM6と、CPU1がワークに用いるデータメモリ7と、音源部5から出力される波高値をD/A変換してアナログのオーディオ信号を出力するD/A変換器(DAC)8と、そのDAC8が出力するオーディオ信号を音声に変換して放音するオーディオシステム9と、を備えて構成されている。本実施の形態による波形データ補間装置は、音源部5に搭載されている。
【0019】
上記CPU1は、プログラムメモリ2に格納されたプログラムを実行することにより、楽器全体の制御を行う。それによりCPU1は、例えば鍵盤3、及びスイッチ部4をそれぞれ予め定められたタイミングで走査して、鍵盤3上の各鍵、及びスイッチ部4が有する各スイッチの状態を検出し、その検出結果を前回の検出結果と比較することにより、状態の変化した鍵、或いはスイッチ、及びその変化の内容を特定する。その結果、状態が変化した鍵、或いはスイッチが特定できた場合、その鍵、或いはスイッチ、及びその変化の内容に応じて音源部5に対する指示を行う。そのような指示を行うことにより、電子楽器はユーザによる鍵盤3への演奏操作に応じて楽音を放音させる。
【0020】
波形ROM6に格納された波形データは、異なる波形位置でそれぞれサンプリングされた複数の波高値を波形サンプル値として示すものである。ここでは、その波形データとして、サンプリング点毎に、直前の波形サンプル値との差分値δを有するものを想定する。その差分値δは、その順番に沿ってそれぞれ異なるアドレスに格納されている。それにより、発音させるべき楽音の波高値は、その楽音のピッチに応じたアドレス幅(歩進幅。以降「読みだしピッチΔ」と呼ぶ)で波形ROM6から差分値δを読み出し、補間を行って生成(算出)するようになっている。その補間を行うために、本実施の形態による波形データ補間装置は音源部5に搭載されている。
【0021】
図2は、音源部5の構成を説明する図である。次に図2を参照して、音源部5の構成について詳細に説明する。
CPU1は、鍵盤3上の鍵の押鍵により発音させるべき楽音が生じた場合、音源部5に波形データの読み出しを開始すべきアドレス(波形スタートアドレス)の値、及びその楽音のピッチに応じた読みだしピッチΔを音源部に出力する。また、楽音に付加するエンベロープを制御するために、エンベロープ目標レベル、及びレイトを必要に応じて音源部5に出力する。例えばエンベロープ目標レベルは、エンベロープを構成する各部のレベルを指定するためのものであり、レイトは次に移行させるべきレベルへの移行に使うべき時間を指定するためのものである。それにより、楽音に付加するエンベロープの形はエンベロープ目標レベル、及びレイトによって指定するようになっている。
【0022】
エンベロープ目標レベル、及びレイトは、音源部5のENV発生ブロック5−3に入力される。その発生ブロック5−3は、それらのデータによって指定されるエンベロープを発音される楽音に付加するためのエンベロープデータENVを生成して積和ブロック5−5に出力する。付加するエンベロープがサスティーン部分に到達した場合に、その旨を通知するための到達フラグをCPU1に出力する。
【0023】
上記読みだしピッチΔは、小数点を含む数値である。小数アドレス計算ブロック5−2は、CPU1から読みだしピッチΔを入力し、その累算を順次、行い、小数点以下の累算値を小数アドレスxとして積和ブロック5−5に出力する。また、キャリーが生じた場合に、そのキャリーを整数アドレス計算ブロック5−1に出力する。
【0024】
整数アドレス計算ブロック5−1は、CPU1から波形スタートアドレス、及び波形ROM6から波形データを繰り返し読み出す範囲を示す波形ループアドレスを入力する。整数アドレスは波形スタートアドレス(の値)を初期値として、小数アドレス計算ブロック5−2からキャリーを入力する度にインクリメントを行う。そのインクリメント後のアドレスが波形データを繰り返し読み出す範囲を越えた場合には、その範囲の先頭に戻。それにより、楽音の発音期間の長さに係わらず、波高値の算出を可能とさせる。
【0025】
波形ROMデータラッチブロック5−4は、整数アドレス計算ブロック5−1により計算された整数アドレスに基づいて波形ROM6から読み出された差分値δを取り込み、取り込んだ差分値δの累算や減算等を行い、その累算によって得られる波形累算値(サンプリング点の波形サンプル値)、及びその減算によって得られる波形差分値を積和ブロック5−5に送る。
【0026】
積和ブロック5−5は、波形ROMデータラッチブロック5−4から入力する波形差分値、波形累算値、及び小数アドレス計算ブロック5−2から入力する小数アドレスxを用いて図7に示すような補間を行い、それによって得られる補間値にエンベロープデータENVを乗算した結果を時分割処理により音源のDCOの個数分、累算ブロック5−6に出力する。累算ブロック5−6は、CPU1から出力されるパンニングデータに従って、各DCOの出力をRIGHTチャンネル用の累算レジスタ5−6a、及びLEFTチャンネル用の累算レジスタ5−6bに割り振り、累算を行う。それにより、各累算レジスタ5−6a、5−6bには、対応するチャンネルで発音させるべき楽音の波高値の累算値が格納される。それらの累算値がそれぞれDAC8に出力されることにより、RIGHT、LEFTの各チャンネルで楽音が放音される。
【0027】
上記小数アドレスxは、補間値を求めるべき波形位置を示すものである。ここで図7を参照し、その小数アドレスxが与えられたと想定して、波形データにおけるその前2点、後1点のサンプリング点の波形サンプル値を通る2次曲線をY1(x)、その前1点、後2点のサンプリング点の波形サンプル値を通る2次曲線をY2(x)、それらの2次曲線Y1(x)、及びY2(x)の平均値を通る曲線をYS(x)としたときに曲線YS(x)がサンプリング点の波高値(波形サンプル値)或いは差分値δによってどのように表されるかを考える。
【0028】
その図7に示す座標系は、小数アドレスxの直前に位置するサンプリング点の波形サンプル値を原点に移動させたものである。原点とするサンプリング点の波形サンプル値をL0、その前のサンプリング点の波形サンプル値をL-1、原点の後のサンプリング点の波形サンプル値をL+1、その更に後のサンプリング点の波形サンプル値をL+2と表記すると、図7中のd0〜d2、及びδ-1〜δ+1はそれぞれ(1)及び(2)式により表される。
【0029】
原点、(1,d1)、及び(2,d2)を通る2次曲線Y1(x)をY1(x)=ax2+bxとおくと、x=1では
1(x)=d1=a+b ・・・ (3)
となり、x=2では
1(x)=d2=4a+2b ・・・ (4)
となる。(4)式−(3)式×2より
2a=d2−2d1 ∴ a=(1/2)(d2−2d1) ・・・ (5)
となる。また、(3)式×4−(4)式より
2b=4d1−d2 ∴ b=(1/2)(4d1−d2) ・・・ (6)
となる。故に、(5)及び(6)式で表されるa及びbを代入すると
1(x)=(1/2)(d2−2d1)x2+(1/2)(4d1−d2)x ・・・ (7)
が得られる。同様に(−1,0)、原点、及び(1,d1)を通る2次曲線Y2(x)をY2(x)=ax2+bxとおくと、x=−1では
2(x)=−d0=a−b ・・・ (8)
となり、x=1では
2(x)=d1=a+b ・・・ (9)
となる。(8)式+(9)式より
2a=d1−d0 ∴ a=(1/2)(d1−d0) ・・・ (10)
となる。また、−(8)式+(9)式より
2b=d1+d0 ∴ b=(1/2)(d1+d0) ・・・ (11)
となる。故に、(10)及び(11)式で表されるa及びbを代入すると
2(x)=(1/2)(d1−d0)x2+(1/2)(d1+d0)x ・・・ (12)
が得られる。座標系を元に戻すために原点の実際の波高値L0を加えると、(7)及び(12)式はそれぞれ以下のようになる。
【0030】
1(x)=(1/2)(d2−2d1)x2+(1/2)(4d1−d2)x+L0
・・・ (13)
2(x)=(1/2)(d1−d0)x2+(1/2)(d1+d0)x+L0
・・・ (14)
2次曲線Y1(x)、Y2(x)の平均値を曲線YS(x)とすると
S(x)=1/2{Y1(x)+Y2(x)}=(1/4)(d2−d1−d0)x2
+(1/4)(−d2+5d1+d0)x+L0
=(1/4)x{d2(x−1)+d1(−x+5)+d0(−x+1)}+L0
=(1/4)x{−d2(1−x)+d1(1−x)+d0(1−x)
+4d1}+L0
=x{(1/4)(−d2+d1+d0)(1−x)+d1}+L0 ・・・(15)
となる。d0〜d2とL-1〜L2は(1)式に表される関係があるから、(15)式中の(−d2+d1+d0)は
(−d2+d1+d0)=−(L2−L0)+(L1−L0)+(L0−L-1
=−(L2−L1)+(L0−L-1) ・・・ (16)
により計算される。また、δ-1〜δ+1とL-1〜L2の(2)式に表される関係、及び(16)式から(15)式を変形すると
S(x)=x*{(1/4)(−δ+1+δ-1)*(1−x)+δ0}+L0 ・・・ (17)
が得られる。
【0031】
(17)式では乗算は「*」で示す2箇所で行われる。それらの乗算は、{}内での乗算、及びそれに続く加算が終了した後、残りの乗算が行われる形となる。
さてLSIの回路設計では、同一のクロック信号に同期して、フリップフロップ(以下「FF」と記す)から出力された信号が組み合わせ回路を通過し、次の段のFFに入力されるという構成が採用されるのが普通である。乗算器は組み合わせ回路で構成することができるが、演算するビット幅が大きくなるに従い、多くのゲートといった基本素子を通る長いパスとなってしまう傾向がある。
【0032】
そのパスは、乗算器を構成する組み合わせ回路の間にFF等を追加することにより、より短い複数のパスに分割することができる。例えば乗算器の中間結果を保持させるために1段のFFを挿入することにより、パスを複数の短いパスに分割することができる。そのFFを挿入することにより、そのFFの前段、後段それぞれで結果の出力に1クロックの時間がかかるようになることから、乗算器が乗算結果を出力するのに2クロックの時間がかかることになる。しかし、前段、後段で異なる乗算を行わせることが可能なことから、乗算を続けて行わせる場合には、2クロックで2つの乗算結果を得ることが可能である(パイプライン演算)。FFを2段以上、挿入した場合も同様に、1クロック当たりに1つの乗算結果を得ることが可能である。
【0033】
上記(17)式では、前の乗算結果は次の乗算に用いる入力値として扱う必要がある。上記のような乗算器の高い利用効率を実現させるためには、各段の計算結果が無駄にならないようにする必要がある。そのため、(17)式中の乗算を行わせる場合には、前の乗算結果を用いた乗算を行わせるためのスケジューリングが複雑となる。これを回避するために、本実施の形態では(17)式に対して以下のような変形を行っている。
【0034】
S(x)=(1/4)(−δ+1+δ-1)*x(1−x)+δ0*x+L0 ・・・ (18)
本実施の形態では、(18)式中のx(1−x)に注目し、その計算は専用の演算器(ハードウェア)により行うようにしている。それにより、(18)式では乗算は「*」で示す2箇所、つまり(−δ+1+δ-1)*x(1−x)とδ0*xの2箇所となる。しかし、それら2箇所の乗算は、一方の乗算結果を他方の乗算に用いるものでは無いことから、演算上の関連は存在していない。このため、単純なスケジューリングで(18)式全体の計算を行わせることができるようになっている。
【0035】
(1−x)は、1>x≧0(符号無し)のとき、xを表現する全ビットの値を全て反転させ、LSBに1を加えたものである。本実施の形態では、LSBに1を加えずに、xを表現する全ビットの値を全て反転させたものに近似する。そのように近似すると、x(1−x)は以下のようにして計算することができる。図4を参照して具体的に説明する。その図4では、xは8ビットで表される小数点以下の数値として、各ビットの値をa[7]〜a[0]と表記している。その全ビットの値を全て反転させて近似した(1−x)は、各ビットの値を-a[7]〜-a[0]と表記している(ビット反転記号としては普通「〜」の上添字が用いられるが、ここではその記号として「−」の上添字を用いている)。a[0]、-a[0]はLSBに相当するビットの値を示している。また、「&」は論理積、「^」は排他的論理和を示している。なお、a[7]〜a[0]については「a[7:0]」とも表記することにする。これは他でも同様である。
【0036】
乗算を用いてx(1−x)の値を求める場合、図4(a)に示すような計算を行う必要がある。その図4において、任意の数値yでy&-y=0だから
a[0]&-a[0]=a[1]&-a[1]=・・・=a[7]&-a[7]=0
となる。
【0037】
また、任意の数値y、zでy&-z+-y&z=y^zだから、図4(a)中の0を結んだ線を対称軸にした場合に線対称となる位置関係にある2つの部分積の加算値は排他的論理和を用いて表すことができる。具体的には
a[1]&-a[0]+a[0]&-a[1]=a[1]^a[0]
a[2]&-a[0]+a[0]&-a[2]=a[2]^a[0]
a[3]&-a[0]+a[0]&-a[3]=a[3]^a[0]
a[2]&-a[1]+a[1]&-a[2]=a[2]^a[1]
・ ・ ・
a[7]&-a[6]+a[6]&-a[7]=a[7]^a[6]
となる。このため、図4(b)に示すように、各ビット同士の排他的論理和の和として計算することができる。その和は、図4(c)に示す計算方法を用いて計算する。
【0038】
図4(c)に示すように、排他的論理和の和は、3段の加算により計算するようにしている。図4(c)中のs2[6:0]、s1[6:0]、及びs0[8:0]はそれぞれ対応する段、ビットの加算結果を示している。
【0039】
本実施の形態では、各段で加算する2つの数値のうちの一方の上位2ビットは00とさせることにより、キャリーが各段で生じないようにさせている。このため、図4(c)の下段に示すように、排他的論理和の和は(0,0,s2[6:0],s1[1:0],s0[3:0])の計15ビットで表される値となる。
【0040】
このように、x、(1−x)の一方を、他方の全ビットの値を全て反転させたものに近似すると、x(1−x)は排他的論理和の和の形で求めることができるようになる。演算の対象とすべきビットの組み合わせ数は大きく低減する。そのため、図4(a)、及び図4(c)から明らかなように、計算量を大幅に低減させることができる。それにより、ハードウェアにより計算を行わせる場合には、より小さい規模のハードウェアでも計算を高速に行えるようになる。ハードウェアの制御もより簡単化する。ソフトウェア処理により計算を行わせる場合には、ソフトウェアを変更することで計算をより高速に行えることとなる。これらのことから、ハードウェア、ソフトウェアの何れにより補間の計算を行わせるとしても、より低コストで波形データ補間装置を実現できることとなる。
【0041】
上記排他的論理和の和を求める計算は、音源部5のなかで波形ROMデータラッチブロック5−4、及び積和ブロック5−5により行われる。このことから、それらブロック5−4、5−5の構成と動作について図3を参照して詳細に説明する。その図3において、501〜504、509〜511、及び521〜523はレジスタ、505、506、516、及び517はマルチプレクサ、507は加減算器、514は右2ビットシフタ、515はx(1−x)を計算するハードウェアである演算器、519は乗算器、520は加算器である。
【0042】
始めに、波形ROMデータラッチブロック5−4の動作について詳細に説明する。
レジスタ501には、図7に示す座標系の原点に相当するサンプリング点での波高値L0が格納され、レジスタ503、502、504にはそれぞれ、そのサンプリング点の差分値δ0、その直後のサンプリング点の差分値δ+1、原点に相当するサンプリング点の直前に位置するサンプリング点の差分値δ-1が格納される。波形ROMデータラッチブロック5−4によって波形ROM6から新たに差分値δの読み出しが行われる場合、読み出された差分値δはレジスタ502に格納される。レジスタ502、503にそれまで格納されていた差分値δはそれぞれ事前にレジスタ503、504に格納される。それらレジスタ503、504の値の更新を行う前に、マルチプレクサ505、506にそれぞれa端子を選択させ、加減算器507に加算(ADD)を指示して行わせる。その加算により、δ0+L0=L1−L0+L0=L1が計算され、その計算結果が新たな波高値L0としてレジスタ501に格納される。
【0043】
レジスタ502に差分値δを格納した後は、マルチプレクサ505、506にそれぞれb端子を選択させ、加減算器507に減算(SUB)を指示して行わせる。その減算により、−δ+1+δ-1の計算結果がレジスタ509に格納される。
【0044】
以上の動作が、波形ROM6から新たな差分値δの読み出しに対応して行われる。各レジスタ501、503、及び504に格納された内容は、新たに波形データがアサインされた場合に、リセット信号によりリセットされる。そのリセット信号は、例えばCPU1により、或いはその指示により出力される。
【0045】
次に、積和ブロック55の動作について詳細に説明する。
レジスタ510、511には、それぞれ小数アドレス計算ブロック5−2から出力された最新の小数アドレスx、ENV発生ブロック5−3から出力された最新のエンベロープデータ(エンベロープ値)ENVが格納される。演算器515は、x(1−x)の値を図4(c)に示す計算方法により算出する、排他的論理和の和を演算するハードウェアである。その値の算出は、例えばレジスタ510に新たな小数アドレスxが格納された場合に行う。
【0046】
演算器515がx(1−x)の値を算出すると、次にマルチプレクサ516、517、及び518にそれぞれa端子を選択させ、乗算器519、加算器520にそれぞれ演算を行わせる。それにより、乗算器519は、レジスタ509に格納された値を右2ビットシフタ514が右に2ビットシフトすることで1/4倍された値(=(1/4)(−δ+1+δ-1))とx(1−x)の乗算結果を出力する。加算器520は、その乗算結果と波高値L0の加算結果(=(1/4)x(1−x)*(−δ+1+δ-1)+L0)を出力する。その加算結果はレジスタ521に格納される。
【0047】
レジスタ521への加算結果の格納が終了すると、次にマルチプレクサ516、517、及び518にそれぞれb端子を選択させ、乗算器519、加算器520にそれぞれ演算を行わせる。それにより、乗算器519は、レジスタ503に格納された差分値δ0と小数アドレスxの乗算結果を出力する。加算器520は、その乗算結果とレジスタ521に格納された値の加算結果(=(1/4)x(1−x)*(−δ+1+δ-1)+L0+xδ0)を出力する。その加算結果はレジスタ522に格納される。
【0048】
レジスタ522への加算結果の格納が終了すると、次にマルチプレクサ516、517、及び518にそれぞれc端子を選択させ、乗算器519、加算器520にそれぞれ演算を行わせる。それにより、乗算器519は、レジスタ522に格納された値とエンベロープ値ENVの乗算結果を出力する。加算器520は、その乗算結果と0の加算結果(=ENV*[(1/4)x(1−x)*(−δ+1+δ-1)+L0+xδ0])を出力する。その加算結果はレジスタ523に格納され、時分割処理のDCO出力として累算ブロック5−6に出力される。
<第2の実施の形態>
(18)式右辺のδ0*x+L0は、直線補間を行った場合に得られる補間値に相当する。それを除く部分、つまり(1/4)(−δ+1+δ-1)*x(1−x)は、直線補間で用いる区間(連続する2つのサンプリング点間)のその前の区間における差分値δ-1と、その次の区間における差分値δ+1を用いて算出する、補間値の補正値と見なすことができる。第2の実施の形態は、その視点で補間値を算出するようにしたものである。
【0049】
第2の実施の形態による波形データ補間装置が搭載された電子楽器の構成は、第1の実施の形態におけるそれと基本的に同じである。また、動作も大部分は同じである。このことから、第1の実施の形態の説明で付した符号をそのまま用いて、第1の実施の形態から異なる部分についてのみ説明する。
【0050】
図5は、補正値のビット数による変化を説明する図である。図5に示すグラフの横軸は小数アドレスxの値、縦軸は補正値をそれぞれ示している。それにより、小数アドレスを1>x≧0の範囲で変化させたときの各種補正値を示している。図5では、その補正値として、小数アドレスxの値を表すビット数が4、6、及び8ビットとした場合に、つまりそれらのビット数で小数アドレスxを近似した場合に得られる補正値をそれぞれ実線、点線、及び一点鎖線で示し、補正値の理想値を太線で示している。
【0051】
図5に示すように、小数アドレスxを近似すると、その補正値は全て理想値よりも小さくなる(より正確には、理想値よりも縦軸の値が0の線側になる)。これは、実際の補間を行うと、その補間によって実際に得られる補正値(波高値)は、その補間を理想的に行った場合の波高値と、直線補間だけを行った場合の波高値と、の間になることを意味する。その実際に得られる波高値は、小数アドレスxを表現するビット数が多くなるほど、補間を理想的に行って得られる波高値に近づくが、或る程度のビット数であれば理想の波高値に十分、近づけられることを図5は示している。
【0052】
図3において、レジスタ510に格納された小数アドレスxの上位4ビットのみを演算器515に入力した場合、その出力のビット数が8ビットとすると、そのMSBから2ビット、及びLSBは必ず0となる。そのため、乗算器519では、演算器515の出力を入力する側は5ビットで済むようになる。
【0053】
演算器515の出力を入力する側のビット数をより少なくすると、その出力を用いて乗算を行う乗算器の規模はより小さくできるようになる。そのため、補間のための計算を行わせるハードウェアの規模もより小さくできることとなる。ソフトウェア処理によりその計算を行わせる場合には、処理に必要なメモリ量をより低減できることとなる。
【0054】
(18)式右辺の(−δ+1+δ-1)*x(1−x)には重み付けの係数として1/4がかかっているので、MSBの上位に2ビットの0が追加された形となり、演算器515の出力の精度は10ビット相当となる。小数アドレスxの上位4ビットのみを演算器515に入力しても、図5に示すように、補正値として十分な精度のものを得ることができる。同様に、小数アドレスxの上位nビットのみを演算器515に入力した場合には、その出力の精度は2*n+2ビット相当となり、その出力を入力する側は2*n−3ビットで済むこととなる。このようなことから、第2の実施の形態では、レジスタ510に格納された小数アドレスxの上位nビットのみを演算器515に入力し、それ以下のビットを切り捨てるようになっている。
【0055】
なお、本実施の形態(第1、及び第2の実施の形態)では、補間のための計算を音源部5に搭載のハードウェアにより行わせるようになっているが、ソフトウェア処理によりその計算を行わせるようにしても良い。そのハードウェアの構成については、本実施の形態のものに限定されるわけではなく、様々な変形を行うことができる。
【図面の簡単な説明】
【0056】
【図1】第1の実施の形態による波形データ補間装置を搭載した電子楽器の構成図である。
【図2】音源部5の構成を説明する図である。
【図3】音源部5の波形ROMデータラッチブロック5−4、及び積和ブロック5−5の構成を説明する図である。
【図4】補間を行うために採用した計算方法を説明する図である。
【図5】補正値のビット数による変化を説明する図である。
【図6】従来、行われている直線補間を説明する図である。
【図7】特許文献1に記載された従来の補間を説明する図である。
【符号の説明】
【0057】
1 CPU
5 音源部
5−1 整数アドレス計算ブロック
5−2 小数アドレス計算ブロック
5−3 ENV発生ブロック
5−4 波形ROMデータラッチブロック
5−5 積和ブロック
5−6 累算ブロック
6 波形ROM
501〜504、509〜511、521〜523 レジスタ
505、506、516、517 マルチプレクサ
507 加減算器
514 右2ビットシフタ
515 演算器
519 乗算器
520 加算器





 

 


     NEWS
会社検索順位 特許の出願数の順位が発表

URL変更
平成6年
平成7年
平成8年
平成9年
平成10年
平成11年
平成12年
平成13年


 
   お問い合わせ info@patentjp.com patentjp.com   Copyright 2007-2013