質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
MATLAB

MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

0回答

1745閲覧

MATLABによるマイケルソン干渉計のシミュレーション

genius

総合スコア5

MATLAB

MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2020/06/28 16:53

編集2020/06/28 22:05

お世話になっております。

低コヒーレンス光を用いたマイケルソン干渉計による光路差の測定のシミュレーションをMATLABでやっています。簡単に言うと干渉信号の位相差から光路差を求めるのですが、その位相差がうまく算出されません。

まず、理論の説明です。
簡単のために、位相差によって光路差が求められることの確認をします。
低コヒーレンス光は波長780nm~820nmまでの41本の波の合成波を使います。
但し、この波のスペクトル分布はガウス分布に従います。(ソースコードfigure(4)参照)

(スペクトル分布、FFT、位相分布は横軸がλの逆数として、1/820~1/780が該当する部分を切り取っています、単位がμmなので1/0.82〜1/0.78ですけど…)

今、初期光路差が参照光と物体光で0とした時、参照ミラーが-400μm=400μmまで動いたと考えて、例えば波長780nmの波は0μmの地点で必ず光強度最大となります。もちろん、この波長のみでしたら他の地点でも最大光強度はあります。
ここで、シミュレーションの都合上、41本すべての波に関してそれぞれ干渉信号を求め、その41本の波を足し合わせると0μmの地点で光強度最大となります。(ソークコードfigure(1)参照)

これをFFTして最大振幅を求め、その最大振幅の位相の傾きから位相差を求めることができますが、今回は初期光路差が0なので当然FFTの最大の点での位相αは0です。

位相αを用いてα=2πd/λより光路差dは0と求められます。

つまり、初期光路差が0の場合はFFTの最大点での位相は0でなければならないのですが、下のプログラムのように書いて実行するとギザギザした感じになってしまいます。(ソースコードfigure(3)参照)
FFTまではうまくいっていると思うのですが、どうもよくわかりません。

わかる方がいらっしゃいましたらご教授お願いいたします。

以下ソースコードです。
コピーして動かして頂くと詰まっているところがわかっていただけるかと思います。
変数の名前が完全に適当で申し訳ございません。

___________________
追記:位相を求めるところって合っていますか?atan2とatanを使った時で値が変わるんですけど…
__________________

MATLAB

1 2for i = 780:1:820; 3 test(1,(i-779)) = 1000./i 4end 5a = mean(test); 6b = sqrt(var(test)); 7 8test1 = normpdf(test,a,b/2) %スペクトル分布 9for i = 780:1:820; 10 x(1,(i-779)) = 1000./i; 11end 12 13figure(4); 14plot(x,test1) %横軸は波長λの逆数(単位μm-1) 15title('スペクトル分布(横軸はλの逆数.単位μm-1)') 16 17 18for i = 1:1:41; 19 20 for j = 1:1:8192; 21 si(i,j) = test1(1,i).*cos(2.*pi./(0.78 + (i .* 0.001)).*(j.*0.1 - 400)); 22 %41本の干渉信号作成 23 %サンプリング距離は0.1μm,データ点数は8192 24 end 25 26end 27 28for i = 1:1:8192; 29 y(1,i) = i.*0.1 - 400; %干渉信号の横軸計算(実際の実験では参照ミラーの移動距離.μm) 30end 31 32S = sum(si)./41; 33figure(1); %干渉信号 34plot(y,S); 35xlim([-100,100]);%本当は横軸が±400μmほどのデータがあるが、見やすさのために切り取り 36 37z = fft(S); 38m = abs(z)./41; 39p = (angle(z)); %位相(FFTの絶対値最大の点での位相が0になってほしい…) 40for i = 1:1:8192; 41 la(1,i) = 10./8192.*i; %横軸 42end 43 44figure(2); 45plot(la,m); 46title('FFT(横軸は1/0.82~1/0.78までを切り取り)') 47xlim([1.221001221,1.280409731]); 48 49 50figure(3); 51plot(la,p); 52title('位相分布(横軸は1/0.82~1/0.78までを切り取り)') 53xlim([1.221001221,1.280409731]); 54

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozwk

2020/06/29 00:18

実行結果の図を貼ったほうが回答が付きやすいと思います。 というのもmatlab持ってない人でも、実行結果があればリファレンス見ながら対処できる場合があるからです。
genius

2020/06/29 04:01

ご連絡ありがとうございます。 実は私も画像を入れようと思ったのですが、画像の挿入のところを指定ファイル形式で指定範囲のサイズで選択したのですが、何度やっても挿入されなかったので入れられてないんです、すみません…
yuki23

2020/06/30 00:48

このコードは特定のツールボックスがないと動かせませんし、手がかり無しで答えられる人は少ないでしょう
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問