320 個のサンプルを含むパケットで PCM データをソケット接続経由で受信しています。サウンドのサンプル レートは 1 秒あたり 8000 サンプルです。私はそれで次のようなことをしています:
int size = 160 * 2;//160;
int isinverse = 1;
kiss_fft_scalar zero;
memset(&zero,0,sizeof(zero));
kiss_fft_cpx fft_in[size];
kiss_fft_cpx fft_out[size];
kiss_fft_cpx fft_reconstructed[size];
kiss_fftr_cfg fft = kiss_fftr_alloc(size*2 ,0 ,0,0);
kiss_fftr_cfg ifft = kiss_fftr_alloc(size*2,isinverse,0,0);
for (int i = 0; i < size; i++) {
fft_in[i].r = zero;
fft_in[i].i = zero;
fft_out[i].r = zero;
fft_out[i].i = zero;
fft_reconstructed[i].r = zero;
fft_reconstructed[i].i = zero;
}
// got my data through socket connection
for (int i = 0; i < size; i++) {
// samples are type of short
fft_in[i].r = samples[i];
fft_in[i].i = zero;
fft_out[i].r = zero;
fft_out[i].i = zero;
}
kiss_fftr(fft, (kiss_fft_scalar*) fft_in, fft_out);
kiss_fftri(ifft, fft_out, (kiss_fft_scalar*)fft_reconstructed);
// lets normalize samples
for (int i = 0; i < size; i++) {
short* samples = (short*) bufTmp1;
samples[i] = rint(fft_reconstructed[i].r/(size*2));
}
その後、OpenAL バッファを埋めて再生します。kiss_fftr
すべて正常に動作しますが、との間でオーディオのフィルタリングを行いたいと思いますkiss_fftri
。これの出発点は、音を時間領域から周波数領域に変換することですが、関数からどのような種類のデータを受け取っているのかよくわかりませんkiss_fftr
。これらの複素数のそれぞれにどのような情報が格納されているか、その実数部と虚数部が周波数について教えてくれるもの. fft_out
そして、どの周波数がカバーされているか(どの周波数スパンが)、どのインデックスがどの周波数に対応しているかはわかりません。
私は信号処理とフーリエ変換のトピックの初心者です。
何か助けはありますか?