Анализатор низких частот с помощью микрофона...

Тема в разделе "Arduino & Shields", создана пользователем TebEnkov2222, 27 июн 2018.

  1. ostrov

    ostrov Гуру

    Не надо ничего оцифровывать. Вам частотометр делать или диктофон? Да и не потянет ардуино такое.
     
    Последнее редактирование: 1 июл 2018
  2. parovoZZ

    parovoZZ Гуру

    Цифровой микрофон авр не потянет - там минимум 1 МГц на шине.
     
  3. parovoZZ

    parovoZZ Гуру

    Частотомер? А если широкий спектр на входе? Я за фурье))) В экселе, помню, туда-сюда гонял))) Ничего сложного.
     
  4. TebEnkov2222

    TebEnkov2222 Гик

    У меня вообще такая задача.. Если появляется частота 200-360 ГЦ..
    То начинать таймер.
    Если таймер больше 5 секунд идет.. То выполнить заданную функцию..
    Это все что мне нужно.. Но проблема то вот в чем.. Звучать не только 200 или 300 Гц будет.. Будут шумы.. Посторонние звуки.. И Частотомер (как я понимаю) будет работать не корректно.. По этому нужна оцифровка.. Тем более.. Еще есть задача: заносить данный на Сд через при каждом колосальном изменении Частоты..
     
  5. ostrov

    ostrov Гуру

    Шумы отсеиваются математически.
     
  6. TebEnkov2222

    TebEnkov2222 Гик

    А посторонние звуки?
     
  7. parovoZZ

    parovoZZ Гуру

    Полосовой фильтр ставь. У тебя диапазон широкий, поэтому справится самый простой.
     
  8. TebEnkov2222

    TebEnkov2222 Гик

    А как его организовать? На дуине?
     
  9. parovoZZ

    parovoZZ Гуру

  10. Ariadna-on-Line

    Ariadna-on-Line Гуру

    В основе преобразований Фурье лежит факт, что любая гладкая (ГЛ) функция может быть представлена в виде многочлена вида Y(x) = a0 + a1*x + a2*x^2 + a3*x^3 + ... Доказуха теоремы без пол-литра - сложная вещь.
    ... любая, в том числе и синусоида. Под гладкими подразумевают функции - примитивно - не имеющие вертикальных участков на графике. А коль так - значит возможно изображение любой ГЛ функции комбинацией синусоид, каждая со своими амплитудой и фазой - Y(x) = Y(1) + Y(2) + ...
     
    Mitrandir и TebEnkov2222 нравится это.
  11. Ariadna-on-Line

    Ariadna-on-Line Гуру

    По какому-такому правилу ? Просто оцифровка-сэмплинг. Правило - это скорость сэмплов в секунду.
    Не пугайте человека.
     
  12. TebEnkov2222

    TebEnkov2222 Гик

    Ну вот смотртие.. Решил я добить Фурье.. Есть код.. на 256 полос.. А на какие он полосы работает??!?!
    #define LOG_OUT 1 // use the log output function
    #define FHT_N 256 // set to 256 point fht
    #include <FHT.h>
    #define MIC_PIN 0
    double prevVolts = 100.0;

    #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
    #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))

    void setup() {
    Serial.begin(9600);

    sbi(ADCSRA, ADPS2);
    cbi(ADCSRA, ADPS1);
    sbi(ADCSRA, ADPS0);

    analogReference(EXTERNAL);
    }

    void loop() {
    for (int i = 0 ; i < FHT_N ; i++) {
    int sample = analogRead(MIC_PIN);
    fht_input = sample; // put real data into bins
    }
    fht_window(); // window the data for better frequency response
    fht_reorder(); // reorder the data before doing the fht
    fht_run(); // process the data in the fht
    fht_mag_log(); // take the output of the fht

    for (int curBin = 0; curBin < FHT_N / 2; ++curBin) {
    Serial.print(fht_log_out[curBin]);
    Serial.print(" ");
    }
    Serial.println("");
    delay(500);
    }

    Библиотеку могу скинуть, если нужно..
     
  13. parovoZZ

    parovoZZ Гуру

    проще всего это представить как набор гармоник.
     
  14. Ariadna-on-Line

    Ariadna-on-Line Гуру

    The output of the FHT is slightly different than the FFT. It is as follows

    Re(k) = (x(k) + x(-k))/2
    Im(k) = (x(k) - x(-k))/2
    Mag(k) = sqrt((x(k)2 + x(-k)2)/2)

    Phase(k) = atan2((x(k) - x(-k)), (x(k) + x(-k)))
    Frequency(k) = (k)*(sample_rate)/(FHT_N)

    Частоты полос - в последней строчке. Вроде так.




     
    Последнее редактирование: 3 июл 2018
  15. Daniil

    Daniil Гуру

    Я имел в виду про соответствие напряжение-код - квантование уровня напряжения. Если испугал, то извините.
    Посторонние звуки = шум (это термин такой).
    Да почитайте уже! Фурье да ещё на мк не возьмёте пока не разберётесь! Скачайте octave/scilab поиграйтесь с fft, а уже потом это дело переносить на мк. Разберитесь где математика, а где физика...
     
  16. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Представить можно, но "представлялки" не - есть математическое доказательство. Математика наука формализованная до нельзя.
     
  17. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Если вам надо поиметь, не знаю как назвать, звуковую релюху, используйте копеешную микру с цифрами 567. Их полно LM567, NE567. У нее избирательность не плохая.
     
    Последнее редактирование: 3 июл 2018
  18. b707

    b707 Гуру

    это все правильно, но уж больно заумно. Преобразование Фурье - вешь простая и легко описываемая обычным языком.
    Предположим, мы оцифровали сигнал, в котором присутсвует несколько частот, например 11, 100 и 300 Гц. Если теперь каждую точку нашего сигнала умножить на соответсвующие точки синусоиды с частотой, которой нет в исходном, например 73 Гц - мы получим результат, близкий к нулю А если возьмем синусоиду, которая есть в исходном сигнале - например 11 Гц - то результат будет существенно отличен от нуля. Таким образом можно легко узнать, есть ли в исследуемом сигнале нужная частота. А перебрав все частоты нужного диапазона - напр от 0 до 300 Гц с шагом в 1 Гц - мы получим спектр исходного сигнала. Это и есть простое (не "быстрое") преобразование Фурье. Быстрое ПФ (FFT) - по сути тот же процесс, только выполняемый в одно действие при помощи матричных операций.
     
    Mitrandir нравится это.
  19. parovoZZ

    parovoZZ Гуру

    Фурье разве даёт некратные частоты?
     
  20. b707

    b707 Гуру

    некратные как раз проще, чем кратные... если я правильно понял вопрос.