Обнаружение Homodyne для arduino

В вашем коде https://gist.github.com/edgar-bonet/0b03735d70366bc05fc6 для обнаружения гомодина , есть ли способ сделать частоту детектируемой диапазоном частот? Например, обнаружение между 3 кГц и 4 кГц? Заранее спасибо!

, 👍1


1 ответ


Лучший ответ:

0

Возможно, эту программу можно изменить, чтобы получить такой большой диапазон частот:

  • изменить частоту гетеродина на 3,5 кГц
  • значительно сократить постоянную времени фильтра, чтобы получить более широкая полоса пропускания

Тем не менее, гомодинная схема обнаружения лучше всего подходит для построения очень узкополосные фильтры. В вашем случае верхний предел, который вы хотите, довольно близка к частоте Найквиста (4808 Гц), поэтому я предлагаю вам использовать фильтр верхних частот, а не полосовой фильтр. Самый простой ВЧ вы может получить числовая производная:

y[n] = x[n] − x[n−1]

Усиление этого фильтра равно 2×sin(π×f/fsamp), поэтому вы получаете Отсечка −3 дБ при fsamp/4 ≈ 2404 Гц. Если тебе надо что-то лучше, вы можете попробовать фильтр более высокого порядка. Но потом вы глубоко проникаете на территорию проектирования цифровых фильтров, что может быть сложно, особенно если у вас нет опыта с z-преобразованием или вы хотите реализовать фильтр в фиксированной точке.

Изменить: если вам действительно нужна полоса пропускания, самое простое, что я могу придумать, это этот двухполюсный фильтр:

y[n] = 0,360 x[n] − 0,885 y[n−1] − 0,552 y[n−2]

Это даст вам максимальный прирост примерно в 1 приблизительно 3,43 кГц и -3 дБ отсечки на частотах 3 и 4 кГц. А простая реализация с плавающей запятой будет:

float filter(float x)
{
    static float y1, y2;
    float y = 0.360 * x - 0.885 * y1 - 0.552 * y2;
    y2 = y1;
    y1 = y;
    return y;
}

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

усиление и частота

Обратите внимание, что усиление становится равномерным по мере приближения к частоте Найквиста. остается относительно высоким (выше –5,4 дБ).

,

Спасибо за ваш ответ, но не могли бы вы показать код, в котором уже реализована эта полоса пропускания в вашем предыдущем коде. У нас нет большого опыта работы с Arduino, поэтому мы действительно не можем понять, что именно нужно изменить в вашем коде ... Однако большое спасибо за ваши ответы!, @Lars Dekkers