2016-04-09 8 views
0

私は、パワースペクトルから信号の帯域幅を測定しようとしています。私は、相対的な振幅値が与えられた場合、最小値と最大値を抽出できるようにしたい。私はパワースペクトルを計算するために "seewave"を使用していますが、密度プロットを作成してアブラインを提供することはできますが、アブラインがプロットと交差する場所をRに教えてもらう方法はわかりません。信号品質に応じて、相対的な振幅値を変更する必要がありますが、Rを使用して帯域幅を測定する簡単な方法を探したいと思います。事前に感謝します!Rの信号の帯域幅を測定する

power.spec <- spec(IBK.trill.1, flim=c(0,2)) 
pow.spec <- as.matrix(power.spec) 
head(pow.spec) 
#    x   y 
# [1,] 0.000000000 0.007737077 
# [2,] 0.007470703 0.029795630 
# [3,] 0.014941406 0.021248476 
# [4,] 0.022412109 0.015603801 
# [5,] 0.029882813 0.014103307 
# [6,] 0.037353516 0.014584454 
freq <- pow.spec[1:2941,1] 
head(freq) 
# [1] 0.000000000 0.007470703 0.014941406 0.022412109 0.029882813 0.037353516 
ampl <- pow.spec[,2] 
head(ampl) 
# [1] 0.007737077 0.029795630 0.021248476 0.015603801 0.014103307 0.014584454 
plot(ampl ~ freq, type="l",xlim=c(0,2)) 
abline(h=0.45) 

enter image description here

+0

使用方法:約(ampl、freq、xout = 0.45) – chinsoon12

答えて

1

保存した閾値を超えて「Y」値の識別の結果:

wspec <- which(power.spec[, "y"] > 0.45) 

次に垂直に配置するために、「X」の値から引くために、これらの指標を使用最初のインデックスと最後のインデックスの行:

abline(v= power.spec[ c(wspec[1], tail(wspec, 1)) , "x"], col="blue") 

specは行列を返すので、変換は必要ありませんので、as.matrixではなく、元の「power.spec」値を返します。私は?specページの最初の例でこれをテストしました。私はあなたが本当にかわいそうになり、しきい値が過大であったところと、直前と直後の「x」の平均を取ろうとします。これは次のようになります。

abline(v= c(mean(myspec[ c(wspec[1]-1, wspec[1]), "x"]) , 
      mean(myspec[ c(tail(wspec, 1), tail(wspec, 1)+1) , "x"])), col="blue") 

enter image description here

私は私の例ではdiffとの違いと、典型的な分離を見なかった

mean(diff(myspec[ , "x"])) 
[1] 0.0005549795 

だから私は半分で背中と先に行っている可能性がありました合理的な見積もりを得るためにその金額。 (私はこれを "ハーフハイト"の見積もりとして使用しました:max(myspec[, "y"])/2

+0

ありがとうございました!これは愚かな質問のように見えるかもしれませんが、私はどのように線がx軸に合っている値を抽出するのですか? –

+0

私が使用していた例のすべてのy値( 'IBK.trill.1'を取得する方法が含まれていなかったため)は正の値しか持たなかったので、これをテストする方法はありません。 (あなたのデータもそうだと思います。) 'min(power.spec [、 'y'])'とは何ですか?答えは、答えに必要な精度のレベルに依存します[。 y [n-1]が1つの符号で、y [n]が別の符号であるインデックスの値だけを知る必要があれば、それはかなり簡単です(しかし、本当に別の質問です。 –

関連する問題