背景:一連のオーディオ レコーダーから音源をローカライズすることに興味があります。各オーディオ アレイは、60 度 (0、60、120、180、240、300 度) ごとに均等に配置された 6 つの指向性マイクで構成されます。信号強度のセットが最大である隣接するマイクのペアを見つけることに興味があります。データは、タイムスタンプ、アンテナ番号と方向、および信号強度で構成されます。以下に、単純化されたデータセットを添付しました。
df <- data.frame(ant.bearing = seq(0,300, by=60), sig = c(98, 60, 44, 67, 58, 91), ts=1)
目標:このデータセットから、このデータが円形であるという事実を考慮しながら、関数を使用して、信号強度のセットが最大である 2 つの隣接するアンテナ (つまり、上記のサンプル コードでは方位 0 度と 300 度のアンテナ) を抽出したいと考えています。自然とアンテナ 0 と 300 は隣接しています。出力は、上記のタスクを満たす 2 行のデータになります。たとえば、上記の場合は行 1 と行 6 です。
私が試したこと:
direction.finder <- function(dat){
# finding bearing with max signal strength
max <- dat[dat$sig == max(dat$sig),][1,]
# finding signal strengths of neighbor antennas and pulling out which has highest
left = dat[dat$ant.bearing==max$ant.bearing-60,]
right = dat[dat$ant.bearing==max$ant.bearing+60,]
if(max$ant.bearing==0)
left = dat[dat$ant.bearing==300,]
if(max$ant.bearing==300)
right = dat[dat$ant.bearing==0,]
sub = right
if(left$sig > right$sig)
sub = left
dat <- rbind(max, sub)
}
この現在の機能は、私のタスクの適切な回避策として機能しますが、理想的ではありません。私のコードの機能を改善するための提案やヒントは大歓迎です。