Вот уже несколько недель я пытаюсь реализовать ДПФ, который берет произвольный набор байтов и обрабатывает их как сигнал. Затем он преобразует их в частотную область. После этого он преобразует их обратно. Первоначально он пытался использовать только некоторые компоненты для восстановления исходного сигнала. Когда это не удалось, я попытался использовать все компоненты, и это все равно не удалось.
Я следил за уравнениями Википедии в качестве руководства о том, как это сделать, и мой код, кажется, соответствует уравнения, данные (на мой взгляд) с учетом этого кода:
ДПФ:
for (int k = 0; k < frequency_domain_magnitude.length; k++) {
for (int n = 0; n < data.length; n++) {
double val = (-2.0 * Math.PI * n * k / data.length);
freq_imag[k] += data[n] * -Math.sin(val);
freq_real[k] += data[n] * Math.cos(val);
}
frequency_domain_magnitude[k] = Math.sqrt(freq_imag[k] * freq_imag[k] + freq_real[k] * freq_real[k]);
}
IDFT:
for (int n = 0; n < data.length; n++) {
doubleValue[n] = 0;
for (int k = 0; k < freqUsed.length; k++) {
double val = (2.0 * Math.PI * n * k / data.length);
doubleValue[n] = freq_real[k] * Math.cos(val) - freq_imag[k] * Math.sin(val);
}
time_real[n] = (byte) (Math.floor(doubleValue[n]));
}
Может ли кто-нибудь помочь мне определить, в чем проблема?
Я задал предыдущий вопрос о том же проекте, но он был сформулирован ужасно, и редактирование могло вызвать больше путаницы, а не меньше. Кроме того, хотя на этот вопрос, возможно, был дан ответ, мне еще многое предстоит выяснить. Это можно найти здесь