• 検索結果がありません。

ギリシャ文字の読み方を教えてください

N/A
N/A
Protected

Academic year: 2021

シェア "ギリシャ文字の読み方を教えてください"

Copied!
14
0
0

読み込み中.... (全文を見る)

全文

(1)

テーマ: Excel によるデジタルフィルタ 観測波形をフーリエ変換してフーリエ・スペクトルを求めたのち,成分の一部を減衰さ せたスペクトルを逆フーリエ変換すると,元の観測波形にフィルタを掛けた波形が得られ る.これをデジタルフィルタという.Excel にはデータ分析ツールの一つとして,フーリエ 変換および逆フーリエ変換の機能が装備されている.この機能を利用すると手軽にデジタ ルフィルタを実現することができるが,フーリエ変換および逆変換のたびに,手動で分析 ツールの呼び出しが必要なため操作が煩雑である.自動的にデジタルフィルタリングを行 うには,分析ツールの呼び出しを VBA で自動化するか,フーリエ変換および逆変換そのも のを VBA で組む必要がある.本資料では,Excel のデータ分析ツールを手動で使用する方 法,データ分析ツールの操作を VBA で自動化する方法,VBA で FFT(高速フーリエ変換) プログラムを記述する方法について述べる. 1.デジタルフィルタの概要 1.1 フーリエ変換 時刻 t における観測波形をx(t)とすると,x(t)のフーリエ変換X

 

 

 

 

          dt t j t t x dt e t x X j t

 sin cos (3) このX

 

は複素数で表され,実数部XR

 

を,虚数部をXI

 

と表すと

 

XR

 

jXI

 

X   1.2 逆フーリエ変換 フーリエ・スペクトルX

 

の逆変換は

 

 

 

 

 

          dt e x X t x d e x X t x t j t j 2 1 2 1 (3) で表される. 1.3 フィルタ関数 観測波形x(t)のフーリエ変換X

 

に対して,フィルタ関数W

 

との積X

   

W

を計算 し,X

   

W

に対してフーリエ逆変換を行うと,信号成分と雑音成分を分離することが できる.フィルタ関数は,フィルタリングの種類すなわちローパス(低域通過),バンドパ ス(帯域通過),ハイパス(高域通過)によって,図 1 に示すように定義する.

(2)

1.4 計算例 (1)観測波形 フーリエ変換を行うには,2 の倍数(2, 4, 8, 16, … , 2n)個のデータが必要となる.デー タ数が不足する場合は,0 を追加して 2 の倍数個にしなければならない.ここでは,図 2 に示す 1024 個のデータからなる観測波形データがあるものとする. 図 2 観測波形 (2)フーリエ・スペクトル 図 1 の観測波形にフーリエ変換を行うと図 3 に示すフーリエ・スペクトルが得られる. (ただし,N=0 のスペクトルは表示を省略)このとき,=0 の点を除き,X

 

は N/2 を中 心に左右対称となる. 8000 8500 9000 9500 10000 10500 11000 11500 12000 12500 1 46 91 13 6 18 1 22 6 27 1 31 6 36 1 40 6 45 1 49 6 54 1 58 6 63 1 67 6 72 1 76 6 81 1 85 6 90 1 94 6 99 1 観測値 N

観測波形データ

, x(t)

1 1 1 W() W() W() N3 N4 N1 N2 N3 N4 N1 N2 低域通過フィルタ関数 帯域通過フィルタ関数 高域通過フィルタ関数 図 1 フィルタ関数

(3)

図 3 フーリエ・スペクトル (3)フィルタ関数 低域通過フィルタ関数を図 4 のように定義する.このとき,=0 の点を除き,W

 

N/2 を中心に左右対称となる.この例では,

 

1

N0,1,2,,20 and N1004,1005,,1024

W

 

0

N21,22,,1003

W

である. 図 4 フィルタ関数 (4)フィルタ通過後のスペクトル フィルタ通過後のスペクトルX

   

W

は,図 5 のとおりである. 0 100000 200000 300000 400000 500000 600000 700000 1 48 95 14 2 18 9 23 6 28 3 33 0 37 7 42 4 47 1 51 8 56 5 61 2 65 9 70 6 75 3 80 0 84 7 89 4 94 1 98 8 フ ー リ エ ・ス ペ クト ル , X (  ) N

フーリエ・スペクトル

0.0 0.2 0.4 0.6 0.8 1.0 1.2 1 44 87 13 0 17 3 21 6 25 9 30 2 34 5 38 8 43 1 47 4 51 7 56 0 60 3 64 6 68 9 73 2 77 5 81 8 86 1 90 4 94 7 99 0 W (  ) N

フィルタ

,

W

(

)

(4)

図 5 フィルタ関数 (5)フィルタ通過後の波形 図 5 のスペクトルをフーリエ逆変換することにより,図 6 に示すように低域通過後の波 形が得られ,平滑化が行われたことが分かる. 図 6 フィルタ通過後の波形 2.Excel を用いた FFT によるデジタルフィルタリング 2.1 Excel のデータ分析ツールを手動で使用する方法 0 100000 200000 300000 400000 500000 600000 700000 1 48 95 14 2 18 9 23 6 28 3 33 0 37 7 42 4 47 1 51 8 56 5 61 2 65 9 70 6 75 3 80 0 84 7 89 4 94 1 98 8 フ ー リ エ・ ス ペク ト ル N

フィルター通過後のスペクトル

8000 8500 9000 9500 10000 10500 11000 11500 12000 1 46 91 13 6 18 1 22 6 27 1 31 6 36 1 40 6 45 1 49 6 54 1 58 6 63 1 67 6 72 1 76 6 81 1 85 6 90 1 94 6 99 1 軸ラベル N

フィルタ通過後の波形

(5)

小西研究室フリーウェアーのページ http://www.sit.ac.jp/user/konishi/JPN/Freeware/Freeware.html より,「Excel によるデジタルフィルタ Ver. 1.0」をダウンロードし,「デジタルフィルタ(フ ーリエ解析機能利用+手動操作).xslm」という名の Excel シートを開く. 注意:ダウンロードしたシート上の観測波形のデータを単に更新しただけでは,自動計算 されません.必ず下記の要領で操作が必要になります. 操作方法①:準備 リボンのファイルタブから,オプション→アドイン→分析ツールをチェック→設定ボタン をクリックする. 「アドイン」ダイアログボックスで,「分析ツール」および「分析ツール-VBA」をチェッ クし,OK をクリックする.

(6)

操作方法②:データの更新と削除 C 列の観測波形のデータを更新する. D 列と K 列のデータを削除する. 操作方法③:データ範囲の指定 リボンのデータタブ→データ分析(下図)→フーリエ解析を選択→OK をクリック 図 の ダ イ ア ロ グ ボ ッ ク ス が 表 示 さ れ る の で , 入 力 範 囲 を $C$4:$C$1027 , 出 力 先 を $D$4:$D$1027 に指定し,OK をクリック 注意:D 列の値を削除しなかった場合は,次のメッセージが表示されるので,OK をクリ

(7)

ックする.D 列が空欄の場合はこのメッセージは表示されない. 操作方法④:実部,虚部,フーリエ・スペクトルの計算 E4 セルの数式を =IMREAL(D4),F4 セルの数式を=IMAGINARY(D4),G4 セルの数式を =IMABS(D4)とし,これらの数式を E 列 F 列 G 列の 5~1027 行に貼り付ける 操作方法⑤:フィルタ関数の指定 フィルタの値を H 列に入力する 操作方法⑥:フィルタ通過後の複素数計算 I4 セルの数式を=COMPLEX(H4*E4,H4*F4)とし,I 列の 5~1027 行に貼り付ける 操作方法⑦:フィルタ通過後のスペクトルの計算 J4 セルの数式を=IMABS(I4)とし,これらの数式を J 列の 5~1027 行に貼り付ける 操作方法⑧:逆フーリエ変換を行う リボンのデータタブ→データ分析→フーリエ解析をクリック 図 の ダ イ ア ロ グ ボ ッ ク ス が 表 示 さ れ る の で , 入 力 範 囲 を $I$4:$I$1027 , 出 力 先 を $K$4:$K$1027 に指定,逆変換をチェックし,OK をクリック K 列の値を削除しなかった場合は,上書き確認のメッセージが表示されるので,OK をク リックする.K 列が空欄の場合はこのメッセージは表示されない. 注意:K 列の値はテキスト形式で表示される.値が表示された直後は変換範囲がすでに選 択されているので,直ちに下図のように数値に変化する処理を行う.

(8)

以上の操作で,上述の図 6 が更新される. 2.2 データ分析ツールの操作を VBA で自動化する方法 小西研究室フリーウェアーのページ, http://www.sit.ac.jp/user/konishi/JPN/Freeware/Freeware.html より,「Excel によるデジタルフィルタ Ver. 1.0」をダウンロードし,「デジタルフィルタ(フ ーリエ解析機能利用+手動操作).xslm」という名の Excel シートを開く. 注意:ダウンロードしたシート上の観測波形のデータを単に更新しただけでは,自動計算 されません.必ず下記の要領で操作必要になります. 操作方法①:準備 Excel は直前の設定に従うため,ファイルをダウンロードしただけでは,VBA を使用でき るとは限らない.リボンに開発タブが表示されていない場合は VBA を使用するため,以下 の設定を行うこと. リボンのファイルタブから,リボンのユーザ設定を選ぶ.開発にチェックを入れ,OK をクリックしてダイアログを閉じる.これにより,メニューに「開発」が追加される.

(9)

次に,Excel の分析ツールを使用するため,2.1 の操作方法①:準備に記述した設定を行 う. 操作方法②:データの更新と削除 C 列の観測波形のデータを更新する. D 列と K 列のデータを削除する. 操作方法③:フーリエ変換 「ボタン 1」をクリックすると,フィルタ通過後の値(K 列)が自動計算される. 参考:「ボタン 1」には,以下のプログラムを記述する. Sub ボタン 1_Click() Dim i0, n As Integer Dim i0str, i1str As String i0 = Cells(1, 2)

n = Cells(2, 2)

i0str = Right$(Str(i0), Len(Str(i0) - 1))

i1str = Right$(Str(i0 + n - 1), Len(Str(i0 + n - 1) - 1))

Application.Run "ATPVBAEN.XLAM!Fourier", ActiveSheet.Range("$C$" + i0str + ":$C$" + i1str), ActiveSheet.Range("$D$" + i0str + ":$D$" + i1str), False, False

For i = i0 To i0 + n - 1

Cells(i, 5) = WorksheetFunction.ImReal(Cells(i, 4)) Cells(i, 6) = WorksheetFunction.Imaginary(Cells(i, 4)) Cells(i, 7) = WorksheetFunction.ImAbs(Cells(i, 4))

(10)

If Cells(i, 8) = 0 Then Cells(i, 9) = 0 Else

Cells(i, 9) = WorksheetFunction.Complex(Cells(i, 8) * Cells(i, 5), Cells(i, 8) * Cells(i, 6))

End If Next i

Application.Run "ATPVBAEN.XLAM!Fourier", ActiveSheet.Range("$I$" + i0str + ":$I$" + i1str), ActiveSheet.Range("$K$" + i0str + ":$K$" + i1str), True, False

For i = i0 To i0 + n - 1 Cells(i, 11) = Val(Cells(i, 11)) Next i End Sub 2.3 VBA で FFT(高速フーリエ変換)プログラムを記述する方法 小西研究室フリーウェアーのページ, http://www.sit.ac.jp/user/konishi/JPN/Freeware/Freeware.html より,「Excel によるデジタルフィルタ Ver. 1.0」をダウンロードし,「デジタルフィルタ(フ ーリエ解析機能利用+手動操作).xslm」という名の Excel シートを開く. 注意:ダウンロードしたシート上の観測波形のデータを単に更新しただけでは,自動計算 されません.必ず下記の要領で操作必要になります. 操作方法 ① Excel の VBA を使用するため,2.2 の操作方法①:準備に記述した設定を行う.ただし, VBA で FFT プログラムを記述するため,分析ツールの設定は不要. ② 観測波形のデータ(C 列)を更新する. ③ フィルタの値(G 列)を設定する. ④ ボタン 1 をクリックする. 上記操作により,フィルタ通過後の値(H 列)が自動計算される. 謝意 FFT(高速逆フーリエ変換)のプログラムは,露本伊佐男氏のホームページに記載され たものを使用しました.URL は次のとおりです. http://tsuyu.cocolog-nifty.com/blog/2007/03/publi.html 逆フーリエ変換のプログラムは,上記 FFT プログラムを逆 FFT 用に修正したものです. この場を借りてお礼申し上げます. 参考:「ボタン 1」には,以下のプログラムを記述する.

(11)

Sub ボタン 1_Click() Dim g, h, i, j, k, l, m, o, p, q As Integer i = 0 j = 0 k = 0 l = 0 p = 0 h = 0 g = 0 q = 0 'Fourier 変換 'データ数 n を指定(2 の倍数) Dim i0, n As Integer

Dim i0str, i1str As String i0 = Cells(1, 2)

n = Cells(2, 2)

i0str = Right$(Str(i0), Len(Str(i0) - 1))

i1str = Right$(Str(i0 + n - 1), Len(Str(i0 + n - 1) - 1)) 'n = 1024

m = Log(n) / Log(2)

'xr,xi はデータ数以上、s,c はデータ数の半分以上を指定しておく Dim W(1024), xr(1024), xi(1024), xd, s(512), c(512), a, b As Double 'データの読み込み For i = 1 To n xr(i - 1) = Cells(i + i0 - 1, 3) xi(i - 1) = 0 Next i 'FFT の計算 a = 0 b = 3.14159265359 * 2 / n For i = 0 To n / 2 s(i) = Sin(a) c(i) = Cos(a) a = a + b Next i l = n h = 1 For g = 1 To m l = l / 2 k = 0 For q = 1 To h p = 0 For i = k To l + k - 1

(12)

j = i + l

a = xr(i) - xr(j) b = xi(i) - xi(j) xr(i) = xr(i) + xr(j) xi(i) = xi(i) + xi(j) If p = 0 Then xr(j) = a xi(j) = b Else xr(j) = a * c(p) + b * s(p) xi(j) = b * c(p) - a * s(p) End If p = p + h Next i k = k + l + l Next q h = h + h Next g j = n / 2 For i = 1 To n - 1 k = n If j < i Then xd = xr(i) xr(i) = xr(j) xr(j) = xd xd = xi(i) xi(i) = xi(j) xi(j) = xd End If k = k / 2 Do While j >= k j = j - k k = k / 2 Loop j = j + k Next i 'データの出力 For i = 1 To n Cells(i + i0 - 1, 4) = xr(i - 1) Cells(i + i0 - 1, 5) = xi(i - 1)

Cells(i + i0 - 1, 6) = Sqr((xr(i - 1) ^ 2 + xi(i - 1) ^ 2)) Next i

'逆 Fourier 変換 'データの読み込み

(13)

For i = 1 To n

W(i - 1) = Cells(i + i0 - 1, 7) 'フィルタ関数 xr(i - 1) = xr(i - 1) * W(i - 1)

xi(i - 1) = xi(i - 1) * W(i - 1) Next i 'FFT の計算 l = n h = 1 For g = 1 To m l = l / 2 k = 0 For q = 1 To h p = 0 For i = k To l + k - 1 j = i + l a = xr(i) - xr(j) b = xi(i) - xi(j) xr(i) = xr(i) + xr(j) xi(i) = xi(i) + xi(j) If p = 0 Then xr(j) = a xi(j) = b Else xr(j) = a * c(p) + b * s(p) xi(j) = b * c(p) - a * s(p) End If p = p + h Next i k = k + l + l Next q h = h + h Next g j = n / 2 For i = 1 To n - 1 k = n If j < i Then xd = xr(i) xr(i) = xr(j) xr(j) = xd xd = xi(i) xi(i) = xi(j) xi(j) = xd End If k = k / 2 Do While j >= k

(14)

j = j - k k = k / 2 Loop j = j + k Next i Cells(i0, 8) = xr(0) / n 'データの出力 For i = 2 To n Cells(i0 + n - i + 1, 8) = xr(i - 1) / n Next i End Sub http://www.sit.ac.jp/user/konishi/JPN/Tech_inform/Pdf/DigitalFilterbyExcel.pdf

Copyright ⓒ 2013-2014 小西克享, All Rights Reserved. 個人的な学習の目的以外での使用,転載,配布等はできません.

図 3  フーリエ・スペクトル  (3)フィルタ関数    低域通過フィルタ関数を図 4 のように定義する.このとき,=0 の点を除き, W   は N/2 を中心に左右対称となる.この例では,     1  N  0 , 1 , 2 ,  , 20 and N  1004 , 1005 ,  , 1024 W    0  N  21 , 22 ,  , 1003 W である.  図 4  フィルタ関数  (4)フィルタ通過後のスペクトル    フィルタ通過後のス
図 5  フィルタ関数  (5)フィルタ通過後の波形    図 5 のスペクトルをフーリエ逆変換することにより,図 6 に示すように低域通過後の波 形が得られ,平滑化が行われたことが分かる.  図 6  フィルタ通過後の波形  2.Excel を用いた FFT によるデジタルフィルタリング  2.1  Excel のデータ分析ツールを手動で使用する方法 010000020000030000040000050000060000070000014895142189236283330377424471518565

参照

関連したドキュメント

シートの入力方法について シート内の【入力例】に基づいて以下の項目について、入力してください。 ・住宅の名称 ・住宅の所在地

これはつまり十進法ではなく、一進法を用いて自然数を表記するということである。とは いえ数が大きくなると見にくくなるので、.. 0, 1,

目的 これから重機を導入して自伐型林業 を始めていく方を対象に、基本的な 重機操作から作業道を開設して行け

* Windows 8.1 (32bit / 64bit)、Windows Server 2012、Windows 10 (32bit / 64bit) 、 Windows Server 2016、Windows Server 2019 / Windows 11.. 1.6.2

• AF/AE ロック機能を使って、同じ距離の他の被写体にピントを 合わせてから、構図を変えてください(→ 43 ページ)。. •

ダウンロードしたファイルを 解凍して自動作成ツール (StartPro2018.exe) を起動します。.

72 Officeシリーズ Excel 2016 Learning(入門編) Excel の基本操作を覚える  ・Excel 2016 の最新機能を理解する  ・ブックの保存方法を習得する 73

利用している暖房機器について今冬の使用開始月と使用終了月(見込) 、今冬の使用日 数(見込)