• ベストアンサー

拍手の間隔を解析で求めるには?

等間隔で発生している衝撃音の間隔を、解析的に求めることはできるでしょうか?たとえば、拍手をしている周期であったり、太鼓を叩いている周期を演算で求めたいと思っています。もちろん、時間波形の間隔から周期を読み取ることはできますが、より周波数解析的な手法で求まらないかと考えています。音をPCに取り込んでFFT解析を行っても、拍手や太鼓一発の音そのものの周波数(数1000Hz)は算出されても、叩いている間隔(数Hz~10数Hz)は算出されません。FFT点数やウインドウ関数などをいろいろと変えてみましたが、結果は同じでした。ノイズはほとんどないものと仮定して結構です。どなたか教えていただけないでしょうか?

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

  • ベストアンサー
  • paddler
  • ベストアンサー率53% (176/330)
回答No.2

これならできる、という方法をお教えしましょう。検出したいのは、簡潔に言えば、   "拍手や太鼓一発の音そのもの"の交流信号 ではなく、   "拍手や太鼓一発の音そのもの"の基本周波数信号の強度の時間変化 ですよね。なので、実際のマイクロホン出力から"拍手や太鼓一発の音そのもの"の 基本周波数近辺の成分だけを適当なバンドパスフィルタで抜き出し、それを整流(時定数 は~数十msくらいか)して直流信号化してやればいいだけの話です。音圧が時間変化 しなければ、出力は一定の直流信号になりますが、連続する拍手のような間欠音では この出力はそれなりの周期で強弱の変化をするはずです。なので、この整流出力を A/D変換してPCに取り込み、それをFFTしてやればOKです。前の回答者さんが答えて いらっしゃるように、100Hzくらいでサンプリングしてやれば十分でしょう。 なお、バンドパスフィルタ+整流を外部回路でやる代わりに、マイクロホン出力を直接 A/D変換してPCに取り込み(これは質問者さんが既におやりになっている作業ですね)、 ソフトウェアで同期整流(ロックインアンプの信号処理。下記URL参照)してやれば、 バンドパスフィルタと整流が一度にできます。この計算結果を適当な時間間隔で間引き or積分したものをFFTにかけてもOKです。 http://www.nfcorp.co.jp/keisoku/noise/li_genri2.html あと、もう一つ。今おやりになっている方式を極力活かしたいなら、自己相関(下記URL参照) をやるのも手です。ただし、入力データは基本波形の繰り返しが数回以上含まれる長さで 取り込んでおくことが必要です。 http://ja.wikipedia.org/wiki/%E8%87%AA%E5%B7%B1%E7%9B%B8%E9%96%A2 (「ウィナー・ヒンチンの定理」のところの説明)

参考URL:
http://www.nfcorp.co.jp/keisoku/noise/li_genri2.html
DonQuijote
質問者

補足

ご回答、ありがとうございます! おっしゃる通りで、求めたいのは「"拍手や太鼓一発の音そのもの"の基本周波数信号の強度の時間変化」になります。 この変化の周期を知りたいことになります。 実際は人の拍手よりは早い連続衝撃音を解析したいと思っていまして、その周期は10~50Hz程度です。 単純にサンプリング周波数を下げて(200Hz)音を取り込み、普通にFFTしてみたのですが…、どうもイメージ通りの結果になりません。 実際の周期よりも随分高い周波数になってしまいます。 分解能が高くなるように、長時間記録してFFTの点数も増やしているのですが…。 電気系は(電気系も?)チンプンカンプンなので、整流やロックインアンプは良く分からないです…。 ですが、同じ内容になるかと思って、取り込んだ波形から時定数を掛けた実効値を求めて、その結果をFFTしてみました。 ほぼイメージ通りの結果が出ました! ただ、波形信号がすべて+の値のせいでしょうか? FFT結果の直流に近い成分(0~10Hz程度)が非常に大きく現れてしまい、10数Hzの周期については解析が困難です。 この直流成分をカットすることはできるのでしょうか? ハイパスフィルターを通すしかないのでしょうか? 自己相関の解析もやってみたのですが、一つ一つの衝撃音自体、あるいはその間隔に微妙なバラつきがあるせいか、うまく結果が出ないです…。

その他の回答 (5)

  • outerlimit
  • ベストアンサー率26% (993/3718)
回答No.6

補足を見る限り 回答の主旨を理解されているとは思えません もう一度周波数解析の基本に立ち返って検討なされますことを

  • paddler
  • ベストアンサー率53% (176/330)
回答No.5

> この直流成分をカットすることはできるのでしょうか? > ハイパスフィルターを通すしかないのでしょうか? 基本的にはそうですが、ノイズ成分が無視できるなら、簡便には「微分」で代用できる ことも多いです。更にソフト処理では「微分」は「差分」(何点か離れたデータ間の差を 新たなデータとする)で代用できます。 ノイズが気になる場合は、まじめに低周波成分の除去をしますが、ソフト的には十分 長い点数の単純平均を計算し、元データからそれを差っ引けばベースライン(低周波 成分)を補正できます。

  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.4

FFTするより、自己相関関数を計算したほうが、直感的に理解しやすいのでは。 ※実はやってることは本質的にはFFTと全く同じなんですが(ウィーナ・ヒンチン)。

DonQuijote
質問者

補足

ご回答、ありがとうございます! とりあえずやってみたことを、ANo.2の補足に書いていますので、見ていただきたいと思います!

  • outerlimit
  • ベストアンサー率26% (993/3718)
回答No.3

FFTの原理で最低周波数はデータ長で規定されます そのFFTは何データ処理でしょう 1024,2048・・・ 20KHzサンプリングで2048データならば、周波数範囲は概略10~10Khzになります ですから0.1秒より長い周期は解析できません 100Hzでサンプリングするには50Hzのローパスフィルタを通さなければなりません そこで簡易的に 5ミリ秒間の平均データを5ミリ秒のサンプリング値としたらそれなりの解析ができるのでは・・です 20Khzサンプリングでは5ミリ秒で100データです、この平均を代表値とすることでローパスフィルタを通過させた信号に近似させることを期待しています 本来ならば 50Hz程度のディジタルフィルタ処理して、それを100hz程度でサンプリングした信号として その信号をFFT処理すれば 0.1hz程度までは解析できるのではと想定しています FFTの性能によってはもう少し低いサンプリング周波数が必要かもしれません だいぶ前ですが 1hzのサンプリングで十数秒から数十秒周期の信号を解析しました アクティブ素子を使用したローパスフィルタやより高速でサンプリングした信号をディジタルフィルタで処理したりして 拍手そのものの解析か、拍手の周期の解析かで着眼点を代えなければなりません 前の回答でラグと表現したのは前後何データ分まで解析するか(事故相関を取るか)の意味です これが解析できる最低周波数を制約します

DonQuijote
質問者

補足

たびたびありがとうございます! あくまで、拍手の周期の解析が行いたいのです。 (実はより複雑なんですが、その取っ掛かりとしてです。) とりあえずの進捗は、ANo.2の補足に書きます!

  • outerlimit
  • ベストアンサー率26% (993/3718)
回答No.1

FFTでも充分なデータ長(データ数)とそれを解析できる能力があれば可能です 最低でも拍手の10周期分程度のデータは必要です 数Khzを解析する状況だと 数Hzの解析は、データのラグ 1000以上になりますから FFTプログラムの機能によっては無理があると思います (FFTは最高周波数/最低周波数 が100~1000程度と思われます、確認してください) 100hz程度でサンプリングするか、5ミリ秒毎の平均データを使用してみたら如何でしょうか

DonQuijote
質問者

補足

さっそくのご回答、ありがとうございます! 録音および解析は、1分間録音したデータを使っています。 現在のサンプリング周波数は、できるだけ可聴域に近い音の解析が必要かと思い、20kHzでサンプリングしています。 ナイキストの関係で、10kHzまでの解析が可能かと思いますので、FFTの上限周波数は10kHzです。 下限周波数の設定は…通常FFTではできないですよね? 0Hzからになっていると思います。 このような設定でFFTを行い、加算アベレージを行ったグラフを見ています。 「データのラグ」とは何でしょうか? FFT点数を頑張って(?)8192点ぐらいで解析すると、FFT後の周波数分解能が2.5Hz弱になっています。 outerlimitさんのご指摘は、サンプリング周波数をもっと落として解析する必要があるということですよね? 100Hzサンプリングで録音しても、手拍子の音は記録されるのでしょうか? 手拍子自体の音は、もっと高い音だと思うのですが…。 実際にやってみればいいのですが、今はその環境にいないもので…。 理解不足なら申し訳ないです。

関連するQ&A

  • 周波数解析について

    ある信号をFFTを用いて周波数解析をしているのですが、単純なことについて教えて下さい。 自分の中のイメージとしては、周波数解析とは、 ある波を一定の周波数ごとに分解して、ある周波数帯域にどれくらいの成分が含まれているかを検討する物だと思っています。 自分のイメージが正しければ、あることが疑問に浮かんでいます。 現在、ある信号を周波数解析する前段階として、エラー(人工産物的な要素)を除外しています。 方法としては、時系列の信号データを一定時間毎に区切ってFFTをかけると言う物です。 自分が解析したい、周波数帯域は1Hz~35Hzまでの帯域と考えています。 綺麗な信号ならば問題なのですが、先のようなエラーと言うかノイズが載っている信号に対して、35Hzのフィルターをかけるとノイズの部分がなくなりクリアーな波形が見られます。 自分の知識が少ないため、ノイズが見られる信号は破棄していましたが、考えてみれば、必要な部分は1Hz~35Hzなので、35Hz以上のノイズ(フィルターをかけてなくなる領域のノイズ)が乗っていても、自分が必要な周波数帯域での周波数解析には関係ないのではないだろうか?と考えています。 少々ややこしい内容の質問になりましたが、アドバイス宜しくお願いいたします。

  • 衝撃信号のFFTに関して質問です。

    建設現場の杭打ちによる衝撃信号(加速度)をサンプリング周波数25.6kHzにて10秒間収録しました。このデータをOriginやDADiSP等信号解析ソフトウェアを使用してFFTを行いました。 その結果として、25.6kHz×10秒=256,000個のデータを十把一からげでFFT(DFT?)を行った場合の振幅と、リサンプリングして256Hz×10秒=2,560個のデータを十把一からげでFFTした場合の振幅が明らかに異なるのですが、その理由をご教示頂きたくお願いいたします。 同じ、解析ソフトウェアの仕様によって若干周波数分解能は異なりますが、計算上はどちらの場合も周波数分解能は0.1Hzですので、近似の値が欲しいのですがうまくいきません。 サイン波のような定常信号で同じ処理を行った場合は、ほぼ同等の結果が得られたのに対して、単発の衝撃信号の場合は、衝撃時以外の波形がほぼフラットなため広い周波数帯に分散されてしまうのでしょうか? 調査対象として100Hz以上の周波数は必要無かったので、リサンプリングしてみた結果が上記のような内容となってしまいました。 私の処理方法が誤っていればそれはそれで助かるのですが・・・。 何卒宜しくお願いいたします。

  • フーリエ変換後の解析について

    フーリエ変換後の解析について ある振動の波形を測定していたとします。 No.1 最初は特に何も振動を加えず、ありのままを測定したとします。 No.2 そして次に周期的に弱い振動を与えたとします。 1と2の結果得られた振動波形を見比べた結果、ほとんど違いは見られなかった場合 FFT解析を行う意味はあるのでしょうか? 波形にほとんど違いがなかったということは本当に微妙な振動が加わっただけということですよね? そんな微妙な違いしかない結果をFFTしたところでほとんどスペクトルにも差がでないと思うのですが・・・。 それともたとえ微妙であっても周期的に加えてる以上どこかしらにピークがでてくるものなのでしょうか?

  • 周波数解析について

    ある時系列データをセンサを使って計測し、FFTを行ったのですが、結果の見方など、いくつか疑問があります。 得られた時系列データを見ると、直流成分に比べて交流成分が非常に微小であったとします。 (たとえば大気温度を計測した結果、直流成分は20℃であり、それから±0.01℃変動など) ここで、この変動がどこから由来するものなのか知るためにFFTを行いました。 そこで質問です。 (1)振幅スペクトル(あるいはパワースペクトル)を求めると、直流成分が大きすぎて、交流成分は潰れて表示されてしまうと思うのですが、普通直流成分は除いて表示するものなのでしょうか? (2)実際には綺麗な周期性はない波形であるためFFTを行うとエイリアシングの様な現象が起こると思うのですが、FFTで得られた結果は低周波数領域、高周波数領域どこでも信憑性のある結果なのでしょうか? といいますのも、 (3)パワースペクトル密度の単位は今回ならば[℃^2/Hz]だと思うのですが、表示の仕方が人によってはデシベルであったり無次元であったりするのですがどれが正しいのでしょうか? 長くなりましたが、よろしくお願い致します。

  • バタフライ演算を用いたフィルタ(数式)の畳み込みについて

    現在、バタフライ演算によるFFTおよびIFFTのプログラムを用いて、 音の空気減衰の理論式を畳み込みたいと考えています。 理論式は横軸が周波数、縦軸が音圧レベルの減衰量のグラフで表されるもので、周波数の関数になっています。 そこで、FFTで原信号を周波数領域に変換し、この理論式を適用してIFFTしたらどうかと考え、減衰量をパーセンテージ(減衰量が6dBなら50%)に変換して、FFT結果の各値に周波数ごとの減衰量を乗算する、等を行っているのですがうまくいきません。 IFFTを行うと、虚数の値が0ではない数になってしまっています。 おそらく、FFTにより得られた値のサンプリング周波数と、減衰の理論式の周波数軸が一致していないためと考えられますが、具体的な手法が分かりません。 なお、入力している原信号のサンプリング周波数は44100Hzです。 どうかよろしくお願いいたします。

  • ナイキスト周波数(間隔) 標本化定理

    複数の本やサイトを用いてナイキスト周波数や標本化定理,サンプリング周波数について,学んでいるものです. しかし混乱しました. ナイキスト間隔とは,元の信号を再現出来る最高の間隔でこれ以上の間隔でサンプリング(標本化)すると折り返し歪が生じるというような間隔,逆に言うと,これより小さなサンプリング間隔でサンプリングすれば良いと本に書いてありました. また,ナイキスト間隔の逆数はナイキスト周波数であり, サンプリング間隔の逆数はサンプリング周波数であるので, サンプリング周波数はナイキスト周波数より大きければ良い,と書いてあるのですが,ここが分けわかりません. Example 周期T=2の波をサンプリング間隔Ts=0.5でサンプリングした場合 周期の周波数はf=0.5Hz,サンプリング周波数はfs=2Hz この時, ナイキスト周波数はfn=1Hz,ナイキスト間隔は Tn=1なのでしょうか? だとすると,ナイキスト周波数以上でサンプリングすればいいという記述はどういった意味なのでしょうか?  サンプリング定理によると,(ローパスフィルタなどを用いずに)折り返し歪を防ぐには, 常にナイキスト周波数の2倍以上の周波数が求められるのだから, サンプリング周波数はナイキスト周波数の2倍以上なら良いと書くべきではないでしょうか? しかし自分でも感じるのですが,この結論もまた謎です^^;

  • FFTを使って異なるサンプリング周波数での周波数強度について

    100Hzのsin波に対してFFTを行い周波数スペクトルを出したときのことです。 解析条件 サンプリング周波数・・・・44.1kHz , 22.1kHz FFTの点数・・・32768点 窓関数・・・ハニング窓関数 まず、サンプリング周波数44.1kHzで解析を行い、100Hzにメインローブが現れていました。 次に、サンプリング周波数22.1kHz以外は同様の解析条件で解析を行ったのですが、サンプリング周波数44.1kHzに比べて、100Hzのスペクトル強度が下がっていました。また、サイドローブは44.1kHzに比べて上がっていました。 スペクトル強度がサンプリング周波数によって変化するというのはありえるのでしょうか? それとも、私の組んでいるプログラムが間違っているという事なのでしょうか?どなたかご教授下さい。よろしくお願いします。

  • 周波数解析のスペクトルについて

    waveファイルで取り込んだ音響データを、FFTを用いて周波数解析を行っています。 元のwaveファイルのデータは、ピーク値で20000示す時があるデータが入っているのですが、 そのFFTの結果が5000000など元の値とは桁違いの数字が出てしまいます。 これはなぜなのでしょうか? よろしくお願いします。 元データ サンプリング周波数:44.1kHz FFT解析条件 サンプル数:2048 窓:ハニング

  • 筋電の周波数成分について教えて下さい。

    表面電極から差動アンプを通して検出した生の筋電波形をFFT演算してみたところ 全周波数成分は数Hz~数kHzでした。しかし、純粋な筋電成分は何Hz付近なのでしょうか? 負荷と筋電レベルの関係を調べたく、どの周波数成分の電圧レベルを見たら良いか分からないのです。 ちなみに電極固定箇所は前腕部の撓側手根屈筋付近です。 よろしくお願い致します。

  • 周波数解析(エイリアシング)

     スイマセン.解析初心者で,知識も余りありません.どなたか,教えてください.  あるデータの周波数解析をしています.サンプリング周波数100Hzで取ったデータを,バンドパスフィルタ(1~50Hz)にかけて,周波数解析をしたのですが,エイリアシングになっていると言われました.  これは,どう言う事を意味して,どのような解析方法を行う必要があると言うことなのでしょうか??  よろしくお願い致します.