Автор |
Сообщение |
|
Дата: 18 Дек 2011 19:07:24 · Поправил: mikasa76 (18 Дек 2011 19:10:03)
#
Sinus (На самом деле для дальнейших процедур - отфильтровки полос в спектре или испытаний разных алгоритмов демодуляций - никакая частота дискретизации долго ещё не будет нужна, будут лишь действия с массивами, и хранить их можно как таблицы в txt-файлах) хм... что Вы хотите этим сказать? что некие таблицы могут охватить все многообразие реальных сигналов и их параметров? на самом деле частота дискретизации это ключевой параметр и от нее, точнее сказать от соотношения между частотой дискретизации и полосой сигнала зависит вся обработка и как это все можно заменить таблицами?
|
|
Дата: 18 Дек 2011 19:13:54 · Поправил: Sinus (18 Дек 2011 23:02:59)
#
Вы хотите сказать что развёртывая каку либо I/Q запись в реал вы никуда ни каких нулей не добовляете? :) Ответьте плз, эт важно.
Mesh, да, дык уже я говорил раньше:
Массив A(m) есть S(0), -S(2), S(4), -S(6), ...
Массив B(m) есть -S(1), S(3), -S(5), S(7), ...
Обратное пр-е суть расстановка этих A и B с изменением знаков, чтобы получить массив S(n), т.е. S(0), S(1), ... S(N-1)
-----------------
"Вывод" кратко таков. Центр полосы сигнала S(n) сдвинем влево на Fdiscr / 4 умножением на комплексную экспоненту. Т.е. возьмём комплексный сигнал U(n) = S(n)*(-i)n. Его действит. и мнимая части имеют вид:
S(0), 0, -S(2), 0, S(4), 0, -S(6), 0, ...
0, -S(1), 0, S(3), 0, -S(5), 0, S(7), ...
Далее замечаю, что имеющиеся здесь нулевые значения не дают вклада в ДПФ, т.е. спектры этих посл-тей будут такими же, как если вычеркнуть нули и в роли N брать N/2. Вот я их и вычёркиваю, а получившиеся укороченные вдвое массивы сохраняю в 2-канальный вав с вдвое меньшей частотой дискр.
Канеш, чувствую тут какой-то подвох, но пока не получается его себе ясно сформулировать... :)
|
Реклама Google
|
|
|
Дата: 18 Дек 2011 19:18:12 · Поправил: Mesh (18 Дек 2011 19:37:00)
#
Sinus Я пардоне, но вопрос мой касался развёртывания I/Q в реал. А то что вы написали, имхо малька другое, чи нет? А и в старом посте я дописал об частных случаях и общих, тож как бы знать б нуно.
з.ы. К ста забейте пока на частные и общие, тут я може по памяти по своему конвртеру сужу, а он кривенький, там чё-то не то выдавал на аналитикал записях, я ещё тогда подумал, ну вот ещё один косяк.
Пока так сказать с нулями давайте устаканим. Дык при развёртывании нули добовляете чи нет? :-) Имхо, вы уже догадались поди в чём не подвох, а так сказать непонятки были с фильтерингом.
|
|
Дата: 18 Дек 2011 19:34:44 · Поправил: Programmist (18 Дек 2011 20:09:18)
#
RadioKoteg
Ухудшение сигнала/шума не обнаружил. Долго возился с вводом-выводом, сейчас кушает wav файлы до 375 метров, пришлось временно ограничить размер, зато нормализация амплитуды такого "кусочка", если отключена опция Undo, происходит за 1 секунду.
Вернулся к старому списку размеров. Для открытия больших файлов, достаточно включить опцию Auto Image Size.
В общем, работать стало быстрей, доступ к файлам низкоуровневый. Обновил до версии 14.
Все полностью не проверял, на это уходит основная часть времени.
з.ы.
Ничего не понял, куда нули и зачем их добавлять, вроде как все работает уже, никакие нули не добавлялись.
Нули есть только в начале и конце записи, но это нули "технические", их не видно и не слышно и ни на что они не влияют.
|
|
Дата: 18 Дек 2011 19:37:02 · Поправил: Sinus (18 Дек 2011 19:39:13)
#
mikasa76
частота дискретизации это ключевой параметр и от нее, точнее сказать от соотношения между частотой дискретизации и полосой сигнала зависит вся обработка и как это все можно заменить таблицами?
Если нельзя заменить таблицами, то должна быть ошибка в следующем рассуждении:
a) Массив S(n) взаимно-однозначно представляется суммой своих ДПФ-амплитуд SДПФ(k), умноженных на компл. экспоненту с аргументом 2пи*f(k)*t(n), где:
б) f(k) = k / T есть частоты гармоник; здесь Т - длительность сигнала, k - целые числа (номера бинов),
в) t(n) = n*T / N; здесь N - количество сэмплов в массиве S(n), а величина T/N есть квант времени.
г) Частота дискретизации = обратный квант времени = N/T.
д) Видно, что 2пи*f(k)*t(n) = 2пи*k*n / N, т.е. фактически в описание спектра на языке ДПФ не входит ни частота дискретизации ни длительность сигнала. Поэтому все вычислительные процедуры в комп. программах сводятся к работе с таблицами безразмерных чисел exp(i2пи*k*n / N), S(n), SДПФ(k).
Мне не известно другое определение понятия "спектр частот" для дискретного сигнала, кроме как через ДПФ.
|
|
Дата: 18 Дек 2011 19:51:08 · Поправил: Sinus (18 Дек 2011 19:53:41)
#
Mesh
Дык при развёртывании нули добовляете чи нет? :-)
А что это за процедура такая, развёртывание? :-)
Просто числа из двух последовательностей A, B в цикле заношу в элементы массива S. Или наоборот, при обратном пр-и. "Псевдокод" алгоритма цикла могу выложить сюда, но он вроде как очевиден. Массивы пишу в файлы, как уже говорилось (или читаю из файлов). Что есть "развёртывание" - без понятия...
За напоминание об общем случае спасибо. Да, с пр-ем Гильберта и с понятием аналитического сигнала (т.е. чисто положительно-частотного сигнала) всё, что читал, понял. Но мне сдаётся, что те iq-записи, в которых мы здесь слушаем тётенек, получены не пр-ем Гильберта. Это не аналитические сигналы, а просто комплексные сигналы, с несимметричным относительно нуля спектром частот.
|
|
Дата: 18 Дек 2011 20:23:37
#
Sinus
Programmistу предлагал проверить, но в его проверке пропущено нужное чередование знаков...
А где пропущено, это я опять ошибся, или формула нужна другая? Что-то даже не верится, что простой перестановкой отсчетов можно получить реальный сигнал. Это же скорость света :)
|
|
Дата: 18 Дек 2011 20:33:59
#
Sinus Так-с, мне нуна паУза. Подумкать как лучше вас загнать в угол. Ну чи признатся что вы не загоняемы, то бишь всё прально грите. :-)
|
|
Дата: 18 Дек 2011 20:37:56 · Поправил: Programmist (18 Дек 2011 20:45:10)
#
Если это окажется правильно, тогда точно выброшу компилятор...
Подозрения у меня на этот счет были, но всегда получалось Unreal.
|
|
Дата: 18 Дек 2011 20:41:55
#
Кстати о файлах. Попробовал открыть 14й версией вот этот файл записанный с Funcube: http://ifolder.ru/27659764
Что-то имхо не то показывает. |
|
Дата: 18 Дек 2011 20:53:15 · Поправил: Programmist (18 Дек 2011 21:17:28)
#
DVE
Может в настройках размера что не то, у меня все нормально:
http://www.radioscanner.ru/uploader/2011/hdsdr_rf.jpg
Могло от старой версии что-то остаться, там есть файл для чистки реестра, имхо список с размерами по X я изменил.
А может оно и действительно, что-то не то, до конца никто эту штуку не проверял.
Полоса в середине должна быть, она есть в исходнике, просто другие конвертеры ее режут.
А так, вполне себе приличный сигналик, имхо. |
|
Дата: 18 Дек 2011 21:07:56 · Поправил: DVE (18 Дек 2011 21:13:50)
#
У меня так: http://www.radioscanner.ru/uploader/2011/coolplus.gif
Reg-файл не помог.
Правка: В программе нажал I/Q2R, стало похоже но перевернуто каким-то хитрым образом
PS: Если б можно было выделить маркерами нужный кусок, и сразу сохранить/прослушать, было бы круто :) |
|
Дата: 18 Дек 2011 21:16:48 · Поправил: Programmist (18 Дек 2011 21:19:16)
#
Сразу послушать не получится, демодулятора нет, вот там что: http://files.mail.ru/GDC7SS
А если перевернуто, так это может быть, там кнопка Invert есть, она без потери качества работает. |
|
Дата: 18 Дек 2011 21:17:35
#
Programmist, если есть желание, испытайте, плз, следующий алгоритм (только, плз, максимально внимательно пишите код ))
1) Преобразование Real-->A/B (не называю это R --> I/Q, ибо не уверен, что прав; скорее не прав :)
Входные данные:
Вещественный массив ArrayS - это данные из 1-канального вав-файла (Real-сигнал).
SizeS - кол-во сэмплов в массиве ArrayS, но оно должно быть кратно четырём (см. ниже).
C := SizeS / 4
Ниже цикл будет написан для случая, когда число SizeS кратно четырём (других случаев ещё не делал). Т.е. надо размер массива, прочитанного из Real-файла, разделить на 4 и посмотреть: если вышло целое число L, то положить SizeS :=4*L, а если вышло дробное, то взять от него целую часть L и положить SizeS :=4*L (при этом несколько последних сэмплов теряются. Либо можно положить SizeS :=4*L + 4, и дописать в конец массива несколько нулей, доведя его размер до этого SizeS)
Выходными данными будут два вещественных массива, размером SizeS / 2:
ArrayA - это как бы наш сигнал I,
ArrayB - это как бы наш сигнал Q.
Их надо будет записать в 2-канальный вав-файл, указав в нём вдвое меньшую частоту дискретизации, чем была во входном вав-файле с Real-сигналом.
Псевдокод алгоритма:
Для n от 0 до C-1 c шагом 1
ArrayA(2n) := ArrayS(4n)
ArrayA(2n+1) := - ArrayS(4n+2)
ArrayB(2n) := - ArrayS(4n+1)
ArrayB(2n+1) := ArrayS(4n+3)
конец цикла
2) Обратное преобразование, т.е. A/B --> Real (как бы I/Q --> Real, но м.б. это чушь, "заскок" мозгов. Только не вижу пока, где собсно заскок :)). Все обозначения, размеры, и смысл массивов те же, что выше. Поэтому пишу только собсно псевдокод:
Для n от 0 до C-1 c шагом 1
ArrayS(4n) := ArrayA(2n)
ArrayS(4n+2) := - ArrayA(2n+1)
ArrayS(4n+1) := - ArrayB(2n)
ArrayS(4n+3) := ArrayB(2n+1)
конец цикла
Никакого FFT здесь не делается. Оно остаётся только в Вашей смотрелке, чтобы видеть водопад в Real-сигнале.
|
|
Дата: 18 Дек 2011 21:20:34
#
Mesh
Так-с, мне нуна паУза.
И мне тоже! Ухожу в долгий тайм-аут, на чтенье, раздумья и проверки. Может быть, сам обнаружу, где не прав...
|
|
Дата: 18 Дек 2011 21:21:19 · Поправил: Programmist (18 Дек 2011 21:24:10)
#
Sinus
Сейчас попробую...
Ухожу в долгий тайм-аут, на чтенье, раздумья и проверки.
Ну, тогда я отложу на завтра, результат положу здесь, а то что-то устал уже.
|
|
Дата: 18 Дек 2011 22:03:47
#
Sinus Так эта... вопрос так сказать на засыпку, вы хоть одну запись с форума реал отконвертили из I/Q в реал по томй методе про которую грите? Сделайте доброе дело, возьмите какой либо фалик I/Q, ессно скажите какой, отконвертите своей методой и резалты кинте. Гы, я пардоне за смешок, чёто у мя сильнейшие подозрения, что всё это работает только в рамках туды сюды не отходя от кассы так сказать. И так друг друга не понять. Эти ловушки я проходил в детстве, оно реально крышу снести может. :-)
Короче нуна, взять любой, но не свой слепленый тут же i/q фалик, отконвертить его в реал, так как вы просите Programmist и резалты сюда. Ничё что файл будет короче или там кратен 4, фигня, главное что б он был не короче 4 кило.
|
|
Дата: 18 Дек 2011 22:12:18
#
DVE Зеркало у вашего кубика прёт неслабо. Это не айс.
|
|
Дата: 18 Дек 2011 22:15:03 · Поправил: Programmist (18 Дек 2011 22:17:55)
#
|
|
Дата: 18 Дек 2011 22:20:50 · Поправил: Sinus (18 Дек 2011 22:22:58)
#
Mesh
Короче нуна, взять любой, но не свой слепленый тут же i/q фалик
Вот-вот-вот! Поэтому-то и толкую о необходимости иметь тест-файлики, так сказать, стороннего производителя!! :)))
Лан, попробую тот файл 111_000 с двумя тётями перевести в якобы Real (ссылку не помню, позже найду).
Собсно уже, вроде бы пробовал... Там, насколько помню, ваш конвертер с незажжёнными галками давал инвертированный результат (если я правильно понял комментарии RadioKotega) Поэтому, буду считать, что AB=iq (а до этого я делал всё как BA=iq, но mikasa76 заметил, что тогда у меня идёт инверсия спектра)
И кроме того, я заметил, что сдвиг массива B на 1 сэмпл заметно влияет на результат: в старом алгоритме у меня не было сдвига, и вроде бы зеркалок не было, а в новом вроде бы зеркалки появляются. Т.е. я не понимаю толком роль этого сдвига (и хотел давно у Вас спросить - зачем у Вас в конветоре есть такая опция - скип сэмпл?) Мож, и мне надо такой опцией поиграться...
Ну, лан, сделаю снова тёть точь в точь по тому алгоритму, какой выше написал, а тогда бум думать, что к чему...
|
|
Дата: 18 Дек 2011 22:31:56 · Поправил: Programmist (18 Дек 2011 22:36:25)
#
Sinus
сделаю снова тёть точь в точь по тому алгоритму, какой выше написал, а тогда бум думать, что к чему
Получится вот это:
Увеличить
Тетям теперь точно плохо спится :) |
|
Дата: 18 Дек 2011 22:35:29 · Поправил: Mesh (18 Дек 2011 22:42:38)
#
Sinus Да полный форум этих "тестовых записей". Я ж честно гря думал вы реал уже сигналики конвертите, а у вас пока стадия синтетик. Понятно, акуратней там, граблей немеряно. :-)
Скип я вводил, потому как были записи где i/q начинался не "с полной ноги" так сказать, то бишь должно быть два байта i два байта q и так дале, а было один байт хз чего и дальше всё как надо, какое-то железо таку пургу гнало.
з.ы. Суть сермяжна граблей на какие вы наступили такова. Вы делаете всё сшенно сшенно абсолютно зеркально и точно!, кроме того у вас 0 частота точно равно дискрет/4. В реале, когда пишут i/q не аналитикал, это ну совсем никто не гарантирует и прально делает, других проблем хватает.
Так что когда вы реал сигналики отшурупите своим методом всё станет на места имхо. :-) И нули появятся, и фильтры, а так мы ессно вобще про разное грим.
|
|
Дата: 18 Дек 2011 22:41:25
#
Programmist, да, вроде у меня так и выходило - 500 кГц зеркалило с 1500 кГц, а на самодельных, ессно, нет такого эффекту. Ну ладно, всё же сделаю ещё раз, а потом надо скипом сэмплов поиграть, и ... всё же понять как-то, отчего бред. Когда пойму, где бред, тогда пойму и как его изгнать.
Всё ж сторонние тест-сигналы иметь желательно. Ведь тёти тоже хз как записаны, лишь в общих чертах догадываемся... Нужны твердяк 100%-эталонные сигналы.
|
|
Дата: 18 Дек 2011 22:45:25
#
Sinus Не не, не делайте глупостей. Все тёти и дяди записаны так как это будет всегда. :-) Есь сшенно нормал записи на форуме без зеркал, ну бывает с зеркалом как последняя у DVE, дык просто её не берите в чекит.
|
|
Дата: 18 Дек 2011 22:49:25 · Поправил: Programmist (18 Дек 2011 22:58:46)
#
Sinus
Нужны твердяк 100%-эталонные сигналы.
Да, я уже "накрутился" вдоволь, а где верх, где низ - не знаю :) Первый Ваш алгоритм с ФФТ работает очень хорошо, и то нужны более серьезные тесты.
з.ы.
Вот так выглядит его рабочая реализация, на сегодняшний день: http://www.radioscanner.ru/uploader/2011/iqconverter.pas.txt |
|
Дата: 18 Дек 2011 22:51:36 · Поправил: Sinus (18 Дек 2011 23:01:58)
#
Mesh
Да полный форум этих "тестовых записей"
Дык много - тоже плохо, как выбрать оптимальную?
думал вы реал уже сигналики конвертите,
Какое там... Мне ж приходится в маткаде вручную все размеры вгонять, да формулы печатать, да на графиках масштабы отлавливать... Лишь смотрю постепенно действие алгоритмов... Вот Programmist реал конвертит - нажал кнопку и готово. Ну, лан, откланяюсь. Пишите, если чего ещё выяснится.
ps. Так что когда вы реал сигналики отшурупите своим методом всё станет на места имхо. :-) И нули появятся, и фильтры, а так мы ессно вобще про разное грим. Ну, вот да, как бы чувствую, но математически ещё не осознал... Тугодум я, лан, ушёл на ликбез...
|
|
Дата: 18 Дек 2011 22:55:43 · Поправил: Mesh (18 Дек 2011 22:57:49)
#
Sinus На сам деле эт не грабли, эт они щас грабли. ;-) Эт известный частный случай, который оченно ловко применяют во внутренних алгоритмах, но внешние сигналики i/q так нельзя конвертить бо просто невыйдет.
з.ы. Если сами файликов не найдёте, я заброшу чего тогда сам, без зеркал, у мя тут с форума есь вроде чего.
|
|
Дата: 18 Дек 2011 23:00:03 · Поправил: Sinus (18 Дек 2011 23:00:54)
#
Mesh, да, забросьте, плз, хотя бы ссылочку, подожду. А то тёти - большой очень файл...
|
|
Дата: 18 Дек 2011 23:07:36
#
Sinus Ну тогда чутка обождать нуно. Выбрать надо, прочекить, обрезать, вобщем где-то часик полтора я так сказать таймаут прошу.
|
|
Дата: 18 Дек 2011 23:12:07
#
Mesh, ок, понял, заранее спасибо. Не торопитесь, и извините, плз, что со своими дурными заботами и Вас невольно напрягаю ... ))
|
Реклама Google |
|