今適応アルゴリズムの勉強をしていて、LMSアルゴリズムのプログラムが書けなくて困っています。誰か教えて下さい。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

FORTRAN ですが以下のようなページがありました。


でもアルゴリズムを理解していればプロ倉ミグは容易なはず。

参考URL:http://maxwell.elcom.nitech.ac.jp/~kikuma/list/l …
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qフィルタの群遅延と相遅延の違いって? 

最近あるデジタルフィルタの本を読んでいたら、群遅延と相遅延というものが出てきました。
相遅延はあるシステムにおける単一周波数の正弦波入力に対する遅れ時間で、位相を角速度(ω)で割っていました。一方、群遅延は複数の周波数を持つ正弦波の集合が入力された場合の、その包絡線の遅れ時間で位相を角速度で微分しています。
この二つの遅延の違いがよくわかりません。
わかりやすく教えてください。もしくはわかりやすい本、URLを教えてください。

Aベストアンサー

蛇足ですが、説明まで

群遅延というのは、「入力波形に対する出力波形の時間の遅れ」です。
入力波形と出力の山がある回路を通した後でずれているという現象です。
時間で観ます。入力波形というのはたくさんの周波数成分波形が重なって
出来ていますので、その包絡線が波形そのものです。

相遅延というのは、「入力波形に対する出力波形の位相のずれです。」
入力波形にはたくさんの周波数成分がありますので、
測定上はひとつの周波数を使って測定すれば位相ずれはわかるということ
です。
周波数で観ます。

(詳しくは、群遅延、波形 とキーワードを入れて検索してみてください。
波形などもありますからよくわかると思います。)

以上 参考まで

関連URL:http://www-lab15.kuee.kyoto-u.ac.jp/~t-naka/php/paper-new.php
{ (中西俊博,杉山和彦,北野正雄 : 「電子回路における負群速度」)PDFファイル }

Q行列 線形代数 "diag"って何ですか?

ロボット制御のなかで,おそらく行列だと思うんですが,“diag”という記号が出てきました.何の事か分からないのでどなたか教えてください.

Aベストアンサー

diagは対角行列を出力する関数です。
例えば、diag(1,2,3)なら(1,1)成分は1、(2,2)成分は2、(3,3)成分は3で他は0の行列になります。

Q適応フィルタのタップ数

アクティブな消音システムを構築するため、DSPを用いた適応フィルタを構成しました。
用いたフィルタ係数決定アルゴリズムはfiltered-x LMSアルゴリズムです。
(filtered-xのフィルタは制御音発生器から観測点までの伝達関数です)

このとき、ステップサイズパラメータμを5つほど用意して、
その各々に対して適応フィルタのタップ数を600,300,50と変えていきました。

μがある程度大きくなると、出てくる音(騒音と制御音の重ね合わせ)が収束しなくなるのは、
誤差信号e(n)の二乗推定量が収束しないからだというのは分かりました。

しかし、よく分からない現象を観測してしまって困っています。

上記の3つのタップ数の各々(600,300,50)に対して誤差信号e(n)が収束するようなμを用いている時に、
タップ数が多ければ多いほど誤差信号e(n)は小さくなるはずだと思っていたのですが、
実際にはタップ数が300の時にe(n)が最小(つまり最も消音効果がある)という結果を得ました。

サンプリング周期は10kHzなのでタップ数が原因の計算遅延はないはずです。

プログラミングが間違っているという事はない、
その他のパラメータ設定も適切である、
e(n)が収束するまで十分時間待った、
というような前提として、この現象はどう説明されるのでしょうか。

アクティブな消音システムを構築するため、DSPを用いた適応フィルタを構成しました。
用いたフィルタ係数決定アルゴリズムはfiltered-x LMSアルゴリズムです。
(filtered-xのフィルタは制御音発生器から観測点までの伝達関数です)

このとき、ステップサイズパラメータμを5つほど用意して、
その各々に対して適応フィルタのタップ数を600,300,50と変えていきました。

μがある程度大きくなると、出てくる音(騒音と制御音の重ね合わせ)が収束しなくなるのは、
誤差信号e(n)の二乗推定量が収束しないからだ...続きを読む

Aベストアンサー

600のほうは、局所最適解(ローカルミニマム)に落ちているんでしょう。

タップ数600の最適化を、タップ数300の結果を初期値にして始めればいいのでは。

Qmatlabで指定した周波数帯域だけ返す方法

matlab初心者です。

matlabで、ある音響データを読み込んだ時、時間領域の波形のまま、
指定した周波数帯域だけを取り出したいのですがやり方が分かりません。

例として、サンプリング周波数44.1kH  16bitモノラル音源の音響データがあったとして、
1kH~1.5kHの周波数帯域を時間領域の波形のまま取り出すにはどうすればいいですか?

つまるところ、帯域通過フィルタの設計方法がわからないのです。

Aベストアンサー

フィルタの設計方法は幾つかあると思いますが、
関数fir1を使ってFIRバンドパスフィルタを設計する方法をご紹介します。

Fs=44100; % サンプリング周波数(Hz)
N=100; % フィルタ長。大きいとフィルタ精度が向上するが畳み込みに時間を要する
Wn=[1000 1500]/(Fs/2); % 通過帯域を表すベクトル。0Hzが0、(Fs/2)Hzが1となるようスケーリング
fil=fir1(N,Wn,'bandpass'); % バンドパスフィルタの設計

あとは関数convを使って畳み込み積分をすればOKです。
フィルタの特性はfreqz(fil,1)で確認することができます。

参考URL:http://lis2.huie.hokudai.ac.jp/~toyo/MATLAB/

Q線形・非線形って何ですか?

既に同じようなテーマで質問が出ておりますが、
再度お聞きしたく質問します。

※既に出ている質問
『質問:線形、非線型ってどういう意味ですか?』
http://oshiete1.goo.ne.jp/kotaeru.php3?q=285400
結局これを読んでもいまいちピンと来なかった...(--;


1.線形と非線形について教えてください。
2.何の為にそのような考え方(分け方)をするのか教えてください。


勝手なお願いですが、以下の点に留意いただけると大変うれしいです。
何せ数学はそんなに得意ではない人間+歳なので...(~~;

・わかりやすく教えてください。(小学生に説明するつもりぐらいだとありがたいです)
・例をあげてください。(こちらも小学生でもわかるような例をいただけると助かります)
・数式はなるべく少なくしてください。

『そんな条件じゃ説明できないよー』という方もいると思いますが、どうぞよろしくお願いいたしますm(__)m

Aベストアンサー

昨日「線形の方がなんとなくてわかりやすくないですか」と書いたんですが、やっぱり理系の人間らしく、もうちょっときちんと説明してみます。昨日は数式をなるべく出さないように説明しようとがんばったんですが、今日は少しだけ出しますが、勘弁してください。m(__)m(あと、長文も勘弁してください)


数学的にはちょっとここまで言えるかわかりませんが、自然界の法則としては、「線形」が重要な意味を持つのは、xの値が変化するにつれて変化するyがあったときに、

(yの増加量)/(xの増加量)=A(一定)

という規則が成り立つからです。

xやyの例としては昨日の例で言う例1だとxがガムの個数、yが全体の金額、例2だとxが時間、yが走った距離です。

この規則が何で役に立つかというと、式をちょっと変形すると、

(yの増加量)=A×(xの増加量)・・(1)

ということがわかります。つまり、Aの値さえわかれば、xが増えたときのyの値が容易に推測できるようになるわけです。


ここで「Aの値さえわかれば」と書いていますが、この意味を今から説明します。

自然界の法則を調べるためには何らかの実験を行います。例えば、りんごが木から落ちる運動の測定を行います。
ここから質問者様がイメージできるかわかりませんが、りんごは時間が経つにつれて(下に落ちるにつれて)落下するスピードが速くなるんです。今、実験として、1秒ごとにりんごのスピードを測定したとします。そしてその結果をグラフにプロットしていくと、直線になることがわかります。(ここがわかりにくいかもしれませんが、実際に実験を行うとそのようになるのです)

数学の問題のように初めから「時速100kmで走る」とか「1個100円のガム」とかいうことが与えられていれば直線になることはすぐにわかります。
しかし、自然界の法則はそうもうまくいきません。つまり、実験を行ってその結果をプロットした結果が直線状になっていたときに初めて「何らかの法則があるのではないか」ということがわかり、上で書いた「Aの値さえわかれば」の「A」の値がプロットが直線状になった結果、初めてわかるのです。

そして、プロットが直線状になっているということは、永遠にそうなることが予想されます。つまり、今現在はりんごが木から落ちたときしか実験できませんが、その結果を用いて、もしりんごが雲の上から落としたときに地面ではどのくらいのスピードになるかが推測できるようになるわけです。ここで、このことがなぜ推測できるようになるかというと、(1)で書いた関係式があるからです。このように「なんらかの法則があることが推測でき、それを用いて別の事象が予言できるようになる」ことが「線形」が重要だと考えられる理由です。

しかし、実際に飛行機に乗って雲の上からりんごを落としたらここで推測した値にはならないのです。スカイダイビングを想像するとわかると思いますが、最初はどんどんスピードが上がっていきますが、ある程度でスピードは変わらなくなります。(ずっとスピードが増え続けたら、たぶんあんなに空中で動く余裕はないでしょうか??)つまり、「線形から外れる」のです。

では、なぜスピードが変わらなくなるかというと、お分かりになると思いますが、空気抵抗があるからなんですね。(これが昨日「世の中そううまくはいかない」と書いた理由です)つまり、初めは「線形」かと思われたりんごを落とすという実験は実際には「非線形」なんです。非線形のときは(1)の関係式が成り立たないので、線形のときほど容易には現象の予測ができないことがわかると思います。


では、非線形だと、全てのことにおいて現象の予測が難しいのでしょうか?実はそうでもありません。例えば、logは非線形だということをNo.5さんが書かれていますが、「片対数グラフ」というちょっと特殊な形のグラフを用いるとlogや指数関数のグラフも直線になるんです。つまり、普通のグラフでプロットしたときに「非線形」になるため一見何の法則もないように見えがちな実験結果が「片対数グラフ」を用いると、プロット結果が「線形」になってlogや指数関数の性質を持つことが容易にわかり、それを用いて現象の予測を行うことが(もちろん単なる線形よりは難しいですが)できるようになるわけです。


これが私の「線形」「非線形」の理解です。つまり、

1) 線形の結果の場合は同様の他の事象の推測が容易
2) 非線形の場合は同様の他の事象の推測が困難
3) しかし、一見非線形に見えるものも特殊な見方をすると線形になることがあり、その場合は事象の推測が容易である

このことからいろいろな実験結果は「なるべく線形にならないか」ということを目標に頑張ります。しかし、実際には先ほどの空気抵抗の例のように、どうしても線形にはならない事象の方が世の中多いんです。(つまり、非線形のものが多いんです)

わかりやすいかどうかよくわかりませんが、これが「線形」「非線形」を分ける理由だと思っています。

やっぱり、「線形の方がなんとなくわかりやすい」くらいの理解の方がよかったですかね(^^;;

昨日「線形の方がなんとなくてわかりやすくないですか」と書いたんですが、やっぱり理系の人間らしく、もうちょっときちんと説明してみます。昨日は数式をなるべく出さないように説明しようとがんばったんですが、今日は少しだけ出しますが、勘弁してください。m(__)m(あと、長文も勘弁してください)


数学的にはちょっとここまで言えるかわかりませんが、自然界の法則としては、「線形」が重要な意味を持つのは、xの値が変化するにつれて変化するyがあったときに、

(yの増加量)/(xの増加量)=...続きを読む

Q数学のハット記号の意味がわかりません!

参考書にいきなり出て来た、関数の上に載っている"^"記号の意味が分かりません。
調べようにもどの本に載ってるのかもわからず、
ネットで調べようにも記号は調べられず、
ハットで検索しても関係ないものばかり出てくるのでわかりません。
どなたかハット記号の意味を教えてください。

Aベストアンサー

リアプノフ指数の話なら、
?dot{r(t)}=?hat{G}(t)r(t)
のGはヤコビアン行列じゃねーでしょうか。するとハットは行列をスカラーと区別するために付けてる記号かも知れません。だとすると最後の
hat{U}(0)=?hat{1}
の右辺は1じゃなくて単位行列。

Q配列の要素数に変数を入れたいときには

よろしくお願いします。
配列の要素数には定数しか入れられないのですが,どうしても変数を入れたいときは,それを引数として関数を呼び出すしか方法はないでしょうか。
具体的には,scanfで手に入れたint型の変数を要素数とする配列を宣言したいのですが,どうすれば良いでしょうか。
ご教授ください。

Aベストアンサー

c99と呼ばれる最近の規格では、配列の大きさに変数を使用できます。
bccはc99に対応していないようです。

それ以前の規格では、動的領域確保関数 malloc や callocを使って領域を確保するか、効率等を無視してバカデカい配列を用意しておくかです。
「それを引数として関数を呼び出す」っていうのは、malloc/callocのことですか?

Q自己相関性及び自己相関関数について教えて下さい。

自己相関性とは、つまりは自己相関性が良いほどフーリエ変換したときに、周波数の大きな領域にスペクトルが多く現れ、これが悪いほど周波数の低い領域に現れる、というものでよろしいのでしょうか?

自己相関関数とは
http://www.ymec.com/hp/signal/acf.htm
このページにありますように、遅延時間を変えてプロットすることで、コンサートホールなどでの音響効果についての計算を行うことが出来るものですよね?
これって電子回路ではどういった利用法がなされているのでしょうか?

よろしくお願いいたします。

Aベストアンサー

>フーリエ変換したときに、周波数の大きな領域にスペクトルが多く現れ、これが悪いほど周波数の低い領域に現れる、というものでよろしいのでしょうか?

違います。自己相関は元になる波形の時間をずらして元の波形に重ねた時にどれぐらい似ているかを表わしています。
ずらす時間がゼロの場合はもとの波形と完全に一致しますから相関値は必ず1になります。
元の信号が正弦波の場合には周期の整数倍だけずらすと元の波形と同じになるので相関値は周期的に1になります。

コンサートホールなどで特定の周波数で残響が長い場合ではその周期に相当する時間差のところにピークが現れます。
ピーク値が大きく繰り返しの回数が大きいほどその周波数で共振していることが分かります。

実用的な利用方法については特許を調べるといいでしょう。
特許を調べるには「特許電子図書館」を利用できます。
参考URLの「初心者向け検索」で検索します。
キーワードが「自己相関」では件数が1000件を超えて表示が出来ないので
適当なキーワードを付け加えてください。
自動車、楽器、X線、ノイズ、等、面白い応用例が見つかるかもしれません。

参考URL:http://www.ipdl.inpit.go.jp/homepg.ipdl

>フーリエ変換したときに、周波数の大きな領域にスペクトルが多く現れ、これが悪いほど周波数の低い領域に現れる、というものでよろしいのでしょうか?

違います。自己相関は元になる波形の時間をずらして元の波形に重ねた時にどれぐらい似ているかを表わしています。
ずらす時間がゼロの場合はもとの波形と完全に一致しますから相関値は必ず1になります。
元の信号が正弦波の場合には周期の整数倍だけずらすと元の波形と同じになるので相関値は周期的に1になります。

コンサートホールなどで特定の周...続きを読む

QC言語の複素数についてです。

C言語で複素数を使うことになりましたが、複素数をプログラム上でどう使うかわかりません。

粒子の複素屈折率を計算してシミュレーションするというものです。

その複素屈折率は
0.57+2.74i

と表されます。iが虚数です。

一般的にCプログラムで複素数を使えるようにする一番簡単な方法はなんでしょうか?
具体的に参考にできるプログラムコードとかあれば是非教えて下さい。
#define complex
とか使うのでしょうか?

おそらくcomplexというものを使うんだとは思います。実数部と虚数部を分けて考えるのでしょうか。

C言語、いまいちよくわからなくて……どなたか詳しい方、教えて下さい。

Aベストアンサー

C自体,以下の3種類の複素数型をサポートしています。
float _Complex
double _Complex
long double _Complex
ref) ISO/IEC 9899:1999 6. Lanugages / 6.2 Concepts / 6.2.5 Types / Paragraph 11
加減乗除は通常の演算子を利用して可能です。

虚数単位は<complex.h>で定義されるため,実質的には<complex.h>のインクルードが必要になります。
ref) 同 7.Library / 7.3 Complex arithmatic <complex.h> / Paragraph 4

ただし,複素数型はC99と呼ばれる,1999年改正の規格でサポートされた型です。
コンパイラによってはC99を(一切 or 部分的に)サポートしていない場合があります。
複素数型をサポートしていない倍,double _Complexなどの複素数型や,通常の演算子を使っての演算はできません。
その場合は,処理系が複素数演算のためのライブラリを独自に用意してくれているかもしれません。

C自体,以下の3種類の複素数型をサポートしています。
float _Complex
double _Complex
long double _Complex
ref) ISO/IEC 9899:1999 6. Lanugages / 6.2 Concepts / 6.2.5 Types / Paragraph 11
加減乗除は通常の演算子を利用して可能です。

虚数単位は<complex.h>で定義されるため,実質的には<complex.h>のインクルードが必要になります。
ref) 同 7.Library / 7.3 Complex arithmatic <complex.h> / Paragraph 4

ただし,複素数型はC99と呼ばれる,1999年改正の規格でサポートされた型です。
コンパイラに...続きを読む

Q相似変換とユニタリ変換

今までユニタリ演算子に依る相似変換をユニタリ変換と思っていたのですが、違いますか?

私の理解ではAの相似変換は
P^(-1)AP
でPがユニタリのときAのユニタリ変換は
(P^†)AP
だと思っていました。

ところがある本で、Pをユニタリ演算子として相似変換を
(P^†)AP、
ユニタリ変換を
PAP^(-1)
としていました。(P^†)APは私の理解でもユニタリ演算子による相似変換なので分からなくはないのですがユニタリ変換はどうしても理解できません。
もし私が間違っているなら正しい定義を教えて下さい。よろしくおねがいします。

Aベストアンサー

何だか長くなっているが、A No.9 の前半部分で
解決している話ではないかと思う。

行列 L, R が互いに逆行列の関係にあるとき、
n 次行列 A を LAR に移す n×n 次の線型写像を
行列の「相似変換」と呼ぶ。それは明確として、
「P による相似変換」といえば L=P を指すのか、
R=P を指すのか、それ以前に
「P による相似変換」という言い方があるのか?

これは、きちんと標準化された言い方ではなく、
そのため、PA(Pの逆) が正解な訳でも
(Pの逆)AP が正解な訳でもないが、
どちらかといえば (Pの逆)AP 派の人が多い
…というのが実際のところではないかと思う。

これに対して、「P によるユニタリ変換」は
少し状況が違っている。
「相似変換」が、それ自体、行列に対する変換
の名前なの比べ、「P によるユニタリ変換」は、
行列 A にユニタリ変換を施すというよりも、
座標系をユニタリ変換する際に、A の成分表示が
受ける変換を指しているように感じられる。

その意味で、繰り返し補足質問されている
「P によるユニタリ変換とはユニタリ行列 P による
相似変換という意味か?」は、微妙に No っぽい。
結果的に同じことになる訳で、No とも言い難いが、
そういう語源の言い回しではないのだろうと
思えてならない。(どうにも主観的だが)

その上で、「P によるユニタリ変換」が
PA(Pの逆) を指すのか、(Pの逆)AP を指すのか
といえば、「座標のユニタリ変換 P」が
x→Px を指すのか、x→(Pの逆)x を指すのか
に依ることになる。
座標変換の結果、ベクトルの成分表示が受ける
線型変換の表現行列が P と読めば x→Px だし、
基底を P で変換すると読めば x→(Pの逆)x だ。
(列ベクトルが「反変ベクトル」と呼ばれる所以
でもある。)

…というようなことが、既に A No.9 に出ている。
要するに、言い回しの曖昧さによる問題なので、
文脈に沿って確認する必要があるのだろう。

何だか長くなっているが、A No.9 の前半部分で
解決している話ではないかと思う。

行列 L, R が互いに逆行列の関係にあるとき、
n 次行列 A を LAR に移す n×n 次の線型写像を
行列の「相似変換」と呼ぶ。それは明確として、
「P による相似変換」といえば L=P を指すのか、
R=P を指すのか、それ以前に
「P による相似変換」という言い方があるのか?

これは、きちんと標準化された言い方ではなく、
そのため、PA(Pの逆) が正解な訳でも
(Pの逆)AP が正解な訳でもないが、
どちらかといえば (Pの逆)AP 派の人が...続きを読む


人気Q&Aランキング