応用情報技術者 2021年 春期 午後 問07
ディジタル補聴器の設計に関する次の記述を読んで、設問1~3に答えよ。
H社は、ディジタル補聴器を開発している会社である。開発するディジタル補聴器(以下、新補聴器という)は、ソフトウェアでの信号処理によって、入力された音を八つの周波数帯(以下、それぞれを帯域という)に分割し、帯域ごとの音量設定ができる。さらに、入力された音の大きさに応じて自動的に音量の調節を行う自動音量調節(以下、AVCという)の機能がある。想定される利用者は、特定の帯域の音が聞き取りにくい人などである。入力された音の帯域への分割を図1に示す。

利用者は、スマートフォンのアプリケーションプログラム(以下、スマホアプリという)を使用して、帯域ごとの音量設定に必要な各種パラメタ(音量パラメタなど)を変更する。
〔ハードウェア構成〕
新補聴器のハードウェア構成を図2に示す。

・BTモジュールは、Bluetoothを介してスマホアプリと通信する。
・ADCは、マイクから入力されたアナログ信号を、1秒間に24,000回サンプリングし、16ビットの符号付き整数のデータに変換して入力バッファに書き込む。64サンプルのデータを1フレームとして書き込み、書込みが完了したことを制御部に通知する。この通知を受信完了通知という。
・制御部は、受信完了通知を受けると1フレーム分のデータを処理して出力バッファに書き込む。演算は全て整数演算であり、浮動小数点演算は使用しない。
・DACは、出力バッファに書き込まれた16ビットの符号付き整数のデータをアナログ信号に変換する。
・低速クロック部は、ADC及びDACに24 kHzのサンプリングクロックを供給する。
・高速クロック部は、制御部に高速クロックを供給する。高速クロックの周波数はf0又はその整数倍で、ソフトウェアによって決定することができる。
〔入力バッファ及び出力バッファ〕
入力バッファ及び出力バッファは、それぞれ三つのブロックで構成されている。一つのブロックには1フレーム分のデータを格納できる。入力バッファ及び出力バッファのサイズはともにaバイトである。
ADC及びDACは、入力バッファ及び出力バッファの同じブロック番号のブロックにアクセスする。制御部は、ADCによるデータの書込みが完了したブロックにアクセスする。ADC、DAC及び制御部は、ブロック3にアクセスした後、ブロック1のアクセスに戻る。
バッファの使用例を図3に示す。(1) ADC及びDACがブロック1にアクセスしているとき、制御部はブロック3にアクセスする。次に、(2) ADC及びDACがブロック2にアクセスしているとき、制御部はブロック1にアクセスする。

マイクからのアナログ信号がADCで処理されてから、イヤホンから出力されるまでの時間はbミリ秒になる。
〔新補聴器のソフトウェア〕
制御部のソフトウェアの主な処理内容は、①信号処理、②合成、③AVCである。
制御部が受信完了通知を受けると、次に示すように処理を行う。
① サンプリングしたデータから一つの帯域を抽出し、帯域に割り当てられた音量パラメタを乗じる。これを八つの帯域に対して行う。
② ①で得られたそれぞれの帯域のディジタル信号を合成して一つのディジタル信号にする。
③ 合成されたディジタル信号について、AVCで音量を調節して、出力バッファに書き込む。
新補聴器の消費電力をできるだけ抑えたい。新補聴器では、消費電力は供給される高速クロックの周波数に比例し、ソフトウェアの実行時間(以下、実行時間という)は高速クロックの周波数に反比例することが分かっている。
最適なクロック周波数を決定するために、高速クロックの周波数を用いて、①~③の実行時間を計測した。
1フレーム分のデータを処理するとき、①の一つの帯域の最大実行時間を, ②の最大実行時間を, ③の最大実行時間をとしたとき、1フレーム分のデータを処理する最大実行時間は、8 × c + d + e で表すことができる。
受信完了通知から次の受信完了通知までの時間をTframeとし、高速クロックとして周波数を供給したときの各処理の実行時間を表1に示す。①~③の全ての処理がTframe内に完了し、かつ、消費電力が最も抑えられる周波数について、表1を基に決定する。

〔AVC処理〕
〔新補聴器のソフトウェア〕の③の処理は、1フレームごとに実行し、適切な音声を出力するように音量を調節する。合成されたディジタル信号の大きさを確認して所定の大きさよりも大きいときは音量を小さくし、所定の大きさよりも小さいときは音量を大きくする。
音量を変更するときは1フレームごとに音量を変化させ、M又はM+1フレーム間で徐々に目標の音量にする。Mは2以上の値でシステムの定数である。目標の音量に到達したら、その次のフレームの合成された信号について目標の音量を決定し、同様の音量調節を行う。
〔AVC処理のソフトウェア〕
AVCの処理フローで使用する変数、関数、定数を表2に、AVCの処理フローを図4に示す。特定の条件では、目標の音量を決定したとき、直ちに音量を目標の音量にする。そのための判定を網掛けした判定部で行っている。演算は全て整数演算である。

設問1:入力バッファ及び出力バッファについて、(1)、(2)に答えよ。
問題文を見る(1)本文中のaに入れる適切な数値を答えよ。
模範解答
a:384
解説
解答の論理構成
-
フレームのデータ量を確認
- 【問題文】「64サンプルのデータを1フレームとして書き込み」
- 【問題文】「16ビットの符号付き整数のデータに変換して入力バッファに書き込む」
16ビット=2バイトなので、1フレーム当たりの容量は
。
-
ブロック数を確認
- 【問題文】「入力バッファ及び出力バッファは、それぞれ三つのブロックで構成」
1ブロック=1フレーム分なので、バッファ全体は
。
- 【問題文】「入力バッファ及び出力バッファは、それぞれ三つのブロックで構成」
-
結論
- よって、【問題文】中の「aバイト」に入る数値は 384 である。
誤りやすいポイント
- 「16ビット」を「16バイト」と読み間違える。ビット/バイト換算を必ず確認しましょう。
- 「三つのブロック」を見落とし、1フレーム(128バイト)のまま答えてしまう。
- サンプル数「64」を「65,536(2の16乗)」など他の典型値と混同するミス。
FAQ
Q: 1フレームは“64サンプル”固定ですか?
A: はい。【問題文】で1フレーム=64サンプルと明記されているため、設計時点では可変ではありません。
A: はい。【問題文】で1フレーム=64サンプルと明記されているため、設計時点では可変ではありません。
Q: 2バイト換算は常に と考えれば良いですか?
A: そのとおりです。1バイト=8ビットなので、16ビットは バイトになります。
A: そのとおりです。1バイト=8ビットなので、16ビットは バイトになります。
Q: 出力バッファも同じサイズで良いのですか?
A: はい。入力・出力とも同じ三つのブロック構成で、1ブロック=1フレーム(128バイト)ですから、両方とも384バイトです。
A: はい。入力・出力とも同じ三つのブロック構成で、1ブロック=1フレーム(128バイト)ですから、両方とも384バイトです。
関連キーワード: バッファサイズ, サンプル数, ビット換算, メモリ計算
設問1:入力バッファ及び出力バッファについて、(1)、(2)に答えよ。
問題文を見る(2)本文中のbに入れる適切な数値を答えよ。答えは小数第2位を四捨五入して、小数第1位まで求めよ。ここで、ADCの変換時間及びDACの変換時間は無視できるものとする。
模範解答
b:8.0
解説
解答の論理構成
-
フレーム時間を求める
【問題文】に「ADCは、マイクから入力されたアナログ信号を、1秒間に24,000回サンプリングし、16ビットの符号付き整数のデータに変換して…64サンプルのデータを1フレームとして書き込み」とあります。
フレーム時間
-
バッファ構成から必要フレーム数を把握
【問題文】には「入力バッファ及び出力バッファは、それぞれ三つのブロックで構成」「ADC及びDACは、…同じブロック番号のブロックにアクセスする」「制御部は、ADCによるデータの書込みが完了したブロックにアクセスする」とあります。
図3の使用例を踏まえると、
• フレーム1:ADCがブロック1を埋める
• フレーム2:制御部が加工済みデータをブロック1に書き戻す
• フレーム3:DACがブロック1を再生
よって、あるサンプルがADCに取り込まれてからDACで出力されるまでに3フレーム分の遅延が生じます。 -
遅延時間の計算= 3 \times 2.666\dots\ \text{ms} = 8.000\dots\ \text{ms}$$
-
指示どおり「小数第2位を四捨五入して、小数第1位まで」求めると
したがって、b に入る数値は 8.0 となります。
誤りやすいポイント
- 64サンプルを “65サンプル” と勘違いしフレーム時間を誤算する。
- 三重バッファを「ADCとDACの二重のみ」と捉え2フレーム分しか見積もらない。
- ADCやDACの変換時間を考慮してしまい、指示「変換時間は無視できる」を読み落とす。
FAQ
Q: 3フレーム分遅れるのは必ず最大値ですか?
A: はい。ADC・制御部・DACが常に別ブロックを扱うパイプライン構成のため、最小でも3フレーム分の遅延が発生します。
A: はい。ADC・制御部・DACが常に別ブロックを扱うパイプライン構成のため、最小でも3フレーム分の遅延が発生します。
Q: 制御部の処理時間が長い場合でも3フレームで済みますか?
A: 各処理がTframe内に収まることが設計条件です。間に合わなければ周波数を上げて調整します。条件を満たす限り遅延フレーム数は変わりません。
A: 各処理がTframe内に収まることが設計条件です。間に合わなければ周波数を上げて調整します。条件を満たす限り遅延フレーム数は変わりません。
Q: フレーム長を秒で求めたまま計算しても良いですか?
A: 可能ですが、最終答案はミリ秒表記・小数第1位までに丸める必要があります。
A: 可能ですが、最終答案はミリ秒表記・小数第1位までに丸める必要があります。
関連キーワード: サンプリング周波数, フレーム長, 三重バッファリング, レイテンシ, ディジタル信号処理
設問2:新補聴器のソフトウェアについて、(1)、(2)に答えよ。
問題文を見る(1)本文中のc〜eに入れる適切な字句を答えよ(dとeは順不同)。
模範解答
c:Tf
d:Ts
e:Ta
解説
解答の論理構成
-
【問題文】には次の記載があります。
- 「① サンプリングしたデータから一つの帯域を抽出し…これを八つの帯域に対して行う。」
- 「② ①で得られたそれぞれの帯域のディジタル信号を合成して…」
- 「③ 合成されたディジタル信号について、AVCで音量を調節して…」
- 「①の一つの帯域の最大実行時間を , ②の最大実行時間を , ③の最大実行時間を としたとき、1フレーム分のデータを処理する最大実行時間 は、8 × c + d + e で表すことができる。」
-
①は「八つの帯域すべて」に対して同じ処理を行います。したがって実行時間は
になります。よって c は です。 -
②は合成処理が1回だけ行われるので d(またはe)が になります。
-
③も1フレームにつき1回だけなので残りの空欄が です。
-
以上より
c=「Tf」、d=「Ts」、e=「Ta」
(ただし【問題文】が示すように「dとeは順不同」です)。
誤りやすいポイント
- 「八つの帯域」を見落とし、 を8倍し忘れる。
- ②と③は1フレーム当たり1回だけなのに、8倍してしまう。
- と のどちらを d、e に入れるかで迷うが、順不同の指示を読み落として固定だと思い込む。
FAQ
Q: ②と③のどちらを d、e に入れても正解になるのですか?
A: はい。【問題文】に「dとeは順不同」とあるため、 と が入れ替わっていても減点対象になりません。
A: はい。【問題文】に「dとeは順不同」とあるため、 と が入れ替わっていても減点対象になりません。
Q: なぜ①だけ8倍するのですか?
A: ①の処理は「八つの帯域に対して行う」と明示されており、1帯域当たりの最大実行時間が と定義されているため、1フレームでは になります。
A: ①の処理は「八つの帯域に対して行う」と明示されており、1帯域当たりの最大実行時間が と定義されているため、1フレームでは になります。
Q: ブロックバッファが三つあることは本設問に関係しますか?
A: 本小問は実行時間の定義式に関する設問なので、バッファ数は直接の解答要素にはなりません。
A: 本小問は実行時間の定義式に関する設問なので、バッファ数は直接の解答要素にはなりません。
関連キーワード: サンプリング, 逐次処理, 実行時間, 周波数帯分割, 自動音量調節
設問2:新補聴器のソフトウェアについて、(1)、(2)に答えよ。
問題文を見る(2)決定した高速クロックの周波数はf0の何倍か。適切な数値を整数で答えよ。
模範解答
3
解説
解答の論理構成
-
各処理のフレーム当たり最大実行時間を整理
【問題文】の表1より
・①の一つの帯域の処理時間は「Tf = 0.30 × Tframe」
・②の処理時間は「Ts = 0.05 × Tframe」
・③の処理時間は「Ta = 0.20 × Tframe」 -
フレーム全体で必要な処理時間Tdを算出
【問題文】に「1フレーム分のデータを処理する最大実行時間Tdは、8 × c + d + e」とある。
ここで
[c]=Tf、[d]=Ts、[e]=Taなので
Td = 8 × 0.30 Tframe + 0.05 Tframe + 0.20 Tframe
= 2.40 Tframe + 0.05 Tframe + 0.20 Tframe
= 2.65 Tframe -
クロック周波数と実行時間の関係
【問題文】に「実行時間は高速クロックの周波数に反比例する」とある。
周波数をf0のk倍にすると所要時間は1/k倍になる。
⇒ 各フレームで必要な時間はTd/k -
処理が収まるための条件
Td/k ≤ Tframe
2.65 Tframe / k ≤ Tframe
2.65 / k ≤ 1
k ≥ 2.65 -
消費電力最小の整数倍を選ぶ
【問題文】に「消費電力は供給される高速クロックの周波数に比例」とある。
周波数を必要最小限にとどめるためkを2.65以上の最小整数とする。
⇒ k = 3 -
よって、決定した高速クロックの周波数はf0の「3」倍である。
誤りやすいポイント
- ①の処理時間を0.30 Tframeのまま用い、8倍し忘れる。
- 3重バッファを理由に「3フレーム分の時間が使える」と誤解し、k=1や2で足りると判断する。
- 逆比例の関係を取り違え、「周波数が上がると実行時間も増える」と錯覚してしまう。
- 「整数倍」の指示を読み落とし、k=2.65のような実数値を答えてしまう。
FAQ
Q: 8倍するのはなぜですか?
A: ①の処理は「一つの帯域」の時間が「0.30 × Tframe」と示されているため、八つの帯域分で8倍が必要です。
A: ①の処理は「一つの帯域」の時間が「0.30 × Tframe」と示されているため、八つの帯域分で8倍が必要です。
Q: 3重バッファがあるから余裕ができるのでは?
A: バッファはADC/DACと制御部の同時アクセスを防ぐためで、フレームごとの処理完了期限(Tframe)自体は変わりません。よって1フレーム内で計算を終える必要があります。
A: バッファはADC/DACと制御部の同時アクセスを防ぐためで、フレームごとの処理完了期限(Tframe)自体は変わりません。よって1フレーム内で計算を終える必要があります。
Q: k=4でも良いのでは?
A: 条件を満たす最小の整数倍を選ぶことで消費電力を最小化できます。k=3が最小なので4を選ぶ必要はありません。
A: 条件を満たす最小の整数倍を選ぶことで消費電力を最小化できます。k=3が最小なので4を選ぶ必要はありません。
関連キーワード: 整数倍クロック, フレーム処理時間, 逆比例関係, 電力最適化, ディジタル信号処理
設問3:AVC処理のソフトウェアについて、(1)、(2)に答えよ。
問題文を見る模範解答
ア:dv > 0 and v≧ vt
イ:vt
ウ:0
解説
解答の論理構成
-
“音量を変更するときは1フレームごとに音量を変化させ、M又はM+1フレーム間で徐々に目標の音量にする。…目標の音量に到達したら、その次のフレーム…同様の音量調節を行う。”
─ 利用者が設定した現在の音量vが目標音量vtに到達した瞬間、変化量dvは以後0にし、vをぴったりvtに合わせる必要があります。 -
表2より
・dv … “音量のフレームごとの変化分であり、初期値は0”
・v … “現在の音量”
・vt … “AVCの目標の音量”
─ したがって「現在の音量が目標を行き過ぎたか到達したか」を判定する条件式が必要です。 -
フロー図では
・負方向に調整中(dv < 0)の場合は “v ≦ vt” でオーバーシュートを判定。
・正方向に調整中(dv > 0)の場合は対称性より “v ≧ vt” が必要。
よって ア には “dv > 0 and v≧ vt” が入ります。 -
オーバーシュートが起きたら
・vを強制的に目標値に合わせる → イ = vt
・これ以上変化させないようにする → dvを0にリセット → ウ = 0
以上より
[ア] dv > 0 and v≧ vt
[イ] vt
[ウ] 0
[ア] dv > 0 and v≧ vt
[イ] vt
[ウ] 0
誤りやすいポイント
- “dv > 0” と “dv < 0” の対称性を見落とし、v ≧ vtではなくv > vtとしてしまう。
- オーバーシュート後にdvを ±1など微小値にしてしまい、次フレームで再び判定が走り続ける実装にしてしまう。
- [イ] に現在値vをそのまま入れる誤答。目標ぴったりに合わせるためにはvtを代入する。
FAQ
Q: “dv = 0 and v ≠ vt” の判定は何のためですか?
A: 目標音量が変わった直後はdvがまだ0でvが追いついていません。この判定で新しいdvを再計算し、追従開始します。
A: 目標音量が変わった直後はdvがまだ0でvが追いついていません。この判定で新しいdvを再計算し、追従開始します。
Q: なぜ整数演算なのに割り算 “(vt − v) ÷ M” が使えるのですか?
A: 仕様上 “演算は全て整数演算” なので、商の整数部だけを取り、フレームごとの変化量を決めています。端数は次フレーム以降の再計算で吸収されます。
A: 仕様上 “演算は全て整数演算” なので、商の整数部だけを取り、フレームごとの変化量を決めています。端数は次フレーム以降の再計算で吸収されます。
Q: M+1フレームになるケースはどこで決まりますか?
A: 端数処理の結果、最終フレームでdvが0にならない場合はもう1フレーム追加されるため、実質MかM+1フレームになります。
A: 端数処理の結果、最終フレームでdvが0にならない場合はもう1フレーム追加されるため、実質MかM+1フレームになります。
関連キーワード: 音量制御, オーバーシュート, フィードバック, 整数演算, 条件分岐
設問3:AVC処理のソフトウェアについて、(1)、(2)に答えよ。
問題文を見る(2)図4中の網掛けした判定部において、判定結果が“Yes”となるのは、音量がどのような場合か。40字以内で述べよ。
模範解答
現在の音量が目標値に近く、変化量が0となり音量を変更する必要がない場合
解説
解答の導き方
- 図4を見ると、網掛けされた判定部は「dv = 0 and v ≠ vt」を評価しています。まずここが何を意味するかを押さえます。
- 図4の直前で dv は「dv ← (vt − v) ÷ M」として計算されます(図中の代入)。また問題文に「演算は全て整数演算であり、浮動小数点演算は使用しない。」とあるため、dv の計算は整数除算で行われます。
- 整数除算の性質から、 のとき の結果は0になります。つまり目標と現在の音量の差が小さく、Mで割ると切り捨てられて0になる場合にdv = 0となります。
- その直後に網掛け判定「dv = 0 and v ≠ vt」があるため、dvが0でかつvとvtが異なると判定はYesになります。問題文に「特定の条件では、目標の音量を決定したとき、直ちに音量を目標の音量にする。」とあるので、これは整数除算によって生じる小さな差をそのまま放置せず即時補正するための判定です。
- 以上より、判定部がYesになるのは「現在の音量が目標に近く、変化量dvが0になってしまい(整数除算で切り捨てられ)、段階的変更では差を解消できない場合」です。簡潔にまとめると次の通りです。
解答(要旨)
現在の音量が目標値に近く、変化量が0となり音量を変更する必要がない場合
現在の音量が目標値に近く、変化量が0となり音量を変更する必要がない場合
誤りやすいポイント
- dv = 0は必ずv = vtを意味する、つまり「変更不要」と短絡する誤り。dv = 0は差が小さいために切り捨てられた結果で、vとvtが異なる場合もあるため網掛け判定で補正される点を見落としやすい。
- 整数演算の扱いを忘れて小数的に考える誤り。小さな差があっても整数除算で0になることを明示的に考慮する必要がある。
- (vt − v) の符号を無視して「0になる条件」を誤解する誤り。正しくは のときに零となることを理解する。
- 「dvが0だから次フレームで変えられない」と結論付けて即時補正の存在を否定する誤り(問題文は即時補正を行う旨を明記している)。
FAQ
Q: dvが0でもv ≠ vtのとき、本当に即時に目標値に合わせるのですか?
A: はい。図4の流れと問題文の「特定の条件では、目標の音量を決定したとき、直ちに音量を目標の音量にする。」から、dvが0でv ≠ vtの場合は即時補正を行うことが設計意図です。
A: はい。図4の流れと問題文の「特定の条件では、目標の音量を決定したとき、直ちに音量を目標の音量にする。」から、dvが0でv ≠ vtの場合は即時補正を行うことが設計意図です。
Q: なぜ即時補正が必要なのですか?
A: 整数除算で dv が 0 になると、以降フレームごとに v ← v + dv を繰り返しても差が変わらず目標に到達しないため、差を残したままになるのを防ぐためです。
A: 整数除算で dv が 0 になると、以降フレームごとに v ← v + dv を繰り返しても差が変わらず目標に到達しないため、差を残したままになるのを防ぐためです。
Q: Mの値が小さいとどうなりますか?
A: Mは「2以上の値でシステムの定数」とあるため、Mが小さいほど (vt−v) ÷ Mが0になりにくく、段階的変化で目標に近づけやすくなります。逆にMが大きいと小さな差でdv=0になりやすく、即時補正が働る機会が増えます。
A: Mは「2以上の値でシステムの定数」とあるため、Mが小さいほど (vt−v) ÷ Mが0になりにくく、段階的変化で目標に近づけやすくなります。逆にMが大きいと小さな差でdv=0になりやすく、即時補正が働る機会が増えます。
関連キーワード: ディジタル信号処理、整数演算、量子化誤差、サンプリング、追従制御




