Сгенерируйте синусоиду с помощью АЦП

У меня на плате есть модуль adc. Я создаю синусоиду на генераторе сигналов. И я передаю выход этого генератора на вывод adc. Наконец, я периодически считываю значение этого вывода. Я пытаюсь создать синусоиду в своем программном обеспечении.

x = t,
y = Asin(wt),
A : amptitute value of the generator, 
w : 2πf, f : I set its value on my software.(difference time between two read operation)
t : time

И я не использую значение контакта adc. Разве это значение не важно для создания волны?


person zakjma    schedule 03.12.2014    source источник
comment
Ваш вопрос: как вычислить синусоиду в программном обеспечении?   -  person jeb    schedule 03.12.2014
comment
да, я не использую значение контакта adc. И я не знаю, где я положил это в расчете.   -  person zakjma    schedule 03.12.2014
comment
Вам не нужен внешний вход для генерации синусоидальной волны - только функция синуса, а также значения и переменная времени, которые вы уже отметили в своем вопросе. Дополнительную информацию см. на странице en.wikipedia.org/wiki/Sine_wave.   -  person sonicwave    schedule 03.12.2014
comment
Я хочу имитировать синусоидальную волну генератора сигналов. Поскольку ЦАП на борту нет, я использую генератор сигналов.   -  person zakjma    schedule 03.12.2014
comment
Вопрос не имеет смысла. Вы не можете генерировать сигнал из input. Если вы генерируете серию из функции синуса, зачем вам нужно считывать вход АЦП? Компьютер может вычислить синусоидальную функцию.   -  person Clifford    schedule 03.12.2014
comment
Linux не в реальном времени. Я пытаюсь обнаружить и показать время задержки ядра Linux. Я генерирую синусоидальную волну от генератора сигналов и периодически читаю adc. Затем я создаю синусоидальную волну в своем программном обеспечении (я не знаю, как я это делаю), чтобы показать эту задержку время.   -  person zakjma    schedule 03.12.2014
comment
@holazolllil: Вы правы в том, что Linux не работает в режиме реального времени, но измерение задержки мало что вам об этом скажет — это не то, что означает реальное время — в то время как системы реального времени обычно имеют низкую задержку, что более важно, они детерминированный. Если вы скопируете входной сигнал в выходной сигнал без детерминированной выборки, выходной сигнал будет искажен, а также задержан, поскольку выборка может быть апериодической. Кроме того, если у вас нет выхода, что вы собираетесь сравнивать, чтобы определить задержку!?   -  person Clifford    schedule 03.12.2014
comment
Задайте вопрос о том, что вы пытаетесь измерить, а не о том, как реализовать ваше решение, потому что неясно, что вы пытаетесь сделать или как ваше решение должно работать.   -  person Clifford    schedule 03.12.2014
comment
@Clifford Я реализую этот метод, используя как Linux, так и Xenomai (патч в реальном времени). И я сравниваю результат, который показывает задержку. Для результата xenamoi есть много точек на графике в течение временного интервала.   -  person zakjma    schedule 03.12.2014
comment
Вам нужно исправить вопрос, чтобы уточнить, о чем вы спрашиваете - добавление комментариев не помогает.   -  person Clifford    schedule 03.12.2014


Ответы (1)


Я постараюсь дать вам несколько советов, основанных на том, что я понял из вашего поста.

Предполагается, что АЦП производит выборку аналогового сигнала, генерируемого на определенной частоте, для получения цифрового сигнала. В вашем случае вам нужны две информации, чтобы проследить вашу кривую:

  1. Данные:

данные для трассировки (выборки), которые представляют амплитуду сигнала на протяжении всего времени выборки (в каждый момент выборки).

  1. Время:

вам нужно знать период времени, в который АЦП производит выборку сигнала, а затем связать каждые данные с соответствующим моментом времени. Период можно определить по частоте дискретизации сигнала АЦП T = 1/f.

ADC сохраняет каждую выборку данных в регистре, и будет сгенерировано прерывание, чтобы уведомить процессор о новых поступающих данных. Ваша подпрограмма обслуживания прерывания (в случае, если вы продолжаете работать с прерываниями) должна иметь возможность извлекать эти данные до того, как они будут заменены следующей выборкой. В качестве предложения вы можете создать в своем приложении буфер, в котором ваша процедура прерывания могла бы хранить данные. Затем ваше приложение может извлечь данные из буфера и использовать их для рисования кривой, если ваша система имеет вывод на дисплей, или отправить их в настольное приложение, которое выполнит эту работу.

Вам не нужно придерживаться уравнения в своем посте; это для аналогов. Скорее вы можете представить оцифрованную кривую как f(t) = Data(t).

Поскольку вы используете Linux, если вы не хотите иметь дело с прерываниями, вы можете продолжить чтение данных, используя интерфейс /sysfs. Обратите внимание, что открытие файла для чтения данных для каждого отдельного образца может быть медленным в зависимости от требований вашего приложения.

person Aymen    schedule 03.12.2014