• ベストアンサー

信号に窓関数をかける?

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

質問者が選んだベストアンサー

  • ベストアンサー
noname#6694
noname#6694
回答No.1

一般に信号にフーリエ変換などの処理を施す際にある分析点数で信号を切り出します。分析点数がちょうど周期信号の1周期分でなければ、その分析点数で切り出すことでひずみが大きくなるので、それを極力少なくするために窓関数をかけます。 一般には、[窓関数をかける」とは窓関数と呼ばれる関数を信号(この場合時系列信号)に乗算します。その後に、たとえばフーリエ変換などの処理を行います。 窓関数には、その性質によっていろいろな種類がありますので、このあたりは信号処理の本を参考にしてください。

その他の回答 (1)

  • gootara01
  • ベストアンサー率55% (22/40)
回答No.2

実際の信号波形をフーリエ変換するためには、実際には有限な時間波形を連続波形として扱う必要があります。具体的には、実際の信号波形のうちある時間からある時間までのデータを切り出して、それの繰り返し信号をつくって連続波形とみなします。このとき切り出したデータの開始点と終点がつながっていないと不連続になって高周波のノイズ成分が混入してしまいます。これを避けるために端っこ(開始点と終点)の信号の特性があまり変換結果に効かないような重み付けを行うのが窓関数です。 下のURLが非常に分かりやすいのでご参考に。 ここにハニング窓の例もあります。「ハニングをかける」とは文字通り乗算することを意味します。

参考URL:
http://www20.u-page.so-net.ne.jp/gd6/ssakai/mp3/16_fft.htm

関連するQ&A

  • MATLABでハニング窓関数を使わないプログラム

    窓関数のハニング(hannning)を使用せずにハニング窓を掛けたいのですが上手く行きません ----------------------------------------------------- Fs = 48000; FqA = 440; FqB= 880; time = Fs / 10; n = 1:time; tone(n) = 1 * sin (2 * pi * FqA * (n-1) / Fs); n = time:Fs; tone(n) = 0; tone = repmat(tone, 1, 3) n = 3 * Fs + 1:6 * Fs; A = [ones(1, Fs) linspace(1, 0, Fs * 2)]; tone(n) = A .* sin (2 * pi * FqB * (n-1) / Fs); soundsc(tone, Fs); liner(n) = (n-1)/ time; tone_win(n) = 0.5 * (1 - cos (2 * pi * tone(n)/ (n-1)) ) .* liner ; soundsc(tone_win, Fs) figure(1) plot(tone) figure(2) plot(tone_win) ---------------------------------------------------------- tone_win(n) = 0.5 * (1 - cos (2 * pi * tone(n)/ (n-1)) ) .* liner ; の部分でエラーが出てしまいます。上記のハニング窓の式は http://en.wikipedia.org/wiki/Hann_function を参考にしました。どうすればtone(n)をハニング窓に掛けることが出来ますか? 失礼だとは重々承知ですが、急を要しているのでアドバイスの回答でしたら結構です。

  • プログラムを教えてください

    S(k)=10*log{1/N||シグマ(上N-1下n=0)s(n)h(n)exp(-j2pink/N)||^2} のプログラムを教えてください。これはパワースペクトルの式です。 N;512 h(n);ハニング窓関数で(1/2{1-cos(2pin/N)})です。s(n);オーディオ信号です。お願いします。

  • ハニングマドのDTFT

    ハニング窓の式 wN[n] = 0.5 - 0.5cos(2πn/N-1) を時間領域でDTFTするとどのようになりますか?

  • 信号の正規化と奇関数のFFTについて

    信号処理に関する文献を読んでいてわからないところが二つあります。 非常に困っているので、どちらかでも答えていただけたら嬉しいです。。 サンプル数 N(2の累乗数) の信号 y(t) (0<=t<=N-1)を高速フーリエ変換する際の操作なのですが、 まず、 u(t) = y(t) - (α*cos(t) + β)          …(1) α = 1/2( y(0)- y(N-1),β = 1/2( y(0) + y(N-1) ) と u(t) を計算すると、u(t) は y(t) を正規化したものとなる。 とあるのですが、(1)式で何故正規化したといえるのでしょうか? 次に、 この正規化したu(t)と対称な信号u'(t) u'(t) = -u(N-t) を使い、u(t)の右側にu'(t)を連結するように U(t) = u(t) :(0 <= t <= N-1) u'(t) :(N <= t <= 2N-1)  ( u'(t+N) = u'(t)とします) とした関数U(t)をつくり、 U(t) = U( t + 2*N*k) (k整数) として、U(t) を奇関数の周期関数に拡張します。 そしてU(t)にFFTを適用するみたいなのですが、 何のためにU(t)を奇関数の周期関数に拡張するのでしょうか? もとの y(t) もしくは正規化(?)した u(t) をそのまま高速フーリエ変換するのに対するメリットは何なのでしょうか? わかりにくい文章で申し訳ないですが、どちらか一方でも説明していただければ嬉しいです。よろしくお願いします。

  • 画像に対してハニング窓

    グレースケールの画像にハニング窓をかけたいのですがどのようにしていいかわかりません。 検索で式は出てきたのですが、音や信号などの1次元のものに対してで画像に対してはどうしていいか見つかりませんでした。 画像の1ピクセルのごとの数値にハニング窓の式を当てはめていけばいいんですか? それとも、たとえばフーリエ変換などをしてその周波数に対してですか?

  • フーリエ変換について

    これから、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点近くで、サンプリングす ればいいのでしょうか? また、区間ごとに得られた周波数を、区間ごとに処理していけばいいのでしょうか? すみませんが、よろしくお願いします。

  • 窓関数の処理の仕方によるFFT結果の違いについて

    ある1周期分のデータX(n)={X0,X1,・・・,Xn-1}があるとき(nは2の乗数)、ハミング窓関数K=0.54-0.46cos(2πn/N-1)を以下のように処理 (1)Y(n)=K*X(n) (2)Y(n)=K*X(n)+A (3)Y(n)=K*{X(n)+A} ただし、AはX(n)の平均値。 ここで、Y(n)をFFTした場合の違いについてシミュレーションしましたが、振幅スペクトルの結果が次のようになりました。  (1)と(2)は0次のみ異なる(1次以降は同じ)  (2)と(3)((1)と(3))は0次と1次が異なる(2次以降は同じ) 【質問1】 (2)と(3)の2次以降が同じになる理由はどうしてでしょうか。

  • ディガンマ関数 ψ( )

    ディガンマ関数 ψ( ) 0 <= m < nのとき { ψ(n-m)sin(n-m)π + πcos(n-m)π - log(z/2)sin(n-m)π } * (1/π) という式が変形され cos(n-m)π となるそうですが、ψ(n-m) - log(z/2) = 0ということでしょうか? ψ関数の定義をみているのですが、log(z/2)と関係するのが見つからず、よく分かっておりません。 よろしくお願いいたします。

  • 三角関数の極限について

    三角関数の極限について こんばんは、Giantsと申します。 「オイラーの公式の発見」のサイト http://www.rd.mmtr.or.jp/~bunryu/euler.shtml で次の解説があります。 ========以下解説======== nα=χとします。χは一定の数です。そうしてnを無限大にするのです。当然αは無限に小さくなります。すると、三角関数の性質から、  lim[n→∞]cos(χ/n)=1   lim[n→∞]sin(χ/n)=χ/n がいえます。 ========以上解説============== 何故cosの場合は1になり sinの場合はx/nで0ではないのですか。 どちらもx/nでもいいと思うのですが。 アドバイスよろしくお願いします。

  • 偶信号・奇信号

    三角関数の信号を偶信号と奇信号に分解するにはどうしたらいいのでしょうか? (f)=sin(2πωt+θ) (f)=cos(2πωt+θ) ネットにあまり詳しく書かれていないのでよろしくお願いします。