SHOW:
|
|
- or go back to the newest paste.
| 1 | // Copy negative frequency components to end of buffer and zero out middle | |
| 2 | // inp - input buffer of complex floats | |
| 3 | // n - transform size | |
| 4 | // interp - interpolation amount | |
| 5 | void zero_pad_freq(cfloat_t *inp, size_t n, size_t interp) {
| |
| 6 | - | memmove(inp + n*interp - n/2, inp + (n+1)/2, (n+1)/2*sizeof(cfloat_t)); |
| 6 | + | if ((n % 2) == 0) {
|
| 7 | - | memset (inp + n/2 + 1, 0, (n*(interp-1)-1)*sizeof(cfloat_t)); |
| 7 | + | memmove(inp + n*interp - n/2, inp + n/2, n/2*sizeof(cfloat_t)); |
| 8 | - | |
| 8 | + | memset (inp + n/2 + 1, 0, (n*(interp-1)-1)*sizeof(cfloat_t)); // Duplicate Fs/2 so we need one less zero |
| 9 | - | if (n % 2 == 0) {
|
| 9 | + | |
| 10 | inp[n/2] /= 2.0; | |
| 11 | - | inp[n*interp-n/2] = conj(inp[n/2])/2.0; |
| 11 | + | inp[n*interp-n/2] /= 2.0; |
| 12 | } else {
| |
| 13 | memmove(inp + n*interp - n/2, inp + (n+1)/2, n/2*sizeof(cfloat_t)); | |
| 14 | memset (inp + (n+1)/2, 0, (n*(interp-1))*sizeof(cfloat_t)); | |
| 15 | } | |
| 16 | } |