令和3年度 春期 応用情報技術者試験 午後 問題 問7 ディジタル補聴器の信号処理バッファ管理とクロック周波数要件
学習ガイド
入力された音声を周波数帯ごとに分割し、自動で音量調節を行うディジタル補聴器を題材にした組込みシステム開発の問題です。サンプリングレートに基づくデータ処理のタイミング要件、入力・出力バッファの切り替えの仕組み、消費電力を抑えつつリアルタイム処理に間に合うプロセッサのクロック周波数の決定が問われます。ハードウェアの並列動作によるデータの流れと遅延時間の発生メカニズムを整理し、実行時間の計算式を論理的に導きます。
この記事で押さえる論点
- サンプリング周波数とフレームサイズに基づいて、信号処理に許容される時間を計算できる
- 複数のバッファを用いたA/D変換、D/A変換、制御部の並列処理による遅延時間を説明できる
- 処理の実行時間とクロック周波数の関係から、リアルタイム処理を満たしつつ消費電力を抑える周波数を決定できる
出題情報
- 出題
- 2021(R3)春 応用情報技術者 午後 問7
- 配点
- 20点満点
- 模範解答
- 公表(設問ごとに掲載)
出題趣旨・採点講評(IPA 公表)
補聴器は,ディジタル化が進み,入力された音を複数の周波数帯域に分割し,周波数帯域ごとに音量設定が可能な製品が販売されている。周波数帯域に分割するフィルタには論理演算だけで実現できるディジタルフィルタが使われている。また,各種設定をスマートフォンから行うことができる製品もある。本問では,ディジタル補聴器を題材として,使用するバッファのサイズ,音声が入力されてから出力されるまでの遅延時間の計算,処理能力と消費電力を考慮した最適な動作クロック周波数の決定,及び自動音量調節のアルゴリズムについての設計・実装に関する能力を問う。
問7では,ディジタル補聴器を題材に,ディジタル補聴器の構成,性能と消費電力及び自動音量調節機能について出題した。全体として正答率は平均的であった。
問題本文
ディジタル補聴器の設計に関する次の記述を読んで,設問1〜3に答えよ。
H社は,ディジタル補聴器を開発している会社である。開発するディジタル補聴器(以下,新補聴器という)は,ソフトウェアでの信号処理によって,入力された音を八つの周波数帯(以下,それぞれを帯域という)に分割し,帯域ごとの音量設定ができる。さらに,入力された音の大きさに応じて自動的に音量の調節を行う自動音量調節(以下,AVCという)の機能がある。想定される利用者は,特定の帯域の音が聞き取りにくい人などである。入力された音の帯域への分割を図1に示す。

図の説明テキスト
横一列に並んだ8つの枠があり、それぞれ「帯域1」から「帯域8」と記されている。その下に水平方向の矢印があり、中央に「周波数」、左側に向かって「低い」、右側に向かって「高い」と記されている。
利用者は,スマートフォンのアプリケーションプログラム(以下,スマホアプリという)を使用して,帯域ごとの音量設定に必要な各種パラメタ(音量パラメタなど)を変更する。
〔ハードウェア構成〕
新補聴器のハードウェア構成を図2に示す。

図の説明テキスト
新補聴器のハードウェア構成を示すブロック図。
左上に凡例として「ADC : A/Dコンバータ」「DAC : D/Aコンバータ」と記載されている。
信号の流れとして、「マイク」から「ADC」、「入力バッファ」、「制御部」、「出力バッファ」、「DAC」、「イヤホン」へと直列に接続されている。
「制御部」には「BTモジュール」が接続され、そこから「Bluetooth」と書かれた通信線を介して「スマートフォン」と接続されている。
「高速クロック部」からは「制御部」へ「高速クロック」が供給されている。また、「低速クロック部」は「高速クロック部」と接続されている。さらに下部の経路から「ADC」および「DAC」に対して「サンプリングクロック」が供給されている。
- BTモジュールは,Bluetoothを介してスマホアプリと通信する。
- ADCは,マイクから入力されたアナログ信号を,1秒間に24,000回サンプリングし,16ビットの符号付き整数のデータに変換して入力バッファに書き込む。64サンプルのデータを1フレームとして書き込み,書込みが完了したことを制御部に通知する。この通知を受信完了通知という。
- 制御部は,受信完了通知を受けると1フレーム分のデータを処理して出力バッファに書き込む。演算は全て整数演算であり,浮動小数点演算は使用しない。
- DACは,出力バッファに書き込まれた16ビットの符号付き整数のデータをアナログ信号に変換する。
- 低速クロック部は,ADC及びDACに24 kHzのサンプリングクロックを供給する。
- 高速クロック部は,制御部に高速クロックを供給する。高速クロックの周波数は 又はその整数倍で,ソフトウェアによって決定することができる。
〔入力バッファ及び出力バッファ〕
入力バッファ及び出力バッファは,それぞれ三つのブロックで構成されている。一つのブロックには1フレーム分のデータを格納できる。入力バッファ及び出力バッファのサイズはともに a バイトである。
ADC及びDACは,入力バッファ及び出力バッファの同じブロック番号のブロックにアクセスする。制御部は,ADCによるデータの書込みが完了したブロックにアクセスする。ADC,DAC及び制御部は,ブロック3にアクセスした後,ブロック1のアクセスに戻る。
バッファの使用例を図3に示す。(1) ADC及びDACがブロック1にアクセスしているとき,制御部はブロック3にアクセスする。次に,(2) ADC及びDACがブロック2にアクセスしているとき,制御部はブロック1にアクセスする。

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

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

図の説明テキスト
| 変数・関数・定数 | 形式 | 機能など |
|---|---|---|
| dv | 静的変数 | 音量のフレームごとの変化分であり,初期値は 0 |
| v | 静的変数 | 現在の音量であり,初期値は利用者の設定した値 |
| vt | 静的変数 | AVC の目標の音量 |
| p | 動的変数 | 合成されたディジタル信号の大きさ |
| getPower() | 関数 | 合成されたディジタル信号の大きさを算出 |
| getTarget(p) | 関数 | 合成されたディジタル信号の大きさ(p)から目標の音量を算出 |
| M | 定数 | 目標の音量に変化させるフレーム数であり,2以上の値の定数 |

図の説明テキスト
種類: フローチャート
ノードと遷移:
- 「開始」から「dv = 0」の判断(ひし形)へ遷移。
- 「dv = 0」がNoの場合: 「v ← v + dv」へ遷移。そこから「(dv < 0 and v ≦ vt) 又は, ア」の判断へ遷移。
- 「(dv < 0 and v ≦ vt) 又は, ア」がYesの場合: 「v ← イ」へ遷移し、その後「dv ← ウ」へ遷移。
- 「dv ← ウ」の後の線と、「(dv < 0 and v ≦ vt) 又は, ア」がNoの場合の線は合流し、「終了」へ遷移する。
- 「dv = 0」がYesの場合: 「p ← getPower()」へ遷移。
- 「p ← getPower()」から「vt ← getTarget(p)」へ遷移し、さらに「dv ← (vt - v) ÷ M」へ遷移。
- その後、網掛けされた判断「dv = 0 and v ≠ vt」へ遷移。
- 「dv = 0 and v ≠ vt」がYesの場合: 右へ進み、「(dv < 0 and v ≦ vt) 又は, ア」がYesの場合の線に合流して「v ← イ」へ遷移する。
- 「dv = 0 and v ≠ vt」がNoの場合: 「終了」へ遷移。
設問と解答・解説
設問1
入力バッファ及び出力バッファについて,(1),(2)に答えよ。
本文中のaに入れる適切な数値を答えよ。
模範解答
384
解説
正解の理由
バッファ全体のサイズを計算します。
- 1秒間のサンプリング回数は24,000回であり、1回のサンプリングデータは「16ビットの符号付き整数」(=2バイト)です。
- 1フレーム分のデータは64サンプルであるため、1フレーム分のデータサイズ(1ブロックのサイズ)は バイトとなります。
- 問題文の〔入力バッファ及び出力バッファ〕に、「入力バッファ及び出力バッファは,それぞれ三つのブロックで構成されている」とあります。
- したがって、バッファ全体のサイズは バイトとなります。
本文中のbに入れる適切な数値を答えよ。答えは小数第2位を四捨五入して,小数第1位まで求めよ。ここで,ADCの変換時間及びDACの変換時間は無視できるものとする。
模範解答
8.0
解説
正解の理由
マイクからの入力がADCで処理されてから、DACから出力されるまでの遅延時間を計算します。
1フレームの時間の計算
- 1秒間に24,000回サンプリングし、64サンプルで1フレームとなるため、1フレームにかかる時間(Tframe)は 秒、すなわち ミリ秒です。
バッファのアクセス手順と遅延の追跡
- 問題文と図3より、「ADC及びDACは,入力バッファ及び出力バッファの同じブロック番号のブロックにアクセスする」「ADC,DAC及び制御部は,ブロック3にアクセスした後,ブロック1のアクセスに戻る」というルールがあります。
- 時刻 から フレームの間に、ADCが入力バッファの ブロック1 にデータを書き込みます。
- 時刻 から フレームの間に、制御部は書き込みが完了した入力バッファの ブロック1 を処理し、出力バッファの ブロック1 に書き込みます(この間、ADCとDACはブロック2にアクセスしています)。
- 時刻 から フレームの間は、ADCとDACはブロック3にアクセスしています。
- 時刻 から フレームの間に、ADCとDACは再び ブロック1 にアクセスします。ここで初めて、DACが出力バッファの ブロック1 のデータを読み出し、イヤホンへ出力します。
- したがって、データが入力され始めてから出力され始めるまでに、 フレーム分の時間が経過しています。
遅延時間の算出
- 遅延時間 = ミリ秒となります。
設問1(1)は,正答率が低かった。全体のバッファ長について問うたが,バッファを構成するブロック長を答えている解答が散見された。仕様書からバッファ長を決定するのは設計の基本なので,理解してほしい。
設問2
新補聴器のソフトウェアについて,(1),(2)に答えよ。
本文中のcに入れる適切な字句を答えよ。
模範解答
Tf
採点基準
- 2点: 「Tf」と解答している(大文字小文字・全角半角・T_f などの添字表記の揺れは可)。
- 0点: それ以外(Ts・Ta など)。
解説
正解の理由
1フレーム分のデータを処理する最大実行時間 を表す数式を導出します。
問題文〔新補聴器のソフトウェア〕の通り、ソフトウェアの処理は「①信号処理」「②合成」「③AVC」の順に実行されます。
- ①の処理:サンプリングしたデータから一つの帯域を抽出し、音量パラメタを乗じます。これを 八つの帯域に対して 行います。一つの帯域の最大実行時間が であるため、①全体の最大実行時間は となります。
- ②の処理:それぞれの帯域の信号を合成して一つの信号にします。最大実行時間は です。
- ③の処理:合成された信号についてAVCで音量を調節します。最大実行時間は です。
これらを足し合わせた合計時間が1フレームの最大実行時間となるため、 と表されます。したがって、8が掛けられている c には が入ります。
本文中のdに入れる適切な字句を答えよ。
模範解答
Ts
Ta
採点基準
- 2点: 「Ts」又は「Ta」のどちらか一方と解答している(e と順不同。表記揺れは可)。
- 0点: Tf、それ以外。
解説
正解の理由
1フレーム分のデータを処理する最大実行時間 は、 と表されます(導出の詳細は設問2(1) c の解説を参照)。
したがって、d には が入ります( と順不同)。
本文中のeに入れる適切な字句を答えよ。
模範解答
Ta
Ts
採点基準
- 2点: d の解答と異なるもう一方(d が Ts なら Ta、d が Ta なら Ts)。d が Tf・無回答などで誤りのときは Ts 又は Ta のどちらでもよい。
- 0点: d と同じ記号を書いたもの、Tf、それ以外。
解説
正解の理由
1フレーム分のデータを処理する最大実行時間 は、 と表されます(導出の詳細は設問2(1) c の解説を参照)。
したがって、e には が入ります( と順不同)。
決定した高速クロックの周波数はの何倍か。適切な数値を整数で答えよ。
模範解答
3
解説
正解の理由
最適なクロック周波数が の何倍になるかを計算します。
全ての処理が Tframe 内に完了する条件
最大実行時間を とすると、 を満たす必要があります。周波数 のときの を計算
表1より、、、 です。
つまり、周波数 では処理時間が Tframe の 2.65 倍かかってしまいます。必要なクロック周波数の倍率を算出
問題文に「ソフトウェアの実行時間(以下,実行時間という)は高速クロックの周波数に反比例する」とあります。周波数を 倍( は整数)にすると、実行時間は になります。
周波数 のときの実行時間は となり、これが Tframe 以下になる必要があります。
消費電力を最も抑えるには周波数を条件を満たす範囲で最小にすればよいため、最小の整数 は となります。
設問2(1)は,正答率が高く,式の意味を正しく理解できていることがうかがえた。組込みシステム開発において,消費電力と性能はトレードオフの関係にあり,これらを同時に満足させる最適解を決定することが重要である。
設問3
AVC処理のソフトウェアについて,(1),(2)に答えよ。
図4中のアに入れる適切な字句を答えよ。
模範解答
dv > 0 and v ≧ vt
採点基準
- 2点: 「dv > 0 and v ≧ vt」と同値の条件(2条件の順序入替え、and を「かつ」、≧ を >= と書く、全角半角の揺れは可)。
- 1点: 片方の条件だけ正しい(例:等号が欠けた dv > 0 and v > vt、dv の条件が無い v ≧ vt)。
- 0点: それ以外。
解説
正解の理由
図4のAVCの処理フローにおいて、徐々に音量を目標に近づけ、目標に到達した際の判定条件を読み解きます。
- 変数
dvは音量のフレームごとの変化分、vは現在の音量、vtは目標の音量です。 - ループ内で
v ← v + dvが実行され、音量が徐々に変更されます。 - 判定「
(dv < 0 and v ≦ vt) 又は ア」は、目標音量に到達(または目標を通過)したかどうかを判定しています。 dv < 0の場合は音量を下げている状態であり、v ≦ vtとなれば目標値以下に到達したと判定できます。- 逆に、音量を上げている状態は
dv > 0です。この場合、現在の音量vが目標音量vt以上になったとき、すなわちv ≧ vtとなったときに目標値に到達したと判定すべきです。 - よって、ア には
dv > 0 and v ≧ vtが入ります。
図4中のイに入れる適切な字句を答えよ。
模範解答
vt
採点基準
- 2点: 「vt」と解答している(v ← vt の形で書いたものも可)。
- 0点: それ以外。
解説
正解の理由
図4のAVCの処理フローにおいて、音量が目標に到達したと判定された場合(Yesのルート)の処理を考えます。
- 目標に到達したと判定された場合、行き過ぎた分などを補正し、音量を正確に目標値に合わせる必要があります。
- したがって、現在の音量
vに目標の音量vtを代入します。 - よって、イ には
vtが入ります。
図4中のウに入れる適切な字句を答えよ。
模範解答
0
採点基準
- 2点: 「0」と解答している(dv ← 0 の形も可)。
- 0点: それ以外。
解説
正解の理由
図4のAVCの処理フローにおいて、音量を正確に目標値(vt)に合わせた直後の処理を考えます。
- 音量が目標値に到達したため、これ以上音量を変化させる必要はありません。
- したがって、音量のフレームごとの変化分である
dvを0に設定して、以後のフレームでの変化を停止させます。 - よって、ウ には
0が入ります。
図4中の網掛けした判定部において,判定結果が“Yes”となるのは,音量がどのような場合か。40字以内で述べよ。
模範解答
現在の音量が目標値に近く,変化量が0となり音量を変更する必要がない場合
採点基準
- 1点: 「現在の音量が目標値に近い」という状況を正しく説明できている。
- 0点: 上記の要素が欠落しているか、不適切である。
- 1点: 「変化量が0となる」「音量を変更する必要がない(直ちに変更する)」という結論を論理的に説明できている。
- 0点: 上記の要素が欠落しているか、不適切である。
解説
正解の理由
網掛けされた判定部は dv = 0 and v ≠ vt です。この判定が Yes になる状況を考察します。
- 変化分
dvは(vt - v) ÷ Mで計算されます。問題文に「演算は全て整数演算である」と明記されています。 - 現在の音量
vと目標の音量vtの差が小さく、その差の絶対値|vt - v|が定数M未満である場合、整数演算の切り捨てによって(vt - v) ÷ Mの結果は0になります。 - つまり、目標音量には完全に一致していない(
v ≠ vt)にもかかわらず、変化分dvが0になってしまう状態が発生します。 - このような状態は、現在の音量が目標値に十分近いため、複数フレームかけて徐々に音量を変更する必要がない(直ちに目標値に設定すべき)場合を意味しています。
- そのため、この判定で Yes となり、「直ちに音量を目標の音量にする」ルート(
v ← vt)へ遷移する仕組みになっています。
高得点のポイント
- 現在の音量と目標の音量の差が小さく、目標値に近い状況であることを言及しているか。
- 整数演算によって変化量が0となり、徐々に音量を変更する必要がない(直ちに変更する)という結論に論理的につなげられているか。
設問3(2)は,正答率が低かった。判定部の式の意味について問うたが,式をそのまま記述しただけの解答が散見された。式の意味を正しく理解することは,ソフトフェアの挙動を理解することである。ソフトウェアの設計において必須なので,是非理解してほしい。