Частота аналогового сигнала
- Войдите на сайт для отправки комментариев
Втр, 08/05/2018 - 11:04
Требуется рассчитать частоту аналогового сигнала приходящего с осей акселерометра. Сейчас это делается с помощью fft в LabView (в комп порт посылаются данные с осей акса, в лаб вью они расскладываются по частоте). Подскажите как это можно сделать с помощью кода и сразу в ком порт слать вычислинную частоту? Данные по радио улетат если что
#include <SPI.h> // Подключаем библиотеку для работы с шиной SPI #include <nRF24L01.h> // Подключаем файл настроек из библиотеки RF24 #include <RF24.h> // Подключаем библиотеку для работы с nRF24L01+ RF24 radio(9, 10); int data[3]; void setup() { radio.begin(); // Инициируем работу nRF24L01+ radio.setChannel(5); // Указываем канал передачи данных (от 0 до 127), 5 - значит передача данных осуществляется на частоте 2,405 ГГц (на одном канале может быть только 1 приёмник и до 6 передатчиков) radio.setDataRate (RF24_1MBPS); // Указываем скорость передачи данных (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS), RF24_1MBPS - 1Мбит/сек radio.setPALevel (RF24_PA_HIGH); // Указываем мощность передатчика (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm) radio.openWritingPipe (0x1234567890LL); Serial.begin(9600); // определяем скорость обмена с компьютером } void loop() { data[0] = analogRead(0); // считываем уровень со входа A0 data[1] = analogRead(1); // считываем уровень со входа A1 data[2] = analogRead(2); // считываем уровень со входа A2 radio.write(&data, sizeof(data)); delay(10); }
Забыл сказать, что сигнал - синусоида. Насколько я понимаю это можно сделать с помощью библиотеки "freqmeasure.h" Но там сигнал должен идти с 8го пина. А как мне расскаладывать сигнал идущий с A0-A2 пинов?
А причем здесь частота? Вы же считываете аналоговые сигналы со входов А0-А2. Нет там никакой синусоиды - там просто изменяется напряжение.
На А0-А2 приходят значения с акселерометра. Если строить график по этим значениям с помощью LabView то можно наблюдать синусоиду (датчик вращается). По этой синусоиде в LabView вычисляется частота аналогового сигнала. Задача в том чтобы последняя операция производилась сразу в ардуине, без использования LabView
Roman_khv, Вы в своем первом сообщении произнесли волшебное слово: fft. Вот в этом направлении и нужно копать.
В принципе, если известно, что сигнал именно синусоида (естественно, с добавленными шумами - как же без них!), то можно организовать и конечный автомат.
А что Вам мешает заводить сигнал не на A0-A2, а на "8 pin" и использовать стандартную библиотеку? Измерять нужно по 3 каналам? О каких величинах значений частот идет речь?
Мешает то, что все давно уже спаяно и да, 3 канала. там до 1 Гц величины
Вот я и копаю, но понять не могу как мне организовать преобразование сразу трех каналов ВЫБРАННЫХ МНОЙ а не прописанных в стандартной библиотеке, какую функцию надо вызвать :(( поэтому и пишу на форум в надежде, что бывалые подскажут эти несколько так необходимых мне строк..
То есть мы сначала паяем, и только потом начинаем проектировать?
С 8 пина невозможно снять аналоговый сигнал, следовательно, все Ваши дальнейшие рассуждения неверны в принципе.
Непонятно, чего Вы хотите. Постарайтесь как-то обрисовать задачу без фантастических допущений.
Roman_khv, а вы описание библиотеки FreqMeasure пробовали читать? Библиотека рассчитана на цифровые сигналы, она просто считает импульсы в заданное время, используя аппаратный таймер и\или прерывание, поэтому работает только на конкретном пине.
Вот я и копаю, но понять не могу как мне организовать преобразование сразу трех каналов ВЫБРАННЫХ МНОЙ а не прописанных в стандартной библиотеке
никак
Если говорить о задаче целиком, то наверное сложности в ее решении нет. Частоты очень низкие, т.е. можно даже прерывания не использовать, обойтись обыкновенным програмным таймером. Преобразуем наш синус в меандр (схем в инете 100500), а затем подаем на обыкновенный цифровой вход и считаем. В данном случае количество каналов может и 1 и 2 и 3.
тогда Вы можете подсказать как это реалиизовать с помощью FFT?
Система работает с LabView, есть задача избавиться от лаб вью. Сигнал дает акс с АЦП на борту
Вообще на практике проверенно, что акс работает до 660 об/мин ( скорость его вращения). Получается что мне надо определять частоту до этого диапозона и про 1 Герц я скорее соврал.
Что-то похохожее на вашу задачу обсуждали здесь: http://arduino.ru/forum/programmirovanie/bystroe-preobrazovanie-fure-fft...
что-то там замудрено. Я думаю, что все должно быть намного проще
Сделайте проще - кто ж Вам не дает.
Если бы мог, то не писал на форум..
А на форум с какой целью написали?
Если нужно готовое решение, то это в раздел "Ищу исполнителя".
А если сами что-то хотите сделать, то нужно делать самому, за Вас это никто делать не будет.
Я на форум пришел, чтобы узнать может кто сталкивался с этим и может подсказать, что можно использовать. От стандартных фраз прошу воздржаться, ибо они никакого смысла в себе не несут
Я на форум пришел, чтобы узнать может кто сталкивался с этим и может подсказать, что можно использовать.
ну так вам дали ссылку на обсуждение - а вам не подходит, "слишком сложно, должно быть проще". Что на это можно ответить, кроме как "Дерзайте сами!" ??
Я на форум пришел, чтобы узнать может кто сталкивался с этим и может подсказать
Конечно сталкивался. Вам и подсказали, берите библиотеку FFT и делайте. В той теме всё есть.
Проще не получится. Разве что очень хорошо знать допущения Вашей задачи. Но изучать допущения и искать метод проще - это само по себе серьёзная задача.
Если для Вас это слишком сложно, ну не делайте, заажите тому, для кого не слишком сложно.