У меня много разных реализаций БПФ. Могу посчитать предоставленные Вами данные. Но я уже вижу Ваши заблуждения. Нет разницы сколько периодов оцифровывать. Один или 10. Результат будет одинаковый. Разница есть в выборе частоты оцифровки. Лучшие результаты анализа получаются, когда исследуемая частота исходного сигнала имеет не имеет оцифровку не менее 10 точек точек на период. Но к заданному мной вопросу это не имеет никакого отношения. Я не знаю математического метода сделать гетеродин для перекидывания частоты по спектру с сохранением энергетических соотношений в полученном сигнале. Никогда не сталкивался. Смутно представляю что надо сделать как физический - перемножить два сигнала и фильтром выделить необходимую полосу. Может кто делал и подскажет?
Ты же в доказательство приводишь аргументы, которые не зависят от ограниченности интегрирования и подошли бы к обычному ПФ.
Не придирайся, там в посте #7 как раз в этом абзаце говорится о ПФ (правда один раз написано именно ПФ, как и надо, а другой раз - БПФ по запарке). Не придирайся.
ТС скорей всего уже и забыл что у него чесалось (да и не осилил бы он скорей всего), но на всяк случай проясню. БПФ для выявления одной известной частоты - дурная идея. Типичное для одной частоты - ДПФ, его суть в #29 изложили. Если есть набор фиксированых частот - алгоритм Герцеля. Его как правило для ДТМФ расписывают, но работает и для других наборов, причем рвет БПФ как тузик грелку. Хотя вообщем то все это на одной идее держится, но затраты и результат разные.
Про зеркальные частоты- да, есть проблема. Как правило её решают до БПФ и/или до оцифровки сигнала. Потому для некоторых их уже нет и они с ними не сталкиваются )))
Про комплексную составляющую на входе - да, пишем нули в мнимую, где же её взять то! Про теоретическое обоснование. Пишу для тех у кого не вызывает вопроса "почему" утверждение что гармонический сигнал - это вращающийся на комплексной плоскости вектор и он же - это комплексное число умножаемое через дискрет на комплекс по модулю равный 1, что эквивалентно повороту вектора на некоторый угол. Остальные могут не читать. В БПФ нет шаманства, "на пальцах" это так. Каждый отсчет (как комплекс, даже если мнимая равна 0) поворачивается на некоторый угол Fi. следующий по времени отсчет - на 2*Fi, затем на 3*Fi и т.д. Это соответствует вращению вектора. Если это вращение с частотой равной частоте сигнала, но в противоположную сторону то вектор становится неподвижным и последующие суммирования накапливают его составляющие и модуль в целом. На выходе этот модуль и дает результат. То что сразу проводим работу не с одной частотой а целой гребенкой, что доворот на 4*Fi можно делать одним умножением, а можно 4 раза на Fi или 2 раза на 2*Fi - подробности. В БПФ все это продумано для минимизации умножений. В общем БПФ обрабатывает векторы с входа (ну если не соптимизировали конечно). Почему же тогда при 0 в мнимой все нормально? Потому что действительная и мнимая части ортогональны. Хотя понятно, что при повороте вектора они перетекают друг в друга и даже меняются местами. Они как бы независимо дают свой вклад в результат - в модуль на выходе. И отсутствие одной из них - неприятно, но не проблема. Достаточно одной, хотя с двумя бы было лучше. В экселе кстати можно погонять и с мнимой частью на входе.
как обещал, немного почитал и проконсультировался у "старших товарищей".
Концепция работы с высокими частотами, о которой я писал выше - скажем, с сигналом 400.05 МГц - когда вместо прямой обработки высокочастотного сигнала, например FFT на частотах в сотни МГц - из сигнала сначала "вычитается" базовая частота 400 МГц и вся дальнейшая обработка уже делается на радиочастотах уровня килогерц - в целом верная :)
Ошибкой было то, что, как я полагал, разделение частот происходит в цифровом виде - это не так. Разделение происходит аппаратно, в специальном устройстве, так называемом "частотном миксере" (смотри frequency-mixers) Насколько я понял, упоминавшийся nik182 гетеродин как раз является примером такого "миксера"
Тем не менее, все особенности разделения частот и возникающие проблемы, в частности "отражение частот" относительно базовой, то что я описал выше - все это остается в силе:
Нижняя граница частоты, где можно напрямую в цифре делать, потихоньку растет. Можно еще заворачивание спектра использовать на пользу т.к. полоса АЦП обычно шире, чем ограничение по частоте дискретизации и те, что используются для приема до 60 МГц (там все честно в цифре), видят сигналы и до 400МГц в том числе (похуже конечно), они не могут их честно оцифровать с нужной частотой, но для приема медленно модулированного сигнала это и не нужно - если полосовой фильтр на вход поставить и правильно расчитать на какую частоту попадет нужная нам при заворотах спектра, то можно запросто принимать так (но жрет это все на порядок больше, чем если аналоговым переносом сделать и обработать на низкой частоте).
Сорри, что прошу - у меня просто под рукой нет готового аппарата БПФ, а у тебя вроде есть :) Если нет - ничего, я тогда сам потом попробую...
Прости занудство, но что значит "нет"?
https://octave-online.net/
войти можно с гугл аккаунтом просто. Там вот вообще всё есть ;)))))
21 век на дворе, почти все инструменты есть бесплатно и в онлайне. Матлаб онлайн тоже есть, но просит номер лиценции ;)))))))
У меня много разных реализаций БПФ. Могу посчитать предоставленные Вами данные. Но я уже вижу Ваши заблуждения. Нет разницы сколько периодов оцифровывать. Один или 10. Результат будет одинаковый. Разница есть в выборе частоты оцифровки. Лучшие результаты анализа получаются, когда исследуемая частота исходного сигнала имеет не имеет оцифровку не менее 10 точек точек на период. Но к заданному мной вопросу это не имеет никакого отношения. Я не знаю математического метода сделать гетеродин для перекидывания частоты по спектру с сохранением энергетических соотношений в полученном сигнале. Никогда не сталкивался. Смутно представляю что надо сделать как физический - перемножить два сигнала и фильтром выделить необходимую полосу. Может кто делал и подскажет?
Ну собственно получилось как то.
Произведение и ФНЧ - красная кривая. Но всё равно, БПФ от нуля. Никаких базовых и прочих частот.
Ну собственно получилось как то.
Ок, спасибо.
Давайте это пока отложим, я должен подготовится. Эта проблема явно имеет решение, я разберусь и напишу
ТС скорей всего уже и забыл что у него чесалось (да и не осилил бы он скорей всего), но на всяк случай проясню. БПФ для выявления одной известной частоты - дурная идея. Типичное для одной частоты - ДПФ, его суть в #29 изложили. Если есть набор фиксированых частот - алгоритм Герцеля. Его как правило для ДТМФ расписывают, но работает и для других наборов, причем рвет БПФ как тузик грелку. Хотя вообщем то все это на одной идее держится, но затраты и результат разные.
Про зеркальные частоты- да, есть проблема. Как правило её решают до БПФ и/или до оцифровки сигнала. Потому для некоторых их уже нет и они с ними не сталкиваются )))
Про комплексную составляющую на входе - да, пишем нули в мнимую, где же её взять то! Про теоретическое обоснование. Пишу для тех у кого не вызывает вопроса "почему" утверждение что гармонический сигнал - это вращающийся на комплексной плоскости вектор и он же - это комплексное число умножаемое через дискрет на комплекс по модулю равный 1, что эквивалентно повороту вектора на некоторый угол. Остальные могут не читать. В БПФ нет шаманства, "на пальцах" это так. Каждый отсчет (как комплекс, даже если мнимая равна 0) поворачивается на некоторый угол Fi. следующий по времени отсчет - на 2*Fi, затем на 3*Fi и т.д. Это соответствует вращению вектора. Если это вращение с частотой равной частоте сигнала, но в противоположную сторону то вектор становится неподвижным и последующие суммирования накапливают его составляющие и модуль в целом. На выходе этот модуль и дает результат. То что сразу проводим работу не с одной частотой а целой гребенкой, что доворот на 4*Fi можно делать одним умножением, а можно 4 раза на Fi или 2 раза на 2*Fi - подробности. В БПФ все это продумано для минимизации умножений. В общем БПФ обрабатывает векторы с входа (ну если не соптимизировали конечно). Почему же тогда при 0 в мнимой все нормально? Потому что действительная и мнимая части ортогональны. Хотя понятно, что при повороте вектора они перетекают друг в друга и даже меняются местами. Они как бы независимо дают свой вклад в результат - в модуль на выходе. И отсутствие одной из них - неприятно, но не проблема. Достаточно одной, хотя с двумя бы было лучше. В экселе кстати можно погонять и с мнимой частью на входе.
как обещал, немного почитал и проконсультировался у "старших товарищей".
Концепция работы с высокими частотами, о которой я писал выше - скажем, с сигналом 400.05 МГц - когда вместо прямой обработки высокочастотного сигнала, например FFT на частотах в сотни МГц - из сигнала сначала "вычитается" базовая частота 400 МГц и вся дальнейшая обработка уже делается на радиочастотах уровня килогерц - в целом верная :)
Ошибкой было то, что, как я полагал, разделение частот происходит в цифровом виде - это не так. Разделение происходит аппаратно, в специальном устройстве, так называемом "частотном миксере" (смотри frequency-mixers) Насколько я понял, упоминавшийся nik182 гетеродин как раз является примером такого "миксера"
Тем не менее, все особенности разделения частот и возникающие проблемы, в частности "отражение частот" относительно базовой, то что я описал выше - все это остается в силе:
Нижняя граница частоты, где можно напрямую в цифре делать, потихоньку растет. Можно еще заворачивание спектра использовать на пользу т.к. полоса АЦП обычно шире, чем ограничение по частоте дискретизации и те, что используются для приема до 60 МГц (там все честно в цифре), видят сигналы и до 400МГц в том числе (похуже конечно), они не могут их честно оцифровать с нужной частотой, но для приема медленно модулированного сигнала это и не нужно - если полосовой фильтр на вход поставить и правильно расчитать на какую частоту попадет нужная нам при заворотах спектра, то можно запросто принимать так (но жрет это все на порядок больше, чем если аналоговым переносом сделать и обработать на низкой частоте).