自己相関の「品質」を評価する最良の方法は?


9

これは、いびきアプリからの片道です

オーディオ信号の自己相関を生成するときに、いびき/呼吸と「相関」するかどうかを確認するために、ひび割れがありました。私は単純なアルゴリズムを実行しています(1.0を0番目の要素として生成します。これは良い兆候です)が、自己相関が強いかどうかを判断するために結果を評価する方法と、おそらくそれを使用して分離する方法について疑問に思っていますさまざまな音源。

質問1:自己相関のRMS(要素をスキップする)は、「品質」の測定基準と同じくらい良いですか、それとももっと良いものがありますか?

詳しく説明します。 数値の方法(チャートを「見る」のではなく)で、自己相関の高い信号と自己相関の低い信号を区別します。

(私は他にどんな質問をするべきかを知るのに十分なほど知りません。)

初期の結果の一部: 場合によっては、自己相関(RMSまたはピーク)がいびきの劇的なジャンプを示します。正確に私が知りたい応答です。他の場合では、これらの測定値には明らかな動きがまったくありません(これは2つの応答を伴う2つのいびきである可能性があります)。

更新-5月22日: ようやく、これについてさらに作業する時間を得ました。(文字通り苦痛な別のアプリで引き延ばされました。)私は自己相関の出力をFFTに入力しましたが、出力はやや興味深いです。いびきが始まると、原点付近でかなり劇的なピークを示しています。

だから今、私はこのピークをどういうわけか量子化する問題に直面しています。奇妙なことに、絶対的な大きさの点で最も高いピークが別のときに発生しますが、ピークと算術平均の比率を試してみたところ、かなりうまくいきました。それでは、FFTの「ピーク」を測定するいくつかの良い方法は何ですか。(そして、してください -このことは、自身の尾を飲み込むの近くにすでにある:)私はそれのFFTを取る必要があると言うことはありません。)

また、中央にゼロ(定義では1.0のマグニチュード)が入力された自己相関結果をミラー反射すると、FFTの品質が多少向上する可能性があることに気付きました。これは両端に「尾」を置くでしょう。これは(おそらく)良いアイデアですか?鏡像は直立する必要がありますか?(もちろん、あなたが何を言っても試してみるつもりですが、詳細については少しヒントが得られるかもしれません。)

試した平面度-

私のテストケースは、「行儀の良い」カテゴリと「問題のある子供」カテゴリに大別できます。

「正常に動作する」テストケースの場合、自己相関のFFTの平坦性は劇的に低下し、いびきの間にピークと平均の自己相関の比率が上昇します。これらの2つの数値の比(ピーク比を平坦度で割った値)は特に敏感で、呼吸/いびきの間に5〜10倍の上昇を示します。

ただし、「問題のある子供」の場合、数字は正反対の方向を向いています。ピーク/平均比はわずかに低下しますが、平坦度は実際には50〜100%増加します

これら2つのカテゴリの違いは、(主に)3つあります。

  1. 「問題のある子供たち」の騒音レベルは(通常)高くなります
  2. 「問題のある子供」では、オーディオレベルが(ほとんどの場合)低くなります。
  3. 「問題のある子供」は、呼吸が多く、実際のいびきが少ない傾向があります(両方を検出する必要があります)

何か案は?

更新-5/25/2012: 勝利のダンスをするのは少し時期尚早ですが、ポイントに関する自己相関を反映し、そのFFTを取り、次にスペクトルの平坦性を行ったとき、私の複合比率スキームは良いジャンプを示しましたいくつかの異なる環境。自己相関を反映すると、FFTの品質が向上するようです。

ただし、マイナーな点の1つは、反射された「信号」の「DC成分」がゼロであるため、0番目のFFT結果は常にゼロであり、このことはゼロを含む幾何平均を壊すことです。しかし、0番目の要素をスキップしても機能するようです。

私が得ている結果は、いびき/呼吸をそれ自体で識別するのに十分ではありませんが、かなり敏感な「確認」のようです-「ジャンプ」が得られない場合、それはおそらくいびき/息ではありません。

私はそれを詳しく分析していませんが、起こっているのは、息/いびきの間にどこかで口笛の音が発生し、その口笛が検出されていることです。


相関の「強さ」の測定に関する限り、相関を行う前に、相関する2つの信号を正規化する必要があります。(正規化後、各信号の合計は1になるはずです)。次に、相関ピークは常に-1と1の間に存在します。これがあなたの強みです。残りの質問についてはわかりません。おそらく少し編集できます。
Spacey、

私は自己相関を扱っているので、2つの信号はまったく同じであり、定義上、相互に「正規化」されています。「強さ」とは、自己相関がどの程度あるかを意味します。
ダニエルRヒックス

何が欲しいのかわかりませんが、全体のRMS値ではなく、自己相関ピークの最大値を測定したいと思います。

@endolith私彼があなたの自己相関関数の「ピーク」の尺度について尋ねていると思うかもしれません、それは多くのピークの信号から1つのデルタ(ノイズの自己相関)を持つ信号を区別するためですか?(信号と高調波の自己相関)。おそらく、スペクトル平坦度測定を使用することもここで使用できます...
Spacey

スペクトルの平坦性が彼の望んでいるようです。ダニエル:信号とホワイトノイズの違いを調べたいですか?
Emre

回答:


3

予選

このデモは、MP3ファイルの読み取り/書き込みを可能にするMATLABパッケージaudioreadを使用すると簡単になります。または、例のMP3ファイルを手動でWAVに変換することもできます。

簡単なケース

問題のあるファイルを調べる前に、SoundCloudに向かい、SNRが高い場合に何が期待できるかがわかるように、いびきをかきましょう。これは52秒ステレオ44.1KHz MP3です。それをMATLABのパスのフォルダーにダウンロードします。

次に、スペクトログラム(8192サンプルのハンウィンドウを選択)とスペクトルの平坦度を計算します。

[snd1,fs1]=mp3read('snoring - brobar.mp3'); % use wavread if you converted manually
[s1,f,t,p1]=spectrogram(mean(snd1,2),hann(8192));
sf1=10*log10(geomean(p1)./mean(p1)); % spectral flatness
plot(linspace(0,length(snd1)/fs1,length(sf1)),sf1); axis tight

ブローバーのいびきのスペクトル平坦度

スペクトルの平坦性の大きな落ち込み(つまり、ホワイトノイズからの逸脱)は、「いびきをかく」と叫びます。ベースライン(中央値)からの偏差を調べることで、簡単に分類できます。

stem(linspace(0,length(snd1)/fs1,length(sf1)),median(sf1)-sf1>2*std(sf1)); axis tight

ブローバーのいびきの分類されたスペクトル平坦性

ヘッドルームの標準偏差は2つ以上ありました。参考までに、標準バリエーション自体は6.8487です。

ハードケース

次に、ファイルを見てみましょう。10分間の8KHz WAVファイルです。レベルが非常に低いため、信号を圧縮するのに役立ちます。

[snd,fs]=wavread('recordedFile20120408010300_first_ten_minutes');
cmp=compand(snd,255,1);
wavwrite(cmp,'companded'); % used for listening purposes
[s,f,t,p]=spectrogram(snd,hann(8192));
sf=10*log10(geomean(p)./mean(p));
plot(linspace(0,600,length(sf)),sf);

ノイズの多いファイルのスペクトル平坦性

それぞれのいびきに伴う素敵なディップを参照してください?私もそうではありません。素晴らしいピークはどうですか?いびきをかいているのではなく、動く対象の音。標準偏差はわずか0.9388です。

結論

スペクトルの平坦性に依存したい場合は、よりクリーンな信号を取得する必要があります。何かを聞くだけで圧伸しました。低いSNRが検出された場合は、ユーザーに電話を近づけるか、ヘッドセットに付属の電話のようなマイクを使用するように指示します。

良いニュースは、問題のある場合でもいびきを検出できることです。ただし、この質問はいびきを検出するだけのものではなかったので、ここで終了し、他の質問でその方法を説明ます


これで、あなたは私が何に反対しているのかという感覚を得ました。そのサンプルは、私が作業しなければならないサンプルの中で「中」の品質でした-はるかに悪いものがあります。そして、私は私のサンプルを私の既存のアルゴリズムでかなりよく読むことができます。
ダニエルRヒックス

それらはどのようなアルゴリズムですか?
Emre、2012年

簡単に言うと、サウンドはFFTを1秒間に8回実行し、スペクトルは5つの周波数帯域にスライスされ、各帯域のパワーとスペクトルの差が計算されます。次に、表示される帯域に重みを与える方法で結果がスコアリングされます。適切な速度で変化します。
ダニエルRヒックス

@Emre私はあなたのリンクをたどり、soundcloudアカウントを作成しましたが、いびきをどのようにダウンロードしたのか正確にはわかりません。その横またはどこにもダウンロードボタンはありません。
Spacey

@Mohammad:ダウンロードリンクを提供しました。
Emre、2012年

1

自己相関は、信号のパワースペクトル密度の逆DFTに直接関連しています。その意味で、DFTの2乗の絶対値に含まれる情報はすべて、自己相関関数にも含まれます。

ただし、自己相関からわかるのは、高調波の存在です。(中心のピークから次に高いピークまでの距離)。おそらく、いびきと呼吸の基本波は異なるため、「自己相関法」は、特徴(この場合は高調波)を抽出できるようにするための出発点として最適です。

したがって、ホワイトノイズの自己相関はデルタ関数になり、中心ピークから2次ピーク​​(またはその問題の他のピーク)がなくなります。対照的に、信号に高調波がある場合、その自己相関関数には、存在する基本高調波に対応する2次および3次のピークが含まれます。メイン(中心)ピークからセカンダリピークまでの距離は、基本周波数の周期です。

編集:

あなたが求めているのは、自己相関関数がデルタにどれほど似ているかを示す数値、つまり数値です。そのために、スペクトル平坦度の測定値が適用できる場合があります。より一般的なケースでは、幾何平均から算術平均の測定値が適用されます。


自己相関は(ランダム)信号と(ランダム)ノイズをよりよく区別するという印象を受けました-ノイズはゼロに近い自己相関です。DFTであるOTOHは、ノイズをノイズ、つまりスペクトラム拡散として表します。少なくともこれは私が理解している「理論」です。
ダニエルRヒックス

私の編集を見てください。
Spacey、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.