2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

MATLABプログラミング 質問箱 その1

1 :デフォルトの名無しさん:04/10/09 15:28:44
MATLAB 日本語版
http://www.cybernet.co.jp/matlab/
MATLAB 本家
http://www.mathworks.com/

Yahoo MATLAB
http://dir.yahoo.co.jp/Science/Mathematics/Software/MATLAB/
MATLAB入門
http://feedback.mech.fukui-u.ac.jp/matlab/matlab0.htm
MATLAB チュートリアル
http://www-isys.eei.metro-u.ac.jp/~sho/pub/ttmatlab/Index.html

2 :デフォルトの名無しさん:04/10/09 15:37:56
2get

3 :デフォルトの名無しさん:04/10/09 17:22:46
おおこんなスレが! 僕は大学で音響の研究してます。
このスレにお世話になることあると思うんで、盛り上げていきましょう。

4 :デフォルトの名無しさん:04/10/09 19:15:13
ほう。こんなスレが。
って、俺はほとんど使ったこと無いけど。

普段は octave 使ってる。

5 :デフォルトの名無しさん:04/10/09 22:53:51
僕も大学で音響の研究してます。
もしかしたら >3 と知り合いかも。
・・・って、音響やっててMatlab使っているなんてたくさんいるか。

6 :デフォルトの名無しさん:04/10/10 02:01:11
げっ。俺も音響でMATLABつかっているorz。
>>3>>5が同じ研究室のヤツだったらやだな

7 :デフォルトの名無しさん:04/10/10 07:52:33
俺はFortran90使っているけど、行列の扱いやすさだとやっぱりMATLABの方が上なんだろうか?
かくいう俺も音響関係の研究室に所属。信号処理関連のライブラリは魅力的だなあ。

8 :デフォルトの名無しさん:04/10/10 09:36:53
以前音響の研究室でMatlab使ってた。
その研究室の先生が教授を辞めてしまった。

9 :デフォルトの名無しさん:04/10/10 09:38:01
>>7
FORTRANと比べたらそりゃそうだろう。
けどC/C++/Javaなどと比べたら(ry


10 :デフォルトの名無しさん:04/10/10 09:38:32
>>5-6
東京23区内か?


11 :デフォルトの名無しさん:04/10/10 09:39:07
音響以外にもデータの解析にMATLABつかってる研究室あったな。

12 :デフォルトの名無しさん:04/10/10 09:40:36
MATLABでオブジェクト指向やってみようと
思ったらPerl程度のものしかできなくて萎えた

13 :デフォルトの名無しさん:04/10/10 09:49:03
MATLABの嫌なところは
ソースをぱっと見ただけで
それが関数であるのか、配列であるのか、ベクトルであるのか
解らないところだね。
C/C++/Javaならすぐにわかるのに 
 

14 :デフォルトの名無しさん:04/10/10 10:26:10
>>5
いくら音響やっててMATLAB使ってるのがたくさんいるからといって
MATLABだけで音響ソフトを作るのはハズカシイ

15 :デフォルトの名無しさん:04/10/10 11:02:47
そうそう、しょせんMatlabはプロトタイピング用です。
思いついたアイディアをすぐに形にできて、実験できるのがいいところ。
その後に自分で書くなり外部のプログラマを雇うなりしてC/C++で最適化します。

16 :デフォルトの名無しさん:04/10/10 11:27:41
プロトタイピング用というより解析用。

今まで音響の研究室見てきたけれど
雇ってもろくなもんができない罠。
本格的にやろうとすればするほど金がかかるからね。
100〜500万じゃ雇っても無駄。

プログラマという職についてみればあのソフトには何100万じゃ足りないということがわかてしまう



17 :デフォルトの名無しさん:04/10/10 11:29:51
古くから音響系やっている者は
自分の研究成果を組み込み機器に取り入れたがるうえに
かつ考え方が古いので
いつまでもC言語にこだわる。


18 :デフォルトの名無しさん:04/10/10 11:32:00
100万でソフトを作らせて
1人月30万で3人でチーム組んだとすると
一ヶ月でその100万が消えてしまう。
その三人が無能だったら使えないソフトしか作れない。


19 :デフォルトの名無しさん:04/10/10 11:34:15
MATLABをこよなく愛する人たちは
対話形式やウィザード、スクリプトが大好きで
設計が苦手な傾向にあるようだ。

彼らには型の違いに厳しいC/C++/Javaという言語が苦手だという傾向もある。



20 :デフォルトの名無しさん:04/10/10 12:09:18
MATLABの開発環境で
MATLAB付属以外のものを
使ってる香具師いる?

21 :デフォルトの名無しさん:04/10/10 14:42:02
僕は制御をやっています。
個人としてはMatlabよりはCを使うことが多いんだけど、
Matlabの優秀さは認めています。
基本的な数学がわかっていればプログラミングの訓練を
しなくても短期間でそれなりのことができちゃうからね。

Matlabの初(?)スレとしてはお勧め書籍とか値段とかを書くのがよいのかも。



22 :デフォルトの名無しさん:04/10/10 14:46:48
MATLABによるDSP入門

この本、ほとんどがDSPのことばかり
でMATLABのことやソースコードは
ほとんど載っていなかった。

23 :デフォルトの名無しさん:04/10/10 14:56:19
MATLABは大規模プログラミングに向いていないから
熱心に使おうという気が起きない。

24 :デフォルトの名無しさん:04/10/12 05:38:26
matlabは主にデータのプロット用だね

プログラムはCとかで書いた方が速いし

25 :デフォルトの名無しさん:04/10/12 13:07:21
>>24
> matlabは主にデータのプロット用だね
あはは。ちょっと贅沢なgnuplot、ってところか。


26 :デフォルトの名無しさん:04/10/12 19:35:39
>24
学会発表とか授業のプレゼン準備とかにMatlabでプロット作成してます。
EPSに吐けるし、いろいろと細かいところまでいじれるのがいいですね。

27 :デフォルトの名無しさん:04/10/14 00:35:38
>>24
同じことをやってるひとがいるとは

28 :デフォルトの名無しさん:04/10/15 09:14:19
水流の3次元データの可視化の方法がよくわかりません。
データ形式はどのようなものを用意して、どのようなコマンドでプロットすればよいのでしょうか?

29 :デフォルトの名無しさん:04/10/16 00:11:26
自分は制御のシミュレーションでMATLAB使おうとしてます。
MATLABの「LMI Control Toolbox」のLMIエディッタというのはどう言う風に使えばいいのか・・・
初めて触ったけど全然わからない;;
これ使ったら行列不等式とけるってわけではないのかな?Orz

30 :デフォルトの名無しさん:04/10/16 03:38:54
surfの使い方がよくわかりません。例えばz=sin(x)cos(y)
を表示したい場合はどのようにすればよいのでしょうか?

31 :デフォルトの名無しさん:04/10/16 04:13:49
>>30
x=0:0.1:pi;
y=0:0.1:2*pi;
[X,Y]=meshgrid(x,y);
surf(X,Y,sin(X).*cos(Y));


32 :デフォルトの名無しさん:04/10/16 14:49:10
fedora 2 に matlab 6 release 12 を入れたのですが matlab を起動すると
Warning: Unable to load Java Runtime Environment: /usr/local/matlab/sys/java/jre/glnx86/jre/lib/i386/native_threads/libjava.so: symbol __libc_wait, version GLIBC_2.0 not defined in file libc.so.6 with link time reference.
Warning: Disabling Java support.
ってエラーが出て GUI が起動しません
だれか fedora 2 で GUI を使えている人いますか?


33 :デフォルトの名無しさん:04/10/18 22:56:39
MATLABでLMIの計算とかってどうやってやるか教えてください
たとえば
A=[1 0;0 1]
B=[0 0;1 1]
C=[0 1;1 0]
A*B*X+C>0
になるようなX
とか><
ぜんぜんわかんない〜;;


34 :デフォルトの名無しさん:04/10/21 17:34:09
OK、お勧めの参考書を聞こうか

35 :デフォルトの名無しさん:04/10/21 17:40:27
つっかもうぜ!

36 :デフォルトの名無しさん:04/10/21 20:13:48
>>33
左辺が対称行列じゃなきゃダメ。

37 :大学生くん:04/10/22 01:31:51
MATLABで変形離散コサイン変換(MDCT)のプログラムを作りたいのですが、
どなたか教えてください。
DCTを使ってどうにかできないものなのでしょうか?

38 :デフォルトの名無しさん:04/10/23 07:23:25
>>37
CやC++などでやるのがよろしいんじゃなくて?

39 :デフォルトの名無しさん:04/10/24 12:09:41
3次元データを透過曲面を使って表示するにはどうしたらよいのでしょうか?

40 :デフォルトの名無しさん:04/10/24 13:17:04
>>26
もちろん使っているコマンドだかオプションは
deps2cとかいうやつだよな?

カラーでな。

みんなeps使わず出力された
ポップアップウィンドウから
マウスでコピペしてる奴ばかり。

一つのグラフ書くたびに
毎回Xtick, Ytickを指定しset(’gca' とか
をコピペして
効率悪すぎ。

クラス作れなくても関数くらい作れや。
攻めてforとかwhileループとか
使って効率化くらいしたらどうだ
っていいたくなる奴ばかり。



41 :デフォルトの名無しさん:04/10/24 13:18:53
>>29
シミュレーションに使うには
重たくて使いにくそうだな


42 :デフォルトの名無しさん:04/10/24 13:19:17
>>37
つーか数値計算や信号処理の本でも嫁

43 :デフォルトの名無しさん:04/10/24 13:19:51
>>39
シェルで
demoと入力して
エンターを押せ

そこに答えが見つかる

44 :デフォルトの名無しさん:04/10/30 15:51:15
getframeでアニメーションを作成しているのですが、作成中は、matlabを最前面に表示しておかなければならず、
他の作業ができないのですが、matlabでディスプレイ上に表示させないで、aviムービーを作成することは可能でしょうか?

45 :Mach Go! Go! ◆6opQoo0UZg :04/10/30 19:56:04
>44
表示内容はなんですか?
画像データとかであれば表示させずにimage変数内で用意して書き出せるんですが。

46 :44:04/10/30 23:44:28
>>45さんどうもありがとうございます

例えばこのようなものです

Z = peaks; surf(Z)
axis manual      % Axes の範囲を固定します。
set(gca,'nextplot','replacechildren');
M = moviein(20);
for j = 1:20
    surf(sin(2*pi*j/20)*Z,Z)
    M(:,j) = getframe;
end


47 :Mach Go! Go! Go! ◆6opQoo0UZg :04/10/31 02:31:59
調べてみたら、画面表示なしにMatlab Tech Noteに載っていました。

ttp://www.mathworks.com/support/tech-notes/1200/1204.html#Section%2010

二次元ではできてももしかしたら三次元だとできない、とかそういう制約があるかもしれませんね。

48 :Mach Go! Go! Go! ◆6opQoo0UZg :04/10/31 02:32:52
途中で書き込みしてしまいました。

>調べてみたら、画面表示なしにMatlab Tech Noteに載っていました。

調べてみたら、画面表示なしにムービーを作る方法がMatlab Tech Noteに載っていました。


49 :デフォルトの名無しさん:04/10/31 03:36:42
MATLABの java がエラー吐くのは微妙に気になる。

ところで、皆は行列計算時に Out of memory が出たら
どう対応してる?よく repmat でメモリ不足して困る。

今のところ行列を適当に小行列に分解し、for ループで
まわしてるんだが、やはり遅さは否めない。

なんとかならんものかのぅ...

50 :デフォルトの名無しさん:04/11/02 07:01:05
>>49
>どう対応してる?
そっち面がシビアなものにはMatlabは使わない。

51 :デフォルトの名無しさん:04/11/02 17:27:10
>>32
以下を参照。
http://www.linuxquestions.org/questions/showthread.php?s=&forumid=7&threadid=183462
www.blackdown.org からj2re1.3.1をとってきて入れて、適当にパスを張って
ln -s /where-you-install-blackdownjava/j2se/1.3.1/jre /local-matlab-dir/sys/java/jre
環境変数を
export LD_ASSUME_KERNEL=2.4.19
とすれば、fedora core 2でmatlab12が動くようになる。
多分、上のリンクの
export LD_PRELOAD=~/libcwait.so
の部分はやらなくてもうまくいった。

52 :デフォルトの名無しさん:04/11/02 19:09:34
>>47さん
どうもありがとうございます。無事できました。
が、サイズがとても小さいのですが、大きくする方法はないのでしょうか。
GUIの場合は、windowを大きくすれば良かったのですが...

53 :デフォルトの名無しさん:04/11/03 01:43:38
>>50
そうか...

そう大規模でもないんだがなぁ。たかだか400サンプルを
もとに計算しているだけだが、如何せん途中で大規模な
行列が生じるためにOut of memory...

ネックになっている行列操作だけ C で書いて走らせるか
なぁ。Optimization Toolbox が使いたいから、MATLABを
諦めきれん。

54 :Mach Go! Go! Go! ◆6opQoo0UZg :04/11/03 04:13:48
>49
メモリ管理に関してのTech Noteなんてのを見つけましたが、参考になりますでしょうか?
ttp://www.mathworks.com/support/tech-notes/1100/1106.html

「変数は連続したメモリ空間にしか確保できないので、メモリを大量に使用することが分かっている場合は、あらかじめhoge = zeros(n,m)で確保しておくべし」ということらしいですが。

55 :デフォルトの名無しさん:04/11/03 17:42:42
ガウスノイズに対して、帯域制限フィルタをかけて、滑らかな曲線にするような・・・
そんなフィルタ、何使えばいい?

56 :Mach Go! Go! Go! ◆6opQoo0UZg :04/11/03 22:23:27
単純なIIRフィルタじゃだめでしょうか?
[b, a] = butter(3, [0.4 0.6]);
y = filter(b, a, x);

57 :デフォルトの名無しさん:04/11/04 01:37:50
>>54
わざわざ探してくれてありがとう.

扱う行列がでかすぎるのが問題なんだよね.
WS.調べたけど,1Gメモリ積んでても連続領域が460M
ちょいしかなかったのが原因だろうな.Windows 起動
時でそれなので,460M を越えないサイズで計算させる
しかないね.

せっかく計算をベクトル化したのになぁ(´・ω・`)ショボーン

58 :デフォルトの名無しさん:04/11/07 18:19:25
新バージョンはいつ頃出るのでしょうか?

59 :デフォルトの名無しさん:04/11/13 14:17:00
>>49
MATLABでJavaをよみこんでいるのか?
だったらJava単体コードを実行したときには
java.lang.OutOfMemoryErrorはでないのか?



60 :デフォルトの名無しさん:04/11/14 05:43:59
>>59
>MATLABでJavaをよみこんでいるのか?
GUI周りはJava使ってるよ。

61 :Mach Go! Go! Go! ◆6opQoo0UZg :04/11/14 09:17:53
>59

>49さんは「ところで」の部分から違う話題に入ったっぽいので、
Javaとメモリ不足とは関係ないみたいです。
R13くらいからのMatlabではJavaのGUIコマンドを実行することもできるようになってるみたいです。
Swingを使ってウィンドウを出したりして遊んだことがあります。

62 :デフォルトの名無しさん:04/11/15 12:28:40
レンダラーはopenglが一番いい結果になるの?

63 :matlab help!!:04/11/22 11:07:33
すいません。自分は、corner frequencyが1kHzで4th orderの
highpass butterworth filterをデザインしようとしてます。
同じ設定のlowpass filterをデザインすることはできたんですが、
そこから、highpass filterに変換することができません。誰かご存知だったら、
お願いします。lowpassのコードはこれです。

>> [B1,A1]=butter(2,1000,'s');
>> f=logspace(2,5);
>> h1=freqs(B1,A1,f);
>> mag1=20*log10(abs(h1));
>> semilogx(f,mag1),grid;



64 :デフォルトの名無しさん:04/11/22 11:38:29
Ripple ってなんですか?

65 :デフォルトの名無しさん:04/11/22 11:44:34
広がりながら飛ぶ環状のビーム

66 :matlab help!!:04/11/22 13:08:29
いまだ苦戦してます。まじプリーズです。

67 :choix ◆pnCm4bpG3Y :04/11/22 16:48:24
おとなしいスレなんだから、たった2時間で回答が来ると期待しない方がいいですよ。
>> [B1, A1] = butter(2, 1000, 'high', 's');
じゃダメですか?

68 :デフォルトの名無しさん:04/11/23 18:56:23
Matlab(Octave)で以下の式をシミュレートしたいのですがどの様な手順で進めるたらいいか、どなたか救いの手をよろしくお願いします。

dx(i)/dt = P(i) - k(i)x + a(i)x(i) - b(SUMx(j))

ここでxは2つあり、x=1の時は以下の式で解を求めます。
When D <> 0
x1(t) = (Ps/2S + Pd/2D) + (x1(0) - Ps/2S)e^(-St) - (Pd/2D)e^(e-Dt)

When D = 0
x1(t) = xd(0) + Pdt/2 + Ps/2S + (xs(0) - Ps/2S)e^(-St),

where
S = k + B;
D = k - B;
xs=x1+x2;
xd=x1- x2;
Ps = P1+ P2;
Pd = P1- P2;

x=2の場合、Pd -> -Pd, x1 -> x2, xd -> -xdとし、同じ様に解を求めます。

69 :デフォルトの名無しさん:04/11/24 00:46:22
randn()で発生させた正規乱数は平均0分散1ですが、これを平均1分散4にするには?
平均については1を足せばいいとわかりました。

70 :choix ◆pnCm4bpG3Y :04/11/24 01:04:23
>>69
かけ算を使うといい。

71 :デフォルトの名無しさん:04/11/24 05:28:41
正規分布N(μ,σσ) [<- σの2乗]に従う確率変数Xは Z = (X-μ)/σ と置くことで
正規化できる。 すなわち、Zは正規分布N(0, 1)に従う。

であるから、 Z〜N(0, 1)なる正規乱数に対して、 X = σZ+μ と置けば平均μ、分散
σ×σの正規乱数が生成できる。

要するに、出来た乱数に2をかけて1を足せばいいのだ。

基本中の基本と思うけど。

72 :デフォルトの名無しさん:04/11/24 14:19:31
matlabを学ぶのに最適な本を教えてください

73 :デフォルトの名無しさん:04/11/24 17:05:08
自己相関関数を求めたいのですが、
実装されているACF(AutoCorrelationFunction)の使いかたがわかりません。
[ACF]=acf(Z,N)
とあり引数はZ=Signal,N=# of coefficientsと書いてあります。
Nには何を入れれば良いのでしょう…

74 :デフォルトの名無しさん:04/11/24 19:11:04
そいつはxcorr より使いやすいのか?

約-21億から約21億までの値を
一個づつNに代入しながら
確かめてみよう。





75 :デフォルトの名無しさん:04/11/24 20:25:06
>73
時間軸にある相関関数の数

76 :デフォルトの名無しさん:04/11/24 22:21:14
>>72
Matlab一般って本はあまりないと思うぞ。
坂和先生の本とかは一般論に近いけど、僕はそんなに良いとは思わない。
分野を限定したら色々ある。

大学とかだと先輩が書いたマニュアルが便利なことが多いと思う。



77 :73:04/11/25 00:06:13
>>75
レスさんくすこ
相関関数の数ってデータ系列から判断できるものなの?
勉強不足か…逝ってきます orz

78 :デフォルトの名無しさん:04/11/25 02:42:07
>>72
付属のマニュアルとオンラインヘルプとデモ

まじめに書いてあるし、下手な入門書よりわかりやすいと思う

79 :デフォルトの名無しさん:04/11/26 11:10:42
2つの分布関数から得られた各1000個の数字のヒストグラムを同時に2つ同じヒストグラフにかく。
これはhist(x1),hist(x2)の後や中に、何のコマンドを書けばいいんでしょうか?

80 :デフォルトの名無しさん:04/11/27 13:23:56
関数y=x^3からyのサンプルデータをxを[-2,2]の範囲で100個取りなさい。

どうやるんでしょうか?

81 :デフォルトの名無しさん:04/11/27 13:54:11
>>80
質問の意味がいまいちはっきりしないんだけど
x = rand(100,1) * 4 - 2;
y = x .^ 3;
っていうことなのかな。

82 :デフォルトの名無しさん:04/11/27 14:01:26
>>79
同時に二つ書くというのはどういう状態がほしいんですか?
色違いの棒グラフが並んでいるようなイメージですか?
それだったらhistじゃなくて以下のような感じでもいいかも。

x1 = randn(1000, 1);
x2 = randn(1000, 1) * 2 + 1.5;
edges = -4:0.5:4;
h1 = histc(x1, edges);
h2 = histc(x2, edges);
bar(edges, [h1 h2]);

83 :デフォルトの名無しさん:04/11/27 14:05:45
よく、乱数ではサンプルの統計のhistとその分布関数のグラフの図を
同一のグラフに描くをいうのがありますね。
それをx^3でやれというんです。(ちょっと違いますが)
乱数なら簡単なんですが、任意の関数からサンプルを取るとなるとわかんなくて。

84 :デフォルトの名無しさん:04/11/27 14:07:34
すいません、上は
>>80
の方です。

85 :デフォルトの名無しさん:04/11/28 00:24:43
>>82
参考になりました。ありがとうございました。
重ねることは出来ないんですね。

86 :デフォルトの名無しさん:04/11/28 06:28:29
>>85
重ねようと思えば
hist(x1)
hold on
hist(x2)
でできますが、意図した結果にならないかもしれません。

87 :デフォルトの名無しさん:04/11/28 06:53:00
>>83
やっぱりいまいち分からんのですが、こういうことですか?

x1 = linspace(-2, +2, 100);
y1 = x1 .^ 3;
[n, center] = hist(y1);
plot(center, n, 'k--');
hold on;
x2 = rand(100, 1) * 4 - 2;
y2 = x2 .^ 3;
hist(y2);


88 :デフォルトの名無しさん:04/11/28 16:31:38
>>87
乱数を使えばいいんですね〜。
TAに質問したら、y=e(-x)の場合を考えてみろとかかれました。
e(-x)の関数の分布の形に乱数を発生させるのってどうすればいいんですか?
どう乱数を変換すればいいんですかね?

89 :デフォルトの名無しさん:04/11/29 00:16:00
>>88
xに均一な乱数を生成して、それをexp(-x)に入れれば、
y=exp(-x)からの出力yはその分布に従うと思うのですが。

x = rand(10000, 1) * 3; % [0, 3]の一様乱数生成
y = exp(-x);
hist(y, 100); % 分布を表示

>>86の後半でやっていることも同じですね。

90 :迷える大学生:04/11/30 14:57:01
matlabのスレが一番近いんで多少スレ違いかもしれませんが質問させてください
大学でscilabを使う問題が出されたのですがまったく無知ゆえさっぱりです
どうか住人の方のお力をお借りしたいです
aシューティングメソッドを使って解け
b有限差分法を使って解け
y''=-2y'-4y
y(0)=2
y(1)=2

91 :デフォルトの名無しさん:04/11/30 22:55:13
自分で解くべき宿題を持ってこられても困ります。
授業で出された問題だったら「まったくの無知」というのもおかしな話なので、
大学の先生に質問してみましょう。

92 :デフォルトの名無しさん:04/12/01 22:26:12
>>90
宿題スレとちゃうって。

93 :デフォルトの名無しさん:04/12/02 09:07:34
一人でもライバルを減らすため、私は答え続けます。

94 :迷える大学生:04/12/02 12:09:13
>>91-92
カスだな。使えねーやつらめ

95 :デフォルトの名無しさん:04/12/02 23:23:46
その程度の問題で他人に助けを求めるほうこそカスでしょ。
しかもスレ違いなんだし。

96 :デフォルトの名無しさん:04/12/04 14:20:17
どなたかOCTAVE使ってる方いますかね?
下のMATLABの簡単なプログラムをOCTAVEで走らすのに苦闘中です。

function bdot = heatup(t,b)
global a h q w;
bdot = (q-h*(b-a))/w;
endfunction

global a h q w;
a = 18; h = 50; q =1000; w=10;
[time,bt] = ode23('heatup',0,1,30)
plot(tme,bt)

これを下の様にしたんですがグラフが見事にちがうんです。どこがいけないですか?

function bdot = heatup(t,b)
global a h q w;
bdot = (q-h*(b-a))/w;
endfunction

global a h q w;
a = 18; h = 50; q =1000; w=10;
t= linspace(0,1,100);
tb = lsode('heatup',[0],t)
plot(tb)

97 :デフォルトの名無しさん:04/12/04 14:21:31
失礼 tb = lsode('heatup',[30],t)でした。
なんでだめなんすかね?

98 :matlab help!!:04/12/06 09:21:22
1kHzのsquare waveを使って0dBのSNR(信号ーノイズ率)を作るためにノイズを加えた後、
可能な限りのsquare waveを維持しながら、
可能な限りのノイズを吸収するするフィルターを作ろうとしてます。
バターワースもしくはChebyshev1 のフィルターのハイパス、ローパス
バンドパスかnotchを使ってフィルターを作りたいんですが、下のコードの
A,Bに入れるcodeがわかりません。 どなたかわかりますか?


99 :matlab help!!:04/12/06 09:22:41
---------------------------------------------------------------------------------
t = 0:0.00001:0.005; % Generate time index.
x = 100*square(2*pi*1000*t); % Generate square wave.
var(x) % Determine the variance of x.
pause
plot(t, x), axis([0 0.005 -150 150]); % Axis command means to plot the
% signal from 0 to 0.005 for t axis
% and from -150 to 150 for x axis.
noise = 100.0*randn(1, length(t)); % Generate gaussian (normal) noise
% signal.
var(noise) % Determine the variance of the noise.
pause
plot(t, noise), axis([0 0.005 -300 300]); % Plotting noise
pause
xn = x + noise; % Add square wave and noise.
var(xn) % Determine the variance of xn.
pause
plot( t, xn); % Plot square wave plus noise signal.
y1 = filter(B, A, xn); % Filter the noisy signal. You get B & A
% from your filter design using butter
% or cheby1, or?
plot(t, y1); % Plot filtered noisy signal.
pause
plot(t, x, t, y1); % Plot noiseless signal and filtered
% noisy signal together.
----------------------------------------------------------------------------------

100 :matlab help!!:04/12/06 09:26:00
すいません読みずらいので、もう一回張ります。
---------------------------------------------------------------------------------
t = 0:0.00001:0.005;
x = 100*square(2*pi*1000*t);
var(x)
pause
plot(t, x), axis([0 0.005 -150 150])
noise = 100.0*randn(1, length(t));
var(noise)
pause
plot(t, noise), axis([0 0.005 -300 300]);
pause
xn = x + noise;
var(xn)
pause
plot( t, xn);
y1 = filter(B, A, xn);
plot(t, y1);
plot(t, x, t, y1);


101 :choix:04/12/06 10:15:32
1kHzのsquare waveは3kHz、5kHz、7kHz、9kHzというように
奇数倍の周波数に倍音成分が入っているので、
単純なbutterやchebyフィルタじゃ取り出せないと思います。
各倍音成分を取り出せるようなフィルタを考えてみましょう。

102 :matlab help!!:04/12/06 10:38:21
>101
butterworh/chebyshefフィルタしか使えるのが、ないんですよね。
(まだその2つしか習ってない・・。)
例えば、square wave+noise signalっていうのは、butterやchebyでは
 ちょっとのノイズでも取り出せないんですかね?

103 :choix:04/12/06 11:58:37
ちょっとインチキくさいんですが、
>>101 で書いた「各倍音成分を取り出す」ということを
Butterworthを使って実装してみました。
もっといい方法はあるんでしょうが、
自分は信号処理の専門家じゃないので
この程度しか思いつきませんでした・・・。

fs = 100000;
t = 0 : 1/fs : 0.005;
x = 100 * square(2*pi * 1000 * t);
noise = 100.0 * randn(1, length(t));
xn = x + noise;

width = 20;
y = zeros(size(xn));
for n=1:20
fc = (2*n-1)*1000;
[B, A] = butter(1, [fc-width fc+width] / (fs/2));
y = y + filter(B, A, xn)/(2*n-1);
end
y = y/max(abs(y)) * 100;

plot(t, xn, 'r', t, y, 'k');

104 :matlab help!!:04/12/06 12:15:45
早速の返信しかも、コード付でありがとうございます。
ちょっと見たことがないコマンドがいくつか
ありますけど、打ち込んだらしっかりとしたフィルターグラフが出てきました。
すいません、ここでまたまた質問なんですが、butterworthを使った場合
1st order butter worthでないと、いけないんでしょうか?

105 :matlab help!!:04/12/06 12:55:39
長すぎるぐらいのcodeが一応できました.butter使いました(あってるか確信ないけど・・・。)時間があったら見て
みてください。
-------------------------------------------------------------------------------------
t = 0:0.00001:0.005;
x = 100*square(2*pi*1000*t);
var(x) % Determine the variance of x.
plot(t, x), axis([0 0.005 -150 150]);
xlabel('Period(Second)'), ylabel('Amplitude')
title('Noiseless Signal');
noise = 100.0*randn(1, length(t));
var(noise)
plot(t, noise), axis([0 0.001*5 -300 300]);
xlabel('Period(Second)'), ylabel('Amplitude')
title('Noise');
pause
xn = x + noise;
var(xn)
plot( t, xn);
xlabel('Period(Second)'), ylabel('Amplitude')
title('Noised Signal');
pause
Wp = (5/500); Ws = (250*0.707/500); Gp=-2; Gs=20;
[n,Wn] = buttord(Wp,Ws,-Gp,-Gs);
[B, A]=butter(n,Wn);
y1 = filter(B, A,xn);
plot(t, y1)
xlabel('Period(Second)'), ylabel('Amplitude')
title('Filtered Noisy Signal');
plot(t, x, t, y1);
xlabel('Period(Second)'), ylabel('Amplitude')
title('Noiseless Signal and Filtered Noisy Signal');


106 :デフォルトの名無しさん:04/12/06 16:36:17
フィルターの
次数を求める故の阻止域端減衰量、通過域端減衰量、阻止域エッジ周波数の求め方がわかりません。
これは、ノイズのグラフから求められるものなのですか?それとも、何か
公式があるのでしょうか? 
ちなみに、フィルター使用としてるノイズは1kHzのsquare waveにSNR値を0dBに
したノイズです。

107 :choix:04/12/06 19:24:30
別にbutterの次数が1でなくてもいいんですが、
いくつか変えて実行してみて、
それの出力が良さそうだったので選んだまでです。
buttordで次数を決めるのはいいかもしれませんね。
buttordに指定する係数は自分がどういうフィルタを作りたいかに関係するので、
この場合はこうしろ、という公式があるわけではなさそうです。
いくつか試して、最適なものを選ぶと良いでしょう。

使ったことなければMatlab Signal Processing Toolboxの FDATool というのも
グラフィカルにフィルタが作れるので、
フィルタデザインを理解するのに良いかもしれません。

108 :デフォルトの名無しさん:04/12/06 19:59:02
すいません、ノイズって完璧に取り出す事って可能なのでしょうか?


109 :choix:04/12/06 21:48:23
画像処理の分野ではけっこうすごい量のノイズでも、
ノイズの種類などが分かっていれば除去できるアルゴリズムを見たことがあります。
もちろん、完全に除去できるわけではありません。
たぶん音声信号でも同じでしょう。
多くの場合は「耳で聞いた限りはノイズがない状態」に持っていくことはできても、
「ノイズが加えられる前の状態」にするのは相当難しい(あるいは不可能)だと思います。

110 :デフォルトの名無しさん:04/12/06 21:54:23
ありがとうございます。

111 :デフォルトの名無しさん:04/12/07 13:31:39
計算したデータをテキスト・ファイルに書き込む方法を教えてください!
fpritfで保存すると参考書に書いてあるんですが,
どのフォルダのどこに保存されているかも解りません.
cやFortranのように,データファイルの保存は出来ないのでしょうか!?

112 :111:04/12/07 13:40:37
↑で質問した者です.
保存されている場所が解りました.workフォルダだった.
すみませんでした.

113 :デフォルトの名無しさん:04/12/07 16:22:50
普段はウィンドウ上のほうに有るカレントディレクトリだな
fopenのときフルパス出開くこともできるんでないか?

114 :111:04/12/07 18:42:04
>>113
レス,ありがとうございました.
あと,自分のMatlabでは,
randint()やmodmap()などの関数が認識していません.
どうやったら,使えるようになりますか!?


115 :111:04/12/07 21:37:16
↑Matlab6.5のバージョンです.
communications Toolboxが入っていないからかな??
誰か教えてください.

116 :choix ◆pnCm4bpG3Y :04/12/08 08:04:09
>114
一番簡単な方法は「save -ascii」だと思われます。

117 :choix ◆pnCm4bpG3Y :04/12/08 08:06:32
もしもっと柔軟なファイル書き込みがしたいんだったら以下のようなものが使えるかもしれません。

fid = fopen([filename, 'w');
format = '%9.4f';
for row=1:size(data, 1)
for column=1:size(data, 2)
fprintf(fid, format, data(row, column));
end
fprintf(fid, '¥n');
end
fclose(fid);


118 :デフォルトの名無しさん:04/12/08 11:58:00
xにガウシアンノイズを加えたいんですが N(0,σ)とあるんですがこのσはランダムに
選ぶしかないんですか?

119 :choix ◆pnCm4bpG3Y :04/12/08 13:15:58
σでガウス分布の裾野の広がりぐあいを指定します。
特にこれといった要求がなければ1でいいんじゃないでしょうか。
もしそれが学校の宿題の問題なんだったら、
先生に聞くのが一番手っ取り早いですよ。

120 :デフォルトの名無しさん:04/12/08 14:45:44
>>111
raindintもmodmapもCommunications Toolboxだね。
入ってないなら使えない。
どうしても使いたいなら買ってください

121 :デフォルトの名無しさん:04/12/08 22:06:34
age

122 :choix ◆pnCm4bpG3Y :04/12/08 23:11:27
>>111
完全互換にするのは面倒ですが、
似たものを自作という手もありますよ。
たとえばrandint()なら
 round(rand*m)
なんていうぐあいに。

123 :111:04/12/10 17:52:34
色々調べた結果、communications Toolboxが自分のパソコンには入っていなく、
認識出来ませんでした。
研究室から全ツールが入ってものを入れて、解決しました。
みなさん、色々なアドバイスありがとうございました。

そこで、もうひとつ質問があります。
ある参考書にQPSK信号を作るのに、
% 信号作成
Pd = 2000; % Pd : 送信されたシンボル数
Fd =1;% Fd:シンボルレート;1Hzに正規化
Fs = 4*Fd; % Fs : シンボルあたりの標本数
R = 0.5;% R : roll-off factor
Delay = 5;% Delay : フィルタの遅延時間 [symbol]
No = 1;% No : 雑音の電力密度スペクトル [W/Hz]
M=4;% M:多値数
% 信号系列発生(M値(0,1,2,3)の乱数発生)
x1 = randint(Pd,1,M);
% 信号配置変調のためのマッピング
y1 = modmap(x1,Fd,Fs,'qask',M);
%フィルタリング(raised cosine filter)
[rcv_a1,ti] = rcosflt(y1, Fd, Fs, 'fir/sqrt/Fs', R, Delay);
% 変調波信号の発生複素振幅変調
s1 = amodce(rcv_a1,Fs,'qam');

のように作ってありました。
でも一番下の行のamodce(rcv_a1,Fs,'qam')はQAM信号を作るソースですよね!?
上のプログラミングソースはQAM信号、QPSK信号どちらを作るものですか?
分かる方がいらしたら、是非教えてください!
お願いします


124 :デフォルトの名無しさん:04/12/11 00:34:30
ガッコのライセンスって所属してる個人のパソコンにインストールできるんだ。
いいなぁ。ウラヤマスィ。

125 :デフォルトの名無しさん:04/12/11 00:36:04
もしかして通報の対象か?

126 :デフォルトの名無しさん:04/12/11 03:20:16
ネットワークライセンス版ならいいんでない?
どうせ研究室外に出たら使えないし、ライセンス数も同時使用数の形でサーバー側で管理してるんだから。
それか、自分のっていっても占有できるだけで、研究室の備品だとか。

マイクロソフトのキャンバスアグリーメントは契約次第で
学生や教職員の個人のPCにインストールしてもOKってのがあるらしい



127 :デフォルトの名無しさん:04/12/11 03:31:10
今回の例は駄目だよな

128 :デフォルトの名無しさん:04/12/11 05:44:02
>>126
ネットワークライセンスでも…技…にはでき…なんだな。
実際の使用条件ってどうだっけ?オレ、鯖のセットアップは自分でやった
けど研究室でしか使わないからその辺りを意識したことなかったな。

>学生や教職員の個人のPCにインストールしてもOKってのがあるらしい
うちの学科はそれやってる。Officeはついてこないけどね。



129 :デフォルトの名無しさん:04/12/12 03:34:43
ひとつ質問したいのですが。

Cで計算し、出力したプログラム(txt)をmatlabを用いて
グラフ化するやり方がわかりません。
出力したプログラムは
時間Tに関して、それぞれx y zの三つの値がでて、それが5千行ある結果なのですが。。

matlabにうつコマンドは
plot3(ファイル名(:,2),ファイル名(:,3),ファイル名(:,4))
だとおもうのですが、、

ちなみに、matlab5.3を使っています。これは98年くらいで
結構ふるいのですが、

よろしければおしえてください。


130 :デフォルトの名無しさん:04/12/12 03:36:06
129です。
Cで計算し、出力した結果(txt)をmatlabを用いて

です。


131 :デフォルトの名無しさん:04/12/12 03:59:11
>>129
p = load('filename.txt');
plot3(p(:,2),p(:,3),p(:,4));
でいいんじゃないでしょうか。(時間軸を無視しちゃいますけどね)


132 :デフォルトの名無しさん:04/12/12 15:01:05
>>131
れすありがとうございます。
まだうまくできないのですが。。。
ほんとうに初心者ですいません。

》 p = load(''filename.txt');

??? エラー: ==> load
result5.txt: Can't open file.




133 :デフォルトの名無しさん:04/12/12 15:24:22
>>129

>> help fopen
>> help fread

134 :デフォルトの名無しさん:04/12/12 15:24:53
>> help fscanf

135 :デフォルトの名無しさん:04/12/12 15:43:22
>> help 2ch



136 :choix ◆pnCm4bpG3Y :04/12/13 09:05:35
グラフ書きたいだけだったらMatlabじゃなくてExcelとかを
使ってもいいんじゃないでしょうか?

137 :デフォルトの名無しさん:04/12/13 15:55:57
excelはデータの個数制限がきつすぎる

138 :choix ◆pnCm4bpG3Y :04/12/13 21:11:27
そうでしたか。
了解しました。

139 :デフォルトの名無しさん:04/12/14 22:50:00
MATLABでFM信号を作ると、複素数の値で出てきます。
それを教授に言ったら、「複素数なんて、実際の通信ではありえない」と
怒られました。
複素数の信号から実際の使われている値に変換することって出来ませんか?
論文の提出期限まで時間がないので、かなりビンチですぅ

140 :デフォルトの名無しさん:04/12/14 23:15:53

wwヘ√レvv〜(゚∀゚)─wwヘ√レvv〜─ !!!

141 :デフォルトの名無しさん:04/12/15 02:19:32
質問させてください
bitmap 2階調でデータを保存したいのですが、

imwrite( data, gray, 'savename', 'BMP' ); %%(データは0~64の整数値)

とすれば、一応RGBで保存してくれるのですが・・・・。
白黒で良いので0or1の2階調で保存したいのです。

いいアイデアあれば教えてください。


>>139
時間領域の信号に複素数はありえないよ。
周波数領域なんでしょ、FM変調なんだし。
教授が怒るのも分かる気がする。


142 :choix ◆pnCm4bpG3Y :04/12/15 04:07:25
>>139
複素数から実数にするには一般的には
「実数成分だけ取ってくる real(x)」とか
「振幅だけ取ってくる abs(x)」とかを使いますが、
それは「実際に使われている値」に変換する方法ではありません。

そもそもFM変調の仕方がおかしいような気がしますので、
その部分を見直した方が良いでしょう。

143 :choix ◆pnCm4bpG3Y :04/12/15 04:11:13
ディザにする必要がなければ
bw = data > 128;
などとやってムリヤリ0と1に変換してしまうのが手っ取り早いかと思います。

144 :choix ◆pnCm4bpG3Y :04/12/15 04:21:36
レス番付けるの忘れました。
>>143>>141 への答えでした。

>>139 なんですが、Signal Processing Toolboxには以下の
FM変調コマンドがあります。
y = modulate(x, Fc, Fs, 'fm');
入力であるxが実数であれば出力yも実数値が出てくるはずです。
139さんの用途にあうかどうか分かりませんが、試してみてください。

145 :choix ◆pnCm4bpG3Y :04/12/15 04:26:20
>>143
たびたびすみません。
X = dither(I);
というコマンドがImage Processing Toolboxにありました。
もし白黒2値化にディザが必要であればチェックしてみてください。

146 :ken:04/12/15 17:11:02
MATLABで指紋認識のプログラムを作って卒業研究にしたいとおもいます。
全く二値化のあたりからわからないです。だれかアドバイスください。


147 :139:04/12/15 19:05:53
>142,143,144
レスありがとうございます。
今から、試してみます。


148 :デフォルトの名無しさん:04/12/15 19:31:59
>>146
灰色にして、どこかで切ればいいんじゃないの?

149 :139:04/12/15 19:33:24
>144さんへ
今、教えられたようにy = modulate(x, Fc, Fs, 'fm',kf);
をhelpで調べ、使うと思っているんですが、
xには一般的ににどのような実数を入れれば良いのでしょうか?

試しに、xにsin関数の値を入れて実行しましたが、、、。
質問ばかりでごめんなさい。
でも、本当に感謝しています。

150 :139:04/12/15 20:54:35
>144さんへ
今、FM信号とAM信号を生成し、シミュレーションしました。
良いと思われる結果が出ました。
これからFM,AM信号の他に、PSK信号やFSK信号も作りたい思います。
また、何かありましたらよろしくお願いします!

151 :choix ◆pnCm4bpG3Y :04/12/15 22:37:49
>>149-150
解決できたんですね、良かったです。

152 :choix ◆pnCm4bpG3Y :04/12/15 22:41:16
>>146
画像の二値化の簡単な方法は >>143 >>145 に。
>>148 の「どこかで切る」の切る場所が知りたければ
大津先生の方法とかが参考になるかも。
理解するには統計知識もちょっと必要になったりします。

153 :デフォルトの名無しさん:04/12/15 23:57:30
>>143 >>144 有難うございます。

2値化は既に出来ているんです。(ディザにする必要はないです)。

0と1の値からなる行列データを白黒(2bit)ビットマップとして保存したいのです。
iwriteでは無理なのでしょうか。HELPみてもそこいらへんについて書いていなかったので・・・。
なにか良い方法があるのでしょうか



154 :デフォルトの名無しさん:04/12/16 00:26:49
超初心者ですが、
aとnは任意変数で、
aのn 乗根を計算するコマンドがないのですか?
sqrt(n)しかしらないので。

155 :デフォルトの名無しさん:04/12/16 00:28:48
>>154
a^n

156 :154:04/12/16 00:47:49
いや、n√a=?みたいのコマンドを聞きたいのです。

157 :デフォルトの名無しさん:04/12/16 01:03:02
a^(1/n)

158 :154:04/12/16 01:33:17
うわ、こんな簡単だったなんて…
どうもです、吊ってきます。

159 :choix ◆pnCm4bpG3Y :04/12/16 02:33:23
>>153
imwriteに'BitDepth'パラメータを指定することで
1ビットの白黒データにできますよ。
もしくはTRUE/FALSEデータをimwriteに
突っ込めば勝手に白黒だと認識してくれます。
ただ、PNG、BMP、TIFFくらいしか1ビットには対応してない気がします。

160 :choix ◆pnCm4bpG3Y :04/12/16 02:35:01
具体的には
 imwrite(IMG, 'hoge', 'png', 'BitDepth', 1);
です。

161 :デフォルトの名無しさん:04/12/16 08:34:47
>>160
ご丁寧に有難うございます。
試してみます。

162 :デフォルトの名無しさん:04/12/16 18:00:21
スピーカーからでている音の伝播をを可視化するような
シミュレーションのサンプルってありませんかね?
たとえば、1kHz正弦波をだした時の音圧の濃密がカラーで
わかるような。


163 :デフォルトの名無しさん:04/12/16 18:11:37
>>160
やってみました。

imwrite( kami, savename, 'bmp', 'BitDepth', 1 );

これだと、

?? エラー: ==> c:/matlab6p5/toolbox/matlab/iofun/private/writebmp
入力引数が多すぎます

エラー: ==> C:\MATLAB6p5\toolbox\matlab\iofun\imwrite.m
行番号: 310 ==> feval(fmt_s.write, data, map, filename, paramPairs{:});

エラー: ==> C:\MATLAB6p5\work\func2bmp3.m
行番号: 67 ==>imwrite( kami, savename, 'bmp', 'BitDepth', 1 );

と怒られます。bmpをpngにするとうまくいきます。
うーん、bmpはだめなのか・・・。
ちなみにバージョンは6.5(R13)です。
ImageProcessingToolboxは持っていません。
SignalProcessingToolboxはあります。

164 :デフォルトの名無しさん:04/12/16 18:17:53
質問させてください。
256点の領域に60点放して等強度(強度1)のスペクトルを仮定し、(その他のデータ点は0)これを@、
これとは別に129点の真ん中にスプレッドの中心がくるような全面積1のラインスプレッド関数を
つくります。これをA
 この二つをコンボリューションした後をBとします。

これをそれぞれフーリエ変換するとB=A*@が成り立つので、@=B÷Aにして逆フーリエ変換
したのですが、グラフが正しく出てこず、ためしに絶対値表示にしたらうまく元の@の図が出てきました。

絶対値表示にしなければいけなかった理由を教えてください。スペクトルは波の強さを表す必要が
あるからですか??
よろしくお願いします。

165 :デフォルトの名無しさん:04/12/16 18:21:49
>>164
fftをN点で行ったら値はN倍されて算出されるので、N割りしないといけないから。

166 :デフォルトの名無しさん:04/12/16 19:01:14
>>165
ありがとうございます。
でも、勉強不測のためわからんかったっす。
高速フーリエ変換と離散的フーリエ変換を勉強すれば上記のことはわかりますか?

167 :デフォルトの名無しさん:04/12/16 19:23:37
>>166
分かると思います。
2次元信号ではなく1次元信号で確かめてみてはいかが?
簡単にN倍されていることが分かるはず。


168 :choix ◆pnCm4bpG3Y :04/12/16 23:49:09
>>163
PNGでは試したんですが、BMPでは試してなかったのがバレバレですね。
すみませんでした。
>>159 で書いた別の方法(TRUE/FALSEを使う)だとうまくいきました。
以下の文ではlogical()を使って0と1だけが含まれているAをT/Fに変換しています。

imwrite(logical(A), 'test.bmp', 'bmp');

169 :139:04/12/17 00:14:05
y=modulate(x,Fc,Fs,'pm')
を使い、4-PSK信号を作るにはどうした良いですか!?

170 :choix ◆pnCm4bpG3Y :04/12/17 01:57:28
PSKはCommunication Toolboxに含まれている
dmodceを使うのがラクでしょう。

171 :choix ◆pnCm4bpG3Y :04/12/17 02:00:49
そういえばdmodというのもありました。
用途に合わせてどうぞ。

172 :ken:04/12/17 14:30:24
誰か卒論やってー

173 :デフォルトの名無しさん:04/12/17 14:38:58
>>172
カネはいくら出すんだ?

174 :139:04/12/17 17:58:05
>171さん
どうもです!
さっそく,自宅に帰り次第試してみます.

175 :ビギナー:04/12/18 04:15:55
はじめまして。今、学校でマトラボのプログラミングを習っています。二進数同士の足算で+などの記号を使わずにプログラムを作りたいのですが、(コンピュータに規則を学習させてプラスと言う事柄を理解させるには?)どうやってよいか分かりません・・・
例えば十進数を二進数に直すときは
clear;close all
input1=[
1
2
3
4
5
6
7
];
target1=[
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
];
p=input1';
t=target1';
net=newff(minmax(p),[5,3],{'logsig','purelin'});
net.trainParam.epochs=500;
net.trainParam.lr=0.1;
net=train(net,p,t);
a=sim(net,p)
といった感じなんですけれど、こんな感じのをベースにして、足算をさせるにはどうするのでしょうか?
どうしても分からないので、教えていただけたら幸いです。


176 :デフォルトの名無しさん:04/12/18 09:27:18
2=1+1だけ定義して
3=2+1=(1+1)+1
4=3+1=((1+1)+1)+1


177 :デフォルトの名無しさん:04/12/18 09:37:28
理論は分かるけどMatlabでの実現方法が分からない、
っていうんだったらこのスレでいいけど、理論のことはスレ違い。
卒論や宿題のお手伝いスレじゃないぞ。

178 :デフォルトの名無しさん:04/12/20 11:52:16
>>168
返事が遅くなりすみません。
早速、行列をlogicalに変換してやってみます。


179 :デフォルトの名無しさん:04/12/20 23:57:47
>>178
出来ました。
有難うございました。

180 :デフォルトの名無しさん:04/12/25 16:33:41
matlabで2次元のグラフを回転させて3次元のグラフにすることは可能でしょうか?

具体的に言うと3次元でのグラフがz軸で対象なためとりあえず2次元で解いて
それをz軸において回転させて三次元のプロットにできたらいいなと思ってます。

世の中そんなに甘くないのでしょうか?;;

181 :180:04/12/25 16:40:35
上に補足ですがデータはmatrix(二次元)になってます。

182 :デフォルトの名無しさん:04/12/25 21:13:30
3次元で最初からプロットしたら?

183 :デフォルトの名無しさん:04/12/25 23:08:37
>>180
help mesh


184 :180:04/12/26 09:53:43
>182三次元で式を解くことができないんですよ・・楕円関数を含んでるので、
>183 meshじゃちょっと違うんです。X(i,j) とZ(i,j)があってそれをstreamsliceで
vector fieldでplotしてるんですよ。今は二次元なんですが、matrixを三次元にする
というよりは二次元(i,j)を回転させて三次元のplotにしたいだけで。。

いろいろやってみましたが唯一できるかなって思ったのはX(i,j)とZ(i,j)をcylindrical
coordinateと考えてthetaをいれてそれをpol2cartでかーてじあんに変換してplotかなって。。

どうでしょうか?わかりずらい文章ですいません。。

185 :デフォルトの名無しさん:04/12/26 12:52:15
>>184
古いバージョンのマニュアルに出ていた例ですが、z軸からの距離をrで表し、
二次元の関数をZ=f(r)=sin(r)/rとします。
x, yともに-8から+8までの範囲を描くとすれば
[X,Y] = meshgrid(-8:.5:8);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;
mesh(Z);
これでf(r)=sin(r)/rをz軸中心に回転させた図形が描けます。


186 :180:04/12/26 14:14:31
> 185さん
なるほど、その方法参考にしてどうにか当てはめてみようと考えましたが、
私の場合はFx=f(x,y,z)、Fy=f(x,y,z)、Fz=f(x,y,z)のvector fieldをplotしたいんです;;
それでもってFx=FyなのでFx=Fr=f(x,z)、Fz=f(x,z)で解いてz軸に回転させたvectorfieldを
plotできるかなーって思ってました。

185さんの意見を参考に考えぬいてFrにcos(theta)をかけてFxとし、sin(theta)をかけて
Fyとしておいてみました。これでFx= f(x,z,theta)、Fy= f(x,z,theta)、Fz= f(x,z,theta)と
一応三次元にしてみたものの、、自分でよくわからなくなりました。(汗

もうちょっと考えて見ます。
アドバイスありがとうございます。

187 :デフォルトの名無しさん:04/12/27 11:23:30
重み付けした確率を求めたいのですが、求まりません。
どなたかお願いします!

例えば1〜5の数があるとして、
1のでる確率が0.3、5のでる確率が0.1
といった感じにしたいのですが…。

詳しい方、アルゴリズムだけでもいいのでお願いします。

188 :choix ◆pnCm4bpG3Y :04/12/27 11:36:56
>>187
その簡単な例を実現するだけであれば
a = rand(1,1);
switch(a)
 case a<0.3
  %確率0.3 [0.0, 0.3)
  b = 1;
 case a<0.4 [0.3, 0.4)
  %確率0.1
  b = 2;
 case a<1.0 [0.4, 1.0)
  %確率0.6
  b = 3;
end
みたいにできますが、もっと複雑な乱数生成がしたいのであればStatistics Toolboxに含まれているrandom関数を調べてみましょう。

189 :choix ◆pnCm4bpG3Y :04/12/27 11:38:24
(上のプログラムでcase文のところにある[...) の位置は、その一行下のコメント内に移動して考えてください。)

190 :デフォルトの名無しさん:04/12/27 12:07:15
丁寧なアドバイスありがとうございます。
もう少し複雑に乱数を生成したいのでrandom関数をいじってみます。

191 :デフォルトの名無しさん:04/12/28 21:12:21
matlabどころかプログラム自体初心者で申し訳ないのですが…

matlab用の実験toolboxを使って心理実験等を作って、それをWeb上で動かして
より多くの人のデータを取りたいと思っているのですが、可能でしょうか?
基本的な作業の流れ等、教えていただければうれしいです。

192 :デフォルトの名無しさん:04/12/29 01:52:41
>>191
CGIは書けますか?できればC言語で。

それができるならばUNIX用 or Linux用のMatlabでは可能だと思います。
インターフェイス部分はWebでは利用できないでしょうが、エンジン部分なら
使えそう。

>matlab用の実験toolboxを使って心理実験等を作って
ここを詳しく書かないと有用な情報を得るのは難しいでしょ…


193 :choix ◆pnCm4bpG3Y :04/12/29 02:39:37
自分は音響心理実験をMatlabのGUIでやってますが、実際にPCの前でヘッドホンをしてもらう、というのが中心で、Web版の経験はないです。
でも、WebであればCGIをPHPやPerlで作ってしまって、集めたデータ処理だけをMatlabで行う方が簡単だと思いますよ。
どうしてもWeb上でGUIを使いたいのであれば、JavaアプレットかFlashを使わないといけませんね。

194 :デフォルトの名無しさん:04/12/29 02:53:34
>>139
> MATLABでFM信号を作ると、複素数の値で出てきます。
> それを教授に言ったら、「複素数なんて、実際の通信ではありえない」と
> 怒られました。
> 複素数の信号から実際の使われている値に変換することって出来ませんか?
> 論文の提出期限まで時間がないので、かなりビンチですぅ

いいよ、そのまま論文出しちまえ。
そんなことを言う教授は戒めのつもりで言っているつもりなんだろうが
今の時代にその教授の学生に対するやり方、態度は時代遅れで通用しない。
「複素数なんて、実際の通信ではありえない」
なんて言ってきたら
「だから何だってんだ? あんたは何が言いたいんだ?全然意味がわからん。
先生が何を言っているのか先生が何を考えているのか全くわからん。
先生が何のためにそんなことを言っているのかわからん。」
と言ってやれ。教官によってはかなりへこむぞ。

わからねえならとりあえずabs()で絶対値をとっちまえ。
それでも教授が文句をいうなら
「先生の指導能力が悪く、先生の意図していること、
目的がわからず時間がないのでこうさせてもらいました。」
とでも言っておけ。

195 :デフォルトの名無しさん:04/12/29 02:57:14
>>193
> 自分は音響心理実験をMatlabのGUIでやってますが、実際にPCの前でヘッドホンをしてもらう、というのが中心で、Web版の経験はないです。
MatLabでいちいちGUIとはおめでたい。

> でも、WebであればCGIをPHPやPerlで作ってしまって、集めたデータ処理だけをMatlabで行う方が簡単だと思いますよ。
> どうしてもWeb上でGUIを使いたいのであれば、JavaアプレットかFlashを使わないといけませんね。
いまどきJava Appletなんかつかわねえよ。
これからはリッチクライアントたる Java Web Startの時代だ。

そもそも、CGIやPHPといったサーバサイドを意識しているなら
そこでクライアントサイド専用のJava AppletやFlashを持ち出すのは
何か不釣り合いだ。Servlet/JSPを忘れてないか?


196 :デフォルトの名無しさん:04/12/29 03:10:51
>>192
> >>191
> CGIは書けますか?できればC言語で。

なぜのろまなCGIや時代遅れなC言語に拘るのか理解できんな。

CではなくPerlやPHPやServlet使えば何だって可能だぞ。
MatLabの出力結果をサーバサイド言語に入力して
Webに出力すればいいだけなんだからよ。


そもそも>>191が目指しているWeb上で動かすものとやらが
どの程度もものなんだかな。
サーバ側にあるプログラムをクライアント側に
ダウンロードしてから実行する程度のものならCGIもServletも不要なんだがな。
HTMLとあまりかわらんな。そこでAppletやらFlashやらJavaWebStartやら
ドトネトのノータッチデプロイメントやらが出てくるわけだが。

サーバ側で処理してから結果をクライアント側に返す程度だけの場合も
いまいちだな。

サーバ側で計算しクライアント側に応答を送るだけでなく
クライアントからサーバにリクエストを送信する場合のときのみ
CGIやPHP, JavaServletやJava RMI
といったサーバサイドテクノロジが必要だ。

サーバ側にServlet、クライアント側にAppletという組み合わせで動く
システムもあるがな。
Flashをサーバサイドと連携する場合はFlash RemotingMXなんてものを
使う手もある。ColdFusionというものも使う手もありだ。

197 :choix ◆pnCm4bpG3Y :04/12/29 03:19:34
>>195
質問者のことを理解していない低俗な煽りですが、とりあえずマジレスしておきます。

>MatLabでいちいちGUIとはおめでたい。

Matlabを使えば複数言語を覚える必要なく、実験からデータ処理まで一貫して行えるので便利です。
特に心理実験では一回実験をやったら用無しになるものが多く、販売用アプリケーションを作るわけでもないので、思ったものが素早く作れるMatlabが自分にとっては最適です。

>いまどきJava Appletなんかつかわねえよ。
>これからはリッチクライアントたる Java Web Startの時代だ。

JWSも十分理解していますよ。でもアプレットの方が現在でも情報が入手しやすいのでおすすめしただけです。

>そもそも、CGIやPHPといったサーバサイドを意識しているなら
>そこでクライアントサイド専用のJava AppletやFlashを持ち出すのは
>何か不釣り合いだ。Servlet/JSPを忘れてないか?

サーバーだのクライアントだの技術面で切り分けるのではなく、実験者と被験者にとって最適なものを提案したいだけです。
Java系のSEをやっていたこともありますので、そういった技術も十分に承知していますが、
ServletやJSPだとリッチクライアントがまだ作れない上に、プログラムもCGIに比べて大規模になりがちです。
また、理解すべきことが多すぎますので、プログラミング初心者だという>191さんには向かないと思いました。

198 :デフォルトの名無しさん:04/12/29 04:18:36
だからそのCGIというのは何かおかしいぞ。
CGIが言語だと勘違いしていないか?

いまどきServletやJSPが難しいって、いつの時代の人間なんだが。
本当にリッチクライアントの意味わかって言ってるのか?
StrutsもJSFもTapestryもVelocityもXDocletも知らないのか。
これらを使いこなせば大規模に見えるJava開発もCGIよりも簡単に
なるわけだが。


199 :デフォルトの名無しさん:04/12/29 04:20:23
あんたのほうが低俗な煽り。
質問者のことを理解していないという以前に
質問者の質問がアホ過ぎるほうが低俗。


200 :choix ◆pnCm4bpG3Y :04/12/29 08:35:57
>>198-199
自分はJava言語が一番のお気に入りですし、Webサービス系の仕事をしていました。
StrutsなどのMVCフレームワークやO/RマッピングのためのフレームワークもSEをやっていたときに使いましたし、様々な技術に関してフィージビリティ・スタディのための調査もしました。
その経験からもServletやJSPが初心者にとって難しいのは事実だと思っています。

少なくとも質問者は、Webプログラムの書き方をマスターしたいのではなく、効率のよい実験をしたいだけのように思えますし、
Javaのサーバーサイド技術に関してはMatlabスレで議論する内容じゃないでしょう? 他のところでやりませんか?

201 :デフォルトの名無しさん:04/12/29 08:54:13
191です。御返事ありがとうございます。
やりたい実験の内容を書いていないとしょうがなかったですね。

とりあえずMatlabに慣れようと思って、簡単な刺激提示(文字/絵)→キーを押すまでの
反応時間の計測という程度の実験(ストループ実験のような)を作ってみようかなと思った次第です。
そこで、それがなるべくウェブを通じて多くの人にやってもらえる方法はないかなと、
いう質問でした。

皆さんにとっては大分しようもない質問だと思いますが、なにぶん私が全くの門外漢なもので、宜しくお願いします。


202 :デフォルトの名無しさん:04/12/29 09:52:25
>>200
とにかく藻前はCGIが言語だと勘違いしている時点で(ry

203 :デフォルトの名無しさん:04/12/29 09:54:16
>>201
ただの体感ソフトを作りたいだけなら
CGIもServletもいらんな。

Webを通して他人に使って貰いさらに
そこからデータを取得したいなら
多少のサーバサイド技術を使うが。

204 :choix ◆pnCm4bpG3Y :04/12/29 10:10:23
>>201
Matlabを使うのであれば、オフラインで(被験者にPCの前に座ってもらって)行うようなプログラムがいいと思います。
また、オンラインで行いたいのであれば、Java Applet、Java Web Start、Flashなど、リアルタイム性のあるクライアントで動作するものがいいでしょう。計測結果はプログラムがメールで発送するようにすれば、サーバーを用意する必要もありません。

どうしても何らかのかたちでMatlabを使い、かつオンラインで行いたい場合、Matlab Web Server (http://www.mathworks.com/products/webserver/
) を導入し、リアルタイム性のあるクライアント・ソフトと組み合わせるという手もありますが、むりやり難しい解決法を選ぶ必要もないでしょう。


205 :choix ◆pnCm4bpG3Y :04/12/29 10:12:11
>>202
CGIをプログラミング言語だなんて言った覚えはありません。
そう読み取れる文章を書いたこともないはずです。
ツッコミを入れる時はちゃんと文章を読んでからにしてもらいたいです。

206 :デフォルトの名無しさん:04/12/29 10:21:05
>>201
ところでプラットフォームは何?

207 :デフォルトの名無しさん:04/12/29 11:34:08
>>204はJavaWebStartをとってつけたように今覚えたばかり臭いですなw

208 :デフォルトの名無しさん:04/12/29 11:35:11
>>205
だったら誤解されないよう文章を書くこった。
誰もが自分と同じ考え方を持っていると勘違いしないようになw

209 :デフォルトの名無しさん:04/12/29 11:36:50
>>204
> 計測結果はプログラムがメールで発送するようにすれば、サーバーを用意する必要もありません。
sendmailはどうやって動かすんだい?


210 :デフォルトの名無しさん:04/12/29 11:40:32
>>205
もう一度自分の文を読み返してみ。

> でも、WebであればCGIをPHPやPerlで作ってしまって

これはチミがPHPのことをろくにわかってない証拠になるものですな。

これで「自分の思い通り読みとれ」などとよく言えますな。
こういうのを厚顔無恥というのですよ。

211 :デフォルトの名無しさん:04/12/29 11:54:16
choix ◆pnCm4bpG3Y は本当にSEをやっていたのか?
SEらしくない発言が目立つのだが。
顧客と交渉する能力もたいしたことなさそうだし

212 :choix ◆pnCm4bpG3Y :04/12/29 12:47:12
もしかしたら自分はあなたよりもサーバーサイド・プログラミングの経験は浅いかもしれません。
仕事で使ったのはJavaのサーバーおよびクライアントが中心で、PHPでは小規模システムしか作ったことはないですし、何十年もSEをやったわけでもありませんから。
でも、この場を荒らすようなことはしたくないというのを理解してもらえませんか? さっきも書きましたが、Javaの話はスレ違いですし。

213 :デフォルトの名無しさん:04/12/29 12:57:18
pnCm4bpG3Y は学生時代の癖が抜け切れていないと見た。
多分、自分が偉いと勘違いしてるおぼっちゃま君なんだろう。



214 :デフォルトの名無しさん:04/12/29 13:14:25
>>213
俺はえらぞ

215 :デフォルトの名無しさん:04/12/29 14:29:57
>>212
じゃあPHPの話もスレ違いだな坊主

216 :デフォルトの名無しさん:04/12/29 15:26:49
>>204
なるほど、よくわかりました。
そうですね、Matlab練習用にと考えていたので、とりあえずオフラインの実験で
やってみようかと思います。Javaの方も少し考えてみます。
アドバイスありがとうございました。

217 :デフォルトの名無しさん:04/12/29 15:36:35
>>216
MATLABは金がかかるからなあ。
気をつけることだよ。

いろいろやりたいことがあるなら
自前でサーバ構築くらいできるようになっとけ。



218 :デフォルトの名無しさん:04/12/29 22:49:04
キモいよ

219 :デフォルトの名無しさん:05/01/04 13:28:37
MATLABに使われているJavaはヤヴァイJavaだからなー。
Mが作ったあの穴だらけの古いJavaでさ。

220 :choix ◆pnCm4bpG3Y :05/01/04 19:30:01
でも、Unix、Linux、Mac OS X版だと、
それとは違うJava VM使ってますね。

221 :助けてください:05/01/05 00:50:53
今MATLABでむだ時間を含むスライディングモード制御のシミュレーション
しているのですが何かお勧めのコマンドとかありますか?教えてください(>_<)
それとMATLABコマンドのODEでのメインファイルとサブファイル(関数ファイル)
のやり取りは具体的にどのように計算されているのかについても教えていただきたいです。
お願いします。



222 :choix ◆pnCm4bpG3Y :05/01/08 08:04:35
ちょっと質問の意味が分かりにくかったので、
申し訳ないのですが、こっちから質問させてください。
微分方程式の数値解析的な計算方法が知りたいのでしょうか?
それとも対象関数との間の値の受け渡し方法が知りたいのでしょうか?

#スライディングモードに関しては無知なので
#力になれそうにありません。

223 :助けてください:05/01/09 14:58:27
対象関数との間の値の受け渡し方法について知りたいです。
ode45を使っているのですが、これを使うときにメインファイルとサブ関数ファイル
を使う必要があり、実際にシミュレーションできたのですが、この2つのファイルが
どのようにして受け渡しされているか教えてください。お願いします。

224 :choix ◆pnCm4bpG3Y :05/01/10 02:01:11
ode45を呼び出すときに第一引数として自分の定義した関数を与えますが、
関数名の先頭に@マークをつけて引き渡されるので、ハンドラとして扱われます。
ode45内ではfevalでその関数が処理されます。
fevalはハンドラとして与えられた関数を実行するための命令です。

一言で言えば、ハンドラを使って関数そのものを受け渡し、fevalを使って呼び出す、ということをしているわけです。

225 :助けて:05/01/10 02:37:29
ありがとうございます。実際に関数名に@マークをつけていろいろ試したのです
がエラーが出ます。使っているMATLABがVer5.1なので…。
私が勘違いしているのかもしれません。。
ode45というコマンドがこれらの行為を自動で行っているのですか?

226 :choix ◆pnCm4bpG3Y :05/01/10 09:08:03
ode45の内部でfevalが使われていますので、
自動で行なわれる、という言い方でいいと思います。
ただ、ODEの計算可能性は定義域や初期値などに左右されますし、
ode45(ルンゲ・クッタ法)で解けない微分方程式の種類もあります。


227 :助けて:05/01/10 10:59:18
そうだったんですか〜!勉強になります。今やっているのはode45で扱える
微分方程式で初期値や許容範囲も大丈夫です。
ode45の内部で関数がfevalによって処理されていることを確認するためには
どうすればいいでしょうか?   ちなみにMATLABはVer6.5にしました。

228 :choix ◆pnCm4bpG3Y :05/01/10 15:19:14
ぱっと思いつく方法だと、
自分で定義した関数の中にdisp命令を入れておく
というのがあります。

function dydt = myfunc(t,y)
dydt = hogehogehoge.....;
disp("myfunc executed");
disp(["y = " num2str(y)]);
disp(["t = " num2str(t)]);
disp(["dydt = " num2str(dydt)]);

のようなかんじにすると引数や戻り値なども表示できます。

229 :助けて:05/01/10 16:16:45
ありがとうございます。もう一つ気になることがあるのですが、ode45での計算
時間を0秒から3秒で0.1秒刻みでシミュレーションしたのですが、関数ファイル
がode45に読み込まれた回数が半端じゃなく多いのはどうしてなんでしょうか?
いろいろと聞いてしまってすみません。。

230 :choix ◆pnCm4bpG3Y :05/01/10 22:14:08
微分方程式を一回だけ解くのに何度も関数を使用しないといけないので、
何度もfeval関数を使って違ったtとyの組み合わせを計算させているのです。
ここらへんはode45のもとになっているルンゲ・クッタ法の
教科書を読み返していただけると理解が早いと思います。
学部生のときに課題でやらされましたが、
手で計算してみるとかなり大変なのが身にしみて分かります ;-)

231 :助けて:05/01/11 01:19:22
そうだったんですか〜!!ルンゲ・クッタ法は嫌になるほど凄い計算量ですもんね。
[t,y]=ode45('関数名',tspan,初期X) でode45が何度もfeval関数を使い異なる組み合わせ値を[t,y]に返しているということですね。ode45で実際は凄い小さい時間刻みで計算
されているけど、例えばtの刻み幅を0.1に指定してt=[0,0.1,0.2,0.3,…]とするときにはそれぞれの時間tのときの状態yを返しているのですよね?
t=0.1ではt=[0.0098,0.101,0.110,…]のような値(状態値)を近似しているのですか?


232 :デフォルトの名無しさん:05/01/11 11:12:11
すんません。
Simulink を使用しているのですが、途中でフレームサイズを変更することは
出来ますでしょうか?
モデルは以下のようになっています ( 簡略化してます )
Ramdom Signal Generator => Block1 => Scope
ここで、Random Signal はフレームサイズ 2048 で出力するのですが
Block1 はフレームサイズ 1024 しか受付ません。
そこで Block1 の前に何かブロックを挿入して
1. 2048 のフレームを 1024 にする
2. 1024 ずつ Block1 に渡す
3. Block1 の後で 1024 のフレームを結合して 2048 にする
ということをしたいと思っております。

こういう事はできますでしょうか?
よろしくお願いいたします。


233 :デフォルトの名無しさん:05/01/11 12:08:30
>>232
自己レスです。DSP Blockset の buffer を使うことでフレームサイズの
分割と結合は出来ましたが、今度は必ず最初に値が 0 のフレームが負荷される
ようになってしまいました。
この 0 フレームが付かないようにするにはどうするのでしょうか?


234 :choix ◆pnCm4bpG3Y :05/01/13 02:34:14
>>231
>されているけど、例えばtの刻み幅を0.1に指定してt=[0,0.1,0.2,0.3,…]とするときにはそれぞれの時間tのときの状態yを返しているのですよね?

そうですね。

>t=0.1ではt=[0.0098,0.101,0.110,…]のような値(状態値)を近似しているのですか?

数値解析的な解き方をしているので、ある程度の近似はしているでしょうが、ode45内部でどの状態値で近似しているのかはわかりません。
詳しく知るためにはソースコードを読むしかないでしょう。

235 :デフォルトの名無しさん:05/01/13 18:17:21
通信をブロック図でやっているのですが結果が複素数で出てきてしまいます。
どうにか実数で出力することは出来ませんか?
このままだと卒業できない・・・

236 :助けて:05/01/17 17:40:53
そうですか〜。
わかりました。本当にいろいろありがとうございました。
また何かあればよろしくお願いします。

237 :デフォルトの名無しさん:05/01/18 17:49:21
SimLink、ブロック図のレス見て思い出したんだけど、
MATLABでUMLを使えるプラグインないかな。


238 :デフォルトの名無しさん:05/01/20 11:31:29
いいスレだったんだがサーバーサイド厨の荒氏が来てからさっぱりだな

239 :助けてください・・・・:05/01/21 12:03:52
はじめまして。
とある大学生です。
自分は今卒論でMATLAB使ってるんですが、
いかんせんプログラムが苦手で困ってます。
どれくらい困ってるかと言うと、
就職決まってるのに卒研のせいでダブる危機があるくらい、
リアルにピンチです。
そこの教授も放置プレーなので、何も教えてくれません。
本当に聞いても自分で調べてくださいっと言われます。
締め切りまで2週間もないのですが、もし力を貸してくれるなら、
七世代まで神として祭り上げます。
と他力本願な俺ですね・・・叩いてもらってもいいです。すいません。
しかし、就職したいのです。だれか力を貸していただけませんか?



2-D画像に離散ウェーブレット変換をかけて例えばsをa1、d1に分解し、
さらにa1をa2,d2に分解、さらにa2をa3,d3・・・
といった具合に分解していって、sとa1〜anをそれぞれ2乗平均して、
その値にLogをかけて縦軸をlog aとこ軸を2の階上として、グラフを作り、
その傾きを求めるというプログラムを作成しろとの事なのですが、
自分には何がなにやらさっぱりわかりません。
できればプログラム作っていただく、もしくは作り方を教えていただけませんでしょうか??おねがいします。




240 :デフォルトの名無しさん:05/01/21 12:11:31
留年しろ。就職しても給料泥棒なだけだ。


241 :デフォルトの名無しさん:05/01/21 12:14:45
>>239
おい、何も教えてくれない先生なんておかしいだろ。
授業料返してもらえ。

242 :デフォルトの名無しさん:05/01/21 14:58:20
教授がMATLABの使い方知ってるとは限らんのでな
MATLAB使ってる院生に聞け。

243 :デフォルトの名無しさん:05/01/21 15:15:46
「〜というプログラムを作成しろ」なんてとこまで
具体的にお題を与えられないとできないんじゃ、
いいとこ実験レベル。とても卒業研究とは言えまいに。

しかもそのお題の持つ意味すらわからないのでは……。
素直に留年しなさい。


244 :デフォルトの名無しさん:05/01/21 15:40:25
寺町にないのはたこ焼屋とフランクフルト屋と回転焼き屋だ。

245 :choix ◆pnCm4bpG3Y :05/01/21 19:28:55
>>239
卒業研究なんだから、それなりに基礎知識をつけているはずです。もしwaveletの「s」「a?」「d?」ですら意味が分からないのであれば、他の方々がおっしゃるように、もう一年しっかり勉強した方がいいでしょう。

後半部分に書かれているプログラムは、画像処理系の研究で10年ほど前から行なわれているのを見たことがありますし、IEEEをあたれば類似の手法はたくさん出てきますので、それらの論文も読んでみましょう。


246 :デフォルトの名無しさん:05/01/21 20:38:53
HigherOrderStatisticsToolbox使ってる人いませんか?

247 :デフォルトの名無しさん:05/01/21 23:28:53
>>239
>2-D画像に離散ウェーブレット変換をかけて(以下略)

すげえ。ここまで親切に教えてくれる教授なんて、信じられん。
ちょっと甘やかしすぎではないか?

248 :デフォルトの名無しさん:05/01/22 03:20:20
ちょっと話がずれているついでに.
最近は卒研内容を「習っていません(だからできなくても問題ない)」なんて後輩もいるんだな.

なんで研究室配属を許可しちゃっただろ(というか演習や実験の単位をあげたんだろう)…

249 :まと:05/01/23 13:30:38
こんちは
質問です。
ファイル名を絶対パスで取ってきているのですが、
¥が入ってなかなか使いづらいのですが、最後のファイル名だけ
取るのにはどうしたらよいでしょうか???
絶対パスでとってくるGUIを手に入れたので便利だなと
思っていたら落とし穴です。
それを使ってファイル名を作れなくなった次第です。
どなたか。お助けを。

250 :デフォルトの名無しさん:05/01/23 23:00:28
>>249
help fileparts fullfile

251 :デフォルトの名無しさん:05/01/23 23:17:50
MATLABでGUIプログラミングをしていますが,handles構造体の使い方がいまいちわかりません.
やりたいことは,多数のファイルに対して一括処理を施したいだけなのですが...作った関数は下記の通りです.

1. DataLoad_Callback():データ読み込み関数
2. DataProcessing_Callback():データ処理関数
3. BatchProcess_Callback():バッチ処理関数

3の関数をメインとして,1,2の順に呼び出して処理を行うものです.
1で読み込まれたデータは,handles構造体に格納して,2の処理関数へと渡されます.
しかし,1で格納したデータに2の関数からアクセスできません(2の関数に入った時点で,handles構造体に格納したデータは消えている).

ソースは単純化していますが,次のようなものです.
#改行が多いので,分割します.
なぜこのようなことが起こるのか教えて頂けないでしょうか?

252 :デフォルトの名無しさん:05/01/23 23:19:14
ソースです.

% データ読み込み
function DataLoad_Callback(hObject, eventdata, handles)
data = load('****.***');
handles.data = data;
guidata(hObject, handles);

% データの処理
function DataProcessing_Callback(hObject, eventdata, handles)
% この部分でhandles.dataは空となっておりエラーが発生する
data = handles.data;
処理部分(省略),結果をファイルに保存

% バッチ処理
function BatchProcess_Callback(hObject, eventdata, handles)

% こんな感じで複数のファイルを読み込み,処理をしたい
filename(1,:) = 'D:\work\dev\matlab\test1.mat';
:
filename(n,:) = 'D:\work\dev\matlab\testn.mat';

% 各ファイルに対して処理を行う
for iRow = 1:length(filename)
handles.filename = filename(iRow,:);
guidata(hObject, handles);

DataLoad_Callback(hObject, eventdata, handles)
DataProcessing_Callback(hObject, eventdata, handles)
end

253 :デフォルトの名無しさん:05/01/24 16:48:21
ちょっと待っててね。

254 :デフォルトの名無しさん:05/01/27 01:05:41
わからん...

255 :253:05/01/27 03:59:12
ですね、ちょっとわからん。
このスレにゃ答え出せる人居ないよ。自分で考えてください>251

以下何事もなかった如く進行。

担当者と話をすると、MATLABの発音がマツゥラヴに聞こえるマットラボ?マトラボ?

256 :デフォルトの名無しさん:05/01/27 07:41:27
>>239
Waveletでずいぶん釣れたね!

257 :choix ◆pnCm4bpG3Y :05/01/27 09:42:42
>>251
GUIDEで生成されたひな形を使ってますか?
もしそうだとしたら、コールバック関数を呼ぶときには
hogehoge('DataLoad_Callback', hObject, eventData, handles, ...);
ってやることになっていると思うんですが、
BatchProcess_Callbackの中ではコールバック関数を直接呼んでますよね。
それが原因になっていたりしませんか?

258 :251:05/01/28 22:19:53
>> 257

できました!
ご指摘の通り,関数の呼び出しを間違えていたようです.
ありがとうございました.

259 :デフォルトの名無しさん:05/01/30 10:24:33
R14になってmat ファイルのサイズがR13の時より1/10くらいになってるのだけど
一体どんな実装になったの?

260 :choix ◆pnCm4bpG3Y :05/01/30 23:31:43
R14からは文字列はUnicodeを使うようになり、
ファイルの圧縮も行なわれるようになりました。

261 :デフォルトの名無しさん:05/02/01 16:13:36
simulinkでデータを外から入れた場合、入れたデータをビットで扱うことは
出来ないのでしょうか?教えてください、お願いします。

262 :デフォルトの名無しさん:05/02/04 22:19:42
離散の
1
--------
1 + Z^-1
を連続の
1
--------
1 + S
に変換したいのですが、どうしたらよいでしょうか。
関数などあれば、出来れば詳しく教えてください。
お願いします。


263 :デフォルトの名無しさん:05/02/05 13:12:22
>>238
クライアントサイド厨はネットワーキングに疎い知ったかぶりばかりで
このスレはもとからいいスレじゃあないな。

264 :デフォルトの名無しさん:05/02/05 13:16:54
>>241
教えてくれないといより
プログラミングスキルが低い教授なんだろ。

たいていの場合、教授よりもIT業界で
プログラミングだけで喰っていける実践経験のある人間のほうが
そういうことには強い。

教授は新しい技術にはついていけず数学しか知らないというのが実体だよ。
教授の中でも特に50代という団塊の人間にはコンピュータが苦手な連中が多い。
古い技術にとりつかれて新しいものになかなか鞍替えできない変化に弱い人間
なだけに彼ら教授陣の能力も衰えてきている、



265 :デフォルトの名無しさん:05/02/05 13:21:08
>>252
> data = load('****.***');
> filename(1,:) = 'D:\work\dev\matlab\test1.mat';
> :
> filename(n,:) = 'D:\work\dev\matlab\testn.mat';

ちゃんとファイル分割しているかしらんが
もししていないならこんなハードコーディングはおすすめできんな。
ソースコードを読む側の立場になったら読むだけでも腹が立つようになってくるぞ。

266 :デフォルトの名無しさん:05/02/06 01:08:30
ほら、みんなsageようぜ。
上の方にいるからまた変なのが来た。

267 :デフォルトの名無しさん:05/02/07 11:34:01
すいません、今くそでかいデータファイルを扱っているのですが
処理が長くて困っています。
で、↓のfor文の処理が長いようなのですが
高速化する方法ないでしょうか?
for i = 1:(X)
tmp(i,1) = moto_file(i+(10*A+3),1);
end

読み込んだデータ(mot_file)の10*A+3番目以降のデータをtmpの中に
そのまま移行させたいのです...
よい方法をご存知の方がいらっしゃいましたら
なにとぞご教授お願いします。m(_ _;)m

268 :デフォルトの名無しさん:05/02/07 11:39:34
あ、すんません
上のmoto_file=mot_fileです

269 :デフォルトの名無しさん:05/02/07 13:21:54
早くなるかどうかはわからないけど
tmp=moto_file((10*A+3):end);
でどうだ?
tmpは消え去るけどな。
それか、moto_fileをいじってもよければ
moto_file(1:(10*A+2))=[];
で、10*A+2までがデリートされる

270 :デフォルトの名無しさん:05/02/07 13:43:57
ありがとうございます!
早速試してみます

271 :269:05/02/07 14:24:46
す!すごいっすわ!
めちゃめちゃ早くなりましたよ!
数十分かかってたのが数秒ですよ!
ありがとうございました!!!!


272 :choix ◆pnCm4bpG3Y :05/02/08 08:40:00
ループを減らし、ベクトル演算に書き換えれば劇的に高速になります。
英語文章なんですが、Mathworksのサイトに書き換えの指針がまとめてありました。

http://www.mathworks.com/support/tech-notes/1100/1109.html

273 :デフォルトの名無しさん:05/02/08 21:07:54
matlabでM系列信号発生させてスピーカの周波数特性を測りたいのですがどうすればよろしいのですか?

274 :デフォルトの名無しさん:05/02/08 21:11:45
>>272
おまいはサイバーネット社のまわし者か?

275 :デフォルトの名無しさん:05/02/08 21:22:35
MATLABでクラスのカプセル化できんの?

276 :choix ◆pnCm4bpG3Y :05/02/08 22:02:29
>>274
ドキュメントばっかり読んでるMatlab廚です。

277 :デフォルトの名無しさん:05/02/09 10:10:33
Finding a transfer function...
--------------------------------------------------------------------------------
The frequency response of a linear time invariant system has been
measured and can be seen in the attachment file below.
A feedback element with a transfer function, H(s), is to be
chosen so that the sysytem steady-state error to a unit step input
is equal to 0.07. What is a suitable transfer function to achieve this???

これで、frequencyとmagnitudeとphase angleの数値をざっと各30個ずつ
ぐらいもらってるんだけど、まったく分かりません。どういう過程で
transfer functionを求めていけばいいのでしょうか? matlabを使ってtransfer
functionを求められると聞いたんですけど、どういう風に数字を入れていけば
いいのでしょうか?


278 :269:05/02/09 12:50:33
>272
う、英語文章苦手なんですけど
がんばって読んでみます。
情報ありがとうございますm(_ _)m

279 :choix ◆pnCm4bpG3Y :05/02/09 14:30:19
>>273
M系列信号を計算することはMatlabでできますが、
それを再生してマイクで拾って録音して、という部分は別のシステムを使った方がラクでしょう。
そのあとで録音データにFFTをかけて周波数特性を確認するのはMatlabでできます。

こんな流れなんですが、周波数特性の分かっているマイクとアンプを使わないと、スピーカーだけの周波数特性は計測できません。
完全なスピーカー特性をはかるには専用のデバイス類が必要になるのでかなり大変です。

280 :273:05/02/10 05:09:23
>>279
騒音計使うので平気なのです
アンプもフラットなので・・・・
その得られた周波数特性から逆フィルタを求めて
ソースなりに逆フィルかませるということは可能ですか?

281 :choix ◆pnCm4bpG3Y :05/02/10 05:34:37
スピーカーの線形歪みの部分であれば、
別ソースにフィルタをかけることも可能です。

282 :デフォルトの名無しさん:05/02/10 10:09:51
xpctargetについてなのですが、
contec製のADボードを使うと、入力が恐らく0.25倍、出力が2倍になってしまいます。
バージョンは2.7ですがMATLAB6.5付属の物でも同じ症状がでます。
インターフェース製のADDAボードだと問題無いのですが、これはバグか何かなのでしょうか。
0.25倍と2倍というのもテスターによって測ったあやふやなものなので詳細がわかりません。
知っている方いらっしゃいますか?

283 :282:05/02/10 10:11:11
申し訳ありません、詳細を書き忘れました。
使用しているボードはcontecのAD12-16Eです。

284 :デフォルトの名無しさん:05/02/12 02:37:18
こんなスレがあったとは(゚∀゚)

>>232
すごい遅レスだけど,Unbufferで一旦フレームベースのデータを変換して,
その後でBufferで1024のフレームサイズに直せばいけるかな?
漏れはフレームベース使ってないから間違ってるかもしれないけど・・・
最初に0がつくのは初期値が0になってるからだと思われ。


>>235
Complex-to-Real Imagブロックで実数虚数部に分けるか
absブロックで絶対値取るかだね。


MATLABはともかくとして,Simulinker少なっ


285 :デフォルトの名無しさん:05/02/21 13:43:18
ムービーにX軸とY軸を含めるにはどうしたらよいのでしょうか?
MetlabはVer6.1です。


286 :273:05/02/22 17:51:22
で、具体的にどうやればいいんですか?

287 :デフォルトの名無しさん:05/02/24 01:59:01
>>273
具体的にと聞かれても・・・( ´Д`;)
適当にプログラム組んでみて,上手くいかないところを聞くのが筋では?
全部プログラムを作ってくれ,というように聞こえるけど・・・

288 :choix ◆pnCm4bpG3Y :05/02/24 09:40:18
スレになかなか来られなくて申し訳ない。
やらなきゃいけないことが重なっていっぱいいっぱいで(r

289 :デフォルトの名無しさん:05/02/26 09:10:36
>>285
オフスクリーンでやれば出来ないことはないが、サイズが指定できないので注意

290 :デフォルトの名無しさん:05/02/26 18:12:52
matlab7.0.1でGetting startedに記載されている簡単なコマンドを実行しました。
>> a = [ 1 2 ];
>> plot(a)
??? Undefined function or variable 'lineseriesmex'.

Error in ==> lineseries at 19
lineseriesmex;
とつれないお返事。このエラーにどう対処したらいいのでしょうか?

291 :デフォルトの名無しさん:05/03/07 15:10:54
>>290
遅レスだけど,Ver6.5.1だと普通にプロットできますた。
Ver7だとできないのかな・・・・

292 :choix ◆pnCm4bpG3Y :05/03/09 02:03:33
>>273
遅レス申し訳ない。ようやくちょっと時間ができました。

十分な長さのノイズ信号を再生した録音データには全周波数帯での応答が含まれています。
その録音データにFFTをかけてマグニチュード応答を割り出し、
それをもとにフィルタを作ります。
フィルタを作るにはYule-Walker法(yulewalk.m)なんかがラクチンです。

293 :デフォルトの名無しさん:05/03/09 17:18:18
>>292
Numerical Recipe 印C
をみろ

294 :choix ◆pnCm4bpG3Y :05/03/09 22:16:59
何に関してNRを見ればいいでしょう?
FFTのところか乱数生成のところ?

295 :デフォルトの名無しさん:05/03/14 15:17:53
matlab 7 で、capture がなくなったみたいなんだけど、代替は何?

296 :デフォルトの名無しさん:05/03/14 15:41:38
>>295
自己解決
getframe
ね。

297 :デフォルトの名無しさん:05/03/16 11:16:41
UNIXないのmatlabをWindowsのsshから使っています。XWindowは使えないのですが、この場合、ムービーをfigureWindowなしで作成できるのでしょうか?

298 :デフォルトの名無しさん:05/03/16 11:42:13
mexをc++でwindows unix両方でコンパイル可能な形書くのって
難しい?

299 :choix ◆pnCm4bpG3Y :05/03/16 13:28:45
>>297
このスレの過去に似た話が出てきたのでチェックすると良いかもしれません。
>>44-48 あたりです。

>>298
意外に簡単です。
ただ、システム依存する部分はちょっと難しいです。
自分は、多チャンネル音声再生をマルチプラットフォームで
実行できるようなmexファイルを作ろうとして挫折しました。

300 :デフォルトの名無しさん:05/03/17 12:55:09
mexのdll (window)を
Matlabじゃなくて普通のCのプログラムから呼び出すには
どうしたらよろしいのでしょうか

301 :choix ◆pnCm4bpG3Y :05/03/17 21:38:46
マニュアルのMEX関連のところに似たようなことが書いてありました。
英語版のホームページで言うと
http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_external/ch_java.html
です。これはMatlabそのものを他のプログラムから利用するというものです。
参考になるかもしれません。

302 :デフォルトの名無しさん:05/03/19 12:29:36
matlab7は何が新しくなったのですか?

303 :デフォルトの名無しさん:05/03/19 22:50:51
主に、激しく処理が重くなった。

304 :デフォルトの名無しさん:2005/03/21(月) 08:27:10
matlab で、
f = @(x) x
みたいなことは、octave では出来ないんでしょうか?

90 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)