2011-09-09 2 views
0

長いタイトルのビットですが、私が尋ねようとしているのはこれです。ハッシュ関数は2つのデータストリーム(AとB)が与えられ、メッセージダイジェストを返します。メッセージダイジェスト自体の違いは、元のストリームの違いは?差分の大きさが元のメッセージの差異に比例するダイジェストを返すハッシュ関数はありますか?

たとえば、AとBは大きく異なり、h(A)= FA3DB31とh(B)= DA812DBです。 AとBがかなり似ている場合、h(A)= FA3DB31、h(B)= FB4DB42?

具体的には、2つの音楽ファイルを比較して、録音時に元のサンプリング設定が異なるにもかかわらず、同じ曲であるかどうかを判断することです。私は当初、十分な大きさのウィンドウで実行中の平均値を計算することができるかもしれないと考えましたが、異なるビットレートを扱うときに問題があるようです(同じビットレートに変換することはできません)。また、私はビート検出を行い、曲間のビートのシーケンスを比較するオプションがありません。

答えて

2

あなたが探しているのは、通常の意味でのハッシュ関数ではありません。ハッシュ関数は、具体的には、入力の差異が大きく異なる出力を生成するように、小さな差異を拡大することが想定されています。

解決したい問題は、別の問題です。通常、それは指紋と呼ばれます。それはまた、特にあなたが対処できるようにしたい特定の特性に応じてはるかに困難です。たとえば、ある曲が切り取られた場合、その曲全体と一致させたいのですか?誰かが意図的にまたは偶然にアナログ送信を使用して曲を歪ませるとどうなりますか?変換?リサンプリング?

知的好奇心のためにこれを行っている場合は、それは非常に難しいトピックであると警告してください。学術的な情報源から情報を見つけよう。実際にこの機能を特に必要とする場合は、対象に関する大量の研究開発が行われているため、既存のソリューションを見つけようとします。

+0

正しい用語を使用していくつかの結果が見つかりました(http://en.wikipedia.org/wiki/Acoustic_fingerprint)。私が遭遇したすべての方法は、(現在の携帯電話の仕様に限定されている)機能を抽出するのに非常にCPU集約的なようです。しかし、提案に感謝します。 (私はあなたの返信をupvoteだろうが、私は十分な評判がないように見える) – coderunner

関連する問題