私はサウンド処理に関して本当に初心者なので、私の質問は些細なことかもしれません。私がやりたいことは、R を使用して、wav ファイルから特定の周波数範囲 (150 ~ 400 Hz としましょう) を抽出することです。つまり、私が作成した周波数成分のみを含む別の wave ファイル (wave2) を作成したいと考えています。 (150 ~ 400 Hz など) を指定します。
私はネットで何かを読んで、FFT分析でこれを行うことができることを発見しました。ここに問題があります。
このコードがあるとします:
library(sound)
s1 <- Sine(440, 1)
s2 <- Sine(880, 1)
s3 <- s1 + s2
s3.s <- as.vector(s3$sound)
# s3.s is now a vector, with length 44100;
# bitrate is 44100 (by default)
# so total time of s3 is 1sec.
# now I calculate frequencies
N <- length(s3.s) # 44100
k <- c(0:(N-1))
Fs <- 44100 # sampling rate
T <- N / Fs
freq <- k / T
x <- fft(s3.s) / N
plot(freq[1:22050], x[1:22050], type="l") # we need just the first half of FFT computation
得られるプロットは次のとおりです。
さて、2つのピークがあります。それらがどの周波数に対応するかを知りたい場合は、次を見つけてください。
order(Mod(x)[1:22050], decreasing=T)[1:10]
[1] 441 881 882 880 883 442 440 879 884 878
最初の 2 つの値は、サウンドの作成に使用した周波数に非常に近いです。
real computed
Freq1: 440 | 441
Freq2: 880 | 881
さて、問題は次のとおりです。サウンドから範囲内の周波数を削除したい場合、どうすればよい(1, 500)
ですか?そして、範囲のみを選択(および保存)する方法は(1, 500)
?私が注目しているのは、私の新しいサウンド (周波数が削除されたもの) が単純なものに近いものになるということですSine(freq=880, duration=1)
(私は知っていますが、まったく同じになることはできません!)。それは可能ですか?
それが私が必要としているものだと確信してfft(DATA, inverse = TRUE)
います。しかし、よくわかりませんが、続行する方法がわかりません。