как с помощью бпф - fft Считать нужный сигнал (Например 50грц) и подать сигнал (Например на Светодиод).

lilVapeNation
Offline
Зарегистрирован: 18.06.2020

как с помощью бпф - fft Считать нужный сигнал (Например 50грц) и подать сигнал (Например на Светодиод).  

Напишите код, и распиновку подключения. 
Заранее огромное Спасибо.

lilVapeNation
Offline
Зарегистрирован: 18.06.2020

если это делается без fft подскажите Пожалуйста

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

lilVapeNation пишет:

как с помощью бпф - fft Считать нужный сигнал (Например 50грц) и подать сигнал (Например на Светодиод).  

Никак.

Быстрое преобразование Фурье не предназначено для считывания сигналов и подачи их на светодиод.

lilVapeNation пишет:

Напишите код, и распиновку подключения. 

Только написать код и нарисовать распиновку подключения? Больше ничего не нужно?

Попробуйте запостить эту хотелку в разделе Ищу исполнителя. Возможно с кем-то сторгуетесь. Добрый совет - не клюйте на слишком низкую цену (скажем, меньше $1000) скорее всего предлагающий "даром" ничего Вам не сделает.

b707
Offline
Зарегистрирован: 26.05.2017

lilVapeNation пишет:

Напишите код, и распиновку подключения. 
Заранее огромное Спасибо.

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b707 пишет:
только нецензурные замечания?
Ну, почему, я, вроде, цензурно ответил. Вы - тоже.

b707
Offline
Зарегистрирован: 26.05.2017

А что там с БПФ. кстати? - вижу, люди вроде цветомузыку на нем делают... или профанация?

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

rkit
Offline
Зарегистрирован: 23.11.2016

b707 пишет:

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

Никто не обходится. Если нет мнимой части, то это не бпф.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Да, ничего там особенного нет. Без мнимой части никак не обходятся, просто (если надо) преобразуют всё к действительным числам по известным формулам.

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

Могу пояснить эту мысль: вот, например, число семь. Можно сказать, что это сумма 3+4. БПФ делает примерно это. А то, что в данном случае, на самом деле, семёрка была получена как, например, сумма 2+5 никого не волнует. Т.е. ПФ не вангует как именно был сформирован сигнал, а просто предлагает некоторый набор синусоид из которых такой сигнал можно сложить, а уж из этого набора сигнал получился или из другого - этого никто не знает.

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

Кстати, Володька (Ворота) на этом собаку съел, у него диссертация была как-то с этим связана. Если увидит тему, может чего напишет.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Дак он же опять на брэйнфаке напишет...

b707
Offline
Зарегистрирован: 26.05.2017

ЕвгенийП пишет:

Да, ничего там особенного нет. Без мнимой части никак не обходятся, просто (если надо) преобразуют всё к действительным числам по известным формулам.

Евгений, на самом деле у меня чисто практический вопрос. В  классическом БПФ мнимая и действительная часть получается с двух детекторов. сдвинутых по фазе на 90 градусов. А как это применить на уровне микроконтроллера, который считывает один входной амплитудный сигнал?

То что видел в проектах в сети - авторы просто оцифровывают сигнал с одного ADC входа, кладут в его в массив действительных точек,  мнимую часть сигнала заполняют нулями - и делают с этого БПФ... по-моему. это какая-то "шляпа"...

rkit
Offline
Зарегистрирован: 23.11.2016

b707 пишет:

В  классическом БПФ мнимая и действительная часть получается с двух детекторов. сдвинутых по фазе на 90 градусов. А как это применить на уровне микроконтроллера, который считывает один входной амплитудный сигнал?

Бред. БПФ это алгоритм, и выполняется он только в софте.

b707
Offline
Зарегистрирован: 26.05.2017

rkit пишет:

Бред. БПФ это алгоритм, и выполняется он только в софте.

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

Вопрос - как разделить обычные входные данные с ADC на реальную и мнимую часть? видел еще в одном проекте, что автор писал каждую четную точку входных данных в реальный массив, а каждую нечетную - в мнимый...

 

rkit
Offline
Зарегистрирован: 23.11.2016

Нет.  Массив синусов и массив косинусов это выход БПФ. А на входе массив точек.

b707
Offline
Зарегистрирован: 26.05.2017

rkit пишет:

Нет.  Массив синусов и массив косинусов это выход БПФ. А на входе массив точек.

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

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

ладно, надеюсь Ворота заглянет, раз у него диссер по этому вопросу

rkit
Offline
Зарегистрирован: 23.11.2016

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

b707
Offline
Зарегистрирован: 26.05.2017

rkit пишет:

Нет, просто вещественные числа на входе.

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

void arduinoFFT::Compute(double *vReal, double *vImag, uint16_t samples, uint8_t dir)

https://github.com/kosme/arduinoFFT

rkit
Offline
Зарегистрирован: 23.11.2016

Она требует массив, куда записывать результат. Примеры открой, елки-палки.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

707ой! Интеллигентно спрашиваю: с какой целью интересуешься?

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

Ты берешь только вещественную составляющую, и в преобразовании берешь модуль. Матлаб или Октаву (это почти одно и тоже) знаешь? Вот пример с хабра почти без купюр (я только одну частоту поменял, когда проверял примерчик). Поставь на комп Октаву или Матлаб и прогони его. Я проверял на Октаве, я ж линуксоид. Ежели не ясно, то fft() - это и есть БПФ. ;)))

clear all;
Tm=5;% Длина сигнала (с)
Fd=512;% Частота дискретизации (Гц)
Ak=0.5;% Постоянная составляющая (Попугаев)
A1=1;% Амплитуда первой синусоиды (Попугаев)
A2=0.7;% Амплитуда второй синусоиды (Попугаев)
F1=13;% Частота первой синусоиды (Гц)
F2=88;% Частота второй синусоиды (Гц)
Phi1=0;% Начальная фаза первой синусоиды (Градусов)
Phi2=37;% Начальная фаза второй синусоиды (Градусов)
An=3*A1;% Дисперсия шума (Попугаев)
FftL=1024;% Количество линий Фурье спектра
%% Генерация рабочих массивов
T=0:1/Fd:Tm;% Массив отсчетов времени
Noise=An*randn(1,length(T));% Массив случайного шума длиной равной массиву времени
Signal=Ak+A1*sind((F1*360).*T+Phi1)+A2*sind((F2*360).*T+Phi2);% Массив сигнала (смесь 2х синусоид и постоянной составляющей)
%% Спектральное представление сигнала
FftS=abs(fft(Signal,FftL));% Амплитуды преобразования Фурье сигнала
FftS=2*FftS./FftL;% Нормировка спектра по амплитуде
FftS(1)=FftS(1)/2;% Нормировка постоянной составляющей в спектре
FftSh=abs(fft(Signal+Noise,FftL));% Амплитуды преобразования Фурье смеси сигнал+шум
FftSh=2*FftSh./FftL;% Нормировка спектра по амплитуде
FftSh(1)=FftSh(1)/2;% Нормировка постоянной составляющей в спектре
%% Построение графиков
subplot(2,1,1);% Выбор области окна для построения
plot(T,Signal);% Построение сигнала
title('Сигнал');% Подпись графика
xlabel('Время (с)');% Подпись оси х графика
ylabel('Амплитуда (Попугаи)');% Подпись оси у графика
subplot(2,1,2);% Выбор области окна для построения
plot(T,Signal+Noise);% Построение смеси сигнал+шум
title('Сигнал+шум');% Подпись графика
xlabel('Время (с)');% Подпись оси х графика
ylabel('Амплитуда (Попугаи)');% Подпись оси у графика

F=0:Fd/FftL:Fd/2-1/FftL;% Массив частот вычисляемого спектра Фурье
figure% Создаем новое окно
subplot(2,1,1);% Выбор области окна для построения
plot(F,FftS(1:length(F)));% Построение спектра Фурье сигнала
title('Спектр сигнала');% Подпись графика
xlabel('Частота (Гц)');% Подпись оси х графика
ylabel('Амплитуда (Попугаи)');% Подпись оси у графика
subplot(2,1,2);% Выбор области окна для построения
plot(F,FftSh(1:length(F)));% Построение спектра Фурье сигнала
title('Спектр сигнала');% Подпись графика
xlabel('Частота (Гц)');% Подпись оси х графика
ylabel('Амплитуда (Попугаи)');% Подпись оси у графика

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b707 пишет:

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

void arduinoFFT::Compute(double *vReal, double *vImag, uint16_t samples, uint8_t dir)

https://github.com/kosme/arduinoFFT

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

А вообще, если хотите побаловаться с БПФ и понять как она устроена и чего от неё ждать, самый просто способ - запустите её в Эксель. Она там отлично работает. Там сначала нужно доустановить (если ставили по дефолту) пакет для анализа данных, а потом всё просто - в колонку генерите сигнал, напускаете БПФ, она Вам в двух соседних колонках результат. Могу подробнее написать что там делать и даже дать пример эксель файла с числами и графиками.

--------------------------

Но, в принципе (глубоко в нём :-)) Вы почти правы.

Смотрите. Вот это 

b707 пишет:
на входе требуется два массива данных - массив синусов и массив косинусов

Неверно.

Зато вот это

b707 пишет:
На входе - амплитудно-временная зависимость

верно!

Действительно можно подавать на вход пары чисел (время и амплитуда). А пара чисел (точка на плоскости) и есть комплексное число.

Но так обычно не делают, т.к. время само по себе ни на что там не влияет. Чуть реже, чем всегда, считают, что время - это просто 1, 2, 3, 4 и т.п. и на вход подают только массив амплитуд (то, что считалось с АЦП).  А если нужно реальное время, его всегда легко посчитать по частоте дискретизации.

b707
Offline
Зарегистрирован: 26.05.2017

rkit пишет:

Она требует массив, куда записывать результат. Примеры открой, елки-палки.

да открывал я эти примеры!

Я ж так и пишу - вижу. что во всех примерах на входе БПФ мнимый массив заполняют нулями.

Правильно ли это? - или это какое-то упрощение ? Например, как можно различить частоту (F +x) от частоты (F-x) (где F - центр спектрального окна)  если у нас нет фазы сигнала? Ведь без учета фазы обе эти частоты дадут одну и ту же синусоиду с относительной частотой x ? - разве нет?

b707
Offline
Зарегистрирован: 26.05.2017

ЕвгенийП пишет:

А пара чисел (точка на плоскости) и есть комплексное число.

вот и я об этом. Только оси на плоскости - это не амплитуда и время, а две амплитуды со сдвигом на 90 градусов по фазе:

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

Только имея обе независимые координаты (реальную и мнимую) мы можем правильно определить направление вращения. Или что. то же самое - можем различить частоту, которая больше частоы измерения. от частоты, которая меньше. А если мы берем только синус или только косинус - мы теряем всю эту информацию

nik182
Offline
Зарегистрирован: 04.05.2015

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

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

Совершенно не согласен с Евгением по поводу 7=3+4. БПФ дает спектр исходной последовательности. Т.е. дает однозначное соответствие колебания каких частот имеют место в исходном сигнале. Проблему точного нахождения частоты БПФ решает с трудом, но интервал частот восстанавливает однозначно. Поэтому цветомузыка на БПФ работает. Но всегда с задержкой, потому что нужно оцифровать сигнал, потом обработать, потом выдать на исполнительное устройство.      

b707
Offline
Зарегистрирован: 26.05.2017

nik182 пишет:

Совершенно не согласен с Евгением по поводу 7=3+4. БПФ дает спектр исходной последовательности. Т.е. дает однозначное соответствие колебания каких частот имеют место в исходном сигнале. Проблему точного нахождения частоты БПФ решает с трудом, но интервал частот восстанавливает однозначно.

а вот тут поспорю. Евгений с его 7=3+4 не вполне прав, но вот вы со своим "БПФ дает спектр исходной последовательности" не правы полностью.

принципиальная проблема БПФ заключается в том, что все частоты. что он выдает в результате - относительные. Что я имею в виду? - пример: если у вас спектральное окно 1000 - 2000 Гц, то нет никакой теоретической возможности отличить частоты. лежащие внутри окна, от частот снаружи - то есть частота 800 Гц на входе и частота 1200 Гц на входе дадут одинаковый пик 1200 гц в выходном спектре. Это явление называется "отражение" - частота, лежащая ниже границы спектрального окна как бы отражается относительно этой границы в исследуемый диапазон. Точно так же, частота 2800 Гц тоже даст пик 1200 Гц после БПФ, отразившись от верхней границы.

более того, этот процесс может происходить многократно, так что говорить. что БПФ дает спектр исходной последовательности - это в корне неверно.

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

nik182 пишет:

Совершенно не согласен с Евгением по поводу 7=3+4.

И совершенно напрасно не согласны.

Разложить сигнал на гармоники можно бесконечным количеством способов. ПФ выдаёт один из них и при этом гарантирует обратимость, т.е. то, что из выданного им результата можно получить точно такой же сигнал. Но то, что этот же сигнал можно получить ещё и другими способами - его не касается.

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b707, Вы что-то не то рисуете, честное слово. 

Запустите эксель, побалуйтесь, разложите сигнла, соберите его обратно из гармоник, поиграйтесь. там, кстати, тоже на входе оин массив чисел :-)

b707
Offline
Зарегистрирован: 26.05.2017

ЕвгенийП пишет:

b707, Вы что-то не то рисуете, честное слово.

по-моему. я рисую вам вполне очевидные вещи - разложение периодических процессов в комплексные числа  :)

b707
Offline
Зарегистрирован: 26.05.2017

Спасибо всем.  Частично ответ я получил, заполнять мнимый массив нулями - общепринятая практика.

Но почему так делают - до конца так и не понял. ладно. попытаюсь разобраться.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b707 пишет:

по-моему. я рисую вам вполне очевидные вещи - разложение периодических процессов в комплексные числа  :)

Только неясно каким боком это к преобразованию Фурье относится -:)

А вот мой пример с семёркой, Вы поняли, так ведь?

Это я к тому, что если ТС хочет через БПФ определить начали ли ему передавать по зашумлённой линии сигнал в  50Гц, то хренушки. Можно получить ответ на другой вопрос: появился ли на принимающей стороне такой сигнал или нет. А вот передают ли его - узнать невозможно в принципе (в силу необратимости операции сложения).

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

b707
Offline
Зарегистрирован: 26.05.2017

ЕвгенийП пишет:

b707 пишет:

по-моему. я рисую вам вполне очевидные вещи - разложение периодических процессов в комплексные числа  :)

Только неясно каким боком это к преобразованию Фурье относится -:)

ну. я почему-то до этого считал, что подобное разложение является обязательным для БПФ. Похоже ошибался, хотя пока не вполне примирился с этой мыслью :)

а что касается Вашего примера - я его понял. Только он представляется мне чрезчур теоретическим. Все-таки на практике вероятность того, что сигнал совсем пропадет - мала, а вот что мы увидим этот сигнал на выходе, но совсем не на той частоте, которая была изначально - это в практическом применении БПФ сплошь и рядом. Поэтому я и написал. что считать что БПФ всегда дает правильное разложение исходных частот - огромное преувеличение. Чтобы получить правильный результат, надо столько усилий приложить... а вот получить на выходе БПФ неизвестно что неизвестно откуда - да это запросто :)

 

nik182
Offline
Зарегистрирован: 04.05.2015

b707 пишет:

принципиальная проблема БПФ заключается в том, что все частоты. что он выдает в результате - относительные. Что я имею в виду? - пример: если у вас спектральное окно 1000 - 2000 Гц, то нет никакой теоретической возможности отличить частоты. лежащие внутри окна, от частот снаружи - то есть частота 800 Гц на входе и частота 1200 Гц на входе дадут одинаковый пик 1200 гц в выходном спектре. Это явление называется "отражение" - частота, лежащая ниже границы спектрального окна как бы отражается относительно этой границы в исследуемый диапазон. Точно так же, частота 2800 Гц тоже даст пик 1200 Гц после БПФ, отразившись от верхней границы.

Простите. Может быть мы про разные БПФ говорим? БПФ дает абсолютные частоты. Частота выдаваемой БПФ гармоники однозначно определяется частотой оцифровки и количеством точек. Нулевая гармоника - постоянная составляющая. Максимальная равна половине частоты оцифровки. Шаг по частоте определяется количеством точек, которых для БПФ должно быть кратно степени 2. Что такое спектральное окно по отношению к БПФ? Если на входе есть 800 и 1200 мы получим 2 пика. Если Вы про накладываемые функции для зануления концов исходных данных, то они меняют вес пиков, но ни как не меняют частоту. Если Вы про расстояние между соседними точками спектра, то всё в ваших руках - возьмите оцифровку чаще и однозначно определите частоты. 

ЕвгенийП пишет:

 

И совершенно напрасно не согласны.

Разложить сигнал на гармоники можно бесконечным количеством способов. ПФ выдаёт один из них и при этом гарантирует обратимость, т.е. то, что из выданного им результата можно получить точно такой же сигнал. Но то, что этот же сигнал можно получить ещё и другими способами - его не касается.

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

Да. Я знаю много способов разложения сигнала на гармоники. Если речь идёт об энергетических составляющих  исходного сигнала, то все они дают одинаковый результат в координатах частота - энергия. БПФ это простой и быстрый и общедоступный способ. В основе алгоритма формулы похожие на расчёт коэффициента корреляции с набором синусов - косинусов определённых частот. Если ТС нужно одну частоту, то гораздо быстрее только её и посчитать. Взять синус и косинус 50 гц посчитать 2 коэффициента корреляции с пронормированным на сигму исходным сигналом с таким же количеством точек и взять корень из суммы квадратов результат. Ответ будет однозначным  есть 50 Гц или нет. БПФ будет делать тоже самое для всех частот расчёта, и если не угадать с оцифровкой и точно не попасть одной из гармоник в 50 Гц, то возможны варианты.      

b707
Offline
Зарегистрирован: 26.05.2017

nik182 пишет:

Простите. Может быть мы про разные БПФ говорим? БПФ дает абсолютные частоты. Частота выдаваемой БПФ гармоники однозначно определяется частотой оцифровки и количеством точек. Нулевая гармоника - постоянная составляющая. Максимальная равна половине частоты оцифровки.

ну вот, теорему Найквиста-Котельникова вы явно знаете. А вы когда нибудь задумывались, что происходит с частотами, значение которых превышает половину частоты оцифровки? Вот, скажем, вы оцифровываете сигнал с частотой 10 КГц. максимальная частота в вашем спектре на выходе БПФ по теореме Котельникова - 5 КГц, верно? А вот теперь подумайте. что произойдет, если на вход вашего БПФ подать сигнал с частотой 5200 Гц? - вы думаете частота бесследно исчезнет? - нифига. вы увидите ее в своем спектре на отметке 4800 Гц. И более того, как раз та самая теорема Котельникова утверждает. что НЕТ НИКАКОЙ ТЕОРЕТИЧЕСКОЙ ВОЗМОЖНОСТИ РАЗЛИЧИТЬ частоты 4800 и 5200 Гц. если оцифровывать сигнал выборкой 10 КГц. Вот это и называется отражение.

а если у вас базовая частота не 0 Гц - то ровно такое же отражение вы увидите и на нижней границе

nik182
Offline
Зарегистрирован: 04.05.2015

Мне не надо думать. Я 28 лет делаю БПФ разных сигналов - это моя прямая служебная обязанность. Я точно знаю что происходит с получаемым спектром в тех или иных случаях. Если у Вас есть конкретные вопросы, я готов на них ответить. Излагать теорию из учебника нет. 

П.С. Сыплю голову пеплом, но я не знаю, что такое базовая частота. Алгоритм БПФ начинается с нулевой частоты - постоянной составляющей исходного сигнала. Я ж говорю - Вы про какую то другую БПФ говорите. Я не знаю отражения. Я знаю ложные гармоники. 

b707
Offline
Зарегистрирован: 26.05.2017

nik182 пишет:

Мне не надо думать. Я 28 лет делаю БПФ разных сигналов

а я 34 года :) и что? может не станем мерятся и просто обсудим то, в чем мы явно оба понимаем, но по разному? :)

Цитата:
Я точно знаю что происходит с получаемым спектром в тех или иных случаях. Если у Вас есть конкретные вопросы, я готов на них ответить. Излагать теорию из учебника нет. 

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

b707
Offline
Зарегистрирован: 26.05.2017

nik182 пишет:

П.С. Сыплю голову пеплом, но я не знаю, что такое базовая частота. Алгоритм БПФ начинается с нулевой частоты

а я вам обьяню на примере, это несложно.

Вот положим мы работаем с сигналом 400 МГц. Но интересуют нас только частоты в отрезке 10 КГц - скажем от 400.00 до 400.01 МГц. Как прикажете делать БПФ такого сигнала? - оцифровывать от 0 Гц ? - сколько понадобится точек и какое же спектральное разрешение мы получим в нужном отрезке?

А делается все проще. Из исслежуемого сигнала вычитается базовая частота 400 МГц, в результате остаются только сигналы в диапазоне от 0 до 10 КГц. Вот на эти данные и напускается Фурье. Но есть нюанс - если в исходном сигнале были частоты не только чуть больше 400 МГц. но и чуть меньше - все они окажутся в выходном спектре, отразившись от базовой частоты.

добавлю - а реальном применении никто частоту 400 МГц не вычитает, просто данные 400 МГц оцифровываются с частотой 20 КГц - и на выходе получается спектральное окно в 10 КГц

nik182
Offline
Зарегистрирован: 04.05.2015

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

nik182 пишет:

Я не знаю отражения. 

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

А пример мой Вы просто не поняли, потому и возражать стали. Теперь, после объяснения про постоянную прямую, Вы, думаю поняли к чему был пример и о чём я говорил. БПФ работает с принятым сигналом и ничего не знает об отправленном. А откуда знать-то? Пример с семёркой про это.

Ладно, давайте завязывать, что-то нас занесло куда-то. ТС-то думал ему прямо сейчас программу напишут, а мы - звери! :-)

nik182
Offline
Зарегистрирован: 04.05.2015

Честно говоря, я знаю один способ переместить частоту - гетеродин. Но это физический. Математического не знаю. Не умею из сигнала вычесть 400 МГц, так что бы все частоты сместились. Приходится по старинке - поднимать оцифровку до десятков ГГц и делать БПФ от нуля.

b707
Offline
Зарегистрирован: 26.05.2017

nik182 пишет:

Ну и кто же Вам мешает подготовить исходные данные обрезав частотный диапазон до приемлемого БПФ уровня

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

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

nik182
Offline
Зарегистрирован: 04.05.2015

ЕвгенийП пишет:

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

А пример мой Вы просто не поняли, потому и возражать стали. Теперь, после объяснения про постоянную прямую, Вы, думаю поняли к чему был пример и о чём я говорил. БПФ работает с принятым сигналом и ничего не знает об отправленном. А откуда знать-то? Пример с семёркой про это.

Ладно, давайте завязывать, что-то нас занесло куда-то. ТС-то думал ему прямо сейчас программу напишут, а мы - звери! :-)

Про это отражение я знаю, а про отражение 800 кГц на 1200 кГц нет.

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

b707
Offline
Зарегистрирован: 26.05.2017

nik182 пишет:

Честно говоря, я знаю один способ переместить частоту - гетеродин. Но это физический. Математического не знаю. Не умею из сигнала вычесть 400 МГц,

да ладно :)

Когда кинокамера снимает быстро вращающееся колесо - кажется что оно почти остановилось или даже вращается назад. Это ровно то же самое.

nik182
Offline
Зарегистрирован: 04.05.2015

Что такое в Вашем понимании спектральное окно по отношению к БПФ? Я не знаю такого термина.

Камера это физический эффект. Как реализовать математикой?

b707
Offline
Зарегистрирован: 26.05.2017

ЕвгенийП пишет:

Ладно, давайте завязывать, что-то нас занесло куда-то. ТС-то думал ему прямо сейчас программу напишут, а мы - звери! :-)

да причем тут ТС :)

просто я всегда работал с Фурье с двумя входными массивами - и был абсолютно уверен. что это строго обязательно для БПФ

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

ЕвгенийП пишет:

nik182 пишет:

Я не знаю отражения. 

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

А пример мой Вы просто не поняли, потому и возражать стали. Теперь, после объяснения про постоянную прямую, Вы, думаю поняли к чему был пример и о чём я говорил. БПФ работает с принятым сигналом и ничего не знает об отправленном. А откуда знать-то? Пример с семёркой про это.

Ладно, давайте завязывать, что-то нас занесло куда-то. ТС-то думал ему прямо сейчас программу напишут, а мы - звери! :-)

Женя! Преобразование Фурье - изоморфизм. Со всеми вытекающими. Дискретное ПФ, да еще при ограниченном интегрировании - конечно нет. Ограниченность применения - тема для отдельного изучения. Но на практике было бы интересно посмотреть примеры от Ворот. Сам понимаешь,  В ТЕОРИИ ПФ - чистый изоморфизм (повторюсь) - и твой пример с 3+4 - ну вот совсем никак не катит! Ты же в доказательство приводишь аргументы, которые не зависят от ограниченности интегрирования и подошли бы к обычному ПФ.  Ну вот нельзя так! Уж прости. По образу фурье исходный сигнал восстанавливается однозначно. При непрерывном ПФ на бесконечности.

b707
Offline
Зарегистрирован: 26.05.2017

nik182 пишет:

Как реализовать математикой?

возьмите оцифрованную синусоиду в 101 Гц и такой же массив данных для синусоиды в 100 Гц. Вычтите массивы поэлементно - получится синусоида 1 гц

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

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

b707 пишет:

ЕвгенийП пишет:

Ладно, давайте завязывать, что-то нас занесло куда-то. ТС-то думал ему прямо сейчас программу напишут, а мы - звери! :-)

да причем тут ТС :)

просто я всегда работал с Фурье с двумя входными массивами - и был абсолютно уверен. что это строго обязательно для БПФ

Ты не понял, что я написал? Для применения обратного БПФ и восстановления исходного сигнала - да, обязательно. На самом деле для самого обратного придется не забыть про мнимую часть. А исходный сигнал может быть чисто действительным - ничто не мешает. ;))))

b707
Offline
Зарегистрирован: 26.05.2017

wdrakula пишет:

Ты не понял, что я написал? Для применения обратного БПФ и восстановления исходного сигнала - да, обязательно. На самом деле для самого обратного придется не забыть про мнимую часть. А исходный сигнал может быть чисто действительным - ничто не мешает. ;))))

если честно, я этого так и не понимаю :(

Я ж говорю, математического базиса не хватает.

nik182
Offline
Зарегистрирован: 04.05.2015

b707 пишет:

nik182 пишет:

Как реализовать математикой?

возьмите оцифрованную синусоиду в 101 Гц и такой же массив данных для синусоиды в 100 Гц. Вычтите массивы поэлементно - получится синусоида 1 гц

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

Извини, но не получится. Вернее получится массив данных в котором будет 1 ГЦ , 100Гц, 101ГЦ. 

Не поленился, посчитал получил :  Огибающая 1 ГЦ видна, ну и спектр суммы.  Частоты 100 и 101 присутствуют. 1 Гц тоже есть но на уровне шума на логарифмическом. Как с этим работать? Для повторения - количество точек 1024, шаг по частоте БПФ 0.99902 

b707
Offline
Зарегистрирован: 26.05.2017

nik182 пишет:

Извини, но не получится. Вернее получится массив данных в котором будет 1 ГЦ , 100Гц, 101ГЦ.

что-то ты не так посчитал. Временные отметки оцифровки обоих графиков  должны строго совпадать . Ща сам посчитаю

Посчитал, картинка та же :(

b707
Offline
Зарегистрирован: 26.05.2017

nik182 пишет:

Не поленился, посчитал получил :  Огибающая 1 ГЦ видна, ну и спектр суммы.  Частоты 100 и 101 присутствуют. 1 Гц тоже есть но на уровне шума на логарифмическом. Как с этим работать?

а если взять сумму частот 100 и 101 гц , оцифровать с частотой 10 гц и запихнуть в БПФ?

nik182
Offline
Зарегистрирован: 04.05.2015

Оцифровать с 10 гц? Это как? С каким разрешением? Сколько точек? Сейчас оцифровка чуть меньше килогерца - 1/1024 Гц  на 1024 точки. В чистом виде при оцифровке 10 Гц останется 10 точек. Я не умею делать БПФ на 10 точек. Могу на 8 или 16, но разрешение БПФ за секунду будет тем же самым , что и для 1024 точек для 1 кГц. Разницы нет. Результат для 1 Гц тем же самым. 100Гц не увидим.  

b707
Offline
Зарегистрирован: 26.05.2017

nik182 пишет:

Оцифровать с 10 гц? Это как? С каким разрешением? Сколько точек?

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

Точек сколько получится - 10 сек * 10 Гц = 100 точек, до степени двойки всегда можно добить нулями

 

Сорри, что прошу - у меня просто под рукой нет готового аппарата БПФ, а у тебя вроде есть :) Если нет - ничего, я тогда сам потом попробую...