Raspberry Pi 2 LIFE ご購入はこちら

ダウンロード・データあります

1.2GHz4 コア 64
Wi-Fi&Bluetooth
ビット Cortex-A57
無線付き
炸裂! !
1.2GHz/4 コア / 64 ビット Cortex-A57 炸裂!

緊急 64 ビット高性能
ラズベリー・パイ
3 速報
速報！

ラズベリー・パイ 3

森岡 澄夫

アンテナ
アンテナ

BCM2837（ブロードコム）
Cortex-A53 4コア 1.2GHz

最新
ラズパイ3！

BCM2836（ブロードコム）
Cortex-A7 4コア 900MHz

LED

コネクタ位置などは （b）ラズベリー・パイ2
ラズパイ2とほぼ同じ

LED

写真 1 ラズベリー・パイ 3 はラズベリー・パイ 2 とそっくり（a）ラズベリー・パイ3

ラズベリー・パイ 3 が 2016 年 2 月に発表されまし
た．残念ながら日本では技適の問題のために発売時期が少し遅れたようです（2016 年 4 月時点では秋月
電子通商などで入手可能）．
筆者はラズベリー・パイ生誕の地である英国に居住しており，発表直後に実機を入手して，動かすことができたので様子を速報します．特に初代と比べると桁違いに性能が向上しています．

特徴● 外観はほとんど変わらない● 最も変わったのは CPU 性能と無線通信機能公開されている仕様のうち，変化のある項目を表 1に示します．改良の力点が処理性能の向上にあるのは明らかで，値段がほとんど上がらないまま性能が急激に良くなってきています（わざわざラズベリー・パイ
1 を使う理由が思いつかないほど）．
ラズベリー・パイ1 からラズベリー・パイ2 では CPU
がマルチコア化しました． ラズベリー・パイ2 からラズベリー・パイ3 では 64 ビット・コアになりました．いずれの場合も，クロック周波数も上がっています．
ラズベリー・パイ 3 の発表時には「初代と比べ最大10 倍速くなった」ともいわれました．筆者が評価した
結果については後述します．
CPU 以外に顕著に変わったのは，Wi-Fi と Bluetoothの二つの無線インターフェースが標準で搭載されたことです．ラズベリー・パイによる IoT デバイス・プロ
トタイピングも珍しくなくなってきたので，時流に合わせた変化でしょう．
無線通信機能については，速度評価のようなことはしていませんが，普通に使えています．

見本ラズベリー・パイ 3 とラズベリー・パイ 2 の外観を
写真 1 に示します．
搭載されているチップやコネクタの形状や，部品配置はそっくりで，一見では両者を区別できません．よく見ると，ラズベリー・パイ 2 で GPIO ピン・ヘッダ
近 く に あ っ た 二 つ の LED（PWR，ACT）が ラ ズ ベリー・パイ 3 では電源コネクタ付近に移動しています．
ほかには SoC の型番やシルク印刷のボード名が異なることが分かる程度です．

● ソフトウェアは概ねそのまま走る
緻密なテストを行ったわけではありませんが，ラズ

202016 年 6 月号

ご購入はこちら

春のフレッシャーズ特別企画

イントロダクション

新人さんはココから！
音声信号処理のススメ
編集部

音声信号処理から始めるメリット
メリット① ウェアラブル端末とか新しいモノが作れる

やっぱ監督が変わると違うな

メリット② 体験しながら基本を習得しやすい

見本
242016 年 6 月号

特集のコンセプト①なるべく細かく分けて一つずつ解説 !

Intro

新人さんもOK !

② exeを用意! 全信号処理
プログラムを
試せます

App1

App2

App3

App4

1
2
3
4

③ C ソースを用意!
全信号処理を改造して試せます④全プログラムは
付録 CD-ROM に収録

見本2016 年 6 月号

5
6

これが
あれば
ひとあんしん25ご購入はこちら
特集 体感! 全集 CD 付き! 音声信号処理
第1章

ファイルの読み書きから録音まで

音声データの基本操作
1-1：wav 音声ファイルの読み込み
リスト 1

川村 新

収録フォルダ：44_WAV_readingwav ファ イルの読み込みプログラム DD_wav_read

ing.c（抜粋）

ヘッダ情報を表示させた（a）wav ファイル読み込み用変数の宣言部
unsigned short tmp1; // 2 バイト変数
unsigned long tmp2; // 4 バイト変数（b）wav ヘッダ・ファイルの表示部
printf("Wave data is\n");fseek(f1, 22L, SEEK_SET); // チャネル情報位置に移動
fread ( &tmp1, sizeof(unsigned short), 1, f1);// チャネル情報読み込み 2 バイト
ch=tmp1;// 入力チャネル数の記録
fread ( &tmp2, sizeof(unsigned long), 1, f1);// サンプリング周波数の読み込み 4 バイト
Fs = tmp2;// サンプリング周波数の記録
fseek(f1, 40L, SEEK_SET); // サンプル数情報位置に移動
fread ( &tmp2, sizeof(unsigned long), 1, f1);// データのサンプル数取得 4 バイト
len=tmp2/2/ch;// 音声の長さの記録 (2 バイトで 1 サンプル )= %d ch\n", ch);// 入力チャネル数の表示
printf("Sample rate
= %d Hz \n", Fs);// 入力サンプリング周波数の表示
printf("Sample number = %d\n",len);// 入力信号の長さの表示
printf("\nPush any key\n");getchar();fseek(f1, 44L, SEEK_SET); // 音声データ開始位置に移動

音声データを
16ビット整数と正規化した値の両方で表示

図1

wav ファイルの読み込みプログラムの実行

printf("Channel（c）メイン・ループ内 Signal Processing 部● プログラム
wav ファイルを読み込むプログラムをリスト 1 に示します．
wav ファイルのヘッダは，2 バイトで書かれている部分と 4 バイトで書かれている部分があります．このため，読み込み用の変数として，2 バイト用の tmp1

y[t]=s[t];// 出力＝入力
printf( 16bit= %d\t Normalized= %f\n ,input,s[t]);// 観測信号を表示と，4 バイト用の tmp2 を準備しています．
ヘ ッ ダ 情 報 の 場 所 は 規 格 で 決 ま っ て い る の で，音声処理でよく利用される wav ファイルを読み込
み，テキスト・データとして表示するプログラムです．
wav ファイルを扱うための基本処理になります．

fseek 関数で該当箇所に移動し，データを読み込んで表示します．後半のデータ部も開始場所が決まっているので，そこから読み出しを開始します．
今回は 16 ビット・データが並んでいるという前提で読み出しを行っています．

● 仕組み● 実行結果見本

wav ファイルは，最初にサンプリング周波数やデー
タの数などのヘッダ情報が書かれています．その次に，音のデータが並んでいます．これらはもちろん全てバイナリ・データ（0 か 1）で表現されています．
ここでは，ヘッダ情報を読み出して，主要部分を表示します．次に，バイナリ・データで書かれたデータを読み出し，テキスト・データとして表示します．

36

実行結果を図 1 に示します．ヘッダ情報として，1チャネルの音声で，サンプリング周波数が 16000Hz，
サンプル数が 33000 であることが表示されています．
よって，音声信号は，33000/16000 ＝ 2.0625 秒である
ことが分かります．
続 い て， 各 デ ー タ に つ い て，16 ビ ッ ト 整 数 値（－ 32768 〜 32767）と正規化した数（－ 1 〜 1）の両方が表示されています．

2016 年 6 月号

ご購入はこちら
第

2章

第2章

はじめの一歩! フィルタがわかれば何でもできる

基本フィルタ川村 新

2-1：素通しフィルタ

（y t）＝s
（t）

（
s t）
入力

収録フォルダ：00_Through
リスト 1

素通しフィルタ

出力1

入力を1倍して出力する
図1

基本フィルタ素通しシステムの仕組み

素通しフィルタのプログラム DD_Through.c（抜粋）（a）信号処理用変数の宣言部のプログラム
int
t
= 0;
long int t_out = 0;
int
add_len= 0;
short
input, output;
doubles[MEM_SIZE+1]={0};doubley[MEM_SIZE+1]={0};// 時刻の変数// 終了時刻計測用の変数// 出力信号を延長するサンプル数// 読み込み変数と書き出し変数// 入力データ格納用変数// 出力データ格納用変数（b）メイン・ループ内 Signal Processing 部のプログラム
y[t]=s[t];// 出力＝入力

入力信号

タートします．メイン・ループ内では，各時刻の処理が終了すると 1 ずつ増加させ，MEM_SIZE まで増加
すると，再び 0 に戻るようにしています．入力データと出力データを格納する配列は MEM_SIZE ＋ 1 まで

出力信号

図2

入力信号がそのまま出力されている

最も簡単な音声処理の例として，ある wav ファイ
ルの信号を 1 倍して（つまりそのまま）出力します．出
力 wav ファイルと入力 wav ファイルは一致します．
また，マイクから入力を得て，そのままスピーカから出力する素通しのリアルタイム・プログラムを作成
します．

● 仕組み

のまま出力 y[t] に代入しています．これが各時刻における処理です．
リアルタイム・プログラム（RT_Through.c）でも入力データと出力データを同じ変数で定義していますので，宣言する変数と，メイン・ループ内の処理は全く同じです．

● 実行結果
実行結果を図 2 に示します．入力波形と出力波形が同一であることが確認できます．
リアルタイム・プログラムでは，マイク入力がそのまま出力されます．ハウリングを避けるために，必ずイヤホンを使用してください．

見本

入力をそのまま出力する素通しシステムを図 1 に示します．破線で囲まれた部分が素通しフィルタです．
中央の×マークは乗算器であり，矢印で入力される信号を定数倍して出力する役割を果たします．

● プログラム

用意します．
メイン・ループ内では，入力として得た s[t] をそ

素通しフィルタのプログラムをリスト 1 に示します．音声の入出力ファイルの取り扱いに関する説明は省きます．
変数宣言部において，時刻は t で管理し，0 からス

2016 年 6 月号

43

ご購入はこちら

特集 体感! 全集 CD 付き! 音声信号処理
周波数領域で自由に信号処理できたらイッチョマエ
第3章

スペクトラム解析
3-1：高速フーリエ変換 FFT/ 逆 FFT

川村 新

収録フォルダ：15_1_FFT_Through

ここで，Fs はサンプリング周波数です．N が大きい
ほど，周波数分解能は高くなりますが，その分，DFTに使用する s（t）のサンプル数は多くなります．
分析結果の X（k）から元の信号 s（t）を得るには，次の逆 DFT（IDFT： Inverse DFT）を利用します．
s (t ) =拡大

図 1 音声の波形は短時間なら規則正しい繰り返しパターンになる

入 力 wav フ ァ イ ル に 対 し て 高 速 フ ー リ エ 変 換（FFT：Fast Fourier Transform）を適用します．さらに逆 FFT（IFFT：Inverse FFT）により，元の信号に復元します．
FFT によるプログラムができると，音声信号処理の幅が一気に広がります．

● 仕組み▶周波数解析の基本は離散フーリエ変換
音声信号処理の主役級の周波数解析法は，離散フーリエ変換（DFT：Discrete Fourier Transform）です．
N 個 の 入 力 信 号 s（t）
（t ＝ 0，1， …，N － 1）に 対 す る

X (k) =

 2 k s (t ) exp  jt ����������（1）
N 

t=0

∑

ここで，j は虚数単位です．また，k は周波数番号を表します．k 番目の周波数と実際の周波数 F［Hz］は，
次のように関係しています．
k F= ������������������（2）
N Fs

54

∑

▶離散フーリエ変換を高速に行う
FFT は離散フーリエ変換の高速算法です．よって，
FFT の結果と DFT の結果は同じです．また，IFFT
も IDFT の高速算法であり，結果は等しくなります．
FFT アルゴリズムの詳細は他の書籍に譲ります．
音声に対する FFT 分析は，フレームと呼ばれる短時
間の区間ごとに順次実行します．これは，長時間では激しく変化する音声も，短時間（30ms 程度）ならば特性がほとんど変動しないためです（図 1）．
フレーム内の s（t）の始点と終点の値は通常異なり
ますが，このとき分析誤差が増大することが知られています．分析誤差を少なくするために，窓関数と呼ばれる関数を掛けて，フレーム内の s（t）の両端を滑らかにゼロにします．
また，FFT 分析は，フレームの長さを半分ずつシフトして実施します．IFFT で出力を合成する場合，
フレームが半分重なりますが，この部分は信号を加算することで出力を作成します．

見本

DFT は次のように定義されます．
N 1

N 1
 2 k 1
X ( k ) exp  jt ���������（3）N k=0
 N 

● プログラム

FFT のプログラムをリスト 1 に示します．
今回の FFT は，s（t）の 512 サンプルを 1 フレームとして実行します．サンプリング周波数が 16kHz なの
で，フレームの長さは 32ms に相当します．
FFT の結果は複素数になるので，実部を xr，虚部を xi の配列で表現しています．

● 実行結果
実行結果を図 2 に示します．入力波形と出力波形の2016 年 6 月号

ご購入はこちら
第

4章

第4章

ボイス・チェンジャ

体感して信号処理のイメージをつかむ①

ボイス・チェンジャ
4 -1：再生速度の変更

川村 新

収録フォルダ：50_speed_change_by_Fs
リスト 1

サンプリング周波数16kHzの信号

サンプリング周波数による再生速度の変更プログラム

DD_speed_change_by_Fs.c（抜粋）t（a）信号処理用変数の宣言部
doubleint
double

1秒間に16000サンプルのデータがある

y[MEM_SIZE+1]={0};i;speed_rate;// 出力データ格納用変数// 時刻の変数// 何倍速再生にするか（b）出力 wav ファイルのヘッダ情報設定部
speed_rate
Fs_out= 1.2;= Fs * speed_rate;// 何倍速再生にするか// サンプリング・レート（c）メイン・ループ部

サンプリング周波数32kHzで再生

x[t]=s[t];// x[t] を入力信号とする

t

サンプル値を変更せず1秒間に32000サンプル分のデータを再生すると，倍速再生になる
図 1 16kHz サンプリングの信号を 32kHz サンプリングで再生す
ると倍速再生になる

wav ファイルのサンプリング周波数だけを変更して再生します．再生速度を変更する効果が得られま
す．

● 仕組み
あるサンプリング周波数でサンプリングした信号を，別のサンプリング周波数で再生すると，再生速度を変化させることができます．つまり，早回し再生や遅回し再生を実現できます．
サンプリング周波数を r 倍すると，r 倍の再生速度となります．例えば，16kHz サンプリング（1 秒間に16000 サンプル）の信号を倍の 32kHz サンプリング（1
秒間に 32000 サンプル）で再生した場合は，倍速再生になります（図 1）．

● プログラム
サンプリング周波数による再生速度の変更のプログ
ラムをリスト 1 に示します．
出力サンプリング周波数は，入力サンプリング周波数の speed_rate 倍になるように設定しています．
単純に出力 wav ファイルのヘッダを書き換えるだけで速度変換が実現できます．

見本● 実行結果

実行結果を図 2 に示します．元の音声は，16kHz サ
ンプリングです．出力では，サンプリング周波数を1.2 倍にしています．この場合，波形の長さは 1/1.2 ≒0.83 倍になります．
試聴すると，早回し再生になっていることが確認で
きます．

入力信号

出力信号

図 2 サンプリング周波数を 1.2 倍にして再生…出力信号の再生時間が短縮されていることが分かる

2016 年 6 月号

69

ご購入はこちら
第

5章

第5章

エフェクト

体感して信号処理のイメージをつかむ②

エフェクト

川村 新

5-1：オート・パン…音源が左右に振られたような感覚が得られる


収録フォルダ：32_autopan
リスト 1

オート・パン
1＋sin
（ω1n）

y（n）
Rch出力
R
1−sin
（ω1n）

図1

（a）信号処理用変数の宣言部
y（n）
Lch出力
L

入力
x（n）

0〜2の増幅率が
LchとRchで交互に変化する

doubley_L[MEM_SIZE+1]={0}; // Lch 出力データ格納用変数
doubley_R[MEM_SIZE+1]={0}; // Rch 出力データ格納用変数
long int l = 0;// 正弦波用の時刻管理
doublea, r;// 正弦波パラメータ（b）信号処理用変数の初期設定
r=0.2;// 正弦波の周波数（c）メイン・ループ内 Signal Processing 部

オート・パン…音源を左右に振る

a = 1.0 + sin(2.0*M_PI*r*l/(double)Fs);// 正弦波を更新
y_L[t] = a*s[t];// 正弦波を入力に乗じたものを Lch 出力
a = 1.0 - sin(2.0*M_PI*r*l/(double)Fs);// 負の正弦波を更新
y_R[t] = a*s[t];// 正弦波を入力に乗じたものを Rch 出力
l=(l+1)%(10*Fs);// 正弦波生成用の時刻

入力信号

し，Lch と Rch の増幅率は，1 を中心に互いに逆の動きをします．

Lch● プログラム

出力信号

オート・パンのプログラムをリスト 1 に示します．
変数として，正弦波の周波数を r，乗算器の値とし

Rch

図2

オート・パンのプログラム DD_autopan.c（抜粋）て a を宣言しています．ここでは，周波数を r=0.2

Lch と Rch の信号振幅が互いに逆の変化になっている

モノラルの音声を入力し，ステレオ信号に変換し，さらに音源が左右に振られたようなエフェクトをかけます．

と設定しています．
ゆっくり変化させることがうまく音源を移動させる
コツです．

● 実行結果見本● 仕組み

オート・パンは，出力音量が増幅と減衰を交互に繰り返します．ただし，左チャネル（Lch）と右チャネル（Rch）で増幅の変化が互いに逆になります．このような信号を両耳で聞くと，音源が左右に振られたような感覚を得ることができます．
オート・パンのシステムを図 1 に示します．ここで，振幅の増幅を正弦波状に 0 〜 2 で変化させます．ただ2016 年 6 月号

実行結果を図 2 に示します．Lch が大きいとき Rch
は小さく，Rch が大きいとき Lch は小さくなっていま
す．Lch と Rch の信号振幅が互いに逆の変化となっていることが分かります．
イヤホンで聞くと，音源が左右に移動しているように感じられると思います．

85ご購入はこちら
特集 体感! 全集 CD 付き! 音声信号処理
第6章

これからも応用範囲はいろいろ広いです

信号処理レベルアップ!
適応フィルタ川村 新

6-1：システム同定

適応フィルタ−（x t）

システム同定のプログラム DD_SysId.c（抜粋）（a）冒頭の宣言部#define#define

MEM_SIZE 16000
N
2000// 音声メモリのサイズ// フィルタ次数（b）信号処理用変数の宣言部
doubledoubleint
doubledoubledoubledoubledoubles[MEM_SIZE+1]={0}; // 入力データ格納用変数y[MEM_SIZE+1]={0}; // 出力データ格納用変数i;// for ループ用d;// 所望信号x, e;// 観測信号，誤差信号
g[N+1]={0};// 未知系の係数
h[N+1]={0};// 適応フィルタ係数
norm, mu;// ノルムとステップ・サイズ（c）変数の初期設定部
mu=0.05;g[0]=1.0;g[N-1]=1.0;// ステップ・サイズ// 未知システム（エコー）（d）メイン・ループ内 Signal Processing 部
s[t] = input/32768.0;// 音声の最大値を 1 とする ( 正規化 )
x=0,d=0, norm=0;
for(i=0;i<N;i++){d = d + g[i] * s[(t-i+MEM_SIZE)%MEM_SIZE];// 所望信号作成
x = x + h[i] * s[(t-i+MEM_SIZE)%MEM_SIZE];// 適応フィルタ出力 = 所望信号のレプリカ
norm=norm+s[(t-i+MEM_SIZE)%MEM_SIZE]*s[(t-i+MEM_SIZE)%MEM_SIZE]; // ノルムの計算}
e = d - x;// 推定誤差
if(norm>0.00001){ // ノルムが一定値以上ならフィルタ係数を更新
for(i=0;i<N;i++){ // NLMS アルゴリズムでフィルタ係数更新
h[i] = h[i] + mu * s[(t-i+MEM_SIZE)%
MEM_SIZE] * e/norm;}}
y[t] = x;// 推定信号を出力とする

D

h（t）
1

D

h（t）
2

m

e（t）＝d（t）+ s（t）
− x（t）
ρ

D

（t）
hN −1

s t−m）∑ h（t）（

各係数は観測信号から推定値を引いた推定誤差（
s t−2）

D

N−1

m =0

（
s t−1）

出力信号
（
y t）

図 1 未知システムと同じ構造を適応フィルタで作り出す…シス
テム同定
リスト 1

（
x t）＝

誤差信号
e（t）

推定信号

推定信号

…

同定

h（t）
0

入力信号
（
s t）

d
（t）

…

入力信号
（
s t）

所望信号

…

未知システム

収録フォルダ：71_SysIdがゼロになるように更新
する（
s t−N +1）
係数更新アルゴリズムの例（NLMSアルゴリズム）（
s t−m）e（t）
hm（t +1）＝ hm（t）+μ N−1∑ s（t−m）ステップ・サイズ
2（更新の強さを決める
パラメータ）（m＝0，1，…，N−1）
m =1

図2

適応フィルタとして FIR フィルタを用いる

適応フィルタ（Adaptive Filter；出力と所望の信号を近づけるように自動的に設計変更を行えるフィルタ）で未知システム（入力と出力だけが観測可能で中身が全く分からないシステム）を推定することをシス
テム同定（Sysyem Identification）と呼びます．

● 仕組み

見本

96

ある未知システムに信号を入力し，所望の信号が出力されたとします（図 1）．例えば，カラオケなら，マイクに入る音声が入力で，スピーカから出るエコー付
きの音声が所望の信号です．未知システムの中身は分
かりません．
しかし，適応フィルタで所望の信号と同じ信号を作ることができれば，結果として未知システムと同じ構造を得たことになります．これがシステム同定です．
適応フィルタの構成を図 2 に示します．フィルタ係数を推定誤差が 0 に近づくように更新します．係数更新 の た め の 適 応 ア ル ゴ リ ズ ム と し て は，NLMS

2016 年 6 月号

ご購入はこちら

ARM FPGA

ダウンロード・データあります

定番 ZYBO ボードによるハードウェア制御…その③

オリジナル回路用
デバイス・ドライバの動作メカニズム鳥海 佳孝

イーサネット

今回解説するオリジナル回路用
デバイス・ドライバ

開発用ホストPC

Zynq

ETH

USB

ZYBO

システム・コール
ユーザ・プログラム

カーネル空間カーネルとデバイス・ドライバが動作する空間デバイス・ドライバ
ハンドラ実行

図2

Linux

PROG
UART

ユーザ空間
ユーザ（通常）のプログラムが動作
する空間

ドライバ

ARM
プロ
セッサ部

ソフト
ウェア

デバイス・ドライバによる I/O アクセス

ユーザ・プログラムによって実行されるシステム・コールに従ってカーネル空間で動作するデバイス・ドライバのハンドラが動作する

PS部
前回組み込んだFPGA部（PL部）のオリジナル回路

Pmod
JE

8

GPIO

ハード
ウェア

7セグメントLEDデコーダ

Pmod
JD

Pmod
JC

動作の仕組み

PL部
Pmod
JB

Linux のような OS においては，アドレス・マッピ
ングされた I/O を直接アクセスすることができないよ
うな仕掛けになっています．マイコン・システムとの，大きな違いの一つです．

● I/O アクセスはデバイス・ドライバが基本
4桁7セグメントLED
図 1 今回解説すること…FPGA 部オリジナル回路を動かすためのデバイス・ドライバ（GPIO）の動作メカニズム

このコーナでは，ARM プロセッサと FPGA（Field
Programmable Gate Array）が 1 チップになったザ
イ リ ン ク ス の Zynq と， ア ル テ ラ の SoC（Cyclone
SoC や Stratix SoC）を対象に，うまく使う方法やさまざまな話題を取り上げていきます．
2016 年 4 月号と 5 月号の本コーナでは，FPGA 部を使ったオリジナル回路の制御に，ダウンロードした GPIO のデバイス・ドライバを使用していました（図 1）．今回は，Linux からオリジナル回路を動かすためのデバイス・ドライバの動作メカニズムについて説明します．Linux デバイス・ドライバの全てを一から解説していては膨大な誌面が必要になるので，ここではまず本コーナで使用した基本的な GPIOのデバイス・ドライバに注目します． （編集部）

Linux システムにおける I/O アクセスは，次のような方法が考えられます．

・mmap システム・コールを用いて /dev/mem を使って I/O アクセス・

デバイス・ドライバ使用して I/O アクセス（図 2）mmap システム・コールを用いた場合には，・root でないと実行できない・割り込みが使えない見本2016 年 6 月号などの問題があります．従って，Linux で I/O アクセスを行うときには，デバイス・ドライバを用いるのが王道です．

● デバイス・ドライバの呼び出しLinux システムの場合，メモリ空間がユーザ空間とカーネル空間に分かれています．デバイス・ドライバ
はカーネル空間の中で動作しています．ユーザ空間で動作するプログラムが I/O アクセスを行う場合は，実行されたシステム・コールに従って，デバイス・ドラ
イバが動作します．この際，カーネルが該当するデバ

ARM FPGA ザイリンクス Zynq の Linux 開発環境（2016 年 2 月号）
C でも書ける ARM FPGA の回路設計環境（2016 年 3 月号）
ARM FPGA 用 Linux にデバドラを組み込む（2016 年 4 月号）

107

個人で試せる!

ご購入はこちら

キッ
発売 ト
開始
!

ダウンロード・データあります

生体センシング実験室
バ

イ

第 7回

タ

ル

手軽で非接触 OK! 赤外線脈波心拍数計測

上田 智章

脈波の計測に用いる
ハードウェア

アンプ＆
フィルタ
回路

電極
パッド

フォトダイオード 赤外線LED
図 1 赤外線 LED とフォトダイオードを利用して脈波
を測定する

静電容量型
センサ

心室心筋の収縮命令
15000
振幅（相対値）

10000
5000
0

加速度
センサ

0.5s

心電図
赤外線
脈波

R-R間隔

赤外線
LED

−5000
−20000時間
心拍出で高血圧時

振幅
（相対値）

図2

1
0.8
0.6
0.4
0.2
0
−0.2
−0.4

UART
A-D
変換

シリ
アル
通信

CPLD MAX II

アンプ＆フィルタ回路9V

9Vから5V,
3.3V, 1.65V
を作る
9V乾電池
006P

アンプ＆
フィルタ回路

生体計測学習キットボード

図 4 連載を通して使用している生体計測学習キットボードと脈波計測に使う回路
Bluetoothモジュール

この波形を抽出するのが目的
0.5s

見本

脈波波形からは R-R 間隔を求められないため間隔をクッキリさせるために 2 回微分した● 今回やること…赤外線を使って測った脈波から心拍数を求める

図 1 に示すように，赤外線を皮膚に照射し，反射光の強度変化をフォトダイオードで測定することで脈波を測定できます．

CPLD MAX II

赤外線脈波の計測回路

時間

図 3 赤外線脈波波形を 2 回微分したときのピーク間隔から心拍数が求められる

112

A-D
変換用
アナログ
回路

各センサを接続するための9ピンDサブ・コネクタ

心電図と赤外線脈波波形の時間関係

Bluetooth
モジュール

アンプ＆
フィルタ回路フォトディテクタ−15000A-D変換の値を
パソコンへ

写真 1

生体計測学習キットボードを用いた

図 2 に心電図と赤外線脈波の同時観測例を示します．心電図では鋭い R 波のピーク時相を捕捉すること
で R-R 間隔から心拍数を計算することができました．
しかし，赤外線脈波はピーク位置がなだらかな変化しかなく，レベル変動も伴います．そこで，医療分野では図 3 に示すように脈波を 2 回微分して得られた加速度脈波を用います．心電図ほどではありませんが，鋭第 1 回 心電図計測の予備知識…心臓のしくみ（2015 年 12 月号）
第 2 回 バイタル・センシング実験ボード＆心電図取得用電極（2016 年 1 月号）
第 3 回 心電図を取得する（2016 年 2 月号）

2016 年 6 月号

ご購入はこちら

5 月号特集「トルク自由自在! 最新モータ制御」フォローアップ

さすがトルク MAX ベクトル制御なら複雑な最新タイプもシンプルにサクッ!

5,000円モータ・キットで初体験!
最新タイプ高効率モータIPMSM

大黒 昭宜

デバック用基板

11.1V，
5.6A 14極．
ここでは
使わない

パソコンへ

30V

電源

モータ・ドライバ基板
L6230
指令

M

30V

12V
STM32F302R8（Cortex-M4, 72MHz）

マイコン基板

USB

3端子
レギュ
レータ

5,000円モータ制御入門キット（写真1）を使う
制御パラメータの設定＆実験モニタ用

IAR統合開発環境
ST Motor Control Workbench
32ビット，Cortex-M4，
72MHz，STM32F302R8

最高48V， モータ モータへ用電源
2.8A駆動L6230

図1

CQブラシレス・モータ
や電動アシスト
自転車用モータ

実験のハードウェア構成

写真 1 なんと DC ブラシレス・モータ付きで 5,000 円! モータ制
御入門キット P-NUCLEO-IHM001

パソコン

2016 年 5 月号で使い方を紹介

ST提供のサンプル

IAR統合開発環境
サンプル・
プログラム

ST社提供の開発ツールを使うと目標回転数と今の回転数がひと目でわかる
マイコン
基板へ

○

コンパイル

○

書き込み

呼び
出し
呼び
出し

○

○

ベクトル制御用プログラム
ベクトル制御プログラム用ヘッダ・ファイル
設定

ST Motor Control Workbench（モータ・コントロール用
ユーザ・インターフェース）「Motor」モータのパラメータ設定（図3）「Advanced」からIdのPI制御などを設定（図4）

○
○

見本

図 2 ソフトウェ ア開 発は定 番 統 合 開 発 環 境 IAR Embedded
Workbench と ST マイクロ提供ソフトで行える

ターゲット②：高出力最新モータIPMSP
5,000円モータ制御キット
P-NUCLEO-IHM001

ターゲット①：従来タイプ
SPMSMモータ（CQブラシレス・モータ）写真 2 今回やること…制御は難しいが高出力が得られる最新モータIPMSMをベクトル制御を使ってできるだけ簡単に回してみる

2016 年 6 月号

本誌 2016 年 5 月号特集では，マイコン基板，モータ・ドライブ基板，DCブラシレス・モータが一つになった
5,000 円 程 度 で 入 手 で き る 入 門 キ ッ トP-NUCLEOIHM001（ST マイクロエレクトロニクス，写真 1，コラ
ム）を使って，電動カート向け DCブラシレス・モータ（CQブラシレス・モータ）をベクトル制御で駆動してみました．このモータは表面磁石型同期モータSPMSM（Surface Permanent Magnet Synchronous Motor）ですが，今回は埋め込み永 久 磁 石同期モータIPMSM

117

ImageTech

ご購入はこちらダウンロード・データあります

選び放題時代! 小型モジュール＆iPhone で試して合点!

高性能カメラ探偵団
第2回

パラメータ：SN 比…暗いと目立ってくる! 画像品質を表す代表値
チャート：グレー・スケール

エンヤ ヒロカズ
20120881201.html）と iPhone です．

画像ノイズの基礎知識● ザラザラした感じの画像になる

写真 1

画像ノイズが測れるグレー・スケール・チャート

CQ グレー・スケール・チャート ENYA-01

前回（第 1 回，2016 年 5 月号）はグレー・スケール・チャート（写真 1）を紹介しました．
今回は同じグレー・スケール・チャートを用いて，画質を決める大きな要素であるノイズの測定方法を紹介します．
ターゲットのカメラは前回同様，OV5642 カメラ・モ ジ ュ ー ル（http://www.csun.co.jp/SHOP/

例えばオーディオ機器でノイズと言えば，サーというホワイト・ノイズやブーンという電源のハム・ノイズなど，実際の音楽演奏や会話の中に存在せず，機器内で発生したノイズのことを指します．
カメラの場合も同じで，実際の被写体には存在しな
いのに，撮影した画像に発生した映像成分のことをノイズと言います．写真 2 にノイズのありなしの一例を示します．実際の被写体となる写真 2（a）は，まねき猫の表面が平たんでつやつやに光っています．ノイズを含んだ写真 2（b）は，表面に細かい濃淡があり，ザラザラした感じの画像になっています．
これを模式的にチャートで表したものが図 1 になります．本来なら明るさに応じて画素単位で滑らかな階段状の線を描きますが，実際はノイズ成分として輝度が階段状に上下に変動しています［図 1（b）
］
．

ザラつき

見本
（a）ノイズなし
写真 2120（b）ノイズあり

画像にノイズを含むとザラザラした感じになる

第1回

評価項目：リニアリティ…輝度と出力値の直線性（2016 年 5 月号）

2016 年 6 月号

ご購入はこちら

サンプル
・
プログラ
ム
付き!
ではじめる

高速ワンチップ・マイコン

ソフトウェア無線
第9回

なんて不思議!? 1LSBより微弱な信号を受信して音が聞ける理由
高橋 知宏（a）〜（e）の値をバッファに貯めておき，
デバッガで取り出して解析する

LPC-Link2

LPC4370（NXPセミコンダクターズ）
fS＝12MHz

アンテナに
つなぐ回路
AMP

7〜7.5 30dB
MHz

×

A-D
コン
バータ

信号
発生器
（SG）

図1

入力
回路

I

CIC
フィルタ

×

I

×

FIR
フィルタ

（d）

（e）

IIR
フィルタ

×
I2S

×
cos

基礎実験用回路fS＝8kHz
1/10 （c）

Q

CIC
フィルタ

×

sin

cos

12MHz

FIR
フィルタ

IIR
フィルタ

sin fC＝3kHz fC＝1.3kHz
LPF
LPF

×
cos

微調NCO
（約1Hzステップ）

粗調NCO（4kHzステップ）
チューニング周波数を±1.3kHzずらす

Q

×

ゲイン

AGC

レベル

コーデック

BPF

fS＝80kHz
1/150 （b）

（a）

sin

±1.3kHz
I2＋Q2

今回の微小信号解析用 7MHz 帯アマチュア無線ソフトウェア SSB 受信機の構成

それぞれの処理段階のデータを観察するために，（a）〜（e）の箇所でデータを取り込む

本連載では，第 5 回〜第 8 回で，7MHz 帯アマチュ
ア無線 SSB（Single Side Band）を主な対象にしたソフ
トウェア受信機を試してきました．実際に受信してみると，想像していたよりも弱い信号でも受信することが可能です．
これまでの記事では，レベル不足対策に，30dB 程度のアンプを使っていました．きちんとしたアンテナ
を使えば，実は，アンプを挿入しなくても受信できます．
アンテナからバンドパス・フィルタ（BPF）を通して A-D コンバータ（ADC）に入力することで，あとはソフトウェアだけで受信機を構成することができてしまうのです．たかだか 12 ビットの ADC で，微弱なRF 信号を取り込むことができてしまうのです．少し不思議に感じてしまうのですが，ADC と信号処理の性質からこのようなことが可能です．今回はこれを説明します．

今回実験で確認すること● フルスケール 0.5V/12 ビットの 1LSB ＝
122 μ V
LPC4370 の ADC は 12 ビ ッ ト の 分 解 能 で， フ ル ス
ケールは 0.5V です．0.5V を 212 すなわち 4096 階調に分割するわけです．電圧を A-D 変換した数値の 1LSB
（Least Significant Bit）当たりの電圧幅は，ざっくり
0.5V/4096 = 122μV となります．少なくとも 122μVの変化がなければ，ADC で変換された数値は変化しないはずです．普通に考えると ADC では 1LSB 未満の電圧変化を取り扱うことは不可能なように思えます．

見本● アンテナ入力レベル－ 100dBm のとき
VP-P ＝ 6.3 μ V

一方，アンテナからの入力信号について考えてみます．一般にアンテナに入力される信号はごく微小で126

第 1 回 AM ラジオを作る（2015 年 10 月号）
第 2 回 AM ラジオで行う信号処理（2015 年 11 月号）
第 3 回 短波ラジオを受信する（2015 年 12 月号）

2016 年 6 月号

Raspberry Pi 2 LIFE ご購入はこちら

ダウンロード・データあります

地球の裏側からも OK! 360°見守りローバー君だぜ

ラズパイ式走る
リモート探査カメラ
第8 回 ラズパイ×モータ! 自走ローバー1号 2 号
ラズベリー・パイ

モータ・ドライブ用
Hブリッジ・ボード（何でもよい）

5V供給
モバイル・
バッテリ

DCブラシ付きモータ×2（ラジコン用マブチモータ）

PiCamera

ラズベリー・
パイ専用
カメラ
PiCamera

モータ
駆動基板

画像
モータ・
ドライバIC
SN754410

森岡 澄夫

ラズベリー・パイ
5V

モータ・ドライバ
SN754410（テキサス・インスツルメンツ）の載った基板（何でもよいが筆者はRyanteck製を利用）

Wi-Fi接続用
USBドングルなど
WLI-UC-GNME（バッファロー）バッテリ
USBモバイル・バッテリ（RAVPower, 6700mAh）
2WDスマート・カー・シャーシ
写真 1

DCブラシ付きモータ

図1

いよいよモータを取りつけて自走ローバーづくりだ

リモート・ローバー 1 号機

まっすぐ走るのは得意でない● パソコン操作で移動できる

今回から，第 6 回までに作成してきた画像伝送プ
ラットホームを使い，本連載のメイン・テーマである
リモート・ローバーの作成に着手します．「PC からの
リモート・コントロールによって走行する機能」を最初に実現し，それを改良していきます．
機能拡張では，ほかのハードウェアと組み合わせて
高速 I/O 制御など，ラズベリー・パイの苦手分野を補強することも行います．

製作 1…ラズベリー・パイでモーター制御バージョン

これを自宅屋内で走らせているようすが写真 2 です．第 6 回までに作成してきた画像伝送プラットホーム（mjpg-streamer ベース）を活用します（図 2）．PCがローバーのリモコンとなり，ブラウザには車上のPiCamera（ラズベリー・パイ専用カメラ）からの動画像が表示されます．ブラウザのボタンでローバーを前

リモート・ローバー（複数台でも可）見本● 概要

まず，単純に走るだけのシンプルなリモート・ロー
バー（写真 1，図 1）の作成から始めましょう．最近，モータ駆動用の工作キットが安く入手できるようになりました．この上にラズベリー・パイを載せてモータを コ ン ト ロ ー ル し ま す． 電 源 と し て は， ス マ ホ のチャージ用に市販されている USB 接続モバイル・バッ
テリを使います．

別の場所にあるLAN
ルータ

ローバーからのカメラ画像

ローバー走行
制御ボタン
写真 2 PCブラウザからリモート・ローバーを動かしているようす2016 年 6 月号

第 1 回 準備…動画像処理環境の構築（2015 年 11 月号）
第 2 回 リアルタイム画像処理のための高速化テク①…4 コアをフル回転させる（2015 年 12 月号）
第3回 リ アルタイム画像処理のための高速化テク②…スループット / 遅延性能のチューニング（2016 年 1 月号）

131

Raspberry Pi 2 LIFE

ご購入はこちら

目指せ高性能! I2S ＆ USB のクロック＆データ同期入門

ラズパイ・オーディオの勘どころ
第4 回 高品質再生向き! USB アシンクロナス同期オーディオ

オーディオ・
データを伝送ラズベリー・パイ2

TLV320AIC3204
USB-I2S変換を（テキサス・
行うmbed対応
マイコン・ボード インスツルメンツ）

オーディオ・コー
LPC4088 Quick
I2S デック評価ボード
Startボード（D-Aコンバータ
USB （Embeddedとして使用）
Artists）♪

水晶発振器
USBオーディオ システム・クロック
D-Aコンバータ （24.576MHz）

図1

オーディオ
出力

実際に使う USB 接続オーディオ用 D-A コンバータ

前回の実験ではラズベリー・パイ 2 が決めた転送レートでオーディオ・
データが送られていた．回路や使い方は前回（2016 年 5 月号）や文献（3）参照● 今回試すこと…USB アシンクロナス同期
前回（第 3 回，2016 年 5 月号）は，ラズベリー・パイ
2 とオーディオ用 D-A コンバータを接続する方法として USB を紹介しました（図 1）．
今回は，USB オーディオ D-A コンバータ側が要求するビット・レートに合わせてラズベリー・パイ 2 側からオーディオ・データを転送する（＝同期が可能になる）しくみを mbed 対応マイコン・ボードに実装し，正常に動作するように修正します（図 2）．

データ

ラズベリー・パイ2

アシンクロナス同期方式

USB
フロー
制御
要求

水晶発振器

図 2 に今回の USB オーディオ D-A コンバータを示します．ハードウェアは本連載第 3 回で使用したものと全く同じ構成で使用します．
USB の規格ではデータを転送する方式として四つの転送方式が用意されています．この中でオーディ
オ・データの転送にはアイソクロナス転送という方式が使用されます．この方式を採用することで，ラズベ
リー・パイ 2 で通常使用される OS が標準的に持っているデバイス・ドライバを使用することができます（図 3）．
さらに，ラズベリー・パイ 2 から D-A コンバータにオーディオ・データを渡すためには転送の方式だけでなく，データの同期を考える必要があります．今回はアシンクロナス同期方式を利用しました．

USB オーディオで使われる
アイソクロナス転送● USBオーディオ・デバイスに求められること
USB スピーカなどのオーディオ機器は，USB オー
ディオ・デバイスとしてホスト側（ラズベリー・パイ
2 やパソコンなど）から認識されます．USB オーディオ・デバイスは，USB フラッシュ・メモリなどとは違い，リアルタイム転送とデータの同期が求められます．
特にデータの同期は，単にデータをとりこぼさない見本

オーディオ・コー
LPC4088 Quick
I2S デック評価ボード
Startボード（D-Aコンバータ（Embeddedとして使用）
Artists）

USBオーディオ・クラス♪

コントロール転送

ラズベリー・パイ2に自らが要求するビット・レートに合わせてオーディオ・データを転送してもらえるしくみを追加
図2

142

アダプティブ同期

今回やること…アシンクロナス方式によって同期をとる自らが要求するビット・レートに合ったオーディオ・データをラズベ
リー・パイ 2 から転送してもらうしくみを USB-I2S 変換を行う mbed 対
応マイコン・ボードに追加する

岡村 喜博

アイソクロナス転送

アシンクロナス同期

USBデバイス（mbed対応マイコン・ボード）がラズベリー・パイ2に接続されたときにオーディオ・クラス
として認識される
シンクロナス同期

今回はこれを用いる
図3

USB でのオーディオ・クラス，転送方式，同期方式の関係

今回は同期方式にアシンクロナス方式を採用

第 1 回 ディジタル非同期がアナログ出力波形に与える影響（2016 年 3 月号）
第 2 回 I2S 接続 D-A コンバータの選び方（2016 年 4 月号）
第 3 回 もうひとつの方法…USB 接続オーディオ（2016 年 5 月号）

2016 年 6 月号

フリー・ソフト活用

ご購入はこちらWindows/Mac/Linux 対応で I/O もサクッ !

オープンソースのブロック型言語
Pure Data ではじめる

サウンド信号処理
第7回

青木 直史，藍 圭介

ネットワーク・プロトコル OSC を使って iPhone 操作でリモート再生

OSCプロトコルでネットワーク接続

パソコン
Pure Data

スマホ
スマホ用アプリTouchOSC
図1

写真 1 OSC という音響機器制御用ネットワーク・プロトコルを使ってスマホ（iPhone）から Pure Data 音源パソコンを鳴らしてみる

スピーカ

今回の内容…iPhone 操作で PC から音を鳴らす

電子楽器をコントロールするため，ノート・オンや
ノート・オフといったメッセージの内容をあらかじめ定義しているのが MIDI の特徴ですが，OSC にはこうした決まりごとはありません．OSC には，どんなメッ
セージでもやり取りできる自由度の高さがあります．

● OSC メッセージの構造
PC だけでなく，さまざまな外部デバイスと連携して動作するシステムを手軽に作れることが Pure Dataの魅力です．その一例として，前回は音響機器をコントロールするためのプロトコルである MIDI を使って，MIDI コントローラから Pure Data のプログラムを動作させる方法を紹介しました．
今回は別のプロトコルとして，OSC（Open Sound
Control）を紹介します．OSC は，カリフォルニア大
学 バ ー ク レ ー 校 の CNMAT（Center for New Musicand Audio Technologies）という研究機関で開発されたプロトコルです．OSC は UDP/IP プロトコル上でネットワークに接続された音響機器をコントロールしま す． 今 回 は OSC を 使 っ て， ス マ ー ト フ ォ ン か ら
Pure Data のプログラムを動作させてみます（写真 1）．

音響機器をコントロールするためのプロトコルといえば，やはり MIDI との違いが気になるところですが，
実は，OSC と MIDI は性格が全く異なります．

2016 年 6 月号

当て，スイッチの ON と OFF に 1 と 0 というパラメー
タを割り当てると，スイッチを ON にしたときは /push 1，スイッチを OFF にしたときは /push 0というメッセージがやり取りされることになります．

iPhone 操作でPure Data のプログラムを動かす見本

MIDI の対抗馬! ネットワーク対応
音響機器制御プロトコル OSC● MIDI より自由度が高い

OSC メッセージは，機能そのものを表す「アドレス」と機能の状態を表す「パラメータ」の二つをペアにして情報をやり取りすることが基本になっています．
例えば，スイッチに /push というアドレスを割り● Pure Data も OSC に対応している
Pure Data も OSC に対応しているため，OSC を使うことでさまざまな外部デバイスと連携して動作するシステムを作ることができます．
もちろん，専用の音響機器には OSC に対応したものも多数あり，具体的な外部デバイスとしてはこうしたものを利用することも選択肢の一つになります．

● スマホには OSC 用のアプリがある
し か し， も っ と 手 軽 な 方 法 も あ り ま す． 実 は，

第 1 回 正弦波 / ノコギリ波 / 矩形波…まずは基本音を鳴らす（2015 年 12 月号）
第 2 回 サウンド処理の基本満載! レガシ・ピコピコ音 BGM（2016 年 1 月号）
第 3 回 リアルタイム音声処理の準備…データ・ファイルの保存 & 再生（2016 年 2 月号）

147

ネットワーク

さすが標準プロトコルは本格オープンソース・ソフト完備で安心!

ご購入はこちら

元祖 DLNAホーム・ネットワーク

 IoT 時代に注目 !

×ラズパイ
平原 秀治

第 2 回 DLNA/UPnP プロトコル＆通信メカニズム入門
表 1（1） DLNA ホーム・ネットワークを構成するプロトコル＆規定
項

目

規約 / プロトコル対 応 メ デ ィ ア MPEG-2，MPEG-4 AVC/H.264，LPCM，
形式
MP3，AAC LC，JPEG など
リンク保護

DTCP/IP

メディア転送HTTP

メディア管理UPnP AV 1.0 など

検出 / 制御

UPnP Device Architecture 1.0

UPnP DA（Device Architecture）

下位層UPnP共通

HTTP（XML，SOAP）

IP ネットワーク IPv4
物理接続

上位層：UPnP DCP
UPnP AVUPnP IGD（Internet… （Device Control（Audio/Video） Gateway Device）
Protocol）

イーサネット（IEEE 802.3），
Wi-Fi（IEEE 802.11）

DLNA のネットワーク構造

トランスポート層

UDP/TCP

ネットワーク層

IP

データリンク層・物理層（イーサネット 100Base-T，Wi-Fi）
図1

DLNA の中核! UPnP プロトコルの階層構造● DLNA の目的：映像・音響コンテンツを利用するためのガイドラインを決める
DLNA（Digital Living Network Alliance）は，AV系のホーム・ネットワークの構成を規定します．映像・音響系のホーム・ネットワークを構成するさまざ
まなディジタル機器の相互接続を実現し，音楽 / 写真
/ 動画といったディジタル・コンテンツを利用し合うための要件（以下，DLNA ガイドライン）の策定を目
的 に 設 立 さ れ た 業 界 団 体（http://www.dlna.

org/）です．
DLNA は，自らが新たなプロトコル / 仕様を策定するのではなく，標準の仕様を組み合わせて，使い方のガイドラインを示します．

などのプロトコルを組み合わせて使います．

中核となるプロトコル UPnP 入門● 構成要素…コントロール・ポイント＆デバイス
DLNA のガイドラインで，中核をなすプロトコル
が，UPnP ですので，ここでは UPnP を中心に説明します（図 1）．
UPnP では，機器を発見し，指示を出す機能をコン
トロール・ポイントと呼びます（図 2）．
コントロール・ポイントからの指示に従って動作する機能をデバイスと呼んでいます．
UPnP で定義するコントロール・ポイントやデバイ
スはサービス機能単位ですので，通常 TV や DVR な
どの実機器と 1 対 1 の対応はせず，通常は一つの機器に複数のデバイスやコントロール・ポイントを持ちます．
特にデバイスという言葉は，UPnP でのサービス機
能の意味か，実デバイスのどちらの意味で使っているか注意が必要です．

見本● DLNA ホーム・ネットワークを構成するプロ
トコル

表 1 に示すように，DLNA プロトコルの構成では，HTTP が， メ デ ィ ア 転 送 と し て 扱 わ れ て い ま す．
UPnP より上位に位置づけられていますが，UPnP のプロトコル自体は，SOAP や XML を使って HTTP プ
ロトコルでやりとりされています．
各規約やプロトコル・レイヤの上下関係はともか
く，DLNA は，このように，HTTP，UDP，TCP/IP

152

第 1 回 IoT 時代に注目 ! ホーム・ネットワーク入門（2016 年 5 月号）

2016 年 6 月号

ネットワーク・コーナ

ご購入はこちらダウンロード・データあります

パケットづくりではじめる

ネットワーク入門
第11 回 IP ルータの課題…無限ループ対策

坂井 弘亮

FreeBSDマシン
仮想PC1（FreeBSD）

仮想PC2（FreeBSD）

pingコマンド

ユーザ・プログラム

ユーザ・プログラム

FreeBSD
カーネル

FreeBSD
カーネル

FreeBSD
カーネル

パケット直接送受信

TCP/IP処理
デバイス・ドライバ

仮想PC3（FreeBSD）
同等

デバイス・ドライバ

仮想LAN
ケーブル

仮想イーサカード

パケット直接送受信
デバイス・ドライバ

仮想LAN
三つ ケーブル二つ
仮想イーサカード

仮想イーサカード
192.168.10.1/24

192.168.10.2/24

192.168.11.1/24

192.168.11.2/24

192.168.12.1/24

192.168.13.1/24

前回作成した簡易ルータにパケットの無限ループを防ぐ機能を追加する

仮想LAN
ケーブル

図 1 パケットの無限ループ対策…TTL の減算機能とチェックサムの再計算機能を追加した簡易ルータの動作確認を行うためのネットワー
ク構成
3 台の PC（仮想）間でネットワーク通信を行う

本連載はネットワーク上を流れるパケットを直接扱うようなツールを自作しつつ，ネットワークのしくみを勉強していきます．テーマは「自作」，「現物ベース」，「 動 く 感 動 」の 三 つ で す． ネ ッ ト ワ ー ク に はEthernet と IP を想定しています．
前回までは簡易ルータに経路関連の機能を追加してきました．これによりパケット転送のための基本機能が備わりました．しかし実は経路の設定を誤ると，パケットがループしてしまうという問題があります．

● 今回行うこと見本

今回は，簡易ルータにループしたパケットを一定回数で破棄できる TTL（Time To Live）の減算機能と，チェックサムの再計算機能を追加します．TTL の減算機能とチェックサムの再計算機能を追加した簡易ルータの動作確認は，図 1 で示したネットワーク構成

158

で行います．
本連載のプログラムのソースコードは以下の筆者のホームページからダウンロードできます．ライセンス
は KL-01 というもので，組み込み機器などでも自由に利用できます．

http://kozos.jp/books/interface/ethernet2/◆ 今回作るもの ◆パケットの無限ループをなくすために，簡易ルー
タに機能を追加

・一定回数で破棄できる TTL の減算機能
・チェックサムの再計算機能を追加

第 1 回 パケット送受信のライブラリを作成する（2015 年 8 月号）
第 2 回 中継も速度測定も試せる! 指定サイズ・パケット送信ライブラリを作る（2015 年 9 月号）
第 3 回 抽象化しておけば超便利! バッファ付きパケット通信ライブラリを作る（2015 年 10 月号）

2016 年 6 月号

ネットワーク・コーナ

連載

ご購入はこちらIoT時代の必読!

押さえておこう!
技術仕様の基本

インターネット・プロトコル教科書
第8 回 IoT 無線ネットワークに必須のセキュリティ DTLS

従来のTLSプロトコルのセキュリティを向上．
IoT無線ネットワークで使われる

DTLS

TLS

UDP

アプリケーション

EAP-TLS/TTLS
TCP

TCP

IPv6
6LowPANIEEE 802.15.1
IEEE 802.15.4

EAPIEEE 802.3 IEEE 802.11（a）これからのセキュア・ネットワーク

TLS
UDP

ソケット層

IoTアプリケーション

アプリ
ケーション層メッセージ層telnet，ftp，SMTP，IMAP4，
POP3，HTTP，HTTPS，LDAPなど

アプリ
ケーション・
データ・
プロトコル

レコード層

（b）従来のセキュア・ネットワーク

図 1 今回紹介するプロトコル…IoT 無線ネットワークで使われる
セキュリティ DTLS

最近では映像や音声，音楽，ゲームなど多くのアプ
リケーションが UDP（User Datagram Protocol）と呼ばれるプロトコルを使用することが多くなってきていま す． と く に， 無 線 伝 送 が 一 般 的 な IoT/M2M（Internet of Things/Machine to Machine）
では，TLS（Transport Layer Security）のセキュリティを向上させた DTLS（Datagram Transport Layer Security）を用います．今回はこの DTLS について解説します．

● TCP/IP セキュリティ

ハンドシェーク・プロトコル/アラート・
プロトコル

TLS/暗号スペック変更
プロトコル

IPv4/IPv6IEEE 802.3
IEEE 802.11

笠野 英松

レコード・プロトコル

トランスポート層

TCP

インターネット層

IP

図 2 DTLS のベースとなるネットワーク・セキュリティの基本
プロトコル TLS の階層構造

コルの「一つのバリエーション / 差分」ということができます．そのため，DTLS を理解するためにはベースとなる TLS の仕様を押さえておくことが前提です．

● 階層構造TLS は図 2 のような階層構造（2 階層）を持っています．トランスポート層（TCP）の上には TLS レコード・プロトコルがあり，上位層を暗号でカプセル化しま
す．TLS の上位層としては，TLS ハンドシェーク・プロトコルやアラート・プロトコル，暗号スペック変更プロトコル，アプリケーション・データ・プロトコ
ルがあります．

図 1 はアプリケーションに直接関係する TCP/IP セ
キュリティのうちトランスポート関連の部分を示しています．従来は TLS だけでしたが，現在では，DTLS
や EAP 関連 TLS（Extensible Authentication Protocol- Transport Layer Security）が出てきています．IoT/
M2M 関 連 で は 下 位 層 に IEEE 802.11（ 無 線 LAN）＆
EAP や IEEE 802.15.1/4 ＆ 6LowPAN，そして IPv6 を使用することになります．ここで，セキュリティの核
心的なプロトコルが DTLS です．

・圧縮状態（compression state）：圧縮アルゴリズム

ベースとなる基本セキュリティ・
プロトコル TLS

・DTLS プロトコルは TCP 上で稼働する TLS プロト

・MAC 秘密鍵（MAC secret）：コネクションのため● セキュリティ保護時のコネクション状態

見本2016 年 6 月号

TLS は特有のコネクション状態を保持します．このコネクション上でアプリケーションの各セッションを実行します．TLS コネクション状態は，暗号化ア
ルゴリズムや圧縮アルゴリズム，認証アルゴリズムなどを表す，TLS レコード・プロトコルの動作環境で，以下のようなものがあります．
のカレント状態．

暗号状態（cipher state）：暗号化アルゴリズムのカレント状態．

第 1 回 ネットを使うときの隠れ常識! 技術文書 RFC（2015 年 9 月号）
第 2 回 考えとかないとマズい ! IPv6 プロトコルの全体像（2015 年 10 月号）
第 3 回 IPv6 プロトコルこれだけは…パケット / アドレス / ソケット（2015 年 11 月号）

165

研究! クルマのテクノロジ ご購入はこちら

数 m をリアルタイムに! クルマに使われる高信頼性バス!

制御＆監視向け!
小型ネットワーク CAN 通信入門
第6回

最新テクノロジ：メニ−ECU時代は高速化必須! 実験室で8MbpsのCAN FD

今回は，CAN プロトコルの後継として策定された
新しい CAN FD（CAN with Flexible Data Rate）プロ
トコルについて紹介します．

CAN の課題…通信速度 1Mbps じゃ
もう間に合わない
CAN の普及に伴い自動車の電子制御化が進んでいます．それにより，ノード間でやり取りする情報も膨大になることで，CAN バスの帯域の不足が課題となっています．
CAN の通信速度は最大 1Mbps となっていますが，
安定 的 で 安 全 な 通 信 を 考 え る と， 実 際 の 運 用 で は500kbps 以下で使うケースが多いです．
また，バスに掛かる負荷が高い状態だと遅延が大き
くリアルタイムな制御が困難となるため，実質，30％程度までが最適と言われています．
現状は，帯域が不足した際には，複数のバスに分割することで負荷を分散して回避してますが，それも限界に近づいてきています．それに加え，さらなる電子制御化や利便性の向上には，より多くのデータを高速に扱うことができる通信プロトコルが必要となってきています．

これまでの CAN 高速化の取り組み● その 1：FlexRay…最高 10Mbps まで対応できるが専用ネットワークを作らないといけない

田代 有宏● その 2：TT-CAN…スケジューリングが難しくて通信速度が向上できなかった
CAN バス上で，おのおののノードからメッセージが同時に送信されないように送信できるタイミングを
スケジューリングすることで，通信帯域を拡大しようとする TT-CAN（Time Triggerd CAN）規格も登場しました．
ISO 11898-4 として定義されているこの規格は，スケジューリングのために各ノード間の通信をかっちりと決める必要があることや，従来 CAN と同じ形式のフレーム構成であるため通信速度は同じということか
ら速度が向上できず，普及拡大には至りませんでした．

最高 8Mbps 以上!?
高速 CAN FD 通信プロトコル● 規格
CAN FD は，CAN の課題となっている帯域不足を解決するためにロバートボッシュ社によって提唱された新たな通信プロトコルです．
ISO 11898-1：2015 として新規に制定されています．
新 し い ISO 規 格 で は 従 来 の CAN の フ ォ ー マ ッ ト をClassical CAN frame format ， 新 し いCAN FDをCAN Flexible Data Rate Frame format として分けて定義しています．

● CAN FD と CAN との違い
CAN FD 規格のベースは従来の CAN 仕様なのですが，似て非なるものとなっています．
CAN と CAN FD の機能面での主な違いは以下の通
りです．

見本

10 年前に今の CAN をしのぐ全く新しい方式を採用
した次世代の車載ネットワークとして，通信速度を最大 10Mbps に対応した FlexRay という通信プロトコルが注目を集めました．
残念ながら CAN プロトコルとの差異が大きく，新たにネットワークを構築する必要があります．移行のために必要な条件も多いということから，日本国内では普及までには至らなかったというのが，これまでの状況でした．

168

・転送可能なデータ長を最大 8 バイト（CAN）から最
大 64 バイト（CAN FD）に拡張

・CAN の通信速度は最大 1Mbps だが，CAN FD では 2 種類の通信速度が設定でき，データ領域の通信速度の高速化が可能（例えば 2Mbps，4Mbps，…10Mbps など）．

第 1 回 I2C とイーサの中間くらい ! ローカル機器間ネットワーク向け（2016 年 1 月号）
第 2 回 常時接続イメージ! 制御向け CAN 通信の特徴（2016 年 2 月号）
第 3 回 CAN 通信の物理層（2016 年 3 月号）

2016 年 6 月号

研究! クルマのテクノロジ

ご購入はこちら

安全に使い回す ! 車載ソフトウェアの世界

これから 10 年使える技術!
標準 AUTOSAR 開発プラットホーム入門

安全に使い回す!
車載ソフトウェアの世界
第 6 回 実際のプログラムの作成…ECUコンフィグレーション/インテグレーション①全体システム/SWC設計

ARXML形式
システム/BSW
モジュール・ディスク
リプション・ファイル

GUIソフトウェア
SystemDesk等

ARXML形式
ECU
コンフィグレーション・
ファイル

GUIソフトウェア
SystemDesk等③ECUコンフィグ
レーション設計

CUIソフトRTE
ジェネレータ
A-RTEGEN

RTE生成
コード
Rte.clh

BSW
静的コード

CUIソフトOS
ジェネレータ
cfg

BSW動的
コード
Os_Lcfg.clh

マイコン
開発環境
CS＋

ヘッダ・ファイル

ECUのハードウェア情報を設定して生成する

ソフトウェア・モジュール
SoftWare Component

高田 光隆，鴫原 一人

TOPPERS/AP
などで提供

ビルド

②SWCに処理 ④main関数など作成（ランナブル） （ECUインテグレー
を実装
ション・コード）

実行
ファイル

ユーザが
プログラミング

プログラミングを行ってECUのマイコン
実行ファイルを生成（ECUインテグレーション）
図1

標準 AUTOSAR による車載ソフトウェア開発フロー…超シンプルな 1ECU の場合

第 5 回図 1 再掲

● 今回やることます．

標準プラットホーム AUTOSAR を使った車載シス
テム開発は，大きく次の 3 ステップで行います（図 1，
詳細は連載第 2 回参照）．
ステップ 1：全体システム設計
ステップ 2：ECU コンフィグレーション
ステップ 3：ECU インテグレーション
前回は，「ステップ 1：全体のシステム設計」を行いましたので，今回は，ステップ 2/ ステップ 3 という手
順で，実際の ECU 用プログラムを作成します．
本連載のターゲット・ハードウェアは，クルマはラ
ジコン・カーで，ECU は車載マイコン RH850 ボード
です．詳細については，ハードウェア構成は第 3 回を，ソフトウェア構成は第 4 回を参考にできます．

・システム /SoftWare Component 設計の情報
・SoftWare Component 開発で行ったランナブルやイベント，排他エリアに関する設定
一般的な組み込みアプリケーション開発の場合，リ
アルタイム OS（RTOS）を使って，アプリケーション
をタスクに分解し，そのタスクをどのように起動させるかとか，タスクの優先度をどのように設定するかを決めます．
AUTOSAR 開発でも同様のことを ECU コンフィグ
レーションで行います．

見本ステップ 2：ECU コンフィグレーション…1ECU 構成の場合● やること…XML 形式の設定ファイルを作る

1ECU 構成の場合は，各 ECU に機能割り当てなどを行う Ecu Extract の作業はありません．
次の情報から，ECU のハードウェア情報などを記した ECU コンフィグレーション・ファイルを作成し2016 年 6 月号

● 設定に使うコンテナ / パラメータは定義されているボディ系のソフトウェア・モジュール（SoftWare
Component）CddBodyControl を 使 っ て ECU コ ン
フィグレーションの方法を見ていきます．
ECU コンフィグレーションでは，ARXML（XML）に よ る 記 述 で 設 定 を 行 っ て い ま す． 設 定 に は，
AUTOSAR の 仕 様 書 で 定 義 さ れ た コ ン テ ナ / パ ラ
メータを使います．

第 1 回 車載ソフトウェアの基本構造（2016 年 1 月号）
第 2 回 AUTOSAR 準拠ソフトウェアの基本開発ステップ（2016 年 2 月号）
第 3 回 実験のハードウェア＆使用した車載マイコン（2016 年 3 月号）

173

研究! クルマのテクノロジ ご購入はこちら「機能安全」

生業プログラマ必読! 安心を作る考え方＆しくみ研究! モノづくりの宇宙船の設計で考える？！

最新コモンセンス
第9 回 システムの安全性を高める多重化 & 多様化

障害物検知装置の
検知部

森本 賢一

タキオン
放射アレイ
反射タキオン
検知アレイX1

選択空間フィルタ図1

星間障害物

反射タキオン
検知アレイX 2
反射タキオン
検知アレイY

2重化してみる

反射タキオン
検知アレイZ

多重化で安全性を高める

図2● 今回解説することシステムの危険側不動作確率 PFD とは，電子部品の故障などにより，「万一の際に，きちんと動作しな
いかもしれない確率」を意味し，システムの完全性を評価する大切な数値です．設備のリスク・レベルに応じて必要な完全性のレベルが決まります．それを SILといいます．その SIL に応じてシステムが最低限達成
しておくべき PFD が決まります注 1．

必要な完全性を達成するためには，PFD の計算式にある，λDU を小さくすることが必要です（第 8 回で詳しく解説）．λとは部品故障率のことで，λ（安全側），
S
λD（危険側），の分類に加え，λDU（危険側かつ検知できない），λDD（危険側かつ検知できる）に分類されます．このうち λDU が PFD の計算で重要な役割を果たし

宇宙船の障害物検知装置の検知アレイを 2 重化する空間フィルタから先の処理は第 7 回の図 2 と同じントできることとなり，PFD の低減を図れる（2）多重化することで PFD の低減を図る
前回は（1）を紹介しましたので，今回は（2）を紹介します．

● PFD を小さくするための方策：多重化 ?
今回は，安全メカニズムの追加以外で，システムの危険側不動作確率 PFD を小さくする手法として，多重化について説明します（図 1）．細かい解説をしなくても，2 重化，3 重化すれば，システムの信頼性が上がることは感覚的に理解できると思います．多重化により片方が故障している間に故障側を修理するなど，障害への対処ができることも大きなポイントです．
しかし単に多重化するだけでは，極端には信頼性（完全性）が向上しません．

見本

ます．λDU を小さくするために，安全メカニズム（自己診断などのメカニズム）をシステムの要件に追加してゆく必要があります．
危険側不動作確率 PFD を低くする方法は大きく二つあります．
（1）適切に検出して対策する安全メカニズムがあれば，その対象となる故障は，λDU ではなく λDD にカウ
注１：例えば SIL3 では，PFD は 10 － 4 のレベルです．これは，「万一の事態」が 10,000 回発生した場合，その対処を 1 回程度失敗する可能性があることを示します．

2016 年 6 月号

今回のターゲット…
障害物検知装置の 2 重化

● 基本思想…2 台使えば失敗する確率を 2 乗で小さくできる？
前回（第 8 回，2016 年 5 月号）取り上げた障害物検知装置について考えます．前回は，反射タキオン検知ア

第 1 回 業界用語「機能安全」と「本質安全」（2015 年 8 月号）
第 2 回 「リスク」「安全」…用語の定義（2015 年 9 月号）
第 3 回 評価を繰り返して「安全」を目指す…リスク・マネジメント（2015 年 10 月号）

179