第一版 MATLABハンドブックでわかっている誤字、脱字についてです。

 p.141 直交関数の内積(2007.03.07)

直交関数は、周期性について限定する必要はありません。 指摘があるまで気が付きませんでした。申し訳ありません。
念頭にフーリエ関数列とウォルッシュ関数列しかなかったもので、このような記述になってしまいました。

p.141
誤:「直交関数とは、周期Pの信号で積分すると0になるような関数のことである」
正:「2つの関数bi, bjは、その内積が0であるとき直交するという。また、関数列b1, b2, ..., bnが与えられたとき、異なる2つの関数がすべて直交している場合その関数列を直交関数列という。」

再々訂正ということで、ご迷惑をかけて申し訳ありませんでした。

p52の比較演算子の表(2006年11月16日)
 記号:<
 式:A
誤:
意味:AがBより大きい場合
 
正: 
 意味:AがBより小さい場合
でした。申し訳ありません。

p.193 arfftcomp.m の追加事項です。(2006年11月11日)
 申し訳ありません、再度指摘があるまで気がつきませんでした。 d2cm関数も、,tf関数、bode関数もコントロールツールボックスの関数でした。標準のMATLAB には入っていません。一応、コントロールツールボックスがない場合でもできるスクリプトに修正いたしましたので、ご利用ください。

 自己回帰モデルでは、差分方程式のパラメータを求めています。このパラメータのままでは、サンプリング時間に依存しないため連続系に変換する処理を行うため、 d2cm関数を用いています。c2dm関数により連続系のパラメータに変換後、bode関数によりボード線図の表示を行っています。ちなみに、自己回帰モデルの方程式は、下記のようになるので、

この式をシフト演算子 を用いて書き換えます。

このように変換し、伝達関数を求めると

となります。ここで、シフト演算子 は、ラプラス変換すると、むだ時間要素として扱うことができるので、 τ:サンプリング時間(シフト時間)として置き換えることができます。ラプラス演算子sは、jωに置き換えると、周波数特性を調べることができます。つまり、

を計算すれば、周波数特性を見ることができます。
これらを用い、コントロールツールボックスの c2dm関数、tf関数、bode関数を使わずに実現するには、

[num,den]=d2cm(1,dend,dt);
ff=(0:0.01:50);
[mag,ph]=bode(tf(num,den),ff*2*pi);

の代わりに 

ff=(0:dt/10:f(len2));
fdata=1./sum(repmat([1;-a],1,length(ff)).*exp(-dt*(0:length(a))'*ff*2*pi*sqrt(-1)));
mag=abs(fdata);ph=angle(fdata)*180/pi;

で計算することができます。repmat関数は、ベクトルなどの数値をリピートし行列を作る関数で、行列サイズをそろえるために使います。FFTの場合周波数分解能は離散的であるのに対し、自己回帰モデルでは、連続関数として与えられるため、周波数分解能のベクトルを、FFTの場合より細かく設定することが可能です。ここでは、周波数ベクトルffをFFTの場合と比べ10倍細かく設定し周波数特性を計算したスクリプト例を示しています。ちなみにこの計算は、
のようになります。sum関数は、縦方向に足し算をするため、この計算により周波数ffの間の値を1行の式ですべて計算することができます。 なお、位相特性については、簡易法を用いているため、bode関数のそれとは、離散系から連続系への変換の近似アルゴリズムの違いにより若干結果が異なります。

http://www.ikko.k.hosei.ac.jp/~matlab/MATLAB_Handbook2nd.lzh
も更新しました。


p.193 自己回帰モデルの解説で使っていたar関数は信号処理ツールボックスではなく、システム同定ツールボックスに付属しています。思い込みで勘違いしておりました。
しかし信号処理ツールボックスには、同じ関数がありませんが同機能の関数があります。従って、システム同定ツールボックスがない場合でも検証は可能です。
そのため、一応、2通りの訂正を書いておきます。 
回答1(システム同定ツールボックスを持っている場合)
 p.193の文
誤:Signal processing Toolbox を持っている場合には
正:System Identification Toolboxを持っている場合には、
回答2(信号処理ツールボックスを持っている場合)
p.193のリストの中
誤:
TH=ar(data(:),3,'ls')
・・・
dend=ploydata(TH)
正:
dend=arcov(data(:),3)
 p.194 arfftcomp.m
誤: 
TH=ar(data(:),3,'ls')
dend=polydata(TH);
正:
dend=arcov(data(:),3);
ちなみに、信号処理ツールボックスの自己回帰モデルの関数は、システム同定ツールボックスで提供するar関数とは異なり、オプションで指定する形式ではなく、それぞれいくつかの方式でパラメータを計算する関数がそれぞれ用意されています。具体的には、以下の関数があります。
armcov
aryule
arcov
arburg
lpc
などです。詳細については、ヘルプや、関数ファイルの中をみていただければと思います。ここで紹介している自己回帰モデルのパラメータの計算方法は、arcov関数とほぼ同等のものになります。

 最新版 MATLABハンドブック  改定第二版 2006.8.30
p.159
▼時間データのプロット例
▼周波数データのプロット例の2箇所あります。
誤:
t=(1:length(data))/dt-dt
正:
t=(1:length(data))*dt-dt
実際に動くスクリプトの方は、乗算になっていましたが、このサンプルスクリプトの例のみ割り算になっていました。単なる誤字です。
申し訳ありません。

2005.02.14:
P.61 
誤:fileread.m
正:fileread2.m
テキストファイルを読み込むスクリプトがが既存のMATLAB M関数とバッティングするとの指摘がありました。
このmファイルがカレントディレクトリある場合、GUI操作による文字列を含むテキスト
データのインポートができなくなるそうです。
気づかないで安易な名前をつけてしまいもうしわけありませんでした。
一応、ソースコードの中のファイル名をfileread.m→fileread2.m
に変更いたしました。
もし、カレントディレクトリにfileread.mスクリプトがある場合には、ファイル名を変更
するか削除するようにしてください。

 


2004.10.14:p.50 の演算子の説明での行列の式の図ですが、
誤:|1 2 3|  |x1|  |366|
    |4 5 6|・ |x2|=|804|
    |7 8 9|  |x3|  |351|

正:|1 2 3|  |x1|  |366|
    |4 5 6|・ |x2|=|804|
    |7 8 0|  |x3|  |351|

の誤りです。見落としておりました。申し訳ありません。


2004.09.15:コンボリューションと内積を混同して記述おりましたp.141の説明では、コンボリューションというより内積(2信号の相関)の方が正解です。混乱させて申し訳ありませんでした。
なお、コンボリューションについての適切な(?)説明は、
http://www.ikko.k.hosei.ac.jp/%7ematlab/xcorr.pdf
に掲載してありますのであわせてご覧ください。
ホントに申し訳ありませんでした。



Chapter 3 信号処理ツールとしてのMATLAB
p.141
誤:コンボリューション
正:直交関数の内積(2信号の相関)
では、なぜ一見複雑に見える信号から、複数の基本的な波形に分解できるのであろうか?
ここで重要な考え方が直交関数である。「直交関数とは、周期Pの信号で積分すると0になるような関数」のことである。
つまり、

このような関数bi(t),bj(t)である。
誤:またこの積分のことを畳み込み積分(コンボリューション)と呼ぶ。
正:削除

 

このような直交関数としては、sin,cos波が知られている。他にこの条件を満たす関数としては、ウォルッシュ変換に用いられる 関数がある。直交関数
誤:のコンボリューション
正:削除
は、信号の分解、合成などが可能なため、データ圧縮、画像圧縮などの応用可能である。

 


p.143
sin,cos波の
誤:コンボリューションでは、・・・
正:積分では、・・・・

 


2004.12.17:誤植が多く申し訳ありません。初版では良かったのですが、改訂版ではなぜか誤植されていました。チェックが不完全で申し訳ありません。
p.144 の数式
誤:
ω_0=2π/Pとしたとき
∫^2π_0 1・sin(ω・t)dt = 0
∫^2π_0 1・cos(ω・t)dt = 0
∫^2π_0 cos(n・ω・t)cos(m・ω・t)dt = 0    m!=n
∫^2π_0 sin(n・ω・t)cos(m・ω・t)dt = 0    m!=n
∫^2π_0 cos(ω・t)^2dt = P/2
∫^2π_0 1^2dt = P
正:
ω_0=2π/Pとしたとき
∫^P_0 1・sin(n・ω_0・t)dt = 0
∫^P_0 1・cos(n・ω_0・t)dt = 0
∫^P_0 cos(n・ω_0・t)cos(m・ω_0・t)dt = 0    m≠n
∫^P_0 sin(n・ω_0・t)cos(m・ω_0・t)dt = 0    m≠n
∫^P_0 cos(n・ω_0・t)^2dt = P/2
∫^P_0 1^2dt = P

 


p.143 説明の訂正
データ数/2やデータ数で割る話は、p.154にも書いてあるので、p.143の説明は、
あくまで、sin,cosの直交性だけした方が混乱がないと思いますので以下のように
訂正いたします。
旧:
sin,cos波の積分では、直流成分とナイキスト周波数の間の周波数では、ピークの大きさデータ数/2で割るとその振幅になるのに対し、直流では、データ数で割ることになるので注意すること。
新:
ウォルッシュ変換の場合、どのような(この場合4パターン)の波形の場合でも有限値で割れば信号成分の大きさを復元できる。しかし、sin,cos波を乗算して積分する場合には、一致した特定の周波数で乗算し積分する場合と、(全てが1となるような)直流成分を乗算し積分する場合、有限値の値が異なるので注意すること。


   
© Gerox com