На главную страницу сайта
· Наш магазин · Объявления · Рейтинг · Статьи · Частоты · Копилка · Аэродромы · Live!
· Файлы · Диапазоны · Сигналы · Музей · Mods · LPD-форум · Клуб · Радиостанции
На сайте: гостей - 47,
участников - 1 [ SLB_MN]
 · Начало · Опросы · События · Статистика · Поиск · Регистрация · Правила · FAQ · Галерея ·
 Форум —› Прочее —› Спектральные игры. FFT, I/Q и прочие забавы. 
Различные приборы, оборудование, спутниковые и радиотелефоны!


Усилители сигнала и мощности

Усилители сотовой связи

Металлоискатели

Радионяни и видеоняни

Измерители КСВ и мощности
 Страница:  ««  1  2  ...  24  25  26  27  28  ...  34  35  »»Поиск в теме
Автор Сообщение
Sinus
Участник
Offline3.0
с авг 2010
Санкт-Петербург
Сообщений: 1049

Дата: 24 Фев 2013 15:58:13 · Поправил: Sinus (24 Фев 2013 17:44:06) #  

RadioKoteg
Присутствует непонятный фоновый шум после ЧМ демода (link)

Programmist
Да, в исходном сигнале шумы отсутствуют.

А как узнать, что отсутствует или присутствует в исходном сигнале, т.е. - до демодуляции? Шумы в этом конкретном примере хорошо бы сравнить с результатом ЧМ-демодуляции в других программах. Это дело серьёзное - затронуто доверие к демодулятору! :)

Imho, эти шумы не есть результат плохой демодуляции. Полагаю, они всё-таки присутствуют в исходном сигнале: ведь, слышно, что на передающей стороне микрофон не отключается, там есть и посторонний разговор и эти шумы - имхо, такие звуки возникают от наводки, создаваемой близко расположенным мобильным телефоном. Много раз такой звук слышал на КВ и на Средних Волнах на обычный приёмник. По высокой или по низкой частоте наводится, не выяснял.

Вот, можно послушать отдельно фрагмент с этим шумом:
http://www.divshare.com/download/23776661-587
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 24 Фев 2013 16:07:25 · Поправил: Programmist (24 Фев 2013 16:13:54) #  

Sinus
Нет, я проверял, раньше стоял плагин от mikasa76, но почему-то он перестал работать (остались только записи), так там демодуляция была более качественная и на спектре RadioKoteg, который приведен выше, видно разницу. Как я понял, вторая часть спектра - результат демодуляции другой программой.
А на Вашем примере все отрезано, да и не понял, откуда этот фрагмент.
Реклама
Google
Sinus
Участник
Offline3.0
с авг 2010
Санкт-Петербург
Сообщений: 1049

Дата: 24 Фев 2013 16:13:54 #  

Programmist
Из того, что есть, наиболее адекватного, asv писал < ... >

В "iq-забаве" именно так и сделан FM-демодулятор. Повторюсь, надо послушать этот же сигнал в другой программе. Попробуйте с помощью софта mikasa76 (у меня он не запускается, м.б. потому что XPюша со старой версией dot net). И хорошо бы сравнить с результатом ЧМ-демода в HDSDR.
Sinus
Участник
Offline3.0
с авг 2010
Санкт-Петербург
Сообщений: 1049

Дата: 24 Фев 2013 16:15:59 · Поправил: Sinus (24 Фев 2013 22:06:15) #  

Programmist
Это фрагмент, который RadioKoteg на своей спектрограмме обвёл кружочком со знаком вопроса. Вот так я его вижу после своей FM-демодуляции в "iq-zabava" в итоговом аудио-wav при Fd=12кГц; видны номера сэмплов и интервал времени:


Увеличить


P.S. До меня, наконец, дошло, что речь-то идёт не о призвуках, а о шумовой дорожке. У меня, как и на правой спектрограмме RadioKoteg-а, такой шумовой дорожки действительно не наблюдается. Вот, на всякий случай, для сравнения, аналогичный wav-аудио результат из проги iq-zabava.
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 24 Фев 2013 16:27:46 · Поправил: Programmist (25 Фев 2013 02:23:09) #  

Пусть пока будет этот, для примера и проверки.
В общем, надо делать через Гильберта, если смогу извлечь корень из -1.
Все верно, это мой "косяк", у Вас в демодуляция из I/Q, а у меня из двух половин, сдвинутых на один отсчет.



Первая картинка - Cool+, вторая демодулятор mikasa76. Буду думать, как исправить.
Sinus
Участник
Offline3.0
с авг 2010
Санкт-Петербург
Сообщений: 1049

Дата: 24 Фев 2013 17:37:20 · Поправил: Sinus (24 Фев 2013 17:46:31) #  

Programmist Пусть пока будет этот, для примера и проверки.

Вот как шла проверка этого сигнала "privet.wav" в проге "iq-забава". После сдвига спектра на 13560 Гц получил iq-сигнал (с отрицательными частотами):

Увеличить


После ФНЧ с частотой среза 10 кГц (c FIR длиной 8191 точек):

Увеличить


После FM-демодуляции:

Увеличить


После полосовой фильтрации (real BPF 150-5000 Hz, FIR=8191; пока что всё делал на исходной Fd=54688 Гц):

Увеличить


Наконец, итоговый аудио-сигнал - после децимации до Fd=12 кГц и нормализации на уровень 16-бит (всплески на концах и задержку, привнесённую фильтрами, не отрезал):

Увеличить
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 24 Фев 2013 18:07:08 · Поправил: Programmist (24 Фев 2013 18:14:17) #  

У меня I/Q сигнал пока не получается. После преобразования Гильберта выходит два массива (sin и cos), но обратно оно собирается во все, что угодно, но только не в исходный сигнал, плюс к этому данные удваиваются, нужна будет дополнительная децимация, которую делать лишний раз не хочется.
Хороший I/Q выходит, если сделать инверсию и тройное преобразование I/Q2R, но это плохое решение.
Опять старые "грабли" с разборкой и сборкой сигнала через FFT. Надо вспоминать, что куда попадает.
Butterfly, которую каждый раз приходится крутить с самого начала, пока не получится. :)
Sinus
Участник
Offline3.0
с авг 2010
Санкт-Петербург
Сообщений: 1049

Дата: 24 Фев 2013 18:18:46 · Поправил: Sinus (24 Фев 2013 18:57:13) #  

Programmist если смогу извлечь корень из -1.

:) Да не надо его извлекать. Важно правильно делать сдвиг спектра: исходный вещественный сигнал R[n] надо превратить в два новых вещественных сигнала, A[n] и B[n]:

A[n] := R[n] cos(2пи f n)
B[n] := R[n] sin(2пи f n)

где f = -F/Fdiscr, и где F - та частота в герцах, которую хотим снести на ноль.

Далее, фильтрацию (с АЧХ, симметричной относительно 0 Гц) надо делать отдельно и одинаково с каждым из двух массивов, A[n] и B[n]. Это важно. А никакое преобразование Гильберта при этом нам не нужно.

И далее вычисляем демодулированный real сигнал S[n]:

Увеличить


Освойте такую FM-dem на том же самом примере, и тогда сможем обсудить уже и сдвиг спектра изначально двухканального сигнала, A[n] и B[n]. Собсно, об этом здесь речь не впервой ;)

Мнимая единица i, т.е. корень из -1, пусть Вас не волнует: ведь это лишь символический способ краткой записи двухканального сигнала в форме "комплексного" сигнала A + iB, и нужно это только для быстрого вывода хитрых (и не очень) математич. формул :) А фактические вычисления в компе выполняются с вещественными массивами (однако, чтобы программировать их не с чужих слов, желательно всё-таки научиться переводить ф-лы "комплексной математики" на язык вещественных A[n] и B[n]).
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 24 Фев 2013 18:29:56 · Поправил: Programmist (24 Фев 2013 19:00:58) #  

Sinus
Спасибо, сейчас немного успокоюсь, выброшу всю галиматью с FFT и сделаю по Вашей формуле:

A[n] := R[n] * cos(2pi * F);
B[n] := R[n] * sin(2pi * F) ;

где F = ( Fn / Fdiscr ) * -1, и где Fn - та частота в герцах, которую хотим снести на ноль.

Выходит так:

F:= ( Fn / Fdiscr ) * -1;
i:= cos(2pi * F);
j:= sin(2pi * F) ;

for n:=0 to LengthSignal -1 do
begin
A[n] := R[n] * i;
B[n] := R[n] * j;
end;

Имхо, что-то не то "i" и "j" получаются как константы :(
Далее попробую по формуле на листочке, в которой все понятно.
Sinus
Участник
Offline3.0
с авг 2010
Санкт-Петербург
Сообщений: 1049

Дата: 24 Фев 2013 19:03:27 · Поправил: Sinus (24 Фев 2013 19:13:15) #  

Programmist, под знаками sin и cos номер n впишите, и будут не константы; всё будет ок, если сделаете эти i и j массивами: i[n], j[n].

Можно и прямо множить на cos(2пи f n) и sin(2пи f n); вряд ли с дополнительными массивами будет быстрее работать, скорее наоборот.
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 24 Фев 2013 19:17:53 · Поправил: Programmist (24 Фев 2013 19:23:34) #  

Не понимаю, что такое f n?

F:= ( 13560 / 54688 ) * -1;

for n:=0 to LengthSignal -1 do
begin
A[n] := R[n] * cos(2*pi * F);
B[n] := R[n] * sin(2*pi * F) ;
end;

Это то же самое, где взять n, Должен быть массив синусов и косинусов от чего-то, а здесь выходит константа.
Естественно, на выходе массив A[n] почти без изменений, а B[n] пустой.
Sinus
Участник
Offline3.0
с авг 2010
Санкт-Петербург
Сообщений: 1049

Дата: 24 Фев 2013 19:22:09 · Поправил: Sinus (24 Фев 2013 19:26:15) #  

f n это f*n, просто я звёздочку не люблю выписывать в качестве знака умножения, т.к. ею в книгах принято обозначать комплексное сопряжение (коего нам тут нигде не надо).

Здесь n есть номер элемента массива (тот же номер, что нумерует A[n] и т.п. Другими словами, - это счётчик в Вашем цикле for n:=0 to LengthSignal -1 do)
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 24 Фев 2013 19:26:58 · Поправил: Programmist (24 Фев 2013 19:37:55) #  

Ясно, знячит все-таки вот так:
for n:=0 to LengthSignal -1 do
begin
A[n] := R[n] * cos(2 * pi * F * n);
B[n] := R[n] * sin(2 * pi * F * n) ;
end;
Будет медленно, но это лучше, чем ничего.

з.ы. Вроде получилось, похоже на комплексный сигнал :)
Теперь впишу формулу с листочка и буду сравнивать результат демодуляции.
Sinus
Участник
Offline3.0
с авг 2010
Санкт-Петербург
Сообщений: 1049

Дата: 24 Фев 2013 19:37:33 · Поправил: Sinus (24 Фев 2013 19:42:02) #  

Да, именно так.

P.S. Гы)) а я долго тупо смотрел на строчку F:= ( F/ Fdiscr ) * -1, потому что уже отвык от программистких обозначений, а на языке математики такая строчка означает "от сопряжённой дроби отнять единицу" Т.е. по правилам книжной математики правильная формула должна была бы быть такой: ( F / Fdiscr ) ( -1), т.к. знак умножения обычно не пишется.

Теперь впишу формулу с листочка и буду сравнивать результат демодуляции
А куда ему теперь деваться, всё будет нормуль!
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 24 Фев 2013 19:41:51 #  

Sinus
долго тупо смотрел на строчку F:= ( Fn / Fdiscr ) * -1
У меня проблема с точностью до наоборот. Привык быстро читать и понимать код на Паскале, а с книжными формулами возникают глупые вопросы, да простят нас уважаемые форумчане. :)
Sinus
Участник
Offline3.0
с авг 2010
Санкт-Петербург
Сообщений: 1049

Дата: 24 Фев 2013 19:48:30 · Поправил: Sinus (24 Фев 2013 19:51:42) #  

Programmist

Теперь впишу формулу с листочка и буду сравнивать результат демодуляции
А куда ему теперь деваться, всё будет нормуль!


Стоп-стоп! А отфильтровать?!!

Прежде, чем демодулировать, надо оставить только частоты не выше, скажем, 10 кГц (или, не знаю, сколько полагается быть полосе сигнала при узкополосной ЧМ - такую, или с небольшим запасом полосу и надо оставить)
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 24 Фев 2013 20:01:56 #  

Sinus
Это понятно, фильтры-то там есть, вроде работают неплохо. Вот и получается на итого куча операций, которые надо оптимизировать в один цикл, иначе будет медленно. Да и еще, к тому же заставлять пользователя вводить ширину полосы. Наверно, придется делать два режима, низкого и максимального качества, или опять "Back to FFT".
Sinus
Участник
Offline3.0
с авг 2010
Санкт-Петербург
Сообщений: 1049

Дата: 24 Фев 2013 20:28:20 · Поправил: Sinus (24 Фев 2013 20:42:19) #  

Programmist
заставлять пользователя вводить ширину полосы. Наверно, придется делать два режима, низкого и максимального качества

Для "голосовых" радиосигналов должны где-то существовать стандарты - такая-то ширина полосы при широкополосной FM, другая при узкополосной; и для АМ аналогично. Их можно ввести в программу заранее. Ну, а для анализа неизвестных цифровых сигналов, да, должна быть пользовательская свобода выбора.

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

1) отрезание концов сигнала вне выделенного интервала времени.
2) снос центра выделенной полосы частот на ноль Гц,
3) фильтрация этой полосы ФНЧ, от всего остального внеполосного.
4) ресамплинг к частоте дискрета, несколько большей чем удвоенная верхняя граничная частота в полосе.

Фильтрацию и ресамплинг надо делать одинаково в каждом из двух массивов A[n], B[n].
А дальше пользователь должен сам выбирать, что делать с получившимся двух-канальным сигналом:

a) записать ли его в стерео-wav-файл (и с какой разрядностью: 16, 24 или 32) в роли iq-сигнала для дальнейшего анализа;

б) или же демодулировать его одним из стандартных способов (в последнем случае после демода должна автоматом запускаться процедура стандартной полосовой НЧ-фильтрации - чтобы исключить постоянку с субтонами и ВЧ-шумы в итоговом аудио-сигнале)
RadioKoteg
Участник
Offline4.4
с сен 2006
Киев
Сообщений: 14486

Дата: 24 Фев 2013 21:35:49 · Поправил: RadioKoteg (24 Фев 2013 21:47:46) #  

Programmist в 51-53 версии исчезла кнопка I/Q то REAL
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 24 Фев 2013 23:08:42 · Поправил: Programmist (25 Фев 2013 02:22:05) #  

RadioKoteg
Она есть, но перенесена туда, где амплитуда, если надо, то могу вернуть ее обратно.


Увеличить


Кнопки, которые даются с таким "скрипом" просто так не исчезают :))
Места на форме не хватает, хотел сделать еще Real to IQ, вот и запихнул ее туда.

з.ы.
Вообще-то замечено абсолютно правильно, это моя любимая кнопка, поэтому здесь вернул ее на место (продублировал).
RadioKoteg
Участник
Offline4.4
с сен 2006
Киев
Сообщений: 14486

Дата: 24 Фев 2013 23:55:22 · Поправил: RadioKoteg (24 Фев 2013 23:55:37) #  

Programmist Спасибо!
Эта кнопка самая главная из всех.
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 25 Фев 2013 00:23:31 · Поправил: Programmist (25 Фев 2013 00:26:26) #  

самая главная из всех
Это точно! А с демодуляцией пока дело плохо. Сделал по формулам, все равно "хвост" из шума виден, а у mikasa76 его нет. Уже и не знаю где правильно, IQ сигнал получается какой-то нехороший, видимо так и должно быть, ведь на удвоение массива исходных данных ему все равно не хватает. Попробую еще через Гильберта, но сомневаюсь, что будет лучше, только задержка появится дополнительная.
Sinus
Участник
Offline3.0
с авг 2010
Санкт-Петербург
Сообщений: 1049

Дата: 25 Фев 2013 00:27:52 · Поправил: Sinus (25 Фев 2013 00:34:24) #  

RadioKoteg
Эта кнопка самая главная из всех.

А зачем она?

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

Для прослушивания же любой сигнал надо сначала демодулировать, а это легко делается как раз в iq-формате, причём демодулированный сигнал уже автоматически получается в формате Real.

В общем, если раньше я не понимал, зачем нужен iq-формат, то теперь перестал понимать зачем нужно делать iq -> R. Как говорится, доигрался :))
RadioKoteg
Участник
Offline4.4
с сен 2006
Киев
Сообщений: 14486

Дата: 25 Фев 2013 00:34:34 #  

А зачем она?

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


Вот когда из I/Q в программе будет отображаться спектр а не две половинки стерео канала то я согласен что кнопка не нужна, а будет нужна другая кнопка Real to I/Q.
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 25 Фев 2013 00:55:43 · Поправил: Programmist (25 Фев 2013 00:59:56) #  

Все эти кнопки туда-сюда превращают сигнал в хлам какой-то.
Вот так выглядит преобразование Real to IQ -> IQ to Real:


Увеличить


Это спектр, по последним формулам. Может чего не так делаю, а может так оно и должно быть. :(
Еще не смотрел, что там с фазой происходит.
Sinus
Участник
Offline3.0
с авг 2010
Санкт-Петербург
Сообщений: 1049

Дата: 25 Фев 2013 00:56:06 · Поправил: Sinus (25 Фев 2013 01:02:11) #  

Programmist
с демодуляцией пока дело плохо. Сделал по формулам, все равно "хвост" из шума виден, а у mikasa76 его нет.

У меня тоже по формуле нет "хвоста": посмотрите wav-результат проги "iq-забава".

Давайте разберёмся: пришлите, пожалуйста, в 32-разрядном стерео-wav файле те A[n] и B[n], которые у Вас получаются сразу после сдвига спектра (в примере "privet"). И аналогично пришлите A[n] и B[n] после фильтрации, но до демодуляции.

Я их отфильтрую и демодулирую по формулам, и мы сравним результаты. Подозреваю, что где-то у Вас или вкрадывается ошибка, или некорректный шаг - например, обратное преобразование из bmp-картинки в сигнал, или лишнее IQ2R, или что-то в таком роде.

RadioKoteg
Вот когда из I/Q в программе будет отображаться спектр а не две половинки стерео канала

А это очень легко! Намного проще, чем превращать IQ 2 R! Готов пояснить Programmist-у все необходимые шаги, если он готов к некоторой переделке своей программы (можно через личку, чтобы форумчанам не докучать этим делом). Всё сводится-то лишь к некоторой перенумерации фурье-компонент (элементов массива на выходе FFT) перед их выводом на картинку спектрограммы.
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 25 Фев 2013 01:07:11 · Поправил: Programmist (25 Фев 2013 01:13:36) #  

Вот когда из I/Q в программе будет отображаться спектр а не две половинки стерео канала
То есть, если открываем IQ (стерео) сигнал, то он сразу должен отображаться на спектре как реальный?
Не пойму, какой в этом смысл, когда есть кнопка конвертера, а хранить в памяти I и Q, так здесь нужны серьезные доработки. Памяти не хватит, придется работать с файлом.
Это все равно надо делать, т.к. сейчас выходит ограничение метров в 250-300, не помню точно сколько.

У меня тоже по формуле нет "хвоста"
Нет. Сейчас попробую вернуть то, что делал и выслать IQ.
Sinus
Участник
Offline3.0
с авг 2010
Санкт-Петербург
Сообщений: 1049

Дата: 25 Фев 2013 01:14:31 · Поправил: Sinus (25 Фев 2013 01:52:49) #  

Programmist
Это спектр, по последним формулам
Не понимаю, это спектр чего? Надо довести до победного конца Ваш же пример "privet.vaw".


Не пойму, какой в этом смысл, когда есть кнопка конвертера, а хранить в памяти I и Q, так здесь нужны серьезные доработки. Памяти не хватит, придется работать с файлом.
Памяти (и времени на обработку) уйдёт ровно столько же - потому что в массивах I и Q дискрет вдвое ниже, т.е. суммарное количество сэмплов в двух массивах I и Q такое же, как в одном R с вдвое более высокой частотой дискретизации.

Не навязываю решений, а просто как вариант: у меня оба массива хранятся в памяти вообще как один массив AB[n]; в нём нечётные элементы (т.е. AB[0], AB[2] и т.д.) это значения A[n], а нечётные элементы это значения B[n]. И все циклы обработок написаны так, что работа идёт с одним массивом AB[n] (я его называю AB-буфер).
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 25 Фев 2013 01:25:42 · Поправил: Programmist (25 Фев 2013 01:48:49) #  

массивах I и Q дискрет вдвое ниже
Тут я промахнулся где-то, дискрет увеличил в два раза, похоже на то. Цикл до конца не дописан, поэтому сохраняю на этой точке, а то запутаюсь. Снос спектра был на 13560.

у меня оба массива хранятся в памяти вообще как один массив AB[n]
Здесь выходит некоторая проблема. Нельзя работать со стерео сигналом, а хотелось и такую возможность оставить. Надо хорошенько подумать и нарисовать блок-схему, без нее сложно работать.
Sinus
Участник
Offline3.0
с авг 2010
Санкт-Петербург
Сообщений: 1049

Дата: 25 Фев 2013 01:32:12 · Поправил: Sinus (25 Фев 2013 01:34:40) #  

Отлично, на вид спектрограмма нормальная, как и моя. Сейчас попробую его фильтрануть и отдемодить. Дискрет нормальный: Fd=54668 Гц, как и в исходном привете; так и надо.
Реклама
Google
 Страница:  ««  1  2  ...  24  25  26  27  28  ...  34  35  »» 

Создавать сообщения могут только зарегистрированные участники форума.
Войти в форум :: » Логин » Пароль
Начало
Средства связи, рации. Купить радиостанции Motorola, Yaesu, Vertex, приемники, антенны.
Время загрузки страницы (сек.): 0.031; miniBB ®