私はほぼ同じ数値のグループを含むリストを持っています。 (1004.523,1004.575,1004.475,791.385,719.298,791.301,791.305,791.299)Pythonのファジー値に基づいてリストを減らす
私がしようとしているのは、リストを読んで、すべての1004.5 +値を集計して平均値を見つけることです。続けてすべての791.0 +値を見つけ、同じ値を返します。
各グループにどれだけの値があるか分かりませんし、グループの数もわかりません。
私が探している結果は、各グループの平均値を含む別のリストです。したがって、私の結果は(1004.524、791.3176)
です。私が現在使用しているコードは非常にKludgeyなので、もっと良い方法があるはずです。
あなたが見ることができるように、最後の数字セットがelseをトリガーしないので、elseで1回、ifの最後で1回コードを繰り返す必要があります。私は最後の値を追加する必要がある場合の完了時にプラス。
len(トーン)-iではなくlen(トーン)を使用すると、範囲外のエラーが発生します。
ご意見やご提案をいただければ幸いです。ご協力いただきありがとうございます。
エド
toneLen = len(tones) -1
for i in range(0, toneLen):
if abs(tones[i]-tones[i+1]) <= 2.0:
tmpTones.append(tones[i])
else:
freq = mean(tmpTones)
newTones.append(freq)
tmpTones = []
tmpTones.append(tones[i+1])
freq = mean(tmpTones)
newTones.append(freq)
tones = newTones
UPDATE: まず、私は提案を提出したすべての人に感謝したいです。応答は非常に迅速かつ有用でした。私はおそらく私が下でやっているいくつかの情報を含んでいたはずです。助けてくれてありがとう。
次に、私が何をしようとしているかの簡単な説明。当社の消防署は、近くにある部署の派遣を追跡する方法を探しています。ほとんどの場合、2つのトーンシーケンシャルページング、すなわち1000Hzに続いて500Hzを使用する。
私はnumpy fftを使ってトーン周波数を見つけています。トーンの精度は約±2Hzであるように見えるので、計算された周波数を既知のページングトーンのリストと比較し、最も近いマッチングを選びます。すべてのトーンがページングトーンにマッチした後、私は興味のある部門とのマッチを探します。私はこれを始めたとき、私はいずれにも与えられていることを知りませんでした
ことの一つは、同じ音が数回繰り返すことができるので、トーンの順序が重要である派遣します。例: 707.3,339.6,707.3,569.1,447.2,569.1が典型的なディスパッチです。私はその後、トーン・ペアのいずれかが、私は、私はすべてのあなたの助けのために再度メッセージに
感謝を表示する場合に興味があるものですかどうかを確認します。
エド
グループがどの程度「広い」ことができるか知っていますか(つまり、「2.0」を空中から引き出したのか、それとも推論できるものなのか)知っていますか?グループは「重なり合っていてもいい?同様に、巨大な一連の値が絶えず増加し、少量で離れていて、広い範囲をカバーできますか? –
数字を見ると、一般に+ 2Hzの傾向にあることがわかりました。これらの数値は、サウンドカードからサンプリングした結果です。私は現在、毎秒7回サンプリングしてから、fft計算を行って優位周波数を決定しています。一般に、第1のトーンは1秒間、すなわち約7サンプル、第2のトーンは約3秒間、すなわち約21サンプルである。通常、複数のトーンセットが存在するため、パターンは繰り返されます。私は一度に6つ以上の音色を聞いたことがないので、一般的に200はおそらく実用的な限界であると言います。 – edwardb
あなたの正確な問題に関する追加情報をお寄せいただきありがとうございます。サンプルを並べ替えるので、私の解決策はうまくいかないでしょう。 1つの質問、あなたがそれらをカウントしようとする前に、トーンを分類する方が簡単ではないでしょうか?おおよそのものと正確に等価なものをマッチさせる方がずっと簡単です。 –