Автор |
Сообщение |
|
Дата: 24 Янв 2023 22:04:17 · Поправил: vladisslav2011 (24 Янв 2023 22:21:19)
#
Programmist
I и Q это не Image и Real части
Это именно что и есть Imaginary(Q) и Real(I), проекции вектора на оси. А каждый синусоидальный сигнал с постоянной амплитудой это вращение этого самого вектора вокруг нулевой точки.
wazzoo
каждом бине информация об уровне сигнала на частоте, которой этот бин соответствует
Не только об уровне, но и о фазе. На выходе комплексные числа.
Это очень важно. Это говорит о том, что с помощью FFT можно делать как-раз нарезку сигнала на полосы.
Поправьте, если неправильно понял идею...
Я предлагаю ничего обратно не перегонять. На выходе FFT у нас сразу есть порезанный на полосы сигнал - по одному сэмплу после каждого FFT. Можно его брать и использовать. В данном случае не нужно рассматривать FFT как некоторое урезанное ограниченное приближение непрерывного преобразования Фурье. FFT это немножко другое.
|
|
Дата: 24 Янв 2023 22:05:31
#
pavelkolodin
Я просто запутался в комплексном матане всего этого FFT-вопроса
Ничего, я тоже путался, потом нарисовал на спектре слона и смотрел на выходе результат, где голова, где ноги.
И это не шутка.
|
Реклама Google
|
|
|
Дата: 24 Янв 2023 22:09:00
#
Я предлагаю ничего обратно не перегонять. На выходе FFT у нас сразу есть порезанный на полосы сигнал - по одному сэмплу после каждого FFT. Можно его брать и использовать. В данном случае не нужно рассматривать FFT как некоторое урезанное ограниченное приближение непрерывного преобразования Фурье. FFT это немножко другое.
Убило моск. А можно подробнее - как это не перегонять? Мне ж для всяких дальнейших демодуляций хотелось бы из каждой отфильтрованной суб-полосы получить сырой I/Q-сигнальчик (с частотой дескритизации, скажем 32000 Гц)...
|
|
Дата: 24 Янв 2023 22:14:43 · Поправил: vladisslav2011 (24 Янв 2023 22:51:53)
#
pavelkolodin
Исходники остались, надо будет как-то возобновить проект: https://github.com/pavelkolodin/audigger
Глянул. Лицензию прочитать не смог. Хотел склонировать и попробовать собрать, но так как непонятно, что лицензия позволяет, а что нет, пока воздержусь.
Убило моск.
Я тут уже наверное 5 страниц пишу, что на выходе FFT мы получаем IQ и что этот IQ можно немного дофильтровать уже на низкой частоте дискретизации и использовать. Это же очевидно, если посмотреть на то, как FFT вычисляется. В GNU Radio так делают (применительно к OFDM и с наложением банка FIR перед преобразованием), в Cubic SDR, в WEB SDR и наверное еще в куче проектов.
скажем 32000 Гц
Тогда на входе нужно будет настроить фронтэнд так, чтобы FFT получалось с целым размером блока, а лучше с размером блока в степень двойки.
Например возьмем FFT размером 128, тогда на входе будет сигнал с частотой дискретизации 4.096 MHz. Если мы хотим получить на выходе чистую полосу в ~24kHz, нужно будет делать FFT с перекрытием 2, а лучше 4. Тогда после FFT получим 128 потоков по 128kHz, из которых можно будет выбрать нужные и отфильтровать легким FIR на 128kHz (LPF с полосой пропускания 24kHz, скатами 4kHz) с децимацией 4. В результате получим потоки по 32kHz с полосой сигнала 24kHz и значительным снижением нагрузки на процессор по сравнению с получением того же результата кучей тяжелых FIR, работающих на 4.096MHz c децимацией 128. |
|
Дата: 24 Янв 2023 22:25:37 · Поправил: Programmist (24 Янв 2023 22:30:08)
#
|
|
Дата: 24 Янв 2023 22:32:05 · Поправил: Sinus (24 Янв 2023 22:54:33)
#
Когда-то, отвечая на вопрос форумчан о Дискретном Преобразовании Фурье (ДПФ должно выдавать те же числа, что и FFT, но только оно не быстрое) я сделал 2 простенькие html-программки: одна вычисляет ДПФ для вещественного входного массива, другая - для комплексного массива (он задаётся как два вещественных).
Числа для массивов вводятся в эти программки вручную, поштучно. Открываются программки просто браузером (если удастся открыть без ошибок :); код в них можно увидеть любым текстовым "листером" или редактром, как в обычных html-файлах.
Может быть, результаты такого счёта на произвольно сочиняемых "игрушечных" массивах кому-нибудь пригодятся для тестирования FFT в своих собственных разработках. Вот ссылка на пост с пояснениями, и в нём же же две ссылки на zip-архивы с упомянутыми html-программками:
Спектральные игры. FFT, I/Q и прочие забавы. - Страница 30 |
|
Дата: 24 Янв 2023 22:34:09 · Поправил: pavelkolodin (24 Янв 2023 22:36:25)
#
Глянул. Лицензию прочитать не смог. Хотел склонировать и попробовать собрать, но так как непонятно, что лицензия позволяет, а что нет, пока воздержусь.
Да какая там лицензия, мы ж в России живём. Лицензия DWTFYWT наверное - Do What The Fuck You Want To видимо. Судить никого не буду - режь, грабь, воруй гусей, компилируй.
|
|
Дата: 24 Янв 2023 22:34:36
#
Sinus
Не надо им туда, там столько ошибок, что показывать стыдно.)
|
|
Дата: 24 Янв 2023 22:39:11
#
А я не на тему сослался, а на свой конкретный пост. У меня ошибок нет. (Почему-то движок форума оформил ссылку на пост в этом форуме как на название темы).
|
|
Дата: 24 Янв 2023 22:43:27 · Поправил: Programmist (24 Янв 2023 22:51:44)
#
Sinus
У меня ошибок нет.
У всех есть ошибки, и тема та больше для развлечения.
|
|
Дата: 24 Янв 2023 22:50:10 · Поправил: Sinus (24 Янв 2023 22:55:14)
#
Programmist, я сейчас рассержусь на Вас :) Отвечайте, пожалуйста, только за Ваши ошибки, но не надо приписывать их всем. За то, что я выкладывал, я сам несу ответсвенность. Если получите неверный результат в тех моих учебных программках, то предъявите его, заранее Вам спасибо, и тогда будет предмет для разбора и критики. А огульно объявлять ошибкой всё подряд - это примитивный троллинг, в который Вы впадаете всё чаще.
|
|
Дата: 24 Янв 2023 22:51:54 · Поправил: Programmist (24 Янв 2023 23:20:27)
#
Sinus
Просто предупредил участников, можете читать посты Sinusa, мои - не надо.
Если получите неверный результат в тех моих учебных программках, то предъявите его
Не о программах речь, но раз пошла такая пьянка, кто децимацию делал выбрасыванием лишних отсчётов, тоже я? )
//
Да, во всём, что сегодня умею, большая часть Вашей заслуги, но про отсутствие ошибок и троллинг, не надо.
|
|
Дата: 24 Янв 2023 23:33:10
#
vladisslav2011
Это именно что и есть Imaginary(Q) и Real(I), проекции вектора на оси. А каждый синусоидальный сигнал с постоянной амплитудой это вращение этого самого вектора вокруг нулевой точки.
Понятно, как-то так:
Не удивительно, что у некоторых мозг плавиться. :) |
|
Дата: 24 Янв 2023 23:34:31 · Поправил: vladisslav2011 (24 Янв 2023 23:37:36)
#
Programmist
кто децимацию делал выбрасыванием лишних отсчётов
Да все ее так делают. Фильтруем ФНЧ или полосовым с полосой меньше частоты дискретизации после децимации и выбрасываем лишние отсчеты, точнее просто не считаем свертки, которые дают лишние отсчеты.
Понятно, как-то так:
Вылезли зеркалки, так как без информации о фазе невозможно определить направление вращения. Так и должно быть.
А где вторая половина FFT с отрицательными частотами. Там же должно быть 2 слона крест-накрест.
|
|
Дата: 24 Янв 2023 23:39:58 · Поправил: Programmist (24 Янв 2023 23:56:43)
#
vladisslav2011
Фильтруем ФНЧ или полосовым с полосой меньше частоты дискретизации
Ага, фильтруем, а без фильтра?
Там же должно быть 2 слона крест-накрест.
Одно дело должно быть, а другое, есть на самом деле.
Файл I/Q в копилке, возьмите сами и посчитайте.
При переводе в реальный сигнал, будет один слон, как на первой картинке. |
|
Дата: 24 Янв 2023 23:43:29
#
фильтруем, а без фильтра
Если не фильтровать будет алиасинг. Частоты вне полосы наложатся поверх частот в полосе. В методичках же про это написано. Если вы делали децимацию без фильтра, то я не завидую слону после такой децимации :-)
|
|
Дата: 24 Янв 2023 23:47:40
#
Если вы делали децимацию без фильтра, то я не завидую слону после такой децимации
Я тоже. ))
|
|
Дата: 24 Янв 2023 23:51:13 · Поправил: vladisslav2011 (24 Янв 2023 23:51:27)
#
Так... Я проинтерпретировал слона исходя из предположения, что он в int16_t, а он оказывается в float...
|
|
Дата: 24 Янв 2023 23:54:41 · Поправил: Programmist (25 Янв 2023 00:01:47)
#
vladisslav2011
он оказывается в float...
Нет, обычный I/Q слон, PCM 16 bit, 2 канала.
|
|
Дата: 25 Янв 2023 00:02:36
#
|
|
Дата: 25 Янв 2023 00:09:25 · Поправил: Programmist (25 Янв 2023 00:12:04)
#
vladisslav2011
Со слонами я еще такого не делал...
Удивительно как такое можно сделать без слона. Все преобразования надо проверять.
Audacity сказало, что это float.
Там разработчики наверно тоже слонов не рисовали, поэтому и называют чёрное белым.
|
|
Дата: 25 Янв 2023 00:13:08 · Поправил: vladisslav2011 (25 Янв 2023 00:17:34)
#
Вот что будет, если сделать IQ_to_real:
[Видео YouTube - нажмите для просмотра]
Как и ожидалось, слон отразился от нулевой частоты. Зеркалки, как они есть. Поэтому всю обработку нужно делать в IQ. |
|
Дата: 25 Янв 2023 00:20:32 · Поправил: Programmist (25 Янв 2023 00:50:00)
#
|
|
Дата: 25 Янв 2023 00:27:56
#
Реальный сигнал для выполнения над ним FFT преобразуется в комплексный: в I кладем реальный сигнал, в Q кладем 0, так как мнимой части у реального сигнала нет. Выполняем FFT, получаем красивый отраженный от нулевой частоты спектр, как и говорит теория. Вроде все уже 5 раз было обсосано в теме про FFT. Что тут еще можно придумать? Гилберта? Отфильтровать комплексным LPF FIR, сдвинутым на fs/4, чтобы подавить зеркалки? Сделать то же самое в частотной области после FFT с фазовыми искажениями и краевыми артефактами после реконструкции сигнала из-за наложения окон?
|
|
Дата: 25 Янв 2023 00:34:18 · Поправил: Programmist (25 Янв 2023 00:39:37)
#
Ладно, завтра Sinus придёт, и расскажет какой слон реальный, а какой мифический.
Оба файла пока удалять не буду.
Вот это животное, я точно не рисовал:
:-)) |
|
Дата: 25 Янв 2023 00:47:58
#
|
|
Дата: 25 Янв 2023 00:54:41 · Поправил: Programmist (25 Янв 2023 01:02:13)
#
vladisslav2011
Не просто половинка слона, а еще и покоцанная.
Не знаю что Вы там с этим слоном делаете, я могу хоть сто раз крутить из I/Q в Real и обратно.
Если что пострадает, так это незначительно края полосы. Так оно и должно быть, потому что без фильтра данная операция не делается, даже на FFT.
Центр всегда остаётся цел, и не думаю, что заметите большую разницу после стократного преобразования.
|
|
Дата: 25 Янв 2023 00:59:28 · Поправил: vladisslav2011 (25 Янв 2023 01:03:19)
#
Не знаю что Вы там с этим слоном делаете
Скормил Gqrx, чтобы нарисовать на водопаде. real, соответственно, пришлось перегнать в IQ, так как поддержку real sample file для всяких AirSpy и RX-888 я пока что не реализовал.
При увеличении видна полосатость из-за того, что при генерации из картинки фаза не крутилась требуемым образом.
У вас, получается, "IQ_to_real" не только отфильтровало, но еще и умножило на FS/2, чего быть не должно. Центр картинки должен был остаться на нуле.
|
|
Дата: 25 Янв 2023 01:06:03 · Поправил: Programmist (25 Янв 2023 01:16:20)
#
vladisslav2011
При увеличении видна полосатость из-за того, что при генерации из картинки фаза не крутилась требуемым образом.
Не надо крутить фазу! Фаза всегда остаётся на месте, а "полосатость" при увеличении на экране это совсем другое явление.
Самое интересное, что та летучая мышь на экране может звучать точно также как слон, ну или очень похоже, при звуковом сигнале.
Не знаю, может в SDR так и надо, но всё требует проверки.
|
|
Дата: 25 Янв 2023 01:31:04 · Поправил: Sinus (25 Янв 2023 01:31:41)
#
Я не понял, какая задача тут сейчас решается. Если надо было всего лишь преобразовать IQ-слона в Real, то, например, в моей самопальой программке "iq-zabava" результат выглядит так (и, на мой взгляд, так и должно быть - всё вышло по науке):
Спектрограмма исходного IQ-сигнала slon.wav
Увеличить
Спектрограмма с положительными и отрицательными частотами для одноканального (Real) сигнала, полученного преобразованием IQ-->Real
Увеличить
Спектрограмма Real-слона с только положительными частотами (т.е. половина предыдущей спектрограммы):
Увеличить |
Реклама Google |
|