इसलिए मैं एक आवृत्ति-डोमेन इंटरपोलर लिखने की कोशिश कर रहा हूं जो शून्य-पैड सिग्नल की आवृत्ति प्रतिक्रिया और उलटा रूपांतरित करता है। मुझे दो मामलों से निपटना है:
- यहां तक कि लंबाई की प्रतिक्रिया - बिन को विभाजित करना है क्योंकि यह अस्पष्ट है। इसलिए मैं स्पेक्ट्रम के नकारात्मक भाग की प्रतिलिपि बनाता हूं, और बीच में शून्य जोड़ता हूं ।
n*(interp-1)-1
- विषम-लंबाई प्रतिक्रिया - कोई बिन नहीं है इसलिए बस सकारात्मक / नकारात्मक आवृत्ति को विभाजित करें और उनके बीच शून्य डालें ।
n*(interp-1)
शून्य-पेडिंग करने वाला कोड यहां देखा जा सकता है
// Copy negative frequency components to end of buffer and zero out middle
// inp - input buffer of complex floats
// n - transform size
// interp - interpolation amount
void zero_pad_freq(cfloat_t *inp, size_t n, size_t interp) {
if ((n % 2) == 0) {
memmove(inp + n*interp - n/2, inp + n/2, n/2*sizeof(cfloat_t));
memset (inp + n/2 + 1, 0, (n*(interp-1)-1)*sizeof(cfloat_t)); // Duplicate Fs/2 so we need one less zero
inp[n/2] /= 2.0;
inp[n*interp-n/2] /= 2.0;
} else {
memmove(inp + n*interp - n/2, inp + (n+1)/2, n/2*sizeof(cfloat_t));
memset (inp + (n+1)/2, 0, (n*(interp-1))*sizeof(cfloat_t));
}
}
काल्पनिक चैनल पर एक छोटा सा तरंग है, लेकिन लगभग उतना बुरा नहीं है: