Автор |
Сообщение |
|
Дата: 03 Фев 2012 05:45:31 · Поправил: Programmist (03 Фев 2012 11:28:12)
#
RadioKoteg
Надо, конечно, описание для программы делать, да у меня это плохо получается и рано еще. Неизвестно, в какую сторону она дальше поплывет.
з.ы.
выставить проценты между максимом и минимумом.
Нет, 100% - это максимальное стандартное значение амплитуды, в зависимости от разрядности (формата) исходного файла.
Для 8 бит это 255, для 16 - 32767, для 32 Float - 1.0 и т.д. Программа использует свой внутренний формат и позволяет манипулировать амплитудой в широких (но, не бесконечных) пределах, все это до сохранения файла. Перед сохранением, всегда желательно сделать нормализацию до 90-100%. 32 бита позволяют сохранить значения, на много более 100%, но необходимости в этом пока не вижу.
Встречаются записи с ДД более 100 дБ, но редко, в основном это сэмплы музыкальных инструментов, записанные на оборудовании, которое это может сделать.
Меню Formsts -> Format for Saving, он же - встроенный конвертер форматов. Если известно, что ДД исходного сигнала небольшой (не более 90 дБ), имеет смысл сохранять 24 и 32 бита, как 16 бит, размер файла будет меньше. 8 бит - плохой формат, лучше его не использовать.
|
|
Дата: 03 Фев 2012 20:11:15
#
RadioKoteg
Попробовал реализовать Вашу идею с обработкой множества файлов (Options -> Multi File Operations).
В папке с программой создается папка "MultiFileOut" и туда сохраняются файлы после обработки, из выбранной директории. Нужные функции задаются галочками, порядок сверху-вниз. Все окна с частотами должны быть заранее заполнены. В принципе, легко можно обработать пару-другую тысяч файлов, если в них не окажется чего-то странного, что я не учел.
Исправлена ошибка, при переходе с формата 32 Float на 32 Integer. Формат для сохранения кучи файлов, тоже можно задать заранее (Formats -> Format for Saving).
Версия 34: http://files.mail.ru/O328UB |
Реклама Google
|
|
|
Дата: 11 Фев 2012 02:44:50
#
Programmist Да, это громадное спасибо! что то я забегался, только обнаружил ваши старания, скачал и проверю на досуге.
В общем зашел решил маленький кусочек с ноля Герц выложить: http://doris.kiev.ua/RS/FREQ/0/low_000.wav , уж больно хорошее прохождение. |
|
Дата: 11 Фев 2012 11:24:19 · Поправил: Programmist (11 Фев 2012 11:24:57)
#
|
|
Дата: 09 Июн 2012 16:43:23
#
Programmist Так и не удалось сделать FM демодуляцию с помощью CEplus, вот например с этого http://doris.kiev.ua/RS/P-303/IF/IFIQ_RELAY303.wav , после дема сигнал очень грязный. Я понимаю что это надо вникать вспоминать заморачиваться, но может найдется время.
Заодно доделать с Real в IQ если в программе ЧМ с IQ. |
|
Дата: 19 Июн 2012 04:18:38 · Поправил: Programmist (19 Июн 2012 08:28:08)
#
не удалось сделать FM демодуляцию с помощью CEplus
Так ее там и не было никогда, сейчас вникать не охота, продолжу ближе к осени, придется начинать все сначала. Пока занят изготовлением реальных фильтров. В отличие от виртуальных - результат впечатляет.
Увеличить
Задача не менее интересная. Купить такую штуку невозможно, вернее, купить-то можно, но играть она все равно не будет. Орать будет, а играть - нет. Можно только настроить самому, под конкретное место установки. Вот так на практике хорошо видно (слышно), что такое фаза в звуке (сигнале). В общем, все это одного поля ягодки :) |
|
Дата: 24 Июн 2012 03:47:37 · Поправил: Sinus (24 Июн 2012 03:48:38)
#
RadioKoteg
сделать FM демодуляцию с помощью CEplus, вот например с этого http://doris.kiev.ua/RS/P-303/IF/IFIQ_RELAY303.wav
Имхо, в этом сигнале не совсем FM, а как бы после FM-демодуляции уже больше на SSB смахивает... ?
Пытаюсьу помаленьку написать свою прогу... Выходит нечто некрасивое, но зато - с обработкой сигнала полностью в IQ-форме, с комплексным фильтром во временной области, и с такой демодуляцией, какая раньше получалась у меня в Маткаде. (Если когда-нибудь сумею её довести до работоспособного состояния, выложу посмеяться)).
Попробовал в этой своей проге демодулировать первые 30 сек "человечьего" сигнала из упомянутого wav-файла. Подскажите пожалуйста, уважаемый RadioKoteg, годится такая демодуляция или это всё не то? Послушать можно здесь:
http://www.divshare.com/download/18474387-cbe |
|
Дата: 24 Июн 2012 07:41:51 · Поправил: RadioKoteg (24 Июн 2012 07:48:17)
#
Имхо, в этом сигнале не совсем FM, а как бы после FM-демодуляции уже больше на SSB смахивает... ? Да, после FM надо SSB пройтись, 32 кГц SSB, в которых 6 каналов 4 кГц голоса.
на поднесущей 18 кГц каналы по LSB: 8 кГц, 12 кГц, 16 кГц, 24 кГц, 28 кГц, 32 кГц, вот спектр после ЧМ http://doris.kiev.ua/RS/P-303/p-303.jpg .
Я решил это дело в реальном времени, два HDSDR друг за дружкой соединенные VAC, в первом HDSDR делается ЧМ, в втором нужный канал. В первом HDSDR делается запись после ЧМ в файл с шириной спектра 33 кГц. Работает хорошо без нареканий.
ЧМ хорошо делает утилита Конвертер Real <-> I/Q, ресамплер, АМ/ЧМ демодуляторы и др. которую написал mikasa76, надо I/Q перевести в Real и сделать по ЧМ, Идеально его утилита делает ЧМ, но лишние преобразования потеря времени, но в крайнем случае это работает. |
|
Дата: 24 Июн 2012 15:49:21
#
RadioKoteg, спасибо за разъяснения.
Programmist, успехов в "звукострое" (да, и будем надеяться, что прогрев магнита динамика паяльником его не размагнитит, и сделает звук ещё более тёплым ;)
|
|
Дата: 24 Июн 2012 17:27:32 · Поправил: RadioKoteg (24 Июн 2012 17:29:45)
#
|
|
Дата: 24 Июн 2012 17:38:51
#
RadioKoteg, спасибо, сейчас посмотрю.
Вообще-то они все у меня уже есть, и палку поднесущей 18 кГц я видел, ведь моя прога уже сделала ЧМ-демодуляцию (а также она умеет делать АМ-демодуляцию, все виды сдвига спектра, ресамплинг вниз, и кое-что еще). При этом не преобразую в "моно", а сразу все дела делаю 2-канально, как с комплексным iq-сигналом.
У меня только построение "водопада" не сделано, т.к. ещё я не разобрался с программированием цветных картинок. Прога у меня строит обычные графики, типа как в Маткаде.
|
|
Дата: 24 Июн 2012 21:20:26
#
Sinus
не разобрался с программированием цветных картинок
Это проще всего, преобразуем выходные амплитуды в цвет (DoubleToRGB), у меня это делает модуль uGamma.pas (есть в исходниках), там всего несколько строк. Обратная процедура (RGBToDouble) не нужна, тем более что она написана не совсем корректно и используется только для преобразования цветной картинки обратно в звук.
Максимальное входное значение процедуры 5000000, можно взять sqrt или log выходного значения FFT, от этого будет зависеть внешний вид водопада.
|
|
Дата: 24 Июн 2012 21:29:24
#
надо I/Q перевести в Real и сделать по ЧМ, Идеально его утилита делает ЧМ, но лишние преобразования потеря времени, но в крайнем случае это работает. так вроде как для демодуляции ЧМ (да и для других режимов) "хавает" и моно (REAL), и стерео (COMPLEX - I/Q) :)
|
|
Дата: 24 Июн 2012 21:31:28
#
"хавает" и моно (REAL), и стерео (COMPLEX - I/Q) Не получилось по каких то причинах, точно не помню, перепроверю.
|
|
Дата: 24 Июн 2012 22:15:37
#
Programmist, спасибо.
Моя проблема немного в другом. Пишу в среде MS Visual C++ 6.0 (только потому, что она у меня давно уже установлена, и я к ней уже слегка привык, забавляясь с туториалами по OpenGL). Привлекает также, что результат (exe-шник) запускается на всех виндах без каких-либо новых dll - я это проверил в ME, XP, Vista и Windows 7.
Но проблема - в моей программистской неграмотности)). Поэтому не пользуюсь никакими "классами" и "объектами". Пишу примитивно, пользуя в основном функции API, по примерам из книжки Щупака... Притом смутно представляю, как их выполняет Windows...)) Для простоты у меня все переменные - глобальные, и все мои пользовательские функции - без аргументов, чтобы не заморачиваться с их передачей :)
Всё же, получилось таким путём построить прогу (оконное приложение), которая все действия выполняет в ответ на команду перерисовки окна - выводит системным шрифтом тексты, рисует график, вычисляет, принимает ввод с клавы. Но загружать в окно двумерную картину подобным образом ещё не научился. А может быть, и не буду это делать, так как "водопад" смотреть можно другими прогами.
Главная идея была в том, чтобы в iq-обработке не использовать никаких "чёрных ящиков" (внешних dll), а всё вычислять явно, пробовать разные алгоритмы. У меня там всё написано вручную, включая FFT, фильтр и ресамплинг. И легко добавлять новые функции, либо заменять прежние новыми версиями. Попозже выложу это дело с исходниками, надо только подправить уже замеченные ошибки))
А Вам спасибо за исходники - по ним я научился читать wav-файлы разных форматов.
|
|
Дата: 25 Июн 2012 02:33:13 · Поправил: Programmist (25 Июн 2012 03:19:36)
#
Sinus
Не за что. У меня та же проблема, только в другую сторону. С большим трудом читаю то, что написано на C++, привык к Паскалю, хотя по большому счету разницы нет. Классы и объекты не использую, внешние dll - только в крайнем случае, для экономии времени, если что-то не могу сразу сделать сам. Да и если есть внешняя dll, программу своей назвать нельзя, а от API никуда не денешься - судьба :)
А с переменными, можно делать и все глобальные, например запись:
procedure DoubleToRGB(Account: Single; var R,G,B: Byte);
var Red: Single; Green: Single; Blue: Single;
Begin
//сама процедура
End;
Идентична записи:
var Red: Single; Green: Single; Blue: Single; Account: Single; R: Byte; G: Byte; B: Byte;
procedure DoubleToRGB;
Begin
//сама процедура
End;
Имена переменных значения не имеют, главное, чтобы не было дублей.
Отличие процедуры от функции только в том, что функция должна вернуть какой-то локальный результат, а процедура просто делает что-то. И то и другое может использовать любые переменные, если они описаны в начале, или указаны локально. Локальные переменные удобны в том случае, если нигде больше не используются, кроме как внутри какой-то процедуры или функции.
Кстати, насчет FFT. Там в Cool+ сам модуль (uFFTasm) написан на asm-e и работает очень хорошо и быстро. Если немного изменить синтаксис, то его можно с успехом использовать и в C++. Проверял много раз, все модули, написанные на Паскале, работают гораздо хуже. Видимо, это из-за того, что команды процессору идут на прямую, без "доработок" компилятора Delphi или С++.
|
|
Дата: 25 Июн 2012 16:32:00
#
Programmist
Да, понятно, спасибо. С переменными и функциями освоился (в C++ всё примерно так же. Если функция объявлена как возвращающая нечто данного типа, то в ней должно быть return что-нибудь этого типа; а если она void то return не нужен, т.е. - как процедура).
Менее понятно, как грамотно организовать желаемое чередование ввода, вычислений и вывода на экран (окно) при том, что есть несколько менюшек, а юзер может выбирать пункты меню в непредсказуемом порядке... Делать несколько параллельных "потоков" или "процессов" не решился, и ещё не научился.
Сделал так: в конце каждого блока ввода или вычислений вызываю АПИ-функцию InvalidateRect() - она заставляет оп. систему послать сообщение WM_PAINT. Моя оконная функция WndProc() его перехватывает и рисует в окно "то что надо"; и там меняется переменная-номер блока, которая позволяет в теле case выбрать каждый раз нужное "что надо". После вызова менюшек тоже задается значение этой переменной-номера блока, для выбранного "что надо". Всё работает, но частая перерисовка окна неприятна для взгляда, изображение как-то некрасиво мелькает... :)
А вот ещё непонятка. В главной ф-и WINAPI WinMain() есть петля просмотра сообщений. Сначала я её сделал так, как учили туториалы по комп. графике, типа while(PeekMessage()){... }. Но вскоре заметил, что даже если прога ничего не делает, то процессор всё равно постепенно разогревается. Особенно неприятно это было на ноутбуке - из него начинал дуть горячий воздух :)). В итоге сделал, как учит книжка Щупака - с функцией GetMessage вместо PeekMessage. И стало всё отлично - процессор холодный. Но! Ф-я PeekMessage позволяла, например, принять сообщение от клавиши Esc и прервать вычисление. А с ф-ей GetMessage не прервать выполнение блока: при длинном расчёте программа выглядит зависшей, и закрыть её досрочно можно только диспетчером задач... :(
Ну, а c FFT я не стал гнаться за рекордным быстродействием, сделал на С++ тот алгоритм, который дан в книжке Гольденберга, Матюшкина, Поляка по ЦОС на старинном Бейсике, и который я полностью понял.
У меня вообще все вычисления делаются в паре массивов А, В чисел формата double (как понимаю, 8-байтовый float-формат). Работает в разы медленней, чем у Вас, но зато даёт полное совпадение с расчётами в маткаде, знаков 10 всегда точно совпадают; это мне важно для спокойствия души - мол, не делаю больших ошибок. :)
|
|
Дата: 25 Июн 2012 18:09:05 · Поправил: Programmist (25 Июн 2012 18:31:10)
#
Sinus
как грамотно организовать желаемое чередование ввода, вычислений и вывода на экран
Проблемы начинаются при работе в "реальном времени", а если работа со статическим файлом, тогда просто считаем один блок, потом выводим его на экран, и так до конца файла. На время работы программы все пользовательские меню блокируются, и делается кнопка "Стоп". Чтобы пользователь мог нажать кнопку и не повисла система, после каждого блока ставится прерывание (Application.ProcessMessages) или ее аналог в С++. В конце обработки файла, разблокируем необходимые меню обратно.
С петлей просмотра сообщений вариантов много, тормозить процессор она не должна. Обычно процедура просмотра пишется один раз, далее в ней обрабатываются только нужные сообщения. Тут положил простейший пример для отработки колеса мыши: http://www.radioscanner.ru/uploader/2012/mousewheel.rar
В C++ должно тоже работать, только синтаксис будет другой. В эту же процедуру можно посылать и свои сообщения, со своими параметрами, потом там ловить. Конечно, лучше найти описание работы с сообщениями для конкретного языка, потому, как могут быть различные нюансы.
Количество верных знаков после FFT зависит от типа обрабатываемых данных. Если считать 64 бита, то будет лучше, но займет в 2 и более раза времени, поэтому везде, где только возможно используется короткий тип Single, да и более высокая точность редко требуется. По крайней мере, на картинке разница будет заметна не сильно, а вот с 64-битным кодом на asm-e придется повозиться. На языке высокого уровня достаточно просто указать тип, а дальше - дело компилятора, но оно и работает не оптимально. |
|
Дата: 26 Июн 2012 02:33:11
#
Programmist, спасибо.
Да, с мышью пример понятный. Однако, вроде, в Дельфи меньше надо кода писать, чем в С++, среда многое делает автоматически. В C++ нету формы окна, надо все руками прописывать...
|
|
Дата: 26 Июн 2012 03:36:56 · Поправил: Programmist (26 Июн 2012 03:42:20)
#
Sinus
Странно, слово "Visual" подразумевает наличие формы и простейших элементов типа кнопка, мемо и т. п. При компиляции проекта сразу должно появляться окно (пустая форма), остается только расставить на ней элементы управления и прописать для них события. Возможно, имеет смысл взять компилятор фирмы Borland, по внешнему виду он ничем не отличается от Delphi, имеет такой же набор необходимых компонентов, только весь код на С++. Работает, конечно, медленней, чем Паскаль и не допускает многих ошибок, которые можно исправлять в процессе написания программы, что и стало основной причиной выбора Delphi, как главного инструмента.
С готовой формой работать намного проще, тем более, когда программа работает на уровне сообщений, что, имхо, и есть самый правильный подход к этому делу.
|
|
Дата: 26 Июн 2012 04:56:48 · Поправил: Sinus (26 Июн 2012 05:00:50)
#
Programmist
Да, помнится, в одном из учебников автор прямо ругался, что "Visual" С++ совсем не визуальный... У меня ещё Visual Basic 6.0 установлен, там есть форма окна, но я до него так и не добрался. А теперь уже поздно что-либо менять - основную часть проги на VC++ почти закончил.
Вообще-то, я не выбирал осознанно среду разработки. Всё решил случай - попались в инете очень подробные уроки по 3D-графике, с примерами кода, стало интересно попробовать. И там же прочёл, будто VC++ 6.0 хороший, быстрый код создаёт, будто, разработчики игр и "демосценеры" любили эту среду. Ну, и дистрибутив её попался, и не особо-то он большой оказался по сравнению с современными гигабайтными "визуальными студиями". Вот так как-то началось.
Правда, это дело у меня столь же быстро заглохло; как всегда: из-за нехватки времени и из-за лени.)) Вот, пример-заготовка, которым у меня всё закончилоь: упражненье c "ртутной антенной" :) по туториалу NeHe (exe-файл в папке Debug, реагирует на некоторые клавиши, они указаны в readme.txt.) Ещё аналогичную игрушку начинал делать с музыкой и синхронизацией на основе BASS.DLL; получалось как бы, но идей нет, интересного сюжета не смог придумать... :) |
|
Дата: 26 Июн 2012 08:06:37 · Поправил: Programmist (26 Июн 2012 08:11:00)
#
упражненье c "ртутной антенной" :)
Да, выглядит красиво. OpenGL - интересная библиотека, много с ней экспериментировал, хотел даже делать на ее основе 3D анализатор спектра в реальном времени, но лень как всегда оказалась сильней, хотя тема до сих пор актуальна, с хорошим современным ЦАП-ом может получиться полезный прибор.
BASS.DLL тоже хорошая игрушка, только очень сложная, иногда проще сделать необходимый модуль самому, чем разобраться с тем, что она умеет.
|
|
Дата: 06 Июл 2012 05:10:38
#
Наконец решился 1-ю версию своей iq-проги выложить (просто так, на всякий случай). Сначала о том, чего она пока еще не умеет:
. Не умеет красиво динамику показывать (графики вывожу обычным рисованием в окно, а надо бы через отображенье растра в память с двойной буферизацией - чтобы экран не "мелькал". Не умею пока.)
. Не рисует "водопад" (т.к. ещё не умею рисовать растр). Не цветная, и некрасивая... только графики показывает.
. Не распознает PSK, OFDM, и т.п. - т.е. это не анализатор тех сигналов, которыми увлекается народ.
. Ничего не делает в реальном времни. И ничего не делает автоматически. Над каждым действием надо сначала крепко подумать самому :)
Но кое-чего уже получается в ней делать:
. Смотреть график iq-сигнала A[n] + iB[n] блоками во временной области, с растяжкой по обеим осям.
. Смотреть для каждого временного блока его локальный спектр частот - FFT с окном Ханна на блоке.
. Смотреть спектр сигнала в целом - периодограмму, усредненную по FFT-блокам с 50%-перекрытием с окном Блакмана. Усредняется модуль фурье-амплитуды.
. При этом можно график спектра смотреть и на отрицательных частотах - чтобы чётче видеть его несимметрию в случае комплексных сигналов. Т.е. это как бы обучалка для начинающих знакомиться с iq и FFT (я и сам навсегда начинающий :)
. Можно сдвигать спектр умножением A + iB на комплексную экспоненту (всё с 8-байтной точностью double).
. Комплексно сопрягать сигнал, менять местами А и В, выделять re-часть или im-часть.
. Строить низкочастотный или полосовой фильтр, причем как вещественный (с симметичной АЧХ отн. 0 Hz ), так и комплексный (с несимметричной АЧХ). Порядок фильтра и частоты среза регулируются.
. Смотреть АЧХ получившегося фильтра.
. Один или много раз фильтровать им сигнал A + iB.
. Получать аналитический сигнал комплексным фильтром с нулевой АЧХ на отрицательных частотах. Это удобно для фильтрации SSB-сигнала перед его АМ-демодуляцией.
. Выполнять АМ- или FM- демодуляцию фильтрованного сигнала. И дальнейшую фильтрацию (не забываем отсекать постоянку! ))
. Так как фильтр длиной N сэмплов задерживает сигнал порядка на N / 2 сэмплов, то можно перемещать сигнал обратно во времени, отрезав ему концы, испорченные переходным процессом фильтра.
. Таким же образом выделить из сигнала любой желаемый фрагмент, подравнять ему хвосты, и плавно сгладить их косинусо-образной огибающей.
. Сделать ресамплинг вниз с целым или рациональным коэффициентом децимации. При рациональной децимации используется "восстановитель Котельникова", т.е. sinc-интерполятор (с окном Блакмана) длиной 128 сэмплов.
. Изменить (в том числе нормализовать) уровень сигнала.
. Записать результат в вав-файл как "16-битный" (чтобы послушать демодулированный сигнал; но плеера в проге нет - слушать надо каким-то другим. Удобно, например, слушать прямо командой "F3 Просмотр" в Total Commander-е)
. Записать рез-т упражнений как "32-bit integer" вав-файл (т.е с повышенной точностью, для дальнейших вычислений.) Комплексный резалт запишется в 2-канальный вав-файл - как iq-сигнал. Так же можно конвертировать исходные 32- или 24-битные вав-файлы в привычные 16-битные.
|
|
Дата: 06 Июл 2012 05:13:29 · Поправил: Sinus (06 Июл 2012 05:16:12)
#
В продолжение анонса пример.
YuriVR выкладывал на анализ 200-метровый файл с широкой полосой, отметив, что наряду с необычным сигналом с качающейся частотой вдруг, что еще в ней есть интересное.
Вот интересное (имхо, для любителя "голосовых" сигналов) видно нашей прогой:
Увеличить
(Правда, 200-метров прога распознавала очень долго, более 3 минут... :)). После сдвига левого края этой SSB-полосы на 0, комплексного фильтра, взятия re-части (чтобы получить вещественный сигнал), и децимации, вот что наша прога выдала (в mp3 cжал чужой программой):
послушать результат, на divshare-com
(В mp3 cжал чужой программой)
Ладно, заканчиваю хвастаться ерундой (уж извините меня, плз, это мои первые попытки кодить что-то хоть немного осмысленное :) Вот ссылки:
Исходник, как "проект VC++ 6.0" Готовая прога там в папке Debug.
Здесь только прога, без исходников.
Инсталляции не требует, денег не просит, в реестр не пишет, открывается как 32-разрядное оконное приложение под разными виндами. По ходу работы прога создает в папке с изучаемым вав-файлом один временный файл "OurData_iq.dat" (в нём - буфер с массивами А, В. Из этого буфера данные берутся, и на их же место пишутся результаты вычислений, т.е. новые А, В). После закрытия проги этот файл должен сам удаляться. Но если, вдруг, сбой какой, то придётся удалять его вручную (пока такого не случалось, но... все может быть - без багов проги не бывают...) |
|
Дата: 06 Июл 2012 06:29:13 · Поправил: RadioKoteg (06 Июл 2012 06:57:24)
#
Sinus Да, частотную область красиво вывела прога хоть и медленно, но это ерунда, дойдем до SSE3 и до водопадов и все это исправиться.
АМ детекцию сделала, низ немного прирезало в ограничении, ровно по нолю, то-есть все вошло в положительную часть на отрицательной ограничение. Кнопку плей надо что бы бродило при частотной во времени. Риск получить по башке делением на ноль рассмешил :-) ЧМ нифига не понял, на выходе пустой фал равный длительности обрабатываемого.
Программа работает только с файлами I/Q или программа автоматом в I/Q обрабатывает? АM с реальным одно канальным детектировала, с I/Q ЧМ сказала "импосибл".
Переносы сносы спектра перестали варить мои мозги что куда. Как в фильме кажется, про Виктора Цоя, поговаривал один "-надо в песне петь понятно что бы было, вот например "на недельку до второго.." понятно от куда куда и на сколько.." разобрался, снос спектра с первого взгляда отработался. Также обнаружил кнопку F1.. Фильтрация, ничего не понял.
|
|
Дата: 06 Июл 2012 11:06:30
#
Sinus
Временный файл нужен, без него не обойтись. Моей ошибкой было то, что решил: Памяти сейчас много и всю обработку можно делать в ней, т.е. сразу выделял память и читал файл туда, причем с конвертацией в 32 бита. На деле оказалось, что реализовать такую идею невозможно, всегда придется накладывать ограничение на размер данных. Следовательно, все операции ввода-вывода должны быть дисковые.
Вывод графики, это отдельная часть программы, сама по себе она достаточно большая и сложная, поэтому лучше взять готовый графический модуль или попробовать OpenGl, с ней может получится интересный прибор.
В общем, работы еще много, нужно придумать пользовательский интерфейс, куда потом без проблем можно подключать модули обработки. У меня на это сил не хватило, хотел как быстрей, а в результате получилось то, что получилось ). Теперь, если возвращаться к программе, проще сделать все с начала, с учетом прежних ошибок.
|
|
Дата: 06 Июл 2012 16:46:28 · Поправил: Sinus (06 Июл 2012 17:01:08)
#
Programmist, RadioKoteg, спасибо за отклики !
RadioKoteg
Кнопку плей надо что бы бродило при частотной во времени.
Там на частотно-временной, и поотдельности на частотной и на временной, если клавишу держать нажатой, чтобы автоповтор клавиатуры заработал, то оно само побредёт. Вот пары клавиш, чтобы брело туда или сюда:
PageDown или PageUp, бредёт большими шагами (и тоже самое A или Q, для левшей :-)
N или M, бредёт шагами помельче.
V или B, бредёт еле-еле, самым мелким шагом.
Клавиши со стрелками - "zoom" по осям. Клавиша Z на спектрах включает децибеллы, чтобы мелкие пики стали видны вместе с крупными. У меня как раз сначала цель-то и была - графики спектров разглядывать самым тщательным образом. ))
ЧМ нифига не понял, на выходе пустой фал равный длительности обрабатываемого.
RadioKoteg, пришлите, пожалуйста, сюда именно тот файл, из которого пустышка вышла. На нём разберёмся, как правильно ЧМ демодить. А то я уже начал с "тётями" хелп писать, но они уже мне и всем обрыдли (Хотя с ними всё классно демодулируется, потом допишу как-нить хелп. Кстати, iq-файл c 6 каналами скрытыми в ЧМ Вы давали - тоже отлично ЧМ отдемодилась)
Программа работает только с файлами I/Q или программа автоматом в I/Q обрабатывает
Работает с любыми, но не автоматом. Приходится подумать, куда сдвигать спектр, как фильтровать, и что делать дальше. И бывает, что несколько раз по-разному надо попробовть, чтобы вышло что надо.
Чтобы она ЧМ демодила, необходимо, чтобы у сигнала полная фаза была модулирована (а иначе получится постоянный ноль, ведь ЧМ это есть изменения фазы во времени.) Фазу же, точнее её изменения, прога вычисляет, сравнивая между собой величину отсчётов Q и I.
Значит, если 1-каналный (вещественный) сигнал ЧМ-ть, то как раз чистый ноль и получим. А если сначала сдвинуть спектр, то сигнал станет комплексным, и тогда уже можно пытаться ЧМ-ть. У меня получалось ЧМ-демодить после сдвига центра спектра нужной ЧМ-станции на 0 Гц (после чего надо ещё и отфильтровать эту станцию от остальных станций). Короче, все-равно какой исходный файл - вещественный или комплексный - после сдвига ЧМ-станции на 0 Гц она должна стать комплексной, и мой ЧМ-демодулятор должен выдать некий резалт.
|
|
Дата: 06 Июл 2012 16:52:35
#
Sinus понял. Будет время оттестирую.
|
|
Дата: 06 Июл 2012 16:59:49
#
RadioKoteg, а файлик с исходным сигналом, если можно, скиньте. Мне ж тоже интересно оттестировть! :))
|
|
Дата: 06 Июл 2012 17:08:50
#
|
Реклама Google |
|