320 개의 샘플을 포함하는 패킷으로 PCM 데이터 저수지 소켓 연결을 수신하고 있습니다. 샘플링 속도는 초당 8000 샘플입니다. 나는 이런 식으로 뭔가를하고있는 중이 야 : 그 후kiss_fftr의 KissFFT 출력
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
에 어떤 주파수 범위 (어떤 주파수 범위)가 포함되어 있는지 알 수 없습니다.
전 신호 처리 및 푸리에 변환 주제에있어 초보자입니다.
어떤 도움이 필요합니까?
이것은 논쟁 거리가 아닙니다. 예를 들어 http://dsp.stackexchange.com. 하지만 실제로 DSP에 대한 입문서 (예 : [this] (http://www.amazon.co.uk/Understanding-Digital-Signal-Processing-Richard/dp/0137027419/))를 얻는 것이 좋습니다. 이것은 StackOverflow 스타일의 답변으로 적절하게 다루기에는 너무 큰 주제입니다. –