fk0, легенда (26.05.2013 14:21, просмотров: 553) ответил йцукен на Да не так страшен этот чёрт. Берём массив длиной 4N, набиваем отсчётами АЦП с частотой 4F, умножаем на синус { 0, 1, 0, -1 } и косинус { 1, 0, -1, 0 }, берём корень из суммы квадратов. Чем больше N, тем лучше избирательность по частоте, но тем
1--3 МГц -- это не для микроконтроллера. Начиная с АЦП. Тот же STM32 даёт 6 MSPS, чего недостаточно. Алгоритмически, где-то 3 умножения, 3 выборки из таблицы и два сложения длинных чисел. Тактов 30 -- очень оптимистичная оценка для ассемблера и http://sdr.ipip.cz/schema/sdr_receiver.png
памяти без задержки. 100МГц тактовой. Но можно выкрутиться, как мне думается, если ширина полосы исходного сигнала всё же не 3МГц а сильно меньше. До МК аналоговым способом перенести сигнал на более низкую частоту. Если эта частота вообще заранее известна и имеется возможность ровно эту частоту вывести на ножку МК (тяжело, нужен синтезатор) то на нулевую. И дальше обрабатывать описываемыми выше способами. Тогда вычислительные расходы вообще мизерные. Там, практически на выходе амплитуду можно вольтметром измерить, в статике (отдельно для синусной и косинусной составляющей, вычислить корень суммы квадратов). Как это сделать. В google смотрим типовую схему любительского SDR радиоприёмника. Делаем примерно так же: мультиплексор переключаемый с нужной частотой, на его выходе ОУ с ФНЧ и АЦП. Но как я сказал выше, тяжко это, вывести из МК именно такую частоту, ни больше, ни меньше. Кварц не кратный и не делится на 2^N и т.п. Из МК можно только вывести частоту немного меньшую исходных 1--3МГц, например. Тогда, таким образом можно получить сигнал на несущей частоте, большей чем ширина полосы сигнала, но относительно низкой по сравнению с исходной, и такой сигнал уже вполне обработает МК.
[ZX]