View difference between Paste ID: nngQaSTB and aLw6Jmtn
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
}