Программа для проверки частоты дискретизации Найквиста
У меня есть эксперимент, чтобы проверить частоту выборки Найквиста. Требуется написать программу на C, чтобы убедиться в этом.
Вкратце актуальная проблема заключается в следующем:
Когда передается сигнал с ограниченной частотой (fmax), необходимо дискретизировать сигнал с минимальной скоростью 2 * fmax, чтобы полностью восстановить сигнал. В противном случае восстановление исходного сигнала является неудовлетворительным из-за недостаточной дискретизации, как показано на рисунке ниже, где более высокая частота ошибочно восстанавливается как сигнал более низкой частоты.
Таким образом, для формы сигнала с ограничением по частоте (fmax), квантованной с L уровнями, потребуется по меньшей мере 2*fmax*log2 L ≤ B * log2 (1+SNR) битов, которые должны передаваться в секунду, причем B является шириной полосы канала. Если эти уровни L недостаточны для удовлетворительного квантования сигнала, либо L может быть увеличен, насколько это возможно, либо fmax должно быть уменьшено.
Вам дан сигнал с неизвестным fmax. Вам необходимо восстановить сигнал из выборок сигнала (путем интерполяции). Сравните восстановленный сигнал с исходным сигналом. Используйте это, чтобы оценить fmax.
Выберите различные частоты дискретизации и уровни квантования для выборки сигнала и вычислите значение средней квадратной ошибки, показывающее, насколько хорошо восстановленный сигнал соответствует оригиналу. Значение ошибки 0 означает идеальное совпадение.
Совет: среднеквадратическая ошибка будет очень низкой при выборке выше частоты Найквиста и довольно быстро возрастет ниже частоты Найквиста.
Я не получаю описанную выше процедуру. Из этого я понимаю, что нам нужно принимать волну в качестве входного сигнала в виде массива синусоидальных волн, их амплитуды и частоты. Затем найдите максимальную амплитуду Maxamp. Квантовать диапазон амплитуды, от -Maxamp до Maxamp, в K-уровнях. Итерировать с K = 2,
Для каждого K итерация от некоторой минимальной частоты до некоторой максимальной частоты. Сэмплируйте волну в соответствии с текущим уровнем K и текущей частотой дискретизации и найдите среднеквадратичную ошибку.
Но значения Bandwidth и SNR также должны быть использованы, но я не понимаю, как их использовать. Более того, я не понимаю, какое значение я должен повысить уровень K.
Я иду в правильном направлении в моей процедуре? Если нет, пожалуйста, предложите процедуру и использование B и SNR при проверке.
1 ответ
Хотя это не является прямым ответом на ваш вопрос, я мог бы сэкономить некоторые усилия, поделившись этой ссылкой с существующим калькулятором частоты дискретизации Nyquist.