2016-12-07 5 views
0

DSP Guideの式8-2から「合成式」を実装しようとしています。そのため、周波数領域で時系列を再サンプリングできます。私が方程式を読む方法は、Nは出力点の数であり、0からN/2までのkのループが与えられた場合、私は元のサンプリングレートの2倍までしか再サンプリングできません。周波数ドメイン(FFT)で時系列を再サンプリング

私はRで簡単に実装しようとしましたが、結果は私が期待しているものに近いものではありません。私のコード:

input <- c(1:9) 
nin <- 9 
nout <- 17 
b <-fft(input) 

reals <- Re(b)/(nout/2) 
imags <- Im(b)/(nout/2) 
reals[1] <- reals[1]/2 
reals[(nout/2)] <- reals[(nout/2)]/2 

output <- c(1:nout) 
for (i in 1:nout) 
{ 
    realSum <- 0 
    imagSum <- 0 
    for (k in 1:(nout/2)) 
    { 
     angle <- 2 * pi * (k-1) * (i-1)/nout 
     realSum <- realSum + (reals[k] * cos(angle)) 
     imagSum <- imagSum - (imags[k] * sin(angle)) 
    } 

output[i] <- (realSum + imagSum) 
} 

私の入力の場合は、私の期待出力が

ている間、私は出力

[1] -0.7941176 1.5150954 0.7462716 1.5022387 1.6478971 1.8357487 
2.4029773 2.1965426 3.1585254 2.6178195 3.7284660 3.3721128 3.8433588 4.6390705 
[15] 3.4699088 6.3005605 2.8175240 

に取得

[1] 1 2 3 4 5 6 7 8 9 

(0.5秒に1秒、リサンプリングと言うでサンプリング)

[1] 1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6 6.5 7 7.5 8 8.5 9 

私は間違っていますか?

答えて

0

上記のコードは、記事で参照している逆DFTのように見えます。あなたの予想される入出力から、DFT/Inverse DFTソリューションではなく、安価な線形補間が必要なようです。

上記の入力/出力関係ステートメントから、時系列入力と希望する時系列出力の間に望ましい関係があるようです。

符号化した逆DFTは、周波数領域から時間領域に移動します。

私はあなたのステートメントから集めることができたので、[1,1-> 9]のシリーズから始めて、フォワードDFT(周波数ドメインへ)を行い、その結果を逆DFTにします時間領域へ)。

これは正しい方向のヒントです。

関連する問題