Параллельный АЦП и Ардуино.

ser-vasin
Offline
Зарегистрирован: 29.12.2014

bodriy2014 пишет:

Вы для кого эти посты с разъяснениями и картинками пишете, еще и с неправильными?

Если для меня, то не трудитесь.

Как Вам будет угодно. А насчет правильности - учите матчасть https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D0%B0%D0%BD%D0%B4%D1%80_(%D1%80%D0%B0%D0%B4%D0%B8%D0%BE%D1%82%D0%B5%D1%85%D0%BD%D0%B8%D0%BA%D0%B0)

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

ser-vasin пишет:

bodriy2014 пишет:

Вы для кого эти посты с разъяснениями и картинками пишете, еще и с неправильными?

Если для меня, то не трудитесь.

Как Вам будет угодно. А насчет правильности - учите матчасть https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D0%B0%D0%BD%D0%B4%D1%80_(%D1%80%D0%B0%D0%B4%D0%B8%D0%BE%D1%82%D0%B5%D1%85%D0%BD%D0%B8%D0%BA%D0%B0)

Какую матчасть учить посылаете, по ссылке ходил ничего нового-там все правильно.

А картинка ваша все равно туфта неправильная!

если вам нужны дополнительные разъяснения кроме графических пожалуйста.

У вас на картинке между отсчетами 5 и 6 нет паузы, получается что из десяти замеров АЦП чудесным образом шестой делает мгновенно после пятого!)

Как бы вы не располагали отсчеты АЦП из десяти такой меандр что вы нарисовали не получится, а вы еще меня учить матчасть отправляете, ладно.....караван идет!)

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Вот один и тот же сигнал меандра 30,7КГц

Первый скрин построен по 10 точек скорость АЦП 320Кsps

Следующие по 195 точкам скорость АЦП 6Мsps

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

Ответ есть, это мой следующий пост.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

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

Узнать реальную скорость оцифровки сигнала, обычно пишется как Msps и разделить ее на 50!

Для примера китайский DSO138 имеет скорость обработки сигнала 1Msps делим на 50.

1 000 000/50=20 000Гц или 20КГц-вот на какой частоте вы сможете сказать что вы исследовали сигнал, если частоту будете смотреть выше то тестовый сигнал округлится, а в реальной работе разве будут такие идеальные сигналы? да вы просто пропустите все гармоники что выше 20КГц или паразитные всплески.

Вывод DSO138 тестить усилители или другие сигналы звукового диапазона, кто собирается смотреть импульсники или ШИМ драйверы питания и думать не стоит там частоты 37КГЦ.....100КГц....до 1МГц современные, и там не будет идеального сигнала там будет меняться скважность и по разному отрабатывать ключ.

Вот немного картинок для затравки, на тему почему нужно делить на 50!

Первый скрин меандр построен по 50-ти точкам- показометр формы сигнала!

Второй скрин меандр по 100 точкам-уже можно считать любительский осциллограф!

Logik
Offline
Зарегистрирован: 05.08.2014

И с чего это Вы так решили. Как по мне оба сигнала плохи, не менее 200  отсчетов надо, тогда картинка красивше. А кому и на 45 понравится, как с ним быть? А если по существу - гражданин Котельников теорему двинул, что для дискретного представления сигнала  достаточно иметь частоту дискретизации в два раза больше чем частота сигнала. Чувствуете - Теорема, значить с доказательством, беретесь опровергнуть и доказать что требуется не менее 50? Я - нет, я согласен с классиком. И рассуждения 10 или 50 - софизм с перфекцианизмом. Ясно что чем выше - тем лучше, но и 2 достаточно, кстати и форму можно получить, накопив много импульсов при некоторых условиях. 

Оба рисунка мне не нравятся вот чем. На фронтах у них по 3-4 точки. Это явно означает наличие ФНЧ в цепи, причем оно режет ВЧ сильней чем их может вводить АЦП (или вводит если ФНЧ цифровой после АЦП). При таких делах поднимать скорость АЦП нет смысла. Искажения сигнала вызваны именно ФНЧ, как бы он не был реализованым, ну или сигнал сам по себе с затянутым фронтом. 

faeton
faeton аватар
Offline
Зарегистрирован: 21.03.2016

Logik пишет:

И с чего это Вы так решили. Как по мне оба сигнала плохи, не менее 200  отсчетов надо, тогда картинка красивше. А кому и на 45 понравится, как с ним быть? А если по существу - гражданин Котельников теорему двинул, что для дискретного представления сигнала  достаточно иметь частоту дискретизации в два раза больше чем частота сигнала. Чувствуете - Теорема, значить с доказательством, беретесь опровергнуть и доказать что требуется не менее 50? Я - нет, я согласен с классиком. И рассуждения 10 или 50 - софизм с перфекцианизмом. Ясно что чем выше - тем лучше, но и 2 достаточно, кстати и форму можно получить, накопив много импульсов при некоторых условиях. 

Я теорему Котельникова совсем не помню и вспоминать не особо хочется... Но там не просто так два раза померил за период исследуемый сигна и всё зашибись. :)))

А можно и вообще с той же частотой мерить сигнал, выполняя сдвиг фазы точки замера. :)

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

В теореме Котельникова речь идет о частоте дискретизации, превышающей в 2 раза максимальную частоту в спектре сигнала. А какой у меандра спектр? В ы рассматриваете нижнюю гармонику и обсуждаете, что на экране "кака" произвольного вида. :)) Если бы сигнал был синвсом, то его можно было бы восстановить, зная, что это именно синус. А так, для сигналов произвольной формы... Чем чаще, тем лучше (точнее). :))

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Не хотел обсуждать применения Котельниова в самодельном приборчике, но раз уж зашло…

Кто предлагает применить  наверное не применял его сам ни разу, а хотел в пультоскопе за счет этого поднять частоту рассматриваемого сигнала и вник в тему для применения. Но оказалось что эта теорема очень упростила жизнь связистам и тем кто передает звук или сохраняет его. Так как позволила оцифровывать звуковые частоты до 20КГц  скоростями в 44КГц и после воспроизводить ЦАП.  А в мир осциллографов она ничего хорошего не принесла!((

При расчете если в массив данных для восстановления сигнала попадет хоть одно значение частота которого  выше чем 1/2АЦП  восстановленные значения сразу выдадут график отличный от исходного и мы потеряем исходный сигнал, связисты для этого жестко ставят ФНЧ. Мы так не можем, мы наоборот отслеживаем эти выбросы или наводки в сигналах имульсных БП или других сигналах смотрим не лезут ли там помехи или наводки.

И еще один момент в теореме есть нюанс что частота сигнала доходила до 1/2АЦП количество замеров должно стремиться к бесконечности, то-есть чем больше массив с выборкой тем точней результат!

Потратил уйму времени на чтение методичек с этим Котельниковым, так как это не мое профильное тяжело вникал, но оказалось зря!

Так что тем кто не применил этот метод  лично для восстановления сигнала вообще не фиг о нем писать!!!

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

Нифига теорема Котельникова здесь не поможет. Кто ее предлагает, пусть попробует применить.

Теорема гласит, что удвоенный сигнал можно описать частотой дискретизации частота*2. 

ДА!!! Его можно описать, когда мы знаем его форму.

Но сигнал нельзя захватить с такой частотой дискретизации. Тут нужно не менее 10х точек на полупериод.

Некоторые хитрые разработчики делают финт с рандомной частотой захвата, когда период между измерениями постоянно чуть-чуть плавает.

Logik
Offline
Зарегистрирован: 05.08.2014

bodriy2014 пишет:

Не хотел обсуждать применения Котельниова в самодельном приборчике, но раз уж зашло…

Так и я не собирался, Вы же сами начали ложные утверждения делать, противоречащие теории, вот и приходится

bodriy2014 пишет:

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

Применял - не применял, как это обяснить... Оцифровывал много (писал проги в смысле, не с касетника в mp3 перегонял) , цифровой обработкой аналогового сигнала занимался, и принимал теорему как данное, доказаное и изученое будучи студентом, применял или нет- сами решите.

bodriy2014 пишет:

При расчете если в массив данных для восстановления сигнала попадет хоть одно значение частота которого  выше чем 1/2АЦП  восстановленные значения сразу выдадут график отличный от исходного и мы потеряем исходный сигнал, связисты для этого жестко ставят ФНЧ. Мы так не можем, мы наоборот отслеживаем эти выбросы или наводки в сигналах имульсных БП или других сигналах смотрим не лезут ли там помехи или наводки.

Да. Выше 1/2АЦП нельзя, это как раз в теореме. Вы же утверждаете что 1/50 надо. О том и базар, что 1/2 достаточно.

bodriy2014 пишет:
И еще один момент в теореме есть нюанс что частота сигнала доходила до 1/2АЦП количество замеров должно стремиться к бесконечности, то-есть чем больше массив с выборкой тем точней результат!

Потратил уйму времени на чтение методичек с этим Котельниковым, так как это не мое профильное тяжело вникал, но оказалось зря!

Так что тем кто не применил этот метод  лично для восстановления сигнала вообще не фиг о нем писать!!!

bodriy2014 пишет:
И еще один момент в теореме есть нюанс что частота сигнала доходила до 1/2АЦП количество замеров должно стремиться к бесконечности, то-есть чем больше массив с выборкой тем точней результат!

Это как раз вообще не проблема, т.к. проблема при высоких частотах сигнала, около частоты дискретизации, т.е. от сотен КГц а оображаем на екран десятки раз в секунду, то на одно отображение много периодов сигнала прийдется, а много - это пошти бесконечность.

bodriy2014 пишет:

Потратил уйму времени на чтение методичек с этим Котельниковым, так как это не мое профильное тяжело вникал, но оказалось зря!

Так что тем кто не применил этот метод  лично для восстановления сигнала вообще не фиг о нем писать!!!

Учится никогда не зря! Камень о применении личном принят.

Okmor пишет:

Нифига теорема Котельникова здесь не поможет. Кто ее предлагает, пусть попробует применить.

Теорема гласит, что удвоенный сигнал можно описать частотой дискретизации частота*2. 

ДА!!! Его можно описать, когда мы знаем его форму.

Но сигнал нельзя захватить с такой частотой дискретизации. Тут нужно не менее 10х точек на полупериод.

Некоторые хитрые разработчики делают финт с рандомной частотой захвата, когда период между измерениями постоянно чуть-чуть плавает.

Даже разбирать не хочу. Просто садитесь - два. Учите дискретную математику.

 

Но вам, интуитивным теоретикам, несказанно повезло, т.к. нужный стенд у меня просто уже был, иначе я не парился бы. Стенд состоит из ардуины мини (далее генератор) и второй ардуины - мапле, соединены проводом, многожильным МГТФ, медь не безкислородная, провод не прогрет и раземы не паладиевые, так просто, провод втыкнут в дырку на панельке, но это не помешает мне эксперементально проверить теорему Котельникова )))

Частота входного 5Гц, а дискретизации 10Гц выбрана спецом для того, чтоб можно было рассмотреть и снять на видео. Сомнивающимся выложу видео.

Код в студию. 

Генератор (скучно, еще мигаю лампадой)

  
  for(;;)
  {
      digitalWrite(A2, HIGH);digitalWrite(led, HIGH);delay(100);
      digitalWrite(A2, LOW);digitalWrite(led, LOW);delay(100);
  }
  

 Скажу только что меандр с периодом 200мс.

Осцилограф, мапле. Код всунут в разрабатываемый проект, в начало лупа, потому на картинке есть сетка и надписи не из фрагмента кода, но то такое.

#define TIME_DISCRET 100

  word TimeDiscret=millis();
  word Time;
  for(word n=0;;n++)
  {
    if(n==280) //развертка кончила надо синхронизироватся
    {
        pinMode(ANALOG_PIN, INPUT);

      for(;digitalRead(ANALOG_PIN);){delay(1);}
      for(;!digitalRead(ANALOG_PIN);){delay(1);}
      pinMode(ANALOG_PIN, INPUT_ANALOG);  //потому шо STM
      Time=millis();
      TimeDiscret=Time-((Time-TimeDiscret)%TIME_DISCRET); //выкинем пропущенные во время синхронизации вводы
      n=0;
    }
    else
      Time=millis();
      
    if((Time-TimeDiscret)>TIME_DISCRET)
    {
      word InpVal = analogRead(ANALOG_PIN);
      tft.drawPixel(n,(InpVal/32)+50,BLUE); 
      TimeDiscret=Time;
    }
    delay(1);
  }

 Ниче особого. Синхронизация по фронту, развертка вывод на экран. Период дискретизации 100мс, в полном согласии с Котельниковым.

Ну шо?!

Duino A.R. пишет:
В теореме Котельникова речь идет о частоте дискретизации, превышающей в 2 раза максимальную частоту в спектре сигнала. А какой у меандра спектр? ....

И Вас Duino A.R. это тоже касается! Я сразу грешным делом подумал шо Вы правы про гармоники, но дух Котельникова укрепил меня в вере и наставил на путь ))))

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

Logik пишет:

Duino A.R. пишет:
В теореме Котельникова речь идет о частоте дискретизации, превышающей в 2 раза максимальную частоту в спектре сигнала. А какой у меандра спектр? ....

И Вас Duino A.R. это тоже касается! Я сразу грешным делом подумал шо Вы правы про гармоники, но дух Котельникова укрепил меня в вере и наставил на путь ))))

Раз уж меня коснулось... Я не интуитивный теоретик, хотя интуиция в общем случае - вещь хорошая, поэтому вместо спиритического сеанса общения с духами обратился к первоисточнику. "Про гармоники" это не я прав или не прав. Это формулировка теоремы Котельникова: "Если непрерывный сигнал u(t) имеет ограниченный спектр и наивысшая частота в спектре меньше, чем fв герц, то сигнал u(t) полностью определяется последовательностью своих мгновенных значений в дискретные моменты времени, отстоящие друг от друга не более чем на 1/(2fв) секунд." В такой формулировке теорема фундаментальна, но мало применима. Важно, что можно ПОЛНОСТЬЮ восстановить исходный непрерывный сигнал, если имеются толко дискретные отсчеты. В практических выводах из теоремы Котельникова предлагаются конкретные способы интерполяции исходного сигнала на основе имеющихся отсчетов. Причем там решают две задачи. Одна - математически доказать, что некоторые способы дают ТОЧНОЕ восстановление исходного сигнала, вторая - дать практические способы восстановить исходный сигнал с необходимой точностью за конечное число действий.

Теперь относительно приведенного примера. Вы берете лист из школьной тетради, предварительно расчерчиваете там сетку с шагом в 1 см и рисуете в ней меандр. Потом берете другой карадаш и обводите нарисованый меандр по клеточкам в 5 мм. Два меандра слились в один. И причем тут теорема Котельникова? В этой логике получается, что осциллограф можно заменить логическим анализатором.

Возмем для примера блокинг-генератор. Сигнал представляет собой относительно редкие повторяющиеся пачки импульсов. Каждая пачка состоит из множественных затухающих колебаний. Словесно долго описывать. Видели, я думаю. Первая гармоника сигнала - на частоте следования пачек. Поделим ее на 2. Проведем замеры. При скважности пачек да хоть 10 (для блокингов скважность больше 100 - нормальное явление) мы рискуем не увидеть просто ничего. В пачке затухающие колебания. Берем период наиболее явных колебаний, делим его на 2 и снова проводим замеры. Получаем набор точек. Что дальше? "Рука просится" соединить все точки прямыми линиями (экстраполяция 1-го порядка). Что получилось? Кусок пилы с разновысокими треугольными зубьями, по которым совершенно нельзя определить формы исходного сигнала, т.е. что же происходит в блокинге на самом деле (ВЧ-звон, "иглы" и т.п.).

Да хоть просто взять синус, снять отсчеты в 2 раза чаще периода и соединить полученные точки (интерполятор 1-го порядка). И что с такой картинкой делать? Или не соединять, а "полочки" оставить (интерполятор 0-го порядка). Вообще "... ни в Красную армию". А если полиномом ударить между точками? Каким? И везде свое.

Если нам действительно нужно по форме сигнала оценить происходящие процессы, то мы будем увеличивать частоту дискретизации до того уровня, когда сами себе из конкретной задачи не скажем: "Хватит, довольно." :)) На моей практике очень мало кто, глядя на сигнал сложной формы, может сходу сказать, как тот поменяется, если обрезать его спектр на такой то гармонической частоте, или как можно поиграть соотношением "частота выборок / тип интерполяции". Поскольку у импульсных сигналов спектр считай, что бесконечный, то их "точное" восстановление возможно только бесконечными рядами. На практике только сам человек может определить, какие искажения исходного сигнала для него допустимы, а какие - нет. Самый практический способ - для конкретного сигнала взять "на время" заведомо качественный осциллограф, посмотреть сигнал на нем, а потом на том, который планируете использовать в работе постоянно. В результате сравнения определить, подойдет для конкретнй задачи выбранный (имеющийся) прибор, или нет.

Logik
Offline
Зарегистрирован: 05.08.2014

Duino A.R. пишет:

Теперь относительно приведенного примера. Вы берете лист из школьной тетради, предварительно расчерчиваете там сетку с шагом в 1 см и рисуете в ней меандр. Потом берете другой карадаш и обводите нарисованый меандр по клеточкам в 5 мм. Два меандра слились в один. И причем тут теорема Котельникова? В этой логике получается, что осциллограф можно заменить логическим анализатором.

Возмем для примера блокинг-генератор. Сигнал представляет собой относительно редкие повторяющиеся пачки импульсов. Каждая пачка состоит из множественных затухающих колебаний. Словесно долго описывать. Видели, я думаю. Первая гармоника сигнала - на частоте следования пачек. Поделим ее на 2. Проведем замеры. При скважности пачек да хоть 10 (для блокингов скважность больше 100 - нормальное явление) мы рискуем не увидеть просто ничего. В пачке затухающие колебания. Берем период наиболее явных колебаний, делим его на 2 и снова проводим замеры. Получаем набор точек. Что дальше? "Рука просится" соединить все точки прямыми линиями (экстраполяция 1-го порядка). Что получилось? Кусок пилы с разновысокими треугольными зубьями, по которым совершенно нельзя определить формы исходного сигнала, т.е. что же происходит в блокинге на самом деле (ВЧ-звон, "иглы" и т.п.).

Да хоть просто взять синус, снять отсчеты в 2 раза чаще периода и соединить полученные точки (интерполятор 1-го порядка). И что с такой картинкой делать? Или не соединять, а "полочки" оставить (интерполятор 0-го порядка). Вообще "... ни в Красную армию". А если полиномом ударить между точками? Каким? И везде свое.

 

Букв много, а по существу опыта, в чем некоректность конкретно, без натянутых аналогий?

Проверить на сигнале с высокой скважностю? Так не проблема, только для меня результат очевиден по приведеному коду.

Теперь генератор

  for(;;)
  {
      digitalWrite(A2, HIGH);digitalWrite(led, HIGH);delay(10);
      digitalWrite(A2, LOW);digitalWrite(led, LOW);delay(190);
  }

Осцилограф без изменений, даже не перезаливался. У экрана ноль вверху, потому перевернуто

 

Востановит для любой формы периодического дстаточно длительного сигнала. И спектральное ограничение в теореме Котельникова именно для обеспечения этих требований к сигналу, а сигнал востанавливается, как Вы подчеркнули - полностью. Весь спектр, что и видно на картинке.  И так будет на любой форме,  пока не начнет сказыватся неидеальность генератора (частота плавает, скважность дрожит и т.д.) и осцилографа (АЦП не мгновенный сигнал преобразует, частота плавает и т.д.).

Про проблемы с интерполяцией результата кривой первого порядка - да, она даст плохие результаты. И что из этого? Применяйте более сложные методы. На принципиальную возможность оцифровать и восстановить сигнал это не влияет.

Logik
Offline
Зарегистрирован: 05.08.2014

Предвидя возможные вопросы - "а почему снова прямоугольники?", ну нет у меня генераторов разной формы. Зато есть конденсатор. В предыдущую схему добавлена дифференцирующая цепь - конденсатор, наверно 0,1мкФ.

Сигнал явно соответствует ожидаемому. Експоненты наблюдаются. Также явно видно проблему с синхронизацией, что понятно, т.к. она сделана для цифрового сигнала. Стало больше шумов, что тоже ожидаемо.

На этом, как мне кажется, тема вполне исчерпана. Теорема подтверждена эксперементально.

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

 

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Logik Как меанд делаете понятно, дергая ногу.

Не вижу кода с теоремой Котельникова, как вы восттанавливаете сигнал?

Мамл же помоему на стм32 и так имеет быстрый АПЦ он и без Котельнокова отобразит сигнал на таких частотах.

Покажите конкретно как вы берете массив с замерами АЦП и как из него делаете другой массив но уже с восстановленным сигналом, без кода который можно проверить это просто выступление в защиту связистов с их Котельниковым или Нейквистом....

#define TIME_DISCRET 100

  word TimeDiscret=millis();
  word Time;
  for(word n=0;;n++)
  {
    if(n==280) //развертка кончила надо синхронизироватся
    {
        pinMode(ANALOG_PIN, INPUT);

      for(;digitalRead(ANALOG_PIN);){delay(1);}
      for(;!digitalRead(ANALOG_PIN);){delay(1);}
      pinMode(ANALOG_PIN, INPUT_ANALOG);  //потому шо STM
      Time=millis();
      TimeDiscret=Time-((Time-TimeDiscret)%TIME_DISCRET); //выкинем пропущенные во время синхронизации вводы
      n=0;
    }
    else
      Time=millis();
      
    if((Time-TimeDiscret)>TIME_DISCRET)
    {
      word InpVal = analogRead(ANALOG_PIN);
      tft.drawPixel(n,(InpVal/32)+50,BLUE); 
      TimeDiscret=Time;
    }
    delay(1);
  }

 

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

Logik, вы путаете причинно следственные явления.

Котельников гласит, что: "Можно описать, зная частоту сигнала". Вы же путаете с формулировкой "Можно восстановить делая замеры и не зная, что мы меряем".

Тоесть сигнал можно "заархивировать" частотой дискретизации, но невозможно догадаться про форму сигнала имея замеры с некоторой частотой.

Догадайтесь какой здесь сигнал.

Logik
Offline
Зарегистрирован: 05.08.2014

bodriy2014 пишет:

Не вижу кода с теоремой Котельникова, как вы восттанавливаете сигнал?

А это потому шо код свернули ;)  разверните, там все есть. Востанавливаем накапливая в буфере, но вместо того чтоб буфер отдельный заводить используем буфер экрана, т.е. просто выводим в него каждое значение.

bodriy2014 пишет:

Мамл же помоему на стм32 и так имеет быстрый АПЦ он и без Котельнокова отобразит сигнал на таких частотах.

Да, быстрый. Но из быстрого завсегда можно медленный сделать, строка 21 как раз делает так, чтоб АЦП получало значения каждые TIME_DISCRET 100 милисек. Т.к. выбран сигнал периодом 200мс, то условие теоремы как раз выполняется. 

bodriy2014 пишет:

Покажите конкретно как вы берете массив с замерами АЦП и как из него делаете другой массив но уже с восстановленным сигналом, без кода который можно проверить это просто выступление в защиту связистов с их Котельниковым или Нейквистом....



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

 В принципе оба массива можна сделать, только зачем? 

bodriy2014 пишет:

без кода который можно проверить это просто выступление в защиту связистов с их Котельниковым или Нейквистом....



Код приведен. Скрины тоже. Считайте как хотите. Для продолжения разговора укажите в чем мой код некоректен.

Есть порода людей которым и закон не закон, и доказательства побоку,  и код - не код,  и фотки - не аргумент. Таких только камаз на встречке убеждает, остальные методы их невежество не изменяют. Вам решать. Я чё хотел сказать и показать - сделал. Кому надо - посмотрит, разберется как и почему и поймет. Остальным - удачи на дорогах.

Logik
Offline
Зарегистрирован: 05.08.2014

Okmor пишет:

Logik, вы путаете причинно следственные явления.

Котельников гласит, что: "Можно описать, зная частоту сигнала". Вы же путаете с формулировкой "Можно восстановить делая замеры и не зная, что мы меряем".

Тоесть сигнал можно "заархивировать" частотой дискретизации, но невозможно догадаться про форму сигнала имея замеры с некоторой частотой.

Догадайтесь какой здесь сигнал.

 

Можна описать, можна восстановить, можно "заархивировать"- софистика. Доказательство теоремы видели? Результат ввода сигналов частотой 5Гц разной формы с помощю АЦП с частотой 10Гц смотрели?

Конкретно, где и что не так?

Вы действительно считаете что матиматически доказанную и экспериментально подтвержденную теорему можно опровергнуть аргументом "невозможно догадаться про форму сигнала"?! 

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

Logik пишет:

Букв много, а по существу опыта, в чем некоректность конкретно, без натянутых аналогий?

Букв много для наглядности, а не для "обидности". :)) Вы берете изначально дискретную функцию специального вида и представляете через другую дискретную функцию с частотой дискретизации кратной входной. Т.е. от бесконечного классического гармонического спектра переходите к совершенно конечному спектру разложения только по специальному базису. В Вашем примере между отсчетами (сантиметровыми клеточками) входного сигнала изначально ничего нет. Как только попадаешь в отсчет точно (за счет того, что в 1 см =2 х 5 мм) то предложенная функция определяется 100% с точностью разрешения АЦП. Принципиально отсутствует ошибка интерполяции.

Logik пишет:

Проверить на сигнале с высокой скважностю? Так не проблема, только для меня результат очевиден по приведеному коду. ...

Осцилограф без изменений, даже не перезаливался. У экрана ноль вверху, потому перевернуто

Каким образмом на экране осциллографа оказался полный входной импульс, короче, чем период дискретизации входных отсчетов? Т.е. 10 мс длительности импульса против 100 мс дискретизации входных отсчетов.

Logik пишет:

Про проблемы с интерполяцией результата кривой первого порядка - да, она даст плохие результаты. И что из этого? Применяйте более сложные методы. На принципиальную возможность оцифровать и восстановить сигнал это не влияет.

На практике влияние вида интерполяции имеет огромное значение и напрямую связано как с формой входного сигнала, так и с частотой дискретизации.

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

Результат ввода сигналов частотой 5Гц разной формы с помощю АЦП с частотой 10Гц смотрели?

А вы смотрели результа замера АЦП по первой, второй, третей гармоники? Что с ним делать?

Что делать с меандром? как его увидеть?

А пила? Что делать с ней? Нам нужно знать не только частоту, но и их форму, иначе достаточно частотомера.

А теперь обясню почему нельзя видеть меандр. Для частоты меандра 10кгц преобразования 7го порядка (гармоники), тоесть частота дискретизации должна быть не менее 70 кГц. Также и для сигналов в быстрыми фронтами. 

 

Logik
Offline
Зарегистрирован: 05.08.2014

Duino A.R. пишет:

Букв много для наглядности, а не для "обидности". :)) Вы берете изначально дискретную функцию специального вида и представляете через другую дискретную функцию с частотой дискретизации кратной входной. Т.е. от бесконечного классического гармонического спектра переходите к совершенно конечному спектру разложения только по специальному базису. В Вашем примере между отсчетами (сантиметровыми клеточками) входного сигнала изначально ничего нет. Как только попадаешь в отсчет точно (за счет того, что в 1 см =2 х 5 мм) то предложенная функция определяется 100% с точностью разрешения АЦП. Принципиально отсутствует ошибка интерполяции.

Кратность частот ни при чем. Они от разных кварцевых генераторов работают. 

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

Duino A.R. пишет:

Каким образмом на экране осциллографа оказался полный входной импульс, короче, чем период дискретизации входных отсчетов? Т.е. 10 мс длительности импульса против 100 мс дискретизации входных отсчетов.

Ага, именно, и очень короткий выводится! Сигнал востанавливается полностю.

Duino A.R. пишет:

На практике влияние вида интерполяции имеет огромное значение и напрямую связано как с формой входного сигнала, так и с частотой дискретизации.

С этим спорить не буду, пожалуй да. Но Вы сигнал видите на экране? Я тоже. Он соответствует генерируемому? Да. Значить нет проблемы с интерполяцией.

Logik
Offline
Зарегистрирован: 05.08.2014

Okmor пишет:

Результат ввода сигналов частотой 5Гц разной формы с помощю АЦП с частотой 10Гц смотрели?

А вы смотрели результа замера АЦП по первой, второй, третей гармоники? Что с ним делать?

Спектр не раскладывал, но если сигнал отображен без существенных искажений то и гармоники там соответствующие. Если бы чего не хватало - видно бы было.

Вы как бы намекаете, что на первой фотке не прямоугольные импульсы? Так сразу и скажите открытым текстом.

Okmor пишет:

Что делать с меандром? как его увидеть?

То есть не видете?! Это уже просто смешно! Скажите, сигналы на всех 3-х фотках соответствуют по форме, тем которые ожидаются. Варианты ответа:  1.да 2.нет

Okmor пишет:

А пила? Что делать с ней? Нам нужно знать не только частоту, но и их форму, иначе достаточно частотомера.

А что "пила"? Главное шоб закусывала ))) См. 3-ю фотку експоненты кусками. Значить и пила будет.

Okmor пишет:

А теперь обясню почему нельзя видеть меандр. Для частоты меандра 10кгц преобразования 7го порядка (гармоники), тоесть частота дискретизации должна быть не менее 70 кГц. Также и для сигналов в быстрыми фронтами. 

 

Да не напрягайтесь с картинками. Ваша точка зрения понятна, я ж писал шо тоже сразу так подумал, но потом понял ошибочность, что и подтвердил эксперимент. На второй фотке сигнал с большой скважностю, там спектр здоровенный, а он есть! И форма верная. Значить гармоники до лампочки вообще.

ПС. История с Вашим обяснением напоминает "Камни с неба падать не могут, им там неоткуда взяться! (Парижская Академия Наук о метеоритах, 1772 г)"

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

Logik пишет:

Можна описать, можна восстановить, можно "заархивировать"- софистика. Доказательство теоремы видели? Результат ввода сигналов частотой 5Гц разной формы с помощю АЦП с частотой 10Гц смотрели?

Конкретно, где и что не так?

Вы действительно считаете что матиматически доказанную и экспериментально подтвержденную теорему можно опровергнуть аргументом "невозможно догадаться про форму сигнала"?! 

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

Методом накопления активно пользуются при локации планет и т.п., когда крайне низкое соотношение "сигнал/шум". Смысл осциллографа в том, что оператор имеет возможность анализировать входной сигнал (его форму) в такт поступлению входных данных. Осциллографы с памятью особенно полезны, когда необходимо отловить всякие редкие или специфичные искажения, которые в обычном режиме не виды. И здесь требуется, чтобы осциллограф фиксировал любой интересующий сигнал с первого предъявления. Это значит, что частота дискретизации должна быть весьма высока, т.е. на самый короткий импульс, интересующий оператора, приходилось хотя бы несколько отсчетов.

Logik
Offline
Зарегистрирован: 05.08.2014

Duino A.R. пишет:

 Вариант с произвольной формой сигнала (конденсатор) работает только с учетом того, что происходит (очень)многократное накопление сигнала

Ай малаца! Хоть ктото шото понял! "Возьми конфетку с полки"  Тока почему это для "вариант с произвольной формой сигнала (конденсатор)"? Код один везде.

Duino A.R. пишет:

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

Немалаца! Верни конфетку на полку. Синхронизация вобще не причем. Плохо когда частоты кратны, но в жизни так не бывает если не от одного генератора. А потому это не мешает.

Duino A.R. пишет:

 Смысл осциллографа в том, что оператор имеет возможность анализировать входной сигнал (его форму) в такт поступлению входных данных.

А тут  подробней. На входе 500КГц, как смотреть в такт. В любом случае, надо запомнить и вывести. И если один из 100 сигналов кривоват, то как это увидет? Очевидно накапливать за достаточно длительное время. Что и делается.

 

Duino A.R. пишет:
 Это значит, что частота дискретизации должна быть весьма высока, т.е. на самый короткий импульс, интересующий оператора, приходилось хотя бы несколько отсчетов.

Писал уже про короткие, их видно. См. вторую фотку.

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

Logik пишет:

Duino A.R. пишет:

 Смысл осциллографа в том, что оператор имеет возможность анализировать входной сигнал (его форму) в такт поступлению входных данных.

А тут  подробней. На входе 500КГц, как смотреть в такт. В любом случае, надо запомнить и вывести. И если один из 100 сигналов кривоват, то как это увидет? Очевидно накапливать за достаточно длительное время. Что и делается.

Duino A.R. пишет:
 Это значит, что частота дискретизации должна быть весьма высока, т.е. на самый короткий импульс, интересующий оператора, приходилось хотя бы несколько отсчетов.

Писал уже про короткие, их видно. См. вторую фотку.

При срабатывании эм пускателя импульс помехи вешает контроллер. Хотим узнать где и как пролезает помеха. Обычный осциллограф ничего не дает, помеховые импульсы - одиночные, на экране не оставляют следа. Берем цифровой, с памятью. По амплитуде ловим приход помехи. Записываем отсчеты в буфер, потом смотрим. И так по единственному экземпляру смотрим сигнал в разных местах устройства. Пускателем часто не пощелкаешь. Метод накопления здесь не годится. Только высокая частота отсчетов.

Logik
Offline
Зарегистрирован: 05.08.2014

Duino A.R. пишет:

Пускателем часто не пощелкаешь. Метод накопления здесь не годится. Только высокая частота отсчетов.

 

Не существует одного метода на все случаи жизни. Потому у осцилографов куча режимов. И не все они всегда подходят. Изначально вопрос был о максимальной частоте сигнала, у которого форму можна посмотреть, соответственно и режим тут свой. Со своими плюсами и минусами, равнять его с медленным пускателем явно нельзя. Разговор шел о отношении частоты АЦП к максимальной частоте вводимого сигнала, что явно означает его повторяемость. И это отношение равно 2. Оговаривалось про достаточную длительность и т.д. По ходу выяснилось,  что можна даже рассмотреть в сигнале длительности намного короче чем период АЦП. 

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Еще раз повторяю, для тех кто в танке.

Хоть вы и пишите что я тугой и меня только камаз переубедит.

Посмотрел код, подумал может чего не заметил.

#define TIME_DISCRET 100

  word TimeDiscret=millis();
  word Time;
  for(word n=0;;n++)
  {
    if(n==280) //развертка кончила надо синхронизироватся
    {
        pinMode(ANALOG_PIN, INPUT);

      for(;digitalRead(ANALOG_PIN);){delay(1);}
      for(;!digitalRead(ANALOG_PIN);){delay(1);}
      pinMode(ANALOG_PIN, INPUT_ANALOG);  //потому шо STM
      Time=millis();
      TimeDiscret=Time-((Time-TimeDiscret)%TIME_DISCRET); //выкинем пропущенные во время синхронизации вводы
      n=0;
    }
    else
      Time=millis();
      
    if((Time-TimeDiscret)>TIME_DISCRET)
    {
      word InpVal = analogRead(ANALOG_PIN);
      tft.drawPixel(n,(InpVal/32)+50,BLUE); 
      TimeDiscret=Time;
    }
    delay(1);
  }

Вы с определенной периодичностью  TIME_DISCRET считываете сигнал АЦП в переменную InpVal и выводите пиксель на экран в коде всего одна формула tft.drawPixel(n,(InpVal/32)+50,BLUE); и ее по косточкам

-n координата Х для пикселя просто приростает от начала к концк дисплея

-InpVal/32 значение АЦП 1024/32=32 это чтоб точка влезла в экран маштаб меняем.

-+50 это просто отступ на экране

-BLUE цвет пикселя.

Где в этом коде теорема котельникова, где работа по восстановлению сигнала, в методичках по восстановлению сигнала куча расчетов и работы с массивами данных, для матлаба самое то, даже в экселе не удобно.

А массив может  вам и не нужен, но для ослика размер массива это один из основных параметров, растянуть изображение или сжать, просто просмотреть сигнал длинной больше чем экран, и расчеты делать основные такие как частота, труРМС.

Logik
Offline
Зарегистрирован: 05.08.2014

Разобрали нужную команду верно. Если Вам нужен массив, так дедлайте его, обявите в начале word M[280];

и заполняйте после ввода очередного M[n]=InpVal в строке 21. Хотите больше екрана - меняйте значение 280 на сколько Вам надо. При этом понимать, что соседние элементы массива отстоят по времени не на время преобразования АЦП как обычно было, а на время прокрутки цикла. Ну ей богу, проще ж некуда. При вживлении такого подхода в реальный осцилограф на высокой частоте будет куда больше проблем: организация синхронизации, возможно компараторы нужны, измерение времени напрямую с таймера, т.к. прерывания прийдется запрещать и т.д. Это тоже мне решать? Разберитесь с алгоритмом в целом и используйте. Или не используйте. Или забейте разбиратся и дальше гордо утверждайте что не менее 50 отсчетов, а Котельников - неприменим.

Я привел код отрисовывающий форму сигнала при вводе только  2 отсчета АЦП за период. В полном соответствии с теоремой. В ней больше ни чего не утверждается, только что этого "достаточно для полного". Видим формы сигналов? Если нужны формулы из методички - ну допишите любую, какая понравится, будет использоватся.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Logik пишет:

Разобрали нужную команду верно. Если Вам нужен массив, так дедлайте его, обявите в начале word M[280];

и заполняйте после ввода очередного M[n]=InpVal в строке 21. Хотите больше екрана - меняйте значение 280 на сколько Вам надо. При этом понимать, что соседние элементы массива отстоят по времени не на время преобразования АЦП как обычно было, а на время прокрутки цикла. Ну ей богу, проще ж некуда. При вживлении такого подхода в реальный осцилограф на высокой частоте будет куда больше проблем: организация синхронизации, возможно компараторы нужны, измерение времени напрямую с таймера, т.к. прерывания прийдется запрещать и т.д. Это тоже мне решать? Разберитесь с алгоритмом в целом и используйте. Или не используйте. Или забейте разбиратся и дальше гордо утверждайте что не менее 50 отсчетов, а Котельников - неприменим.

Я привел код отрисовывающий форму сигнала при вводе только  2 отсчета АЦП за период. В полном соответствии с теоремой. В ней больше ни чего не утверждается, только что этого "достаточно для полного". Видим формы сигналов? Если нужны формулы из методички - ну допишите любую, какая понравится, будет использоватся.

Я конечно знал что вы темните и тот скетч что дали не может рисовать тех скринов что выкладывали, но так откровенно врать зачем. Вот ваш якобы скрин доказательство

А вот что я получил залив ваш код, все только ваше только на свой дисплей натянул.

АЦП 100Гц сигнал 50Гц

#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
Adafruit_PCD8544 display = Adafruit_PCD8544(2, 3, 4, 6, 7);//пины к которым у вас подключен дисплей 
#define TIME_DISCRET 10
unsigned long Time;  
unsigned long TimeDiscret=millis();
void setup() {
display.begin();
display.setContrast(52);
display.clearDisplay();  
display.display();  
Serial.begin(9600);
pinMode(A4, INPUT);
}
void loop() {  
  for(int n=0;;n++)
  { 
    if(n==280) //развертка кончила надо синхронизироватся
    {
      for(;digitalRead(A4);){delay(1);}
      for(;!digitalRead(A4);){delay(1);}
      Time=millis();
      TimeDiscret=Time-((Time-TimeDiscret)%TIME_DISCRET); //выкинем пропущенные во время синхронизации вводы
      n=0;
      display.clearDisplay(); 
    }
    else
      Time=millis();      
    if((Time-TimeDiscret)>TIME_DISCRET)
    {
      int InpVal = analogRead(A4);
      display.drawPixel(n,47-InpVal/23, BLACK);
      TimeDiscret=Time;
    }
    delay(1);
    display.display();
  }
}

Logik
Offline
Зарегистрирован: 05.08.2014

bodriy2014 пишет:

Я конечно знал что вы темните и тот скетч что дали не может рисовать тех скринов что выкладывали, но так откровенно врать зачем. Вот ваш якобы скрин доказательство

В четвертой строке вместо  #define TIME_DISCRET 10 должно быть #define TIME_DISCRET 100 у меня это первая строка кода. Дальше не смотрел, если в начале такое, то кроме тупости, еще и криворукость. Скопировать готовый код к себе в проект не способны. У Вашего экрана разрешение какое?! Понятно что это Вас вобще не волнует, по горизонтали так и выводите 280 точек. 

До принесения Вами извинений, Вы в игноре.

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

Logik, вы можете повторить опыт, но только для неизвестной входной частоты. Та что бы "#define TIME_DISCRET 100" расчитывалось автоматически. :-)

 

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Logik пишет:

В четвертой строке вместо  #define TIME_DISCRET 10 должно быть #define TIME_DISCRET 100 у меня это первая строка кода. Дальше не смотрел, если в начале такое, то кроме тупости, еще и криворукость. Скопировать готовый код к себе в проект не способны. У Вашего экрана разрешение какое?! Понятно что это Вас вобще не волнует, по горизонтали так и выводите 280 точек. 

До принесения Вами извинений, Вы в игноре.

Все по правилам  #define TIME_DISCRET 10 это частота дискретизации 100Гц, сигнал подавал 50ГЦ, на фото же видно. Или вы предлагаете осциллограф для измерения сигналов до 5Гц)) мы уж как-то и без Котельникова справимся. Разрешение дисплея 84 по ширине, код изменил но результат тот же , даже фоткать такую лажу не хочу. Или признавайтесь что нарисовали в ручную график или показывайте настоящий код, до этого вы просто обманщик!

#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
Adafruit_PCD8544 display = Adafruit_PCD8544(2, 3, 4, 6, 7);//пины к которым у вас подключен дисплей 
#define TIME_DISCRET 10
unsigned long Time;  
unsigned long TimeDiscret=millis();
void setup() {
display.begin();
display.setContrast(52);
display.clearDisplay();  
display.display();  
Serial.begin(9600);
pinMode(A4, INPUT);
}
void loop() {  
  for(int n=0;;n++)
  { 
    if(n==84) //развертка кончила надо синхронизироватся
    {
      for(;digitalRead(A4);){delay(1);}
      for(;!digitalRead(A4);){delay(1);}
      Time=millis();
      TimeDiscret=Time-((Time-TimeDiscret)%TIME_DISCRET); //выкинем пропущенные во время синхронизации вводы
      n=0;
      display.clearDisplay(); 
    }
    else
      Time=millis();      
    if((Time-TimeDiscret)>TIME_DISCRET)
    {
      int InpVal = analogRead(A4);
      display.drawPixel(n,47-InpVal/23, BLACK);
      TimeDiscret=Time;
    }
    delay(1);
    display.display();
  }
}

 

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

Теорему Котельника можно использовать предварительно точно зная частоту входного сигнала. По простому будет выглядеть как наложение захваченных кусков и наложением их со сдвигом на величину рассинхронизации.

Так как нам никогда неизвестна входная частота сигнала, то мы можем поймать вторую и третью гармонику. Также при приближении частоты захвата к величине 1/2 входной, то массив для захвата будет стремится к бесконечности.

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

bodriy2014 гласит, что на Atmega8 АЦП имеет лучшие показатели. На Atmega8 фронт сигнала нарастает быстрее и уже есть возможность использовать делитель 1/2.

Ко всему этому осциллограф который будет 2с записывать сигнал, а потом его суммировать и извлекать форму, мне нафиг не нцжен.

Осиллограму мне хочется видеть в режиме реального времени.

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

Также есть интерестная идея с использованием отдельного АЦП.

Паралельный АЦП заводим на входы 0-7.

Второй, или третий бит младшего разрята заводим на прерывание по изменению значения.

АЦП работает всегда, но запись в массив производится только по прерыванию изменения разряда.

В сухом остатке мы будем иметь захват только той части сигнала, где происходят его изменения, а прямолинейные участки будут описаны двумя точками. 

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Okmor Отличная идея, нужно на тестовой плате распаивать АЦП и проверять все варианты.

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

Okmor пишет:

АЦП работает всегда, но запись в массив производится только по прерыванию изменения разряда.

В сухом остатке мы будем иметь захват только той части сигнала, где происходят его изменения, а прямолинейные участки будут описаны двумя точками.


Я так делал, чтобы экономить память для сохранения медленноменяющегося сигнала. Для сигнала частного вида память экономится очень сильно, но приходится изобретать протокол для хранения данных, чтобы знать в какие моменты времени начались изменения. А на хранение быстроменяющегося сигнала таким способом у меня уходило даже больше памяти, чем при простой записи сигнала.

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

Duino A.R. пишет:
Okmor пишет:
АЦП работает всегда, но запись в массив производится только по прерыванию изменения разряда.

 

В сухом остатке мы будем иметь захват только той части сигнала, где происходят его изменения, а прямолинейные участки будут описаны двумя точками.

Я так делал, чтобы экономить память для сохранения медленноменяющегося сигнала. Для сигнала частного вида память экономится очень сильно, но приходится изобретать протокол для хранения данных, чтобы знать в какие моменты времени начались изменения. А на хранение быстроменяющегося сигнала таким способом у меня уходило даже больше памяти, чем при простой записи сигнала.

Да. Это недостаток. Тут нужен кокой то гибридный метод. 

Нужно пробовать.

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

Okmor] </p> <p>[quote=Duino A.R.][quote=Okmor пишет:
Тут нужен кокой то гибридный метод. 

Нужно пробовать.


Если есть реальная нужда, то задачу нужно конкретизировать (ТЗ в "граммах"), а уже именно ее и решать, подбирая или изобретая метод решения.

Logik
Offline
Зарегистрирован: 05.08.2014

Okmor пишет:

Паралельный АЦП заводим на входы 0-7.

Второй, или третий бит младшего разрята заводим на прерывание по изменению значения.

АЦП работает всегда, но запись в массив производится только по прерыванию изменения разряда.

Афигеть 8))) Отличная идея )))) Всем нравится.

Допустим завели с 3-го разряда.

Первый отсчет, c АЦП пришел 0 - нет прерывания, сигнал не сохранили, второй отсчет  с АЦП 0x20  - нет прерывания, сигнал не сохранили, 3 отсчет  с АЦП 0x80  - нет прерывания, сигнал не сохранили, 4 отсчет  с АЦП 0x10  - нет прерывания, сигнал не сохранили. Импульс закончился, экономия 100%, пропустили все.

И хотя бы кто чё заподозрил! Ребята, у вас конкурс "Тупой, ещё тупее"? финал? Тогда я начинаю понимать, что тему я не там и не тем задвигал.

Okmor пишет:

Теорему Котельника можно использовать предварительно точно зная частоту входного сигнала. По простому будет выглядеть как наложение захваченных кусков и наложением их со сдвигом на величину рассинхронизации.

Частоту знать не надо, для борьбы с рассинхронизацией служит блок синхронизации. В простейшем сучае ждем фронт каждій раз. Ну код же есть! Глянули бы!

Okmor пишет:
Так как нам никогда неизвестна входная частота сигнала, то мы можем поймать вторую и третью гармонику. Также при приближении частоты захвата к величине 1/2 входной, то массив для захвата будет стремится к бесконечности.
Если синхронизация по фронту, какие там гармоники. Как работает в старом ЭЛТ осцилографе, так и здесь.

Okmor пишет:
 упираемся в ограничение нарастания сигнала на входе АЦП, тобиш емкость входного тракта АЦП.
Бред. Емкость конечно есть, но АЦП обеспесит переход с 0 до МАХ за один такт. Если источник обеспечит короткий фронт сигнала, то АЦП конвертит почти всегда без промежуточного посреди фронта. 

Okmor пишет:
bodriy2014 гласит, что на Atmega8 АЦП имеет лучшие показатели. На Atmega8 фронт сигнала нарастает быстрее и уже есть возможность использовать делитель 1/2.
Возможно, но на STM думаю лучше, я на него ориентируюсь, но и его мало.

Okmor пишет:

Ко всему этому осциллограф который будет 2с записывать сигнал, а потом его суммировать и извлекать форму, мне нафиг не нцжен.

Осиллограму мне хочется видеть в режиме реального времени.

 

Ну если развертка 2 с - то и запишет за две сек. На быстродействии остановлюсь подробней. Очевидно предложеный подход целесообразней всего применять при высоких частотах. Для отображения сигнала как в видео ниже надо пару сот отсчетов АЦП. Т.е. хотим смотреть 500КГц а АЦП конвертит 1МГц, значить надо пару сот микросекунд. С таким периодом картинку можно менять на экране, мгновенней некуда, успевал бы экран и глаза. 

На последок обещаное еще в начале видео, как приз для криворукого тупого хама. Он меня теперь наверно коперфилдом сочтет)) Но мнение альтернативно одаренных не интересует. Если тело день методичку читало - не осилило (студенты за перемену справляются;), готовый код не шмогло портировать себе, ну подумаеш про разрешение дисплея забыло, и после того как в его гомнокоде я тыкнул  в ошибки, то оно вместо спасибо хамит и клевещит, то это клеветник и моральный урод, пусть по прерыванию с линии данных делает, потом в китае купит работающее.

 

https://cloud.mail.ru/public/MEfc/dHtTpBeff

 

 

 

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Logik пишет:

.....

На последок обещаное еще в начале видео, как приз для криворукого тупого хама. Он меня теперь наверно коперфилдом сочтет)) Но мнение альтернативно одаренных не интересует. Если тело день методичку читало - не осилило (студенты за перемену справляются;), готовый код не шмогло портировать себе, ну подумаеш про разрешение дисплея забыло, и после того как в его гомнокоде я тыкнул  в ошибки, то оно вместо спасибо хамит и клевещит, то это клеветник и моральный урод, пусть по прерыванию с линии данных делает, потом в китае купит работающее.

https://cloud.mail.ru/public/MEfc/dHtTpBeff

Как я и думал, теоремой Котельникова и не пахнет.

Удивил пост, по голосу в видео взрослый человек, а такое пишете Ü

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

Кстати. По идее наложения сигнала мы уже проехались тут:

http://arduino.ru/forum/proekty/pultoskop-na-arduino-27mgts?page=1#comme...

и пришли к выводу, что метод непреспективный.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Okmor пишет:

Кстати. По идее наложения сигнала мы уже проехались тут:

http://arduino.ru/forum/proekty/pultoskop-na-arduino-27mgts?page=1#comme...

и пришли к выводу, что метод непреспективный.

Не сумели использовать((

Смотрю описание многих приборов как любительских так и промышленных они все повторяющийся сигнал могут отображать в 5-10раз больше чем единичный, берегут секреты)))

Как там твой АЦП еще не приехал?

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

АЦП не прехал.

Приехал экран 

http://ru.aliexpress.com/item/12864G-086-P-12864-LCD-Module-COG/32418902...

- балуюсь. Придется переписать библиотеку в сторонк быстодействия.

Logik
Offline
Зарегистрирован: 05.08.2014

Okmor пишет:

Кстати. По идее наложения сигнала мы уже проехались тут:

http://arduino.ru/forum/proekty/pultoskop-na-arduino-27mgts?page=1#comme...

и пришли к выводу, что метод непреспективный.

Пос сылке чистый  маразм.

Okmor пишет:

Предлагаю отказатся от генерации задержек, а также компаратора.

Отрисовка происходит в несколько этапов.

1. Захват области. Например 120 точек.

2. Разделение стека на 4 части и наложение

3. Расчет сдвига для каждого сектора.  Тут фесь фокус!!!

И отрисовка графика.

Тут работает математика вместо железа.

Края отрезаем и выбрасываем.

Метод не работает при попадании на гармонику сигнала.

Кстати коэфициент смещения для каждого сектора будет общий для всех секторов. Остается рассчитать его.

 

 

Расчет сдвига...Края отрезаем и выбрасываем.. 

У меня где это видел? Покажи где.

 

Logik
Offline
Зарегистрирован: 05.08.2014

bodriy2014 пишет:

 

Как я и думал, теоремой Котельникова и не пахнет.

 

Нюхай ниже слабоумный, там запахнет )))

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

Дорогой Logik . Ваши познания урологии меня смущают.

Конечно я смотрел ваш супер осциллограф на 5Гц. В методе представленном вами есть много подводных камней.

1. Синхронизация. - Нужен аналогово-цифровой синхронизирующий тракт с выходом на прерывание, а осциллограф у нас цифровой. Это уже совсем другой класс прибора - проще купить готовый.

2. Без синхронизации - нужно хотя бы две точки на фронте, что бы его словить. Метод апроксимации несколько замеров очень сложный и использует очень много ресурсов - пробовал. Математика там сложная. Нужно сигнал разлагать на ряды Фурье и искать гармоники с наименьшим разностным накопленным градиентом. Как описать все это в несколько килобайт оперативки я не придумал.

3. Проблема фронтов. При наложении нескольких сигналов которые чут-чуть разнятся периодом, на фронтах возникает пила и всплески - пробовал. Тут нужно возвращатся к тем же рядам Фурье и сумировать разложеную функцию.

Мое мнение.

Наложение сигналов нескольких измерений можно использовать, когда на полупериод попадает где-то 5-10 точек, иначе нужно делать отдельный блок синхронизации. 

Усреднение нескольких измерений, как правило, приводит к искажению фронтов и потере импульсных составляющих. Из этого исходит ишибочные методы усреднения сигналов где усредняется только ось Y. Усреднять нужно по обеим координатам t и Y. 

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

Сейчас жду когда приедет АЦП и займусь опытами.

Вам, Logik,  предлагаю создать прибор который сможет показать неизвестную частоту хотя бы до 10Кгц.

Logik
Offline
Зарегистрирован: 05.08.2014

Okmor пишет:

1. Синхронизация. - Нужен аналогово-цифровой синхронизирующий тракт с выходом на прерывание, а осциллограф у нас цифровой. Это уже совсем другой класс прибора - проще купить готовый.

Тема синхронизации достатоуно сложна, там есть разные методы и разная аппаратная поддержка может требоватся.  Но как бы Вы не строили устройство, синхронизации не избежать. Без этого на экране будет каша. Кстати про прерывания для синхронизации на предельной скорости забудьте. Вхождение в обработчик прерывания, с сохранением контекста и возврат из него занимает многие десятки тактов. А в среде ардуино похоже до сотни и тратить на это 2-3мкс нельзя, но к счастью и не надо. После вывода на екран всеравно занятся нечем. Основной поток вполне может подготовить все к очередному циклу и уходить на синхронизацию. Потому и не на предельной скорости в них толка нет. К стати захвата оцифрованого это тоже касается, на предельной скорости прерывания слишком медленно лучше линейный код с захватом допустим каждые 10 тактов, на среднеё выдержать приемлемую точность периода захвата и без прерываний не сложно. 

Okmor пишет:

 Без синхронизации - нужно хотя бы две точки на фронте, что бы его словить. Метод апроксимации несколько замеров очень сложный и использует очень много ресурсов - пробовал. Математика там сложная.

Это вы сложной математики не видели.

Okmor пишет:
Нужно сигнал разлагать на ряды Фурье и искать гармоники с наименьшим разностным накопленным градиентом. Как описать все это в несколько килобайт оперативки я не придумал.

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

И синхронизировался по уровню или крутизне фронта, и не жаловались.

Okmor пишет:

3. Проблема фронтов. При наложении нескольких сигналов которые чут-чуть разнятся периодом, на фронтах возникает пила и всплески - пробовал. Тут нужно возвращатся к тем же рядам Фурье и сумировать разложеную функцию.

Если Вы про то наложение, что выше ссылку давал - метод безнадежен. 

Okmor пишет:

Наложение сигналов нескольких измерений можно использовать, когда на полупериод попадает где-то 5-10 точек, иначе нужно делать отдельный блок синхронизации. 

Вам известен хоть один осцилограф без блока синхронизации? Раскажите. Он нужен всегда.

Усреднение нескольких измерений, как правило, приводит к искажению фронтов и потере импульсных составляющих. [/quote]

Okmor пишет:
Из этого исходит ишибочные методы усреднения сигналов где усредняется только ось Y. Усреднять нужно по обеим координатам t и Y. 
Нет конечно.  А Вы t тоже измеряете?! Частота дискретизации должна быть стабильна. А если стабильна, тогда что усреднять? Если не стабильна  - выкиньте каку, это не измерительный прибор.

Okmor пишет:
Что делать с импульсами, которые могут быть не помехами а составляющей сигнала которую мы часто ищем при настройках всяких усилителей, а еще не придумал. 
И не придумаете, помеха это или сигнал - условность зависящая от точки зрени человека. Отображать все как есть и не иначе.

Сейчас жду когда приедет АЦП и займусь опытами.

Okmor пишет:

Вам, Logik,  предлагаю создать прибор который сможет показать неизвестную частоту хотя бы до 10Кгц.

 

 )))) Вы это чё, на полном серёзе?  А наверно перепутали 10КГц и 10МГц. Даже обычный 328 пару десятков КГц без проблем отрисовывает. То железо, на котором я показывал фото и видео АЦП пошти мегагерц имеет, соответственно многие сотни килогерц показывает. А почему это не интересно я писал в проектах, тема осцилографа. Теперь вживлю сделаную в теме наработку и пока  не буду спешить с внешним АЦП, для задач поддержки AVR должно хватить, куда важней иметь захват с запоминанием и масштабированием при просмотре, чтоб к примеру обмен по i2c можно смотреть, и входную цепь человеческую, высокоомную, с делителями и т.д.  А потом навороты сильно нестандартные хочется, например чтоб само анализировало захваченый обмен по  i2c и в цифры человеческие переводило. 

ПС. Складывается впечетление, что Вы глобально не верно смотрите на проблему, пытаясь постоянно захватывать сигнал, тут же синхронизироватся, выводить на экран. Потому и каша и времени не хватает и 10Кгц проблема. Работать надо так. На высоких частотах - в начале цикла выполнение синхронизации, вошли в функцию синхронизации и работаем с сигналом как хотим с точки зрения поймать момент начала, ни вывода ни захвата для отображения не делаем, как поймали синхронизацию (или надоело ждать если допускаем такое) завершаем функцию, начинаем методично, через равные промежутки вводить сигнал в буфер, как ввели  весь - обрабатываем, нормализуем, фильтруем и т.д и отрисовываем на экран. Все четко последовательно, этап за этапом. После этого неспеша проверяем интерфейс и если кнопок не нажималось, делаем паузу чтоб человек успел увидеть экран. Затем повторяем. Весь цикл занимает до 10 мс. Быстрей нет смысла! Человек не увидит. На средней  частоте, когда период ввода с АЦП можно увеличить, в паузах между вводами можно и интерфейс проверить и посчитать и на экран вывести и делать несколько вводов АЦП на точку и т.д. Заметили, что прерывания как бы не нужны получаются.