Зарегистрирован: Чт сен 19, 2013 19:52:13 Сообщений: 11
Рейтинг сообщения:0
Извеняюсь за выход из темы, но мне неккому обратиться : Нагуглил интересную статью http://www.enlight.ru/demo/faq/smth.pht ... nd_filters Начал пытаться реализовать, да вот в чем загвостка; по расчетам мне нужен масив из 200 замеро на частоте АЦП 62,500к кГц. Но как АЦП настроить? По прирываниям, или это можно без таймеров организовать? Если несложно, помогите!!! Пишу в кодевиженавр. Как настроить замеры на частоте АЦП?
Частота дискретизации - скорость, с которой мы получаем отсчёты. Так вот, если нам нужны полные 10 бит от АЦП, то частота его тактирования должна быть в районе 50 - 200 кГц. При этом на одно преобразование тратится около 13 тактов, итого: 200 кГц / 13 ~= 15 k[S]amples[P]er[S]econd, т.е. 15 000 отсчётов с разрешением 10 бит в секунду - вот это и есть частота дискретизации. Можно её увеличить, но тогда это уже будет не 10-битное АЦП.
Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.
Зарегистрирован: Чт сен 19, 2013 19:52:13 Сообщений: 11
Рейтинг сообщения:0
Спасибо, понятно стало!Но как заносить измерения беспрерывно в массив? как я понял это можно сделать прерываниями АЦП но как и где это писать для кодевижена, приведите пожалуйста пример!
А чем вам результат работы Wizard'а в CodeVision не пример? Там же вроде формируется почти готовый шаблон. Возьмите документацию на мк, покумекайте над настройками этого формирователя исходников, сгенерируйте что-нить, запустите в симуляторе, посмотрите как работает. Если не работает как надо, то заливайте код проекта сюда, народ посмотрит, подскажет. Я не большой спец по CodeVision, поэтому не могу тут помочь сильно. Наверняка найдётся кто-нибудь кто подскажет.
Зарегистрирован: Чт сен 19, 2013 19:52:13 Сообщений: 11
Рейтинг сообщения:0
Да вроде настроил, но где и как писать прерывания? У меня необходимость заносить данные в 200-от значный масив по прерывания АЦП. Данные зваковой частоты на 0 вход, на остальные 3 напряжение потенцыометров(их можна заносить в дну переменную, оновляя её).
Вроде настроиный, но где и как написать прерывания чтобы Данные 0-ого порта заносились последовательно в масив, по кругу?
Зарегистрирован: Чт сен 19, 2013 19:52:13 Сообщений: 11
Рейтинг сообщения:0
Версия 1.1. Вроде считываю значение звуковой амплитуды с нулевого входа, а остальные 3 -с регуляторов, они просто обновляються. далее нахожу среднее арифмитическое значений и записую в переменную Ф. (значение звуковой амплитуды с нулевого входа это отличие действительного значения от средины питания. ПРОВЕРЬТЕ ПЛИЗ!!! (Данная прога нужна для фильтра усреднением)
Карма: 46
Рейтинг сообщений: 590
Зарегистрирован: Вт май 19, 2009 09:27:30 Сообщений: 3258 Откуда: Украина
Рейтинг сообщения:0
Приветствую всех! Не подскажете, есть ли какой-нибудь готовый алгоритм нахождения амплитуд шестнадцати заданных частот в сигнале? Частота сэмплирования 8кГц, длина 40мс (320 выборок), частоты: 697, 770, 852, 941, 1209, 1336, 1477, 1633Гц и их удвоенные значения. Желательно на Си для AVR.
Карма: 46
Рейтинг сообщений: 590
Зарегистрирован: Вт май 19, 2009 09:27:30 Сообщений: 3258 Откуда: Украина
Рейтинг сообщения:0
Не подскажете, какой алгоритм реализован в телефонах РУСЬ? У них ведь в схеме нет ни аппаратного декодера DTMF, ни даже АЦП. "Оцифровка" сигнала тлф.линии производится при помощи компаратора, а вычисления в микроконтроллере типа 80C31/80C51. Тем не менее они декодируют DTMF пакеты АОН и сигналы дистанционного управления функциями телефона.
Я никогда в жизни не видел этого самого телефона, но гугление показало, что там до версии "Русь 28 Соната" применяется, цитирую, вычисление корреляции с функциями Радемахера.
UPD: Статья, ссылка на которую есть в материале по второй ссылке, судя по всему более недоступна. Почитать ее можно благодаря Wayback Machine. Вкратце - компаратор есть однобитный АЦП, и этого достаточно для определения частот DTMF корреляционным методом.
_________________ Разница между теорией и практикой на практике гораздо больше, чем в теории.
Карма: 46
Рейтинг сообщений: 590
Зарегистрирован: Вт май 19, 2009 09:27:30 Сообщений: 3258 Откуда: Украина
Рейтинг сообщения:0
Спасибо большое, это уже хоть что-то. Если честно, думал там всё намного проще, считаются промежутки между фронтами, с чем-то сравниваются и получается результат.
Ну, промежутки вряд ли чего дадут. Все же это изначально спектральный метод кодирования, так что тут все полюбому будет упираться в корреляционный/спектральный анализ в том или ином виде.
_________________ Разница между теорией и практикой на практике гораздо больше, чем в теории.
Зарегистрирован: Пн мар 23, 2015 17:18:47 Сообщений: 27
Рейтинг сообщения:0
Доброго времени, многоуважаемое сообщество!
Очень рад присоединиться к вам!
Прошу помочь мне разобраться в понимании следующего... Никак не могу понять такую вещь, как создание алгоритма для определения амплитуды нужной частоты в спектре сигнала. В общем, всё по порядку...
У меня есть некий массив, считанных с АЦП значений (допустим это массив, длиной в 64 значения), с частотой дискретизации 19200 Гц. Данные эти 10-ти битные (обычный АЦП АТМеги). Теперь мне нужно определить в этом 64-х битном отсчёте амплитуду некой частоты (к примеру 1000Гц). Прочёл по этому поводу уже очень много... Голова опухла.... Видел в интернете много всевозможных цветомузык и спектроанализаторов, включая исходники. Многие из них использовали готовые библиотеки и таблицы синусов/косинусов для вычислений... Тут я совсем заблудился...
Так что же мне делать с этим 64-х битным отсчётом, чтобы получить значение амплитуды нужной частоты? Искать таблицы синусов/косинусов для частоты 1000Гц? Тогда получается, что для получения значений амплитуд 10 частот нужно искать (или вычислять с помощью сторонних программ) значения син/кос для всех 10-ит частот? Так это 20 таблиц!...
Или что нужно делать-то?
Понять хочу, как эту высокую материю, как БПФ применить для конкретной задачи. Саму последовательность понять хочу... Не в коде дело - код напишу сам, проверю и отлажу... Но принцип сам... В голове всё раскидано отдельными кусками - БПФ... таблицы син/кос... массивы с отсчётами... Что с этим делать - не пойму... Не судите строго - мне уже не 20 лет (и даже не 40)... Может быть потому и не схватываю всё так быстро... Да и БПФ никогда не занимался... Будьте любезны рассказать всё по порядку - буду безмерно благодарен!
Чтобы получить более-менее честные 10 бит от АЦП атмеги, надо очень постараться. В последних двух битах в основном шум, если не принимать особых мер (грамотная трассировка, фильтрация AREF, и т.д.). Так что можете смело ставить бит ADLAR и использовать только старшие восемь бит.
Цитата:
Теперь мне нужно определить в этом 64-х битном отсчёте амплитуду некой частоты (к примеру 1000Гц).
Для этого не нужно БПФ. Достаточно алгоритма Гёрцеля [1][2]. Единственно только, сам по себе он, разумеется, рассчитан на вычисления с плавающей точкой, так что в случае AVR придется немного заморочиться над переделкой его на фиксированную точку. Но там основная формула достаточно простая, так что особых сложностей быть не должно.
_________________ Разница между теорией и практикой на практике гораздо больше, чем в теории.
Зарегистрирован: Пн мар 23, 2015 17:18:47 Сообщений: 27
Рейтинг сообщения:0
Спасибо большое за доброе приветствие и тёплые слова!
Да, по ходу всех моих путешествий по интернету я встречал ссылки на алгоритм Гёрцеля... Так же понимаю, что для каждой конкретной задачи подобного типа обычно выбирают алгоритм, который будет необходимым и достаточным для решения данной конкретной задачи. Но мне хотелось бы понять как при помощи именно БПФ решить эту задачу? Просто я задал совсем простой вопрос о вычислении амплитуды конкретной частоты в спектре... Как быть, если понадобиться собрать (пусть примитивный) анализатор спектра, скажем в диапазоне 1-5000 Гц? Поэтому очень хочется понять, как в этом случае будет выглядеть алгоритм обработки вышеуказанного массива?
Можно ли этот массив изначально пропустить через БПФ, а после определить значение амплитуды какой из частот я хочу увидеть? Уже прочёл книгу Ю. Сато по этому поводу... Мозги, конечно накренились... Но, надеюсь не до конца...
Но мне хотелось бы понять как при помощи именно БПФ решить эту задачу?
Сделать БПФ сигнала, после чего вычислить амплитуду интересующей гармоники как корень квадратный из суммы квадратов ее комплексных составляющих.
Цитата:
Можно ли этот массив изначально пропустить через БПФ, а после определить значение амплитуды какой из частот я хочу увидеть?
В результате БПФ вы получаете относительные амплитуды (точнее - разложение на комплексные составляющие, то есть фаза тоже учитывается) всех рассматриваемых гармоник. Выбирайте нужную и анализируйте...
Дискретное преобразование Фурье в сущности есть вычисление скалярных произведений сигнала с каждой из функций из определенного набора. То есть для каждой базовой функции из набора мы определяем, сколько ее есть в рассматриваемом сигнале.
_________________ Разница между теорией и практикой на практике гораздо больше, чем в теории.
Зарегистрирован: Пн мар 23, 2015 17:18:47 Сообщений: 27
Рейтинг сообщения:0
YS писал(а):
Сделать БПФ сигнала, после чего вычислить амплитуду интересующей гармоники как корень квадратный из суммы квадратов ее комплексных составляющих.
Вот этот момент, мне кажется самый интересный... На первой странице этот форума, уважаемый Jordan опубликовал вот такой участок кода:
Код:
for (int k = 0; k < 1024; k++) { for (int n = 0; n < 1024; n++) { x_real[k] += x_n[n] * Math.Cos( (-2) * Math.PI * k * n / 1024 ); x_imag[k] += x_n[n] * Math.Sin( (-2) * Math.PI * k * n / 1024); }
Здесь нет готовых таблиц син/кос , поэтому мне этот участок кода показался очень привлекательным... Насколько я понял, здесь берутся как раз данные из массива в 1024 значения. Это у нас x_n[]... Далее из данных (отсчётов) этого массива создаются ещё два массива с действительной и мнимой составляющей... Причём, каждое значение действительной и мнимой частей есть сумма произведений каждого отсчёта на синус и косинус соответственно... Вот тут я не понял почему стОит (-2), а не просто 2 ? И не понял насчёт делителя 1024 при вычислениях синуса и косинуса?...
На первой странице этот форума, уважаемый Jordan опубликовал вот такой участок кода:
Собственно, здесь мы видим вычисление скалярного произведения функций "в лоб", как оно есть. Да, этот код дает хорошее представление о том, как по существу устроено ДПФ, но совершенно не оптимизирован. БПФ с таблицами будет работать куда быстрее.
Цитата:
Здесь нет готовых таблиц син/кос , поэтому мне этот участок кода показался очень привлекательным...
Таблицы просто ускоряют вычисление. Вычисление тригонометрических функций - очень долгая операция. БПФ еще сильнее ускоряет вычисление за счет использования свойств уравнений ДПФ.
Цитата:
Причём, каждое значение действительной и мнимой частей есть сумма произведений каждого отсчёта на синус и косинус соответственно...
Скалярно перемножаем сигнал на базовые функции, да.
Цитата:
Вот тут я не понял почему стОит (-2), а не просто 2 ?
Это всего лишь вращение фазы на 180°. Сложно сказать, зачем, можно и без этого, как мне кажется.
Цитата:
И не понял насчёт делителя 1024 при вычислениях синуса и косинуса?...
Нормализация аргумента к диапазону [0,1].
То есть, например, имеем sin(wt), где w=2пf, t лежит в диапазоне [0,1]. Вот мы и подгоняем t к этому диапазону, деля k на 1024 (максимальное значение k).
Я бы не рекомендовал использовать этот код в реальном приложении, он страшно медленный. Для AVR существует оптимизированная версия БПФ.
_________________ Разница между теорией и практикой на практике гораздо больше, чем в теории.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения