Обнаружение Homodyne для arduino
В вашем коде https://gist.github.com/edgar-bonet/0b03735d70366bc05fc6 для обнаружения гомодина , есть ли способ сделать частоту детектируемой диапазоном частот? Например, обнаружение между 3 кГц и 4 кГц? Заранее спасибо!
@Lars Dekkers, 👍1
1 ответ
Лучший ответ:
Возможно, эту программу можно изменить, чтобы получить такой большой диапазон частот:
- изменить частоту гетеродина на 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 дБ).
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Спасибо за ваш ответ, но не могли бы вы показать код, в котором уже реализована эта полоса пропускания в вашем предыдущем коде. У нас нет большого опыта работы с Arduino, поэтому мы действительно не можем понять, что именно нужно изменить в вашем коде ... Однако большое спасибо за ваши ответы!, @Lars Dekkers