「AP過去問 令和6年度秋期 午後 問7 組込みシステム開発」の版間の差分
(→回答・解説) |
|||
(同じ利用者による、間の46版が非表示) | |||
257行目: | 257行目: | ||
表1 Sイヤホンの機能 | <div align="center">表1 Sイヤホンの機能</div> | ||
<table width="100%" border="2" style="border-collapse: collapse;border-style: solid"> | |||
<tr> | |||
<td style="border: 2px solid; width: 11em;">機能名</td> | |||
<td style="border: 2px solid;">概要</td> | |||
</tr> | |||
<tr> | |||
<td style="border: 2px solid;">音源再生機能</td> | |||
<td style="border: 2px solid;">・スマホから送信された音源データを、Sイヤホンで音響補正して出力する。</td> | |||
</tr> | |||
<tr> | |||
<td style="border: 2px solid;">音声アシスト機能</td> | |||
<td style="border: 2px solid;">・左イヤホンでは、利用者が発した音声から、特定のキーワードを検出すると、続くフレーズをスマホへの指示として左イヤホンからスマホに送信、スマホで解析して実行する。</td> | |||
</tr> | |||
<tr> | |||
<td style="border: 2px solid;">通話機能</td> | |||
<td style="border: 2px solid;">・利用者がスマホの操作で発信する、又は利用者のスマホに着信があると、Sイヤホンは、<div style="display: inline-block; border: 2px solid; padding-left: 20px; padding-right: 20px;">a</div> 及び <div style="display: inline-block; border: 2px solid; padding-left: 20px; padding-right: 20px;">b</div> を停止して、通話開始を音声で知らせる。</br> | |||
・Sイヤホンの、音声を出力するスピーカー及び音声を入力するマイクを使用して、音声データを入出力することで、利用者は通話することができる。</td> | |||
</tr> | |||
<tr> | |||
<td style="border: 2px solid;">ノイズキャンセル機能</td> | |||
<td style="border: 2px solid;">・マイクから入力されたSイヤホンの周囲の音(以下、環境音という)から、環境音を打ち消すデータを生成する。このデータをスピーカーの出力に合成して環境音を低減させる。</td> | |||
</tr> | |||
</table> | |||
・Sイヤホンのハードウェア構成 | |||
Sイヤホンは、左イヤホンと右イヤホンのそれぞれが、マイク及びスピーカーを接続した音声制御部、クロック部、通信部、それらを制御する制御部、及び電力部から成る。左イヤホンと右イヤホンとでハードウェア構成に違いはない。左イヤホンのハードウェア構成を図2に、Sイヤホン構成要素の機能概要を表2に示す。 | |||
[[ファイル:APPMQ7 Fig2.png|400px|thumb|none|図2 左イヤホンのハードウェア構成]] | |||
<div align="center">表2 Sイヤホンの構成要素の機能概要</div> | |||
<table width="100%" border="2" style="border-collapse: collapse;border-style: solid"> | |||
<tr> | |||
<td style="border: 2px solid; width: 8em;">構成要素名</td> | |||
<td style="border: 2px solid;">構成要素の機能</td> | |||
</tr> | |||
<tr> | |||
<td style="border: 2px solid;">制御部</td> | |||
<td style="border: 2px solid;">・Sイヤホンの機能名1~4に示す機能を実現するために、音声制御部、クロック部、通信部を制御する。</br> | |||
・左イヤホンの場合は、マイクから入力された音声データを解析して、特定のキーワードを検出する。</br> | |||
・機能の使用状況に応じて、クロックの供給の停止又は適切な周波数を決定して、クロック部に指示する。</br> | |||
・クロック部への指示は0、0.5、1、1.5、又は2の値である。この値に、基準周波数を乗じた周波数のクロックが供給される。0のときは、クロックの供給が停止される。</br> | |||
・クロックの供給が停止されると、その時点の状態を保持したまま停止する。クロックが再度供給されると停止したところから再開する。</td> | |||
</tr> | |||
<tr> | |||
<td style="border: 2px solid;">音声制御部</td> | |||
<td style="border: 2px solid;">・2ミリ秒周期でマイクから入力された音声をデジタルデータに変換して、制御部に送信する。</br> | |||
・5ミリ秒周期で制御部からデジタルデータを受信し、スピーカーで音声を出力する。その際、制御部から受信したノイズキャンセルデータを合成する。</td> | |||
</tr> | |||
<tr> | |||
<td style="border: 2px solid;">クロック部</td> | |||
<td style="border: 2px solid;">・制御部の指示によって、指示された周波数のクロックの供給又は停止を行う。</br> | |||
・停止したクロックの供給は①<u>特定のイベント</u>によって再開する。このイベントを受けてから5ミリ秒後に、停止する直前の周波数でクロックの供給を再開する。</td> | |||
</tr> | |||
<tr> | |||
<td style="border: 2px solid;">通信部</td> | |||
<td style="border: 2px solid;">・Bluetoothを用いてスマホと通信を行う。内部にクロックをもち、電源オン後は常に動作する。</br> | |||
・左イヤホンの場合は、スマホとペアリングした後、右イヤホンとスマホとの通信を中継する。</br> | |||
・スマホからのデータ受信すると、それを制御部に送信し、データを受信したことをクロック部に送信する。さらに、データが音源データが音源データ又は音声データの場合は、左右それぞれのイヤホン用のデータを取り出し、5ミリ秒周期で制御部に送信する。</br> | |||
・制御部から受信した音声データをスマホに送信する。</td> | |||
</tr> | |||
<tr> | |||
<td style="border: 2px solid;">電力部</td> | |||
<td style="border: 2px solid;">・充電可能な電池を内蔵しており、各部に電力を供給する。</td> | |||
</tr> | |||
</table> | |||
・クロック部の動作 | |||
制御部の実行時間はクロックの周波数は反比例する。一方、消費電力はクロック周波数が高いほど大きくなる。Sイヤホンは電池駆動であるので、できる限り消費電力は小さくしたい。そこで、表3に示すように機能の使用状況に応じてクロックの周波数を制御部の指示で適切に割り当てることにした。 | |||
<div align="center">表3 使用状況に応じたクロックの周波数割り当て</div> | |||
<table width="100%" border="2" style="border-collapse: collapse;border-style: solid"> | |||
<tr> | |||
<td rowspan="2" align="center" style="border: 2px solid;">使用状況</td> | |||
<td colspan="4" align="center" style="border: 2px solid;">機能</td> | |||
<td rowspan="2" align="center" style="border: 2px solid;">クロック部への周波数の指示</td> | |||
</tr> | |||
<tr> | |||
<td align="center" style="border: 2px solid;">音源再生 </td> | |||
<td align="center" style="border: 2px solid;">通話 </td> | |||
<td align="center" style="border: 2px solid;">ノイズキャンセル</td> | |||
<td align="center" style="border: 2px solid;">音声アシスト </td> | |||
</tr> | |||
<tr> | |||
<td style="border: 2px solid;">待機時</td> | |||
<td align="center" style="border: 2px solid;"></td> | |||
<td align="center" style="border: 2px solid;"></td> | |||
<td align="center" style="border: 2px solid;"></td> | |||
<td align="center" style="border: 2px solid;"></td> | |||
<td align="center" style="border: 2px solid;">0</td> | |||
</tr> | |||
<tr> | |||
<td style="border: 2px solid;">音源再生1</td> | |||
<td align="center" style="border: 2px solid;">〇</td> | |||
<td align="center" style="border: 2px solid;"></td> | |||
<td align="center" style="border: 2px solid;"></td> | |||
<td align="center" style="border: 2px solid;">〇</td> | |||
<td align="center" style="border: 2px solid;"><div style="display: inline-block; border: 2px solid; padding-left: 20px; padding-right: 20px;">c</div></td> | |||
</tr> | |||
<tr> | |||
<td style="border: 2px solid;">音源再生2</td> | |||
<td align="center" style="border: 2px solid;">〇</td> | |||
<td align="center" style="border: 2px solid;"></td> | |||
<td align="center" style="border: 2px solid;">〇</td> | |||
<td align="center" style="border: 2px solid;"></td> | |||
<td align="center" style="border: 2px solid;"><div style="display: inline-block; border: 2px solid; padding-left: 20px; padding-right: 20px;">d</div></td> | |||
</tr> | |||
<tr> | |||
<td style="border: 2px solid;">通話時</td> | |||
<td align="center" style="border: 2px solid;"></td> | |||
<td align="center" style="border: 2px solid;">〇</td> | |||
<td align="center" style="border: 2px solid;">△</td> | |||
<td align="center" style="border: 2px solid;"></td> | |||
<td align="center" style="border: 2px solid;"><div style="display: inline-block; border: 2px solid; padding-left: 20px; padding-right: 20px;">e</div></td> | |||
</tr> | |||
</table> | |||
<div align="left">凡例 〇:機能がオンである。空白:機能がオフである。△:機能のオン/オフが切替え可能である。</div> | |||
・制御部のタスク | |||
制御部はリアルタイムOSを使用している。電源オン時にメインタスクが生成される。左イヤホンと右イヤホンとで機能が異なるので、メインタスクはそのイヤホンで必要となるタスクだけを生成する。メインタスクを含め、それぞれのタスクは重複しない固有の優先度が割り当てられる。リアルタイムOSのタスクの状態は実行状態、実行可能状態、又は待ち状態のいずれかである。 | |||
制御部のタスク一覧を表4に示す。クロックの周波数が基準周波数に等しいときタスクの実行に要する時間は、表4に示す実行時間となる。スピーカータスク、マイクタスク、及び特定語検出タスクは起動周期内に処理が完了しなければならない。起動周期内に処理が完了しない場合、音飛びやノイズなどの不具合が発生する。 | |||
<div align="center">表4 制御部のタスク一覧</div> | |||
<table width="100%" border="2" style="border-collapse: collapse;border-style: solid"> | |||
<tr> | |||
<td style="border: 2px solid; width: 6em">タスク名</td> | |||
<td style="border: 2px solid;">タスクの機能</td> | |||
<td style="border: 2px solid; width: 6em">起動周期<span style="font-size: 0.8em; vertical-align: top;">1)</span></td> | |||
<td style="border: 2px solid; width: 6em">実行時間<span style="font-size: 0.8em; vertical-align: top;">2)</span></td> | |||
</tr> | |||
<tr> | |||
<td style="border: 2px solid;">メイン</td> | |||
<td style="border: 2px solid;">・ほかのタスクから通知を受けると、通知に応じた処理を行う。</br> | |||
・機能の使用状況に応じて、適切なクロックの周波数を決定して、クロック部に指示する。ただし、クロックの供給の停止はアイドルタスクが行う。</td> | |||
<td style="border: 2px solid; background-image: linear-gradient(to right top, transparent calc(50% - 1px), #000 50%, #000 calc(50% + 1px), transparent calc(50% + 2px));"></td> | |||
<td style="border: 2px solid;">0.05</td> | |||
</tr> | |||
<tr> | |||
<td rowspan="2" style="border: 2px solid;">スピーカー</td> | |||
<td style="border: 2px solid;">・音源再生時、音源データに音質補正を行い音声制御部に送信する。</td> | |||
<td style="border: 2px solid;">5</td> | |||
<td style="border: 2px solid;">3.4</td> | |||
</tr> | |||
<tr> | |||
<td style="border: 2px solid;">・通話時、音声データの音質補正は行わず、音声制御部に送信する。</td> | |||
<td style="border: 2px solid;">5</td> | |||
<td style="border: 2px solid;">0.5</td> | |||
</tr> | |||
<tr> | |||
<td style="border: 2px solid;">マイク</td> | |||
<td style="border: 2px solid;">・マイクから入力された音声データを処理する。</br> | |||
・ノイズキャンセル機能の処理を行い、生成された環境を打ち消すデータを音声制御部に送信する。</td> | |||
<td style="border: 2px solid;">2</td> | |||
<td style="border: 2px solid;">1</td> | |||
</tr> | |||
<tr> | |||
<td style="border: 2px solid;">特定語検出</td> | |||
<td style="border: 2px solid;">・マイクタスクから受けた音声データを解析して、特定のキーワードを検出する。</td> | |||
<td style="border: 2px solid;">40</td> | |||
<td style="border: 2px solid;">20</td> | |||
</tr> | |||
<tr> | |||
<td style="border: 2px solid;">通信</td> | |||
<td style="border: 2px solid;">・通信部からデータを受信すると、メインタスクに通知する。</br> | |||
・ほかのタスクからの通知を受けると、通信部に送信する。</td> | |||
<td style="border: 2px solid; background-image: linear-gradient(to right top, transparent calc(50% - 1px), #000 50%, #000 calc(50% + 1px), transparent calc(50% + 2px));"></td> | |||
<td style="border: 2px solid;">0.05</td> | |||
</tr> | |||
<tr> | |||
<td style="border: 2px solid;">アイドル</td> | |||
<td style="border: 2px solid;">・メインタスクから指示があると、クロック部にクロックの供給の停止を指示する。</td> | |||
<td style="border: 2px solid; background-image: linear-gradient(to right top, transparent calc(50% - 1px), #000 50%, #000 calc(50% + 1px), transparent calc(50% + 2px));"></td> | |||
<td style="border: 2px solid; background-image: linear-gradient(to right top, transparent calc(50% - 1px), #000 50%, #000 calc(50% + 1px), transparent calc(50% + 2px));"></td> | |||
</tr> | |||
</table> | |||
<div align="left">注<span style="font-size: 0.8em; vertical-align: top;">1)</span>起動周期はクロックの周波数に依存せず一定である。単位はミリ秒である。</div> | |||
<div align="left">注<span style="font-size: 0.8em; vertical-align: top;">2)</span>実行時間はクロックの周波数が基準周波数に等しいときの値である。単位はミリ秒である。</div> | |||
タスクの優先度は、通信タスクが最も高く、以下、メインタスク、<span style="display: inline-block; border: 2px solid; padding-left: 20px; padding-right: 20px;">f</span>タスク、<span style="display: inline-block; border: 2px solid; padding-left: 20px; padding-right: 20px;">g</span>タスク、<span style="display: inline-block; border: 2px solid; padding-left: 20px; padding-right: 20px;">h</span>タスク、アイドルタスクの順である。 | |||
アイドルタスクは最も優先度が低いので、アイドルタスクが実行状態のとき、ほかのタスク状態は<span style="display: inline-block; border: 2px solid; padding-left: 20px; padding-right: 20px;">i</span>である。 | |||
設問1 Sイヤホンの機能について答えよ。 | |||
:(1)表1中の<div style="display: inline-block; border: 2px solid; padding-left: 20px; padding-right: 20px;">a</div> , <div style="display: inline-block; border: 2px solid; padding-left: 20px; padding-right: 20px;">b</div> に入れる適切な機能名を表1中の機能名で答えよ。 | |||
:(2)表2中の下線①の特定のイベントとして適切なものを回答群の中から選び、記号で答えよ。 | |||
:回答群 | |||
::ア 一定時間経過 | |||
::イ スマホからのデータを受信 | |||
::ウ 制御部からの指示を受信 | |||
::エ 電力部が電力を供給 | |||
::オ マイクから入力された音声データから特定のキーワードを検出 | |||
設問2 表3中の <span style="display: inline-block; border: 2px solid; padding-left: 20px; padding-right: 20px;">c</span> ~ <span style="display: inline-block; border: 2px solid; padding-left: 20px; padding-right: 20px;">e</span> に入れる適切な数値の組み合わせを回答群の中から選び、記号で答えよ。ただし、メインタスクと通信タスクの実行時間、OSによるタスクの切り替え時間は無視できるものとし、実行時間は供給されるクロックの周波数に反比例するものとする。 | |||
<table> | :回答群 | ||
<dl><dd><dl><dd> | |||
<table border="2" style="border-collapse: collapse;border-style: solid"> | |||
<tr> | |||
<td style="border: 2px solid; width: 4em">記号</td> | |||
<td style="border: 2px solid; width: 4em">c</td> | |||
<td style="border: 2px solid; width: 4em">d</td> | |||
<td style="border: 2px solid; width: 4em">e</td> | |||
</tr> | |||
<tr> | |||
<td style="border: 2px solid; width: 4em">ア</td> | |||
<td style="border: 2px solid; width: 4em">0.5</td> | |||
<td style="border: 2px solid; width: 4em">1</td> | |||
<td style="border: 2px solid; width: 4em">1.5</td> | |||
</tr> | |||
<tr> | <tr> | ||
<td> | <td style="border: 2px solid; width: 4em">イ</td> | ||
<td> | <td style="border: 2px solid; width: 4em">1</td> | ||
<td style="border: 2px solid; width: 4em">1</td> | |||
<td style="border: 2px solid; width: 4em">0.5</td> | |||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td> | <td style="border: 2px solid; width: 4em">ウ</td> | ||
<td> | <td style="border: 2px solid; width: 4em">1.5</td> | ||
<td style="border: 2px solid; width: 4em">1.5</td> | |||
<td style="border: 2px solid; width: 4em">2</td> | |||
</tr> | |||
<tr> | |||
<td style="border: 2px solid; width: 4em">エ</td> | |||
<td style="border: 2px solid; width: 4em">2</td> | |||
<td style="border: 2px solid; width: 4em">1</td> | |||
<td style="border: 2px solid; width: 4em">0.5</td> | |||
</tr> | |||
<tr> | |||
<td style="border: 2px solid; width: 4em">オ</td> | |||
<td style="border: 2px solid; width: 4em">2</td> | |||
<td style="border: 2px solid; width: 4em">1.5</td> | |||
<td style="border: 2px solid; width: 4em">1</td> | |||
</tr> | |||
<tr> | |||
<td style="border: 2px solid; width: 4em">カ</td> | |||
<td style="border: 2px solid; width: 4em">2</td> | |||
<td style="border: 2px solid; width: 4em">2</td> | |||
<td style="border: 2px solid; width: 4em">2</td> | |||
</tr> | </tr> | ||
</table> | </table> | ||
</dd></dl></dd></dl> | |||
設問3 制御部のタスクについて答えよ。 | |||
:(1) 本文中の <span style="display: inline-block; border: 2px solid; padding-left: 20px; padding-right: 20px;">f</span> ~ <span style="display: inline-block; border: 2px solid; padding-left: 20px; padding-right: 20px;">h</span> に入れるタスク名を、表4中のタスク名で答えよ。 | |||
:(2) 右イヤホンのメインタスクでは生成せず、左イヤホンのメインタスクだけが生成するタスクを表4中のタスクから選んで答えよ。 | |||
設問4 アイドルタスクについて答えよ。 | |||
:(1) 本文中の <span style="display: inline-block; border: 2px solid; padding-left: 20px; padding-right: 20px;">i</span> に入れるリアルタイムOSのタスクの状態を答えよ。 | |||
:(2) クロックの供給を停止できるのは、表3における使用状況が待機時のときだけである。待機時以外でクロックの供給を停止できない理由をタスクの起動周期の観点で40字以内で答えよ。 | |||
=='''回答・解説'''== | |||
設問1 | |||
(1) | |||
利用者がスマホの操作で発信する、又は利用者のスマホに着信があると、Sイヤホンは、<span style="display: inline-block; border: 2px solid; padding-left: 20px; padding-right: 20px;">a</span> 及び <span style="display: inline-block; border: 2px solid; padding-left: 20px; padding-right: 20px;">b</span> を停止して、通話開始を音声で知らせる。 | |||
とあるところの穴埋めですが、スマホで通話をすると何かの機能を停止しなければならないという条件がどこかで定義されていることを意味していて、その部分を問題文から探すと、<span style = "background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; ">Sイヤホンを用いて通話するときには、音源再生機能及び音声アシスト機能は使用できない。</span>という部分が条件部分であると推察することができます。したがって答えは | |||
<span style = "background:linear-gradient(transparent 75%, #7fbfff 75%); font-weight:bold; "> | |||
a=音源再生機能</span> | |||
<span style = "background:linear-gradient(transparent 75%, #7fbfff 75%); font-weight:bold; "> | |||
b=音声アシスト機能</span> | |||
となります。順不同でも正解になるので、aとbは入れ替わっていても問題ありません。設問1の(1)の2回答は、長い問題文を読み込みさえすれば答えれる簡単な部類の問題と言えると思います。 | |||
設問1 | |||
(2) | |||
クロック部の機能として、停止したクロックの供給は①<u>特定のイベント</u>によって再開する。このイベントを受けてから5ミリ秒後に、停止する直前の周波数でクロックの供給を再開する。とあります。 | |||
停止した後にクロックが再開されるということは、問題文全体から読み取ると、待機時がクロック0で停止で、その他の状態に遷移した時にクロックが再開するということがわかります。ただ、それがどこからのどんな信号や指示によるものかを考える必要があります。制御部の構成要素の機能の説明に、機能の使用状況に応じて、クロックの供給の停止又は適切な周波数を決定して、クロック部に指示する。とあるので、制御部からの指示を受信したらクロックの供給を決定していますが、イベントを受けてから5ミリ秒後に停止する直前の周波数でクロックの供給を再開するということですから、クロックの供給をしているのは制御部からの指示なのだけど、特定のイベントと言っているものは違うものであると考えられます。特定のイベントがあってから、制御部が5ミリ秒後にクロックの供給を指示しているということになります。 | |||
だとすると、特定のイベントというのは待機状態から、音源再生1や音源再生2や通話の状態に状態を遷移させる何かです。電力部も問題文の中で状態を遷移させる指示を出すことがあると記載されていて、専用のケースから取り出すと電源がオンとありますが、電源がオンになってもクロックを供給するイベントにはなりません。音源再生1や音源再生2や通話の状態にするのは、スマホからの指示であると推察することができます。イのスマホからのデータを受信が特定のイベントっぽいと考えられます。念のため他の候補はどうなのか見ておきましょう。アの一定時間というのは、問題文では言及されていない動作です。一定時間たったら、待機状態から音源再生1や音源再生2や通話の状態になったりすることはありません。オのマイクから入力された音声データから特定のキーワードを検出というのは音源再生1の状態になるところだけを指していて、3つの音源再生1や音源再生2や通話の状態になるイベントではないと言えます。ということで消去法的な確認から一つに絞り込め、スマホからの状態遷移を伴う指示こそが3つの状態に遷移するイベントであると考えられます。したがって、答えは | |||
<span style = "background:linear-gradient(transparent 75%, #7fbfff 75%); font-weight:bold; "> | |||
イ スマホからのデータを受信</span> | |||
となります。この設問の答えを導き出すのには制御部はそのイベントの5ミリ秒後に指示を出してクロックを供給する役割であることを認識できるかというところがキーになるのかなと思います。そして、他の選択肢は3つの状態に遷移させるイベントではないということをつきつめることができるという判断力が問われていると思います。イとウは似ているので悩みますが、その微妙な違いを感じ取れるかという感じでしょうか?微妙な言い回しをきっちり読み取れるかを見極められるかを試されている難しめの設問だと思います。 | |||
設問2 | |||
難しい問題だと思いました。初見でこれが何を言っているか理解できたら凄いと思います。 | |||
1.それぞれの状態ごとに必要となるタスクは何なのか? | |||
2.起動周期に間に合わない分だけクロック周波数を高める必要がある | |||
こういうった理解が必要になる問題です。それぞれのタスクの起動周期の割合を計算して、必要となるタスクの分だけこの割合を足し算して、10割(100%)以内ならクロック周波数は1倍でよくて、起動周期の割合が半分5割(50%)以下なら、0.5倍のクロック周波数でも十分に周期に間に合うということになります。同じく、1.5割(150%)ならクロック周波数を1.5倍することで、起動周期に間に合うという感じです。最大は2倍まで設定できるということなので、起動周期の割合が2なら2倍することで起動周期に間に合うという感じです。 | |||
クロック周波数の倍率によって処理時間が反比例して短くなるので、起動周期に間に合うようになるというイメージです。 | |||
まず、音源再生1、音源再生2、通話、3種類の状態が必要とするタスクを考えます。 | |||
*音源再生1:メインタスク+通信タスク+スピーカータスク(音源)+マイクタスク+特定語検出タスク | |||
*音源再生2:メインタスク+通信タスク+スピーカータスク(音源)+マイクタスク | |||
*通話 :メインタスク+通信タスク+スピーカータスク(通話)+マイクタスク | |||
となります。問題文にはメインタスクと通信タスクの実行時間、OSによるタスクの切替え時間は無視できるとあるので、 | |||
*音源再生1:スピーカータスク(音源)+マイクタスク+特定語検出タスク | |||
*音源再生2:スピーカータスク(音源)+マイクタスク | |||
*通話 :スピーカータスク(通話)+マイクタスク | |||
と考えることができます。それぞれのタスクの周期割合を先に計算して、どれくらいの周期割合になるかを機能ごとに必要なタスクの周期割合を足し算します。 | |||
*スピーカータスク(音源):3.4[ミリ秒]÷ 5[ミリ秒]=0.68 | |||
*スピーカータスク(通話):0.5[ミリ秒]÷ 5[ミリ秒]=0.1 | |||
*マイク : 1[ミリ秒]÷ 2[ミリ秒]=0.5 | |||
*特定語検出 : 20[ミリ秒]÷40[ミリ秒]=0.5 | |||
それぞれの状態では | |||
*音源再生1:0.68+0.5+0.5=1.68→2 倍で起動周期に間に合う。 | |||
*音源再生2:0.68+0.5 =1.13→1.5倍で起動周期に間に合う。 | |||
*通話 :0.1 +0.5 =0.6 →1 倍で起動周期に間に合う。 | |||
したがって選択肢の | |||
<span style = "background:linear-gradient(transparent 75%, #7fbfff 75%); font-weight:bold; "> | |||
オ</span> | |||
が正解となります。 | |||
以上が考え方になります。このような考え方をものの数分で思いつかないといけないのは難しすぎると思います。自作パソコンのベースクロックスイッチの操作をしたことがあるような人で、このタスクごとの周期が似たような意味をもっていて、複数のタスクによってクロックを切り替える考え方ができるかということがポイントになるでしょうか?同じようなクロックシステムの状況におかれた組込み開発をやったことがある人だけがわかる問題なのかもしれません。とにかく難しいですね。なので設問1(2)と設問2とで2問も難題が設定されていることになります。恐るべし組込みシステム開発! | |||
設問3 | |||
(1) タスクの優先度は、通信タスクが最も高く、以下、メインタスク、<span style="display: inline-block; border: 2px solid; padding-left: 20px; padding-right: 20px;">f</span>タスク、<span style="display: inline-block; border: 2px solid; padding-left: 20px; padding-right: 20px;">g</span>タスク、<span style="display: inline-block; border: 2px solid; padding-left: 20px; padding-right: 20px;">h</span>タスク、アイドルタスクの順 | |||
とあるところの穴埋めなので、タスクの優先度について理解が求められる出題です。タスクの優先度についての考え方自体は問題文に記述されていませんので、一般的なタスクの優先度の付け方についての知識が必要になり、組込み機器のタスクの優先度は起動周期が短いものを優先して処理する必要があります。起動周期の遅いものの処理の優先度が低くても、次に起動されるまでに終わらせるまでの時間猶予があるから遅くなってしまっても影響が出ないからです。起動周期の短いものは優先度を上げて先に処理をおわらせるようにしておかなければならないからです。同時にタスク実行できるタイミングがあれば、起動周期の短いタスクを必ず先に処理をしたほうがいいです。あと、空き時間の短さも重要だと思います。短いほど優先度が高いです。念のため両方の観点から確認します。表4からそれぞれの起動周期を確認すると | |||
*スピーカータスク:5ミリ秒(5ミリ秒-3.6ミリ秒=1.4ミリ秒) | |||
*マイクタスク:2ミリ秒(2ミリ秒-1ミリ秒=1ミリ秒) | |||
*特定語検出タスク:20ミリ秒(40ミリ秒-20ミリ秒=20ミリ秒)<div>カッコ内はタスクの空き時間</div> | |||
したがって、マイクタスク→スピーカータスク→特定語検出タスクとなります。特定語検出タスク自体は長い実行時間を要するので、優先度は低くても後からきたマイクタスクやスピーカータスクに実行順が抜かされ続けると起動周期に間に合わなくなるので、優先度はあるにしても、逐一処理をしていったほうがいいので先入れ先出しぐらいの方式で処理したほうがいいのかもしれません。 | |||
ですから答えは | |||
<span style = "background:linear-gradient(transparent 75%, #7fbfff 75%); font-weight:bold; "> | |||
f:マイク</span> | |||
<span style = "background:linear-gradient(transparent 75%, #7fbfff 75%); font-weight:bold; "> | |||
g:スピーカー</span> | |||
<span style = "background:linear-gradient(transparent 75%, #7fbfff 75%); font-weight:bold; "> | |||
h:特定語検出</span> | |||
となります。 | |||
この問題も組込みシステム開発におけるタスクの優先度について理解しておかなければならないことを踏まえると一般的な知識を要求されるので、難しい部類の問題で、しかも3問分の配点があるとしたら大きな配点の問題になる重要な設問だと言えると思います。設問(1)の設問からここまで難しい問題が続いていますね。 | |||
設問3 | |||
(2) | |||
この問題は、問題文中に答えのある優しい問題です。左イヤホンのメインタスクだけが生成するタスクは、表1の音声アシスト機能の概要として<span style = "background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; ">左イヤホンでは、利用者が発した音声から、特定のキーワードを検出すると、続くフレーズをスマホへの指示として左イヤホンからスマホに送信、スマホで解析して実行する。</span>とありますので、左イヤホンだけが生成するタスクは特定のキーワードを検出する機能のタスクである特定語検出タスクということになります。 | |||
回答欄に特定語検出というキーワードが連続してしまうところに違和感を感じてしまいますが、ここはきっぱりと答えに | |||
<span style = "background:linear-gradient(transparent 75%, #7fbfff 75%); font-weight:bold; "> | |||
特定語検出</span> | |||
と記述する部分です。この設問は簡単な方だと思うので3つは簡単に回答できるということになりますね。 | |||
設問4 | |||
(1) | |||
アイドルタスクは最も優先度が低いので、アイドルタスクが実行状態のとき、ほかのタスク状態は<span style="display: inline-block; border: 2px solid; padding-left: 20px; padding-right: 20px;">i</span>である。の穴埋めですので、タスクの状態を記述します。タスクの状態の候補自体は問題文の本文に記載があります。<span style = "background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; ">リアルタイムOSのタスクの状態は実行状態、実行可能状態、又は待ち状態のいずれかである。</span>とあるので、実行状態か、実行可能状態、待ち状態から選択することになります。このことに気づければ3択問題なので一気に記述式の問題としては難易度が下がりますが、考え方自体は本文にないので、一般的な知識からひねりださなければなりません。 | |||
アイドルタスクが実行中ということはクロックも停止していていずれのタスク自体が実行可能状態にもなく、何もやることがないということなので、実行状態でもないです。タスクから見ると空っぽの状態でタスクが入ってくるのを待っている状態の待ち状態と表現できます。したがって、 | |||
<span style = "background:linear-gradient(transparent 75%, #7fbfff 75%); font-weight:bold; "> | |||
待ち状態</span> | |||
これが回答です。やや難易度はありますが、常識の範囲でも想像つくので、楽な問題だといえます。 | |||
設問4 | |||
(2) | |||
でましたね。文字数制限付きの記述問題です。最上級の文字数制限40文字以内なので、結構難しい文章作りが求められます。 | |||
クロックの供給を停止できるのは、表3における使用状況が待機時のときだけである。待機時以外でクロックの供給を停止できない理由をタスクの起動周期の観点で40字以内ですから | |||
待機状態のときにしかクロックの供給できない理由を探る必要があります。なぜアイドル中にタスクを止めないのかを追及するには本文中のこの部分がヒントになります。クロック部の機能概要の<span style = "background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; ">イベントを受けてから5ミリ秒後に、停止する直前の周波数でクロックの供給を再開する。</span>という部分と制御部のタスクについての説明部分にある<span style = "background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; ">スピーカータスク、マイクタスク、及び特定語検出タスクは起動周期内に処理が完了しなければならない。起動周期内に処理が完了しない場合、音飛びやノイズなどの不具合が発生する。</span>という部分です。ここから、クロックの供給には5ミリ秒かかること、起動周期内に処理が完了しなければ音飛びやノイズなどの不具合が発生することが読み取れます。 | |||
各タスクの起動周期も、スピーカータスクが5ミリ秒で、マイクタスクが2ミリ秒、特定語検出タスクが40ミリ秒です。特定語検出はマイクタスクと併用でなければ使えないので、実際はスピーカータスクとマイクタスクがカギになってきます。いちいちクロックを止めているだけでクロック再開に5ミリ秒使うのですからタスクの起動周期の合間にクロックを止めると間に合わず、結果として起動周期内に処理が完了しなければ音飛びやノイズなどの不具合が発生することになります。 | |||
1 5 10 11 20 | |||
<span style = "background:linear-gradient(transparent 75%, #7fbfff 75%); font-weight:bold; "> | |||
クロック再開時間でタ スクの起動周期に間に</span> | |||
<span style = "background:linear-gradient(transparent 75%, #7fbfff 75%); font-weight:bold; "> | |||
合わず音飛びやノイズ 不具合が発生するから</span> | |||
21 30 31 40 | |||
と、このような回答で正解になるのではないでしょうか。停止できない理由を問う問題なので、どんな不具合が発生するかを説明する部分を省略してもよいと思います。そうすると40文字以内で悠々と答えられる気がします。 | |||
この回の組込みシステム開発の問題はかなり難しい問題だったと言えると思います。30分でここまで理論的に考えを整理して、答えを導き出すのは相当なスキルが必要になりそうです。各種AIに問題を解かせても、設問2に至ってはちんぷんかんぷんな回答を得ますので、AIでさえ意味は理解できない経験が必要になる問題になっているようです。AIはまだまだやなとおもわされる問題です。時間はかかるけど人間はコンピュータを超えられるということが実感できる設問ですね。いつまで人間が優位な立場でいられるか時間の問題です。 | |||
2024年11月16日 (土) 01:29時点における最新版
AP 過去問題 午後に戻る。
AP過去問_令和6年度秋期_午後_問6_データベースの同じ回の前の問題へ移動。
AP過去問_令和6年度秋期_午後_問8_情報システム開発の同じ回の次の問題へ移動。
令和6年度秋期 午後 問7 組込みシステム開発(AIプロンプト向け)
■スマートイヤホンに関する次の記述を読んで、設問に答えよ。※AIに質問しやすいように問題文を文章化して改変しています。コピペでAIに質問できる形式になっています。改変による問題の正当性およびAIの回答については保証しません。
G社は、専用のアプリケーションプログラム(以下、アプリという)をインストールしたスマートフォン(以下、スマホという)とBluetoothで接続して、音楽などの音源再生機能、電話の通話機能、ノイズキャンセル機能、音声アシスト機能をもつスマートイヤホン(以下、Sイヤホンという)を開発している。
利用者はアプリを用いて、Sイヤホンの音源再生機能と通話機能の開始/停止の指示、およびノイズキャンセル機能と音声アシスト機能のオン/オフの設定を行うことができる。Sイヤホンを用いて通話するときには、音源再生機能及び音声アシスト機能は使用できない。
Sイヤホンは左右が独立しており、左耳に装着するイヤホン(以下、左イヤホンという)はスマホとペアリングする。右耳に装着するイヤホン(以下、右イヤホンという)とスマホとの通信は、左イヤホンが中継する。
Sイヤホンは専用のケースに入れると電源がオフとなり充電が行われ、専用のケースから取り出すと電源がオンになる。
Sイヤホンの機能を以下に示す。
・Sイヤホンの機能
機能名1=音源再生機能
音源再生機能の概要1=スマホから送信された音源データを、Sイヤホンで音響補正して出力する。
機能名2=音声アシスト機能
音声アシスト機能の概要1=左イヤホンでは、利用者が発した音声から、特定のキーワードを検出すると、続くフレーズをスマホへの指示として左イヤホンからスマホに送信、スマホで解析して実行する。
機能名3=通話機能
通話機能の概要1=利用者がスマホの操作で発信する、又は利用者のスマホに着信があると、Sイヤホンは、[a]及び[b]を停止して、通話開始を音声で知らせる。
通話機能の概要2=Sイヤホンの、音声を出力するスピーカー及び音声を入力するマイクを使用して、音声データを入出力することで、利用者は通話することができる。
機能名4=ノイズキャンセル機能
ノイズキャンセル機能の概要1=マイクから入力されたSイヤホンの周囲の音(以下、環境音という)から、環境音を打ち消すデータを生成する。このデータをスピーカーの出力に合成して環境音を低減させる。
・Sイヤホンのハードウェア構成
Sイヤホンは、左イヤホンと右イヤホンのそれぞれが、マイク及びスピーカーを接続した音声制御部、クロック部、通信部、それらを制御する制御部、及び電力部から成る。左イヤホンと右イヤホンとでハードウェア構成に違いはない。信号が流れる方向の仕組みは次に示すとおり、マイクから音声制御部。音声制御部からスピーカー。音声制御部から制御部。制御部から音声制御部。制御部からクロック部。制御部から通信部。通信部から制御部。通信部からクロック部。電力部は各部分と相互に電力をやりとりする。
・Sイヤホンの構成要素の機能概要
構成要素名1=制御部
制御部の構成要素の機能1=Sイヤホンの機能名1~4に示す機能を実現するために、音声制御部、クロック部、通信部を制御する。
制御部の構成要素の機能2=左イヤホンの場合は、マイクから入力された音声データを解析して、特定のキーワードを検出する。
制御部の構成要素の機能3=機能の使用状況に応じて、クロックの供給の停止又は適切な周波数を決定して、クロック部に指示する。
制御部の構成要素の機能4=クロック部への指示は0、0.5、1、1.5、又は2の値である。この値に、基準周波数を乗じた周波数のクロックが供給される。0のときは、クロックの供給が停止される。
制御部の構成要素の機能5=クロックの供給が停止されると、その時点の状態を保持したまま停止する。クロックが再度供給されると停止したところから再開する。
構成要素名2=音声制御部
音声制御部の構成要素の機能1=2ミリ秒周期でマイクから入力された音声をデジタルデータに変換して、制御部に送信する。
音声制御部の構成要素の機能2=5ミリ秒周期で制御部からデジタルデータを受信し、スピーカーで音声を出力する。その際、制御部から受信したノイズキャンセルデータを合成する。
構成要素名3=クロック部
クロック部の構成要素の機能1=制御部の指示によって、指示された周波数のクロックの供給又は停止を行う。
クロック部の構成要素の機能2=停止したクロックの供給は①(特定のイベント)によって再開する。このイベントを受けてから5ミリ秒後に、停止する直前の周波数でクロックの供給を再開する。
構成要素名4=通信部
通信部の構成要素の機能1=Bluetoothを用いてスマホと通信を行う。内部にクロックをもち、電源オン後は常に動作する。
通信部の構成要素の機能2=左イヤホンの場合は、スマホとペアリングした後、右イヤホンとスマホとの通信を中継する。
通信部の構成要素の機能3=スマホからのデータ受信すると、それを制御部に送信し、データを受信したことをクロック部に送信する。さらに、データが音源データが音源データ又は音声データの場合は、左右それぞれのイヤホン用のデータを取り出し、5ミリ秒周期で制御部に送信する。
通信部の構成要素の機能4=制御部から受信した音声データをスマホに送信する。
構成要素名5=電力部
電力部の構成要素の機能1=充電可能な電池を内蔵しており、各部に電力を供給する。
・クロック部の動作
制御部の実行時間はクロックの周波数は反比例する。一方、消費電力はクロック周波数が高いほど大きくなる。Sイヤホンは電池駆動であるので、できる限り消費電力は小さくしたい。そこで、この後に示すように機能の使用状況に応じてクロックの周波数を制御部の指示で適切に割り当てることにした。
・使用状況に応じたクロックの周波数割り当て
待機時は音源再生=OFF、通話=OFF、ノイズキャンセル=OFF、音声アシスト=OFF 待機時のクロック部への周波数指示値=0
音源再生モードAの時は音源再生=ON、通話=OFF、ノイズキャンセル=OFF、音声アシスト=ON 音源再生モードAの時のクロック部への周波数指示値=[c]
音源再生モードBの時は音源再生=ON、通話=OFF、ノイズキャンセル=ON、音声アシスト=OFF 音源再生モードBの時のクロック部への周波数指示値=[d]
通話時は音源再生=OFF、通話=ON、ノイズキャンセル=ONかOFFに切り替えが可能、音声アシスト=OFF 通話時のクロック部への周波数指示値=[e]
・制御部のタスク
制御部はリアルタイムOSを使用している。電源オン時にメインタスクが生成される。左イヤホンと右イヤホンとで機能が異なるので、メインタスクはそのイヤホンで必要となるタスクだけを生成する。メインタスクを含め、それぞれのタスクは重複しない固有の優先度が割り当てられる。リアルタイムOSのタスクの状態は実行状態、実行可能状態、又は待ち状態のいずれかである。
制御部のタスク一覧をこの後で示す。クロックの周波数が基準周波数に等しいときタスクの実行に要する時間は、この後に示す実行時間となる。スピーカータスク、マイクタスク、及び特定語検出タスクは起動周期内に処理が完了しなければならない。起動周期内に処理が完了しない場合、音飛びやノイズなどの不具合が発生する。
・制御部のタスク一覧
タスク名1=メインタスク
メインタスクの機能1=ほかのタスクから通知を受けると、通知に応じた処理を行う。
メインタスクの機能2=機能の使用状況に応じて、適切なクロックの周波数を決定して、クロック部に指示する。ただし、クロックの供給の停止はアイドルタスクが行う。
メインタスクの起動周期秒数=無し
メインタスクの実行時間秒数=0.05ミリ秒
タスク名2=スピーカータスク
スピーカータスクの機能1=音源再生時、音源データに音質補正を行い音声制御部に送信する。
スピーカータスクの機能1の起動周期秒数=5ミリ秒
スピーカータスクの機能1の実行時間秒数=3.4ミリ秒
スピーカータスクの機能2=通話時、音声データの音質補正は行わず、音声制御部に送信する。
スピーカータスクの機能2の起動周期秒数=5ミリ秒
スピーカータスクの機能2の実行時間秒数=0.5ミリ秒
タスク名3=マイクタスク
マイクタスクの機能1=マイクから入力された音声データを処理する。
マイクタスクの機能2=ノイズキャンセル機能の処理を行い、生成された環境を打ち消すデータを音声制御部に送信する。
マイクタスクの起動周期秒数=2ミリ秒
マイクタスクの実行時間秒数=1ミリ秒
タスク名4=特定語検出タスク
特定語検出タスクの機能1=マイクタスクから受けた音声データを解析して、特定のキーワードを検出する。
特定語検出タスクの起動周期秒数=40ミリ秒
特定語検出タスクの実行時間秒数=20ミリ秒
タスク名5=通信タスク
通信タスクの機能1=通信部からデータを受信すると、メインタスクに通知する。
通信タスクの機能2=ほかのタスクからの通知を受けると、通信部に送信する。
通信タスクの起動周期秒数=無し
通信タスクの実行時間秒数=0.05ミリ秒
タスク名6=アイドルタスク
アイドルタスクの機能1=メインタスクから指示があると、クロック部にクロックの供給の停止を指示する。
アイドルタスクの起動周期秒数=無し
アイドルタスクの実行時間秒数=無し
起動周期はクロックの周波数に依存せずに一定である。
実行時間はクロックの周波数が基準周波数に等しいときの値である。
タスクの優先度は、通信タスクが最も高く、以下、メインタスク、[f]タスク、[g]タスク、[h]タスク、アイドルタスクの順である。
アイドルタスクは最も優先度が低いので、アイドルタスクが実行状態のとき、ほかのタスク状態は[i]である。
上記のようなSイヤホンの仕組みから以下の4つ問題に答えて下さい。
問題の1番目は[a]、[b]、[f]、[g]、[h]、[i]に当てはまる語句、数値を教えて下さい。あてはめた語句、数値に決定した理由も教えて下さい。
問題の2番目は上述の文章中の①(特定のイベント)の部分に当てはまるイベントとして適切なモノを以下から選択して答えて下さい。その理由も教えて下さい。
選択肢1=一定時間経過
選択肢2=スマホからのデータを受信
選択肢3=制御部からの指示を受信
選択肢4=電力部が電力を供給
選択肢5=マイクから入力された音声データから特定のキーワードを検出
問題の3番目は[c]、[d]、[e]に当てはまる数値の組み合わせを以下から選択して答えて下さい。
ただし、メインタスクと通信タスクの実行時間、OSによるタスクの切り替え時間は無視できるものとし、実行時間は供給されるクロックの周波数に反比例するものとします。
選択肢からそれを選択した、その理由も教えて下さい。
選択肢1:[c]=0.5、[d]=1、[e]=1.5
選択肢2:[c]=1、[d]=1、[e]=0.5
選択肢3:[c]=1.5、[d]=1.5、[e]=2
選択肢4:[c]=2、[d]=1、[e]=0.5
選択肢5:[c]=2、[d]=1.5、[e]=1
選択肢6:[c]=2、[d]=2、[e]=2
問題の3番目は右イヤホンのメインタスクでは生成せず、左イヤホンのメインタスクだけが生成するタスクを制御部のタスク一覧のタスクから選んで答えて下さい。
問題の4番目はクロックの供給を停止できるのは、使用状況に応じたクロックの周波数割り当ての項目の使用状況が待機時のときだけである。待機時以外でクロックの供給を停止できない理由をタスクの起動周期の観点で40字以内で答えて下さい。
令和6年度秋期 午後 問7 組込みシステム開発(問題原文)
■スマートイヤホンに関する次の記述を読んで、設問に答えよ。
G社は、専用のアプリケーションプログラム(以下、アプリという)をインストールしたスマートフォン(以下、スマホという)とBluetoothで接続して、音楽などの音源再生機能、電話の通話機能、ノイズキャンセル機能、音声アシスト機能をもつスマートイヤホン(以下、Sイヤホンという)を開発している。
利用者はアプリを用いて、Sイヤホンの音源再生機能と通話機能の開始/停止の指示、およびノイズキャンセル機能と音声アシスト機能のオン/オフの設定を行うことができる。Sイヤホンを用いて通話するときには、音源再生機能及び音声アシスト機能は使用できない。
Sイヤホンは左右が独立しており、左耳に装着するイヤホン(以下、左イヤホンという)はスマホとペアリングする。右耳に装着するイヤホン(以下、右イヤホンという)とスマホとの通信は、左イヤホンが中継する。
Sイヤホンは専用のケースに入れると電源がオフとなり充電が行われ、専用のケースから取り出すと電源がオンになる。
スマホ及びSイヤホンの概要を図1に、Sイヤホンの機能を表1に示す。
機能名 | 概要 |
音源再生機能 | ・スマホから送信された音源データを、Sイヤホンで音響補正して出力する。 |
音声アシスト機能 | ・左イヤホンでは、利用者が発した音声から、特定のキーワードを検出すると、続くフレーズをスマホへの指示として左イヤホンからスマホに送信、スマホで解析して実行する。 |
通話機能 | ・利用者がスマホの操作で発信する、又は利用者のスマホに着信があると、Sイヤホンは、 a 及び b を停止して、通話開始を音声で知らせる。・Sイヤホンの、音声を出力するスピーカー及び音声を入力するマイクを使用して、音声データを入出力することで、利用者は通話することができる。 |
ノイズキャンセル機能 | ・マイクから入力されたSイヤホンの周囲の音(以下、環境音という)から、環境音を打ち消すデータを生成する。このデータをスピーカーの出力に合成して環境音を低減させる。 |
・Sイヤホンのハードウェア構成
Sイヤホンは、左イヤホンと右イヤホンのそれぞれが、マイク及びスピーカーを接続した音声制御部、クロック部、通信部、それらを制御する制御部、及び電力部から成る。左イヤホンと右イヤホンとでハードウェア構成に違いはない。左イヤホンのハードウェア構成を図2に、Sイヤホン構成要素の機能概要を表2に示す。
構成要素名 | 構成要素の機能 |
制御部 | ・Sイヤホンの機能名1~4に示す機能を実現するために、音声制御部、クロック部、通信部を制御する。 ・左イヤホンの場合は、マイクから入力された音声データを解析して、特定のキーワードを検出する。 |
音声制御部 | ・2ミリ秒周期でマイクから入力された音声をデジタルデータに変換して、制御部に送信する。 ・5ミリ秒周期で制御部からデジタルデータを受信し、スピーカーで音声を出力する。その際、制御部から受信したノイズキャンセルデータを合成する。 |
クロック部 | ・制御部の指示によって、指示された周波数のクロックの供給又は停止を行う。 ・停止したクロックの供給は①特定のイベントによって再開する。このイベントを受けてから5ミリ秒後に、停止する直前の周波数でクロックの供給を再開する。 |
通信部 | ・Bluetoothを用いてスマホと通信を行う。内部にクロックをもち、電源オン後は常に動作する。 ・左イヤホンの場合は、スマホとペアリングした後、右イヤホンとスマホとの通信を中継する。 |
電力部 | ・充電可能な電池を内蔵しており、各部に電力を供給する。 |
・クロック部の動作
制御部の実行時間はクロックの周波数は反比例する。一方、消費電力はクロック周波数が高いほど大きくなる。Sイヤホンは電池駆動であるので、できる限り消費電力は小さくしたい。そこで、表3に示すように機能の使用状況に応じてクロックの周波数を制御部の指示で適切に割り当てることにした。
使用状況 | 機能 | クロック部への周波数の指示 | |||
音源再生 | 通話 | ノイズキャンセル | 音声アシスト | ||
待機時 | 0 | ||||
音源再生1 | 〇 | 〇 | c |
||
音源再生2 | 〇 | 〇 | d |
||
通話時 | 〇 | △ | e |
・制御部のタスク
制御部はリアルタイムOSを使用している。電源オン時にメインタスクが生成される。左イヤホンと右イヤホンとで機能が異なるので、メインタスクはそのイヤホンで必要となるタスクだけを生成する。メインタスクを含め、それぞれのタスクは重複しない固有の優先度が割り当てられる。リアルタイムOSのタスクの状態は実行状態、実行可能状態、又は待ち状態のいずれかである。
制御部のタスク一覧を表4に示す。クロックの周波数が基準周波数に等しいときタスクの実行に要する時間は、表4に示す実行時間となる。スピーカータスク、マイクタスク、及び特定語検出タスクは起動周期内に処理が完了しなければならない。起動周期内に処理が完了しない場合、音飛びやノイズなどの不具合が発生する。
タスク名 | タスクの機能 | 起動周期1) | 実行時間2) |
メイン | ・ほかのタスクから通知を受けると、通知に応じた処理を行う。 ・機能の使用状況に応じて、適切なクロックの周波数を決定して、クロック部に指示する。ただし、クロックの供給の停止はアイドルタスクが行う。 |
0.05 | |
スピーカー | ・音源再生時、音源データに音質補正を行い音声制御部に送信する。 | 5 | 3.4 |
・通話時、音声データの音質補正は行わず、音声制御部に送信する。 | 5 | 0.5 | |
マイク | ・マイクから入力された音声データを処理する。 ・ノイズキャンセル機能の処理を行い、生成された環境を打ち消すデータを音声制御部に送信する。 |
2 | 1 |
特定語検出 | ・マイクタスクから受けた音声データを解析して、特定のキーワードを検出する。 | 40 | 20 |
通信 | ・通信部からデータを受信すると、メインタスクに通知する。 ・ほかのタスクからの通知を受けると、通信部に送信する。 |
0.05 | |
アイドル | ・メインタスクから指示があると、クロック部にクロックの供給の停止を指示する。 |
タスクの優先度は、通信タスクが最も高く、以下、メインタスク、fタスク、gタスク、hタスク、アイドルタスクの順である。
アイドルタスクは最も優先度が低いので、アイドルタスクが実行状態のとき、ほかのタスク状態はiである。
設問1 Sイヤホンの機能について答えよ。
- (1)表1中のa,bに入れる適切な機能名を表1中の機能名で答えよ。
- (2)表2中の下線①の特定のイベントとして適切なものを回答群の中から選び、記号で答えよ。
- 回答群
- ア 一定時間経過
- イ スマホからのデータを受信
- ウ 制御部からの指示を受信
- エ 電力部が電力を供給
- オ マイクから入力された音声データから特定のキーワードを検出
設問2 表3中の c ~ e に入れる適切な数値の組み合わせを回答群の中から選び、記号で答えよ。ただし、メインタスクと通信タスクの実行時間、OSによるタスクの切り替え時間は無視できるものとし、実行時間は供給されるクロックの周波数に反比例するものとする。
- 回答群
-
記号 c d e ア 0.5 1 1.5 イ 1 1 0.5 ウ 1.5 1.5 2 エ 2 1 0.5 オ 2 1.5 1 カ 2 2 2
-
設問3 制御部のタスクについて答えよ。
- (1) 本文中の f ~ h に入れるタスク名を、表4中のタスク名で答えよ。
- (2) 右イヤホンのメインタスクでは生成せず、左イヤホンのメインタスクだけが生成するタスクを表4中のタスクから選んで答えよ。
設問4 アイドルタスクについて答えよ。
- (1) 本文中の i に入れるリアルタイムOSのタスクの状態を答えよ。
- (2) クロックの供給を停止できるのは、表3における使用状況が待機時のときだけである。待機時以外でクロックの供給を停止できない理由をタスクの起動周期の観点で40字以内で答えよ。
回答・解説
設問1
(1)
利用者がスマホの操作で発信する、又は利用者のスマホに着信があると、Sイヤホンは、a 及び b を停止して、通話開始を音声で知らせる。
とあるところの穴埋めですが、スマホで通話をすると何かの機能を停止しなければならないという条件がどこかで定義されていることを意味していて、その部分を問題文から探すと、Sイヤホンを用いて通話するときには、音源再生機能及び音声アシスト機能は使用できない。という部分が条件部分であると推察することができます。したがって答えは
a=音源再生機能
b=音声アシスト機能
となります。順不同でも正解になるので、aとbは入れ替わっていても問題ありません。設問1の(1)の2回答は、長い問題文を読み込みさえすれば答えれる簡単な部類の問題と言えると思います。
設問1
(2)
クロック部の機能として、停止したクロックの供給は①特定のイベントによって再開する。このイベントを受けてから5ミリ秒後に、停止する直前の周波数でクロックの供給を再開する。とあります。
停止した後にクロックが再開されるということは、問題文全体から読み取ると、待機時がクロック0で停止で、その他の状態に遷移した時にクロックが再開するということがわかります。ただ、それがどこからのどんな信号や指示によるものかを考える必要があります。制御部の構成要素の機能の説明に、機能の使用状況に応じて、クロックの供給の停止又は適切な周波数を決定して、クロック部に指示する。とあるので、制御部からの指示を受信したらクロックの供給を決定していますが、イベントを受けてから5ミリ秒後に停止する直前の周波数でクロックの供給を再開するということですから、クロックの供給をしているのは制御部からの指示なのだけど、特定のイベントと言っているものは違うものであると考えられます。特定のイベントがあってから、制御部が5ミリ秒後にクロックの供給を指示しているということになります。
だとすると、特定のイベントというのは待機状態から、音源再生1や音源再生2や通話の状態に状態を遷移させる何かです。電力部も問題文の中で状態を遷移させる指示を出すことがあると記載されていて、専用のケースから取り出すと電源がオンとありますが、電源がオンになってもクロックを供給するイベントにはなりません。音源再生1や音源再生2や通話の状態にするのは、スマホからの指示であると推察することができます。イのスマホからのデータを受信が特定のイベントっぽいと考えられます。念のため他の候補はどうなのか見ておきましょう。アの一定時間というのは、問題文では言及されていない動作です。一定時間たったら、待機状態から音源再生1や音源再生2や通話の状態になったりすることはありません。オのマイクから入力された音声データから特定のキーワードを検出というのは音源再生1の状態になるところだけを指していて、3つの音源再生1や音源再生2や通話の状態になるイベントではないと言えます。ということで消去法的な確認から一つに絞り込め、スマホからの状態遷移を伴う指示こそが3つの状態に遷移するイベントであると考えられます。したがって、答えは
イ スマホからのデータを受信
となります。この設問の答えを導き出すのには制御部はそのイベントの5ミリ秒後に指示を出してクロックを供給する役割であることを認識できるかというところがキーになるのかなと思います。そして、他の選択肢は3つの状態に遷移させるイベントではないということをつきつめることができるという判断力が問われていると思います。イとウは似ているので悩みますが、その微妙な違いを感じ取れるかという感じでしょうか?微妙な言い回しをきっちり読み取れるかを見極められるかを試されている難しめの設問だと思います。
設問2
難しい問題だと思いました。初見でこれが何を言っているか理解できたら凄いと思います。
1.それぞれの状態ごとに必要となるタスクは何なのか?
2.起動周期に間に合わない分だけクロック周波数を高める必要がある
こういうった理解が必要になる問題です。それぞれのタスクの起動周期の割合を計算して、必要となるタスクの分だけこの割合を足し算して、10割(100%)以内ならクロック周波数は1倍でよくて、起動周期の割合が半分5割(50%)以下なら、0.5倍のクロック周波数でも十分に周期に間に合うということになります。同じく、1.5割(150%)ならクロック周波数を1.5倍することで、起動周期に間に合うという感じです。最大は2倍まで設定できるということなので、起動周期の割合が2なら2倍することで起動周期に間に合うという感じです。
クロック周波数の倍率によって処理時間が反比例して短くなるので、起動周期に間に合うようになるというイメージです。
まず、音源再生1、音源再生2、通話、3種類の状態が必要とするタスクを考えます。
- 音源再生1:メインタスク+通信タスク+スピーカータスク(音源)+マイクタスク+特定語検出タスク
- 音源再生2:メインタスク+通信タスク+スピーカータスク(音源)+マイクタスク
- 通話 :メインタスク+通信タスク+スピーカータスク(通話)+マイクタスク
となります。問題文にはメインタスクと通信タスクの実行時間、OSによるタスクの切替え時間は無視できるとあるので、
- 音源再生1:スピーカータスク(音源)+マイクタスク+特定語検出タスク
- 音源再生2:スピーカータスク(音源)+マイクタスク
- 通話 :スピーカータスク(通話)+マイクタスク
と考えることができます。それぞれのタスクの周期割合を先に計算して、どれくらいの周期割合になるかを機能ごとに必要なタスクの周期割合を足し算します。
- スピーカータスク(音源):3.4[ミリ秒]÷ 5[ミリ秒]=0.68
- スピーカータスク(通話):0.5[ミリ秒]÷ 5[ミリ秒]=0.1
- マイク : 1[ミリ秒]÷ 2[ミリ秒]=0.5
- 特定語検出 : 20[ミリ秒]÷40[ミリ秒]=0.5
それぞれの状態では
- 音源再生1:0.68+0.5+0.5=1.68→2 倍で起動周期に間に合う。
- 音源再生2:0.68+0.5 =1.13→1.5倍で起動周期に間に合う。
- 通話 :0.1 +0.5 =0.6 →1 倍で起動周期に間に合う。
したがって選択肢の
オ
が正解となります。
以上が考え方になります。このような考え方をものの数分で思いつかないといけないのは難しすぎると思います。自作パソコンのベースクロックスイッチの操作をしたことがあるような人で、このタスクごとの周期が似たような意味をもっていて、複数のタスクによってクロックを切り替える考え方ができるかということがポイントになるでしょうか?同じようなクロックシステムの状況におかれた組込み開発をやったことがある人だけがわかる問題なのかもしれません。とにかく難しいですね。なので設問1(2)と設問2とで2問も難題が設定されていることになります。恐るべし組込みシステム開発!
設問3
(1) タスクの優先度は、通信タスクが最も高く、以下、メインタスク、fタスク、gタスク、hタスク、アイドルタスクの順
とあるところの穴埋めなので、タスクの優先度について理解が求められる出題です。タスクの優先度についての考え方自体は問題文に記述されていませんので、一般的なタスクの優先度の付け方についての知識が必要になり、組込み機器のタスクの優先度は起動周期が短いものを優先して処理する必要があります。起動周期の遅いものの処理の優先度が低くても、次に起動されるまでに終わらせるまでの時間猶予があるから遅くなってしまっても影響が出ないからです。起動周期の短いものは優先度を上げて先に処理をおわらせるようにしておかなければならないからです。同時にタスク実行できるタイミングがあれば、起動周期の短いタスクを必ず先に処理をしたほうがいいです。あと、空き時間の短さも重要だと思います。短いほど優先度が高いです。念のため両方の観点から確認します。表4からそれぞれの起動周期を確認すると
- スピーカータスク:5ミリ秒(5ミリ秒-3.6ミリ秒=1.4ミリ秒)
- マイクタスク:2ミリ秒(2ミリ秒-1ミリ秒=1ミリ秒)
- 特定語検出タスク:20ミリ秒(40ミリ秒-20ミリ秒=20ミリ秒)カッコ内はタスクの空き時間
したがって、マイクタスク→スピーカータスク→特定語検出タスクとなります。特定語検出タスク自体は長い実行時間を要するので、優先度は低くても後からきたマイクタスクやスピーカータスクに実行順が抜かされ続けると起動周期に間に合わなくなるので、優先度はあるにしても、逐一処理をしていったほうがいいので先入れ先出しぐらいの方式で処理したほうがいいのかもしれません。
ですから答えは
f:マイク
g:スピーカー
h:特定語検出
となります。
この問題も組込みシステム開発におけるタスクの優先度について理解しておかなければならないことを踏まえると一般的な知識を要求されるので、難しい部類の問題で、しかも3問分の配点があるとしたら大きな配点の問題になる重要な設問だと言えると思います。設問(1)の設問からここまで難しい問題が続いていますね。
設問3
(2)
この問題は、問題文中に答えのある優しい問題です。左イヤホンのメインタスクだけが生成するタスクは、表1の音声アシスト機能の概要として左イヤホンでは、利用者が発した音声から、特定のキーワードを検出すると、続くフレーズをスマホへの指示として左イヤホンからスマホに送信、スマホで解析して実行する。とありますので、左イヤホンだけが生成するタスクは特定のキーワードを検出する機能のタスクである特定語検出タスクということになります。
回答欄に特定語検出というキーワードが連続してしまうところに違和感を感じてしまいますが、ここはきっぱりと答えに
特定語検出
と記述する部分です。この設問は簡単な方だと思うので3つは簡単に回答できるということになりますね。
設問4
(1)
アイドルタスクは最も優先度が低いので、アイドルタスクが実行状態のとき、ほかのタスク状態はiである。の穴埋めですので、タスクの状態を記述します。タスクの状態の候補自体は問題文の本文に記載があります。リアルタイムOSのタスクの状態は実行状態、実行可能状態、又は待ち状態のいずれかである。とあるので、実行状態か、実行可能状態、待ち状態から選択することになります。このことに気づければ3択問題なので一気に記述式の問題としては難易度が下がりますが、考え方自体は本文にないので、一般的な知識からひねりださなければなりません。
アイドルタスクが実行中ということはクロックも停止していていずれのタスク自体が実行可能状態にもなく、何もやることがないということなので、実行状態でもないです。タスクから見ると空っぽの状態でタスクが入ってくるのを待っている状態の待ち状態と表現できます。したがって、
待ち状態
これが回答です。やや難易度はありますが、常識の範囲でも想像つくので、楽な問題だといえます。
設問4
(2)
でましたね。文字数制限付きの記述問題です。最上級の文字数制限40文字以内なので、結構難しい文章作りが求められます。
クロックの供給を停止できるのは、表3における使用状況が待機時のときだけである。待機時以外でクロックの供給を停止できない理由をタスクの起動周期の観点で40字以内ですから
待機状態のときにしかクロックの供給できない理由を探る必要があります。なぜアイドル中にタスクを止めないのかを追及するには本文中のこの部分がヒントになります。クロック部の機能概要のイベントを受けてから5ミリ秒後に、停止する直前の周波数でクロックの供給を再開する。という部分と制御部のタスクについての説明部分にあるスピーカータスク、マイクタスク、及び特定語検出タスクは起動周期内に処理が完了しなければならない。起動周期内に処理が完了しない場合、音飛びやノイズなどの不具合が発生する。という部分です。ここから、クロックの供給には5ミリ秒かかること、起動周期内に処理が完了しなければ音飛びやノイズなどの不具合が発生することが読み取れます。
各タスクの起動周期も、スピーカータスクが5ミリ秒で、マイクタスクが2ミリ秒、特定語検出タスクが40ミリ秒です。特定語検出はマイクタスクと併用でなければ使えないので、実際はスピーカータスクとマイクタスクがカギになってきます。いちいちクロックを止めているだけでクロック再開に5ミリ秒使うのですからタスクの起動周期の合間にクロックを止めると間に合わず、結果として起動周期内に処理が完了しなければ音飛びやノイズなどの不具合が発生することになります。
1 5 10 11 20
クロック再開時間でタ スクの起動周期に間に
合わず音飛びやノイズ 不具合が発生するから
21 30 31 40
と、このような回答で正解になるのではないでしょうか。停止できない理由を問う問題なので、どんな不具合が発生するかを説明する部分を省略してもよいと思います。そうすると40文字以内で悠々と答えられる気がします。
この回の組込みシステム開発の問題はかなり難しい問題だったと言えると思います。30分でここまで理論的に考えを整理して、答えを導き出すのは相当なスキルが必要になりそうです。各種AIに問題を解かせても、設問2に至ってはちんぷんかんぷんな回答を得ますので、AIでさえ意味は理解できない経験が必要になる問題になっているようです。AIはまだまだやなとおもわされる問題です。時間はかかるけど人間はコンピュータを超えられるということが実感できる設問ですね。いつまで人間が優位な立場でいられるか時間の問題です。
AP過去問_令和6年度秋期_午後_問6_データベースの同じ回の前の問題へ移動。
AP過去問_令和6年度秋期_午後_問8_情報システム開発の同じ回の次の問題へ移動。
AP 過去問題 午後に戻る。