• 締切済み

ハニングウィンドウについて教えて!

信号処理等に使うハニングウィンドウ、ハミングウィンドウ、レクタンギュラウィンドウ、区間ウィンドウ、指数ウィンドウについて、それらが どういう時に使われるのか? どういう風につかうのか? どういう特徴を持っているのか? を簡単に教えてください。 よろしくお願いします。

みんなの回答

  • o-toma
  • ベストアンサー率100% (2/2)
回答No.3

こんにちは。 私の分野は振動、音響等の信号処理です。 ご存じかもしれませんが、窓関数(ウィンドウ)はFFTを使うために必要な前処理で使います。 FFTは時系列の信号に、ある「周期Tの周期性がある」という仮定を立てた上で周波数解析を行うものです。 しかし実際の時系列信号はそうではないため、ウィンドウを掛ける必要があります。 (言葉不足ですが前置きはこれくらいで) (1)矩形窓(Rectangular Window) これは単純に周期Tの区間だけで切り取った関数です。窓関数は、オリジナル信号に手を加えて現実の 信号とは異なる信号にしてしまうので、何も手を加えない矩形窓が本来はベストの窓関数です。  しかし、実際の時系列信号では、最初と最後が0になっていないと不連続な周期信号となるので、 実際にはなかなか使えないようです。 [主な用途]過渡信号等(衝撃パルスなどに使えると思います) (2)ハニング窓  他の窓関数もそうですが、これは周期Tの最初と最後を0にする窓関数です。 (最初と最後が0になるような処理を施し、連続な信号を作るのが窓関数の主な目的と思います)  通常のFFTアナライザなどではこのハニング窓がもっとも一般的なようです。 [主な用途]定常ランダム信号(音圧信号、加速度信号等)  そのほかについては私も使ったことがないので申し訳ないですがよく分かりません。 (余り私の分野では見かけたことはない) 私の分野では、ハニング窓を使っておけばまあ問題ないと思います(間違っていたら申し訳ございません)。 もしkogatinさんが信号処理の初心者であれば、次の参考書などがわかりやすくてよいですよ。 (絵やC言語のソースなどもあってとても見やすいです) 「見てわかるディジタル信号処理」 坂巻佳壽美 著  工業調査会/\2,100税抜/ISBN4-7693-1162-1

  • stomachman
  • ベストアンサー率57% (1014/1775)
回答No.2

補足見ました。少し説明不足だったようです。 説明では「今(t=0)」の値を計算する方法しか、示しませんでした。「株価の変化をなだらかに」見る場合、「今」をいろいろにずらして計算してみて、はじめて「今の(なだらか化した)株価がどう変わったか」のグラフが描ける訳です。式で書けば今をt=T (T<0)、なだらか株価をn(T)と書くと n(T) = [f(t+T)W(t)]を積分したもの となりますね。 例えばW(t)=2W(t-1) であるようなウインドウを使ったとしましょう。  三日前にだけ1000円高があった(他の日は変化無かった)とすると、n(T)は n(-3)=500円高、 n(-2)=250円高、 n(-1)=125円高、 n(0)=63円高という風に、その影響が弱まりながら後を引く形になります。だから  三日前に1000円高、二日前に1000円安があった、というばあいには、 n(-3)=500円高、 n(-2)=250円安、(250 - 500) n(-1)=125円安、(125 - 250) n(0)=63円安 (63 - 125) それぞれの「後引き」がだいたい打ち消し合うことで 瞬間的変化は余り見えないようにする でも三日前の変化よりは二日前を重要視 という効果が現れる。 これが「なだらかにする」ということで瞬間的に上がったがすぐ下がった、というのに一喜一憂しない訳ですね。

kogatin
質問者

お礼

御回答ありがとうございました。 stomachmanさんの言われてることはほぼ理解できました。 自分の生活というかスポーツとかのスコアを記録したり しているのですが、たまたま集中できなくてスコアーが 悪かった時の影響がいつまでも残る、下手だった時の スコアの影響がいつまでも残る、ということに なんだか不条理さを感じていました。 違うところから「ウィンドウって何?」という疑問が 出てきたわけですが、そんな物にも使えそうですね。 お陰様で、一つ賢くなれました。どうもありがとうございました。

  • stomachman
  • ベストアンサー率57% (1014/1775)
回答No.1

用語については数学辞典(図書館に大抵ありますよ)や専門書を見るべきだと思います。質問者がどこまでご存じか、また、何にお使いになるのか、に依りますから。が、おおざっぱな概念は以下のようです。 (1) 無限に続いている信号の内の、注目する部分だけを調べたいときに、そこの部分を取り出すのにウインドウを使います。信号をf(t)とすると、ウインドウもtの関数としてw(t)と表せます。そして取り出した信号は g(t) = f(t)w(t) です。  w(t)の特徴:tの絶対値が大きいときにはw(t)=0です。このような関数なら何でもウインドウになりうるのですが、w(t)のグラフの面積が1になるように、定数倍して規格化します。(以下の説明では、自明かつめんどくさいので規格化の係数は省略します。) (2) ウインドウは、たとえば測定した信号波形の周波数成分を調べるために離散フーリエ変換(DFT: discrete Fourier transform)をやる時に必要です。数学的な意味でのフーリエ変換は、無限に続く信号f(t)からその周波数スペクトルF(s)を求めるものですが、f(t)が数式で与えられているのでない限り、実際には計算できないですね。それで離散フーリエ変換をやります。これはN点のサンプル値を入力して、周波数成分(N点の複素数値)を出すものです。 (3) 離散フーリエ変換の性質として、データは周期的(周期N)だと仮定して計算をしてしまいます。だから単にデータを切り取ってくるようなウインドウ:例えば w(t) = ( t1< t < t2 のとき1, その他では0) を使うと、データのN個目と1個目との間に(本来なかった)段差ができてしまう。この段差はあらゆる周波数に影響を及ぼすので都合が悪い。そこで、切り取ってくる区間の両端をなだらかに0に落としてやります。たとえば w(t) = 1+cos(at) (ただし -π < at < π。その他は0) という風に。 (4) 「ウインドウを掛ける」ことによって、元の信号f(t)がg(t)に変形されるわけですから、離散フーリエ変換して出てくる結果にもウインドウの影響がどうしても表れます。そこで、どんな影響が出るかが数学的に分かるような、たちが良くて簡単な関数をウィンドウに使う訳です。 (5) 影響は次のように表れます。 w(t)とf(t)のフーリエ変換をW(s)、F(s)とすると、g(t)=f(t)w(t)のフーリエ変換は G(s) = Indegral F(s-x)W(x) dx  (x=-∞~∞まで積分) で与えられます。つまり、W(s)が「sの絶対値が大きくなるとW(s)は急激に0に近づく」という性質をもっていれば使い物になる。W(s)のグラフの幅が、周波数の分解能(0.1Hz刻みで分析できるか1Hz刻みかなど)を決めるわけです。 (6) また周波数分析だけでなく、もっと他の統計値を求めたりする目的で、時系列データf(t)にウインドウを掛けることもあります。  例えば、現在をt=0として、過去の株価の変動f(t)を日々の変化を均して見たいというときに、もし単純な区間平均:例えば1箇月間の平均を使ったとすると、これは w(t) = (-1箇月 < t < 0のとき1, その他では0)  (rectangularですね) g(t) = f(t)w(t) を作ってt=-∞~∞まで積分するのと同じです。このやり方では「ちょうど1箇月前に大暴落があった」という時点で平均値に急な変化が現れてしまいます。  そこで、過去(t<0)にさかのぼるに従って次第に値が小さくなるウインドウ、例えば: w(t) = (t<0ならexp(a t), その他では0) を使い、g(t)=w(t)f(t) をt = -∞~∞まで積分すれば良いですね。  そういう訳で、いろんな目的でいろんなウインドウが考えられるし、詳しく調べられているものには名前も付いているけれど、用途に合わせて自分で作るのが本来の在り方だと思います。

kogatin
質問者

補足

お陰様で大まかに分かりました。ありがとうございます。 しかし、素人の私は、基本的なことで一つわからないところが有ります。もう一つ教えてきたいただきませんか? ・株価の変動を見たいという例ですが、「一ヶ月前におおきな変動があった時、算術平均であれば、結果に大きく響く、そこで、ウィンドウをかける、そうすれば・・・」というのはわかります。例えばゴルフの平均スコアで「たまたま一回だけ体調が悪くて不調で150たたいてしまった」という時に「ウインドウをかけると算術平均よりもその人の実力が表現しやすい」ということと同じなんでしょう? しかし、株価の話で言うと、大きな変動が一ヶ月前でなく、2,3日前なら{例えばexp(at)}ウィンドウをかけてもその影響は大きいのでは?と思ってしまいます。また、ここ2,3日たまたま株価が下がってる場合にその日を中心としてウィンドウをかければ、おかしな結果になるわけでしょう?また、N個のサンプリング値がある時には、N個のデータを中心としてN個全てにウィンドウをかけて、それをそれぞれの時間ずらして足しあわせると過去の株価の変動がなだらかに表現できるのでしょうか?

関連するQ&A

  • フーリエ変換について

    これから、FFTのプログラムを組んでみようと思います。 音楽ファイルを読み込もうと思いますが、 音楽ファイルは、不連続信号だと思うのですが、 音声は、44100Hzだから、必要な区間は、44100*2=88200点で、 0-88199,88200-176399,176400-264599,... という区間ごとに読み込んでいけばいいのでしょうか? その際は、窓関数の、ハニング窓:Wk=0.5-0.5*cos(2πk/L)を(最初は、方形窓でするつもりですが、)データに掛けて、 その値をFFTしてやればいいのでしょうか? 88200点の近似点は、2の16乗(65536)か2の17乗(131072)なので、 こちらのデータ区間を使えばいいのでしょうか? それとも、実際は、20000Hzしか使っていないので、44100点近くで、サンプリングす ればいいのでしょうか? また、区間ごとに得られた周波数を、区間ごとに処理していけばいいのでしょうか? すみませんが、よろしくお願いします。

  • 信号に窓関数をかける?

    現在プログラム作成中なのですが、窓関数をかけるとはどういうことなのでしょうか? 例えば、信号 cos(2πfnt)が与えられているときに、これにハニング 0.5-0.5cos(2πn/(N-1))をかけろと言われたら、信号cos(2πfnt)にどんな処理をすることをいうのでしょうか? アドバイスお願いします。

  • ハミング窓関数とFFT(高速フーリエ変換)を用いて音(WAVE)ファイルを周波数解析したいのですが

    FFTを用いてドレミの周波数解析のプログラムを作ろうと勉強しています。 そこで理論的にわかっていないため質問させていただきました。 ハミング窓の使い方についてです。 ドレミファソラシドと1secごとに変化していくWAVEファイルがあった場合。(0-1秒=ド 1-2秒=レ) 1:0~50msハミング窓を与えてやる 2:その区間をFFTする。(データ数は512で考える) 3:求まった基本周波数からドレミの判定を行う 4:50msずらす 5:1に戻る ※汚いですが手書きで自分の↑のイメージを書いて見ました。http://www.jpdo.com/link/1/img/49864.jpg このようにして9秒まで分割して計算すればドレミの解析が出来るはずだと思っているのですが、どうやってハミング窓を0~50msなどという風に使えばいいのかがわかりません。 このあたりの概念がさっぱりなので、 どうすれば0~50msの区間をハミング窓で得られるのか。 ハミング窓で得た区間をFFTするにはどう考えるのか。 を是非教えてください。

  • 信号処理について

     アナログ信号処理の良い点、悪い点およびディジタル 信号処理の良い点、悪い点を教えてください。また その他に特徴とかあれば是非教えてください。  よろしくお願いします。

  • C言語によるディジタル信号処理のお勧めの本やサイト

    C言語を使ったディジタル信号処理でFFT,DFT,ハミング窓,ギブスの現象,FIR(IIR)フィルタなどのいろいろなアルゴリズム,プログラムが載っていてしかも分かりやすかったり,有名な本ってありますか? また,何故その本がお勧めのかの理由も聞かせていただければ大変有難く思います。

  • フーリエ変換を用いた波形の特徴抽出

    波形の特徴抽出について以前質問をさせていただいたものです。 その後、試行錯誤してフーリエ変換を用いてみたのですがフーリエ変換がよくわかりません。 まず、波形に対しハミング窓を掛けて、それをフーリエ変換してグラフを出してみたのですが、3種類違う波形に対して同じ処理を行ってみたところ最終的に出てくるグラフは同じようなものになってしまいます。 これがなぜだかわからないのですがどなたか、わかる方がいらっしゃいましたらご教授ください。 加えて、フーリエ変換を用いて波形の特徴を抽出したい場合にどのような処理をどのような手順で行えばいいのか、わかる方がいらっしゃいましたら教えてください。 よろしくお願いします。

  • 信号処理についての相談

    最近, 信号処理について勉強しているのですが, いまいち差別化ができていません. フーリエ変換, 高速フーリエ変換, MAR, VAR, 時間周波数解析 これらの特徴や利点, 欠点, どのような処理の時に用いればよいのか, これらを解りやすく教えて頂けないでしょうか?

  • 太ってきました

    中3女子です 1年生の時は身長143.4体重30.6ローレル指数103.8 2年生の時は身長151.7体重36.2ローレル指数103.1 3年生の時は身長155  体重42  ローレル指数112.8というふうに3年生でちょっと太ってしまいました。 ところが今は身長162   体重51.5ローレル指数121.1です。決して太っているわけではないのは分かっていますが制服がちっちゃくなり元々痩せていたので少し太るととても目立ちます。どういうふうにすればよいでしょうか?

  • ウィンドウコンパレータの発振について

    電源電圧:12V VrefH:4.0V VrefL:2.6V センサーからの信号をOPアンプで増幅し、その信号をウィンドウコンパレータで比較させているのですが、 VrefL付近±120mVくらいの信号が入ると、ウィンドウコンパレータからのVoutが発振してしまいます。 発振防止用にVrefH側のコンパレータに正帰還(100kΩ)をかけています。VrefL付近の電圧時のみ発振してしまいます。発振を無くす方法を教えてください。 ちなみに、ひとつ疑問ですが正帰還をかけると ウィンドウコンパレータからの出力がHの時とLの時で VrefH値、VrefL値が変わってしまうのですが、それで良いのでしょうか?

  • WIndows3.1 ウィンドウの描画

    Windows3.1では、ウィンドウの再描画を行う時、再描画を行う範囲を指定することは出来るのでしょうか? 例えば、リストボックスにデータを追加表示し、再描画の処理を行う時に、(リストボックスを含むウィンドウ全体ではなく、)リストボックスのみを再描画することは可能でしょうか? WindowsNTでは、指定範囲の再描画を行う事はできると思うのですが。 以上、よろしくお願いします。