📄 intfft2.c
字号:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include "rtdspc.h"
/************************************************************************
INTFFT2.C - Interpolate 2:1 using FFT
Generates 2:1 interpolated time domain data.
*************************************************************************/
#define LENGTH 2048
#define M 11 /* must be log2(FFT_LENGTH) */
main()
{
int i;
float temp;
COMPLEX *samp;
/* allocate the complex array (twice as long) */
samp = (COMPLEX *) calloc(2*LENGTH, sizeof(COMPLEX));
if(!samp) {
printf("\nError allocating fft memory\n");
exit(1);
}
/* copy input signal to complex array and do the fft */
for (i = 0; i < LENGTH; i++) samp[i].real = getinput();
fft(samp,M);
/* swap the real and imag to do the inverse fft */
for (i = 0; i < LENGTH; i++) {
temp = samp[i].real;
samp[i].real = samp[i].imag;
samp[i].imag = temp;
}
/* divide the middle frequency component by 2 */
samp[LENGTH/2].real = 0.5*samp[LENGTH/2].real;
samp[LENGTH/2].imag = 0.5*samp[LENGTH/2].imag;
/* zero pad and move the negative frequencies */
samp[3*LENGTH/2] = samp[LENGTH/2];
for (i = LENGTH/2 + 1; i < LENGTH ; i++) {
samp[i+LENGTH] = samp[i];
samp[i].real = 0.0;
samp[i].imag = 0.0;
}
/* do inverse fft by swapping input and output real & imag */
fft(samp,M+1);
/* copy to output and multiply by 2/(2*LENGTH) */
temp = 1.0/LENGTH;
for (i=0; i < 2*LENGTH; i++) sendout(temp*samp[i].imag);
flush();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -