Генерация прямоугольной волны для ДПФ - PullRequest
1 голос
/ 17 октября 2011

Я работаю над заданием для выполнения 200-точечного ДПФ с частотой дискретизации 20 кГц на прямоугольной волне частоты 500 Гц, амплитуда которой колеблется от 0 до 20.

Я использую C ++ и IЯ понял, как кодировать уравнение ДПФ, моя проблема в том, что у меня возникают проблемы с представлением прямоугольной волны в коде с использованием цикла for.

Что меня действительно смущает, так это количество циклов этой прямоугольной волныбудет в моем образце 200 пунктов.

Спасибо

Ответы [ 4 ]

1 голос
/ 17 октября 2011

Период прямоугольной волны равен 20000/500=40 точкам, поэтому в выборке из 200 точек будет ровно 5 периодов прямоугольной волны (200/40=5).

0 голосов
/ 17 октября 2011

Вы можете убедиться, что вы правильно сделали свой расчет, включив в него единицы измерения.Таким образом, период имеет измерение времени, Герц имеет измерение 1,0 / время, а выборки безразмерны.Программно, вы можете сделать это с boost.units .Он проверит ваши единицы во время компиляции и выдаст вам ошибку, если вы допустите ошибку.

Это также не даст вашему пользователю ввести неправильные единицы в ваш код.Например, введя 20 вместо 20000 для частоты (думая, что вы измеряли в кГц)

Ваш интерфейс будет выглядеть примерно так:

using namespace boost::units;
set_period(quantity<si::time> period);

Пользователь должен будет ввести времяв секундах

set_period(5*si::seconds)
0 голосов
/ 17 октября 2011

Если ваша частота дискретизации составляет 20 000 Гц, а у вас прямоугольная волна с частотой 500 Гц, это в основном означает, что у вас будет 500 циклов вашей волны в секунду, что означает, что у вас будет 500 циклов в каждых 20 000 выборок.Это означает, что для каждого волнового цикла требуется 40 выборок (или точек), поэтому, если у вас есть 200 точек, это означает, что в вашем DFT должно быть 5 прямоугольных циклов.

0 голосов
/ 17 октября 2011

Один цикл вашей прямоугольной волны займет 1/500 секунды.Каждый образец будет 1/20000 секунд.Простое деление должно сказать вам, сколько сэмплов будет иметь каждая прямоугольная волна.

Другое деление скажет вам, сколько из этих волн поместится в вашем окне из 200 точек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...