Я именно на целом количестве периодов и экспериментировал (вместо нулей подставлял числа - амплитуды). Окна для того и нужны, чтобы уменьшить последствия непериодичности.
Код
void Sig_load(void) {
volatile float *pSig = Sig;
for (uint32_t i = 0; i < FFT_N; i++) {
*pSig++ = 1
+ 0 * sin(1 * i * 2 * PI / FFT_N)
+ 0 * sin(2 * i * 2 * PI / FFT_N + 3 * PI / 4)
+ 0 * sin(4 * i * 2 * PI / FFT_N);
}
}