На главную страницу сайта
· Наш магазин · Объявления · Рейтинг · Статьи · Частоты · Копилка · Аэродромы · Live!
· Файлы · Диапазоны · Сигналы · Музей · Mods · LPD-форум · Клуб · Радиостанции
На сайте: гостей - 60,
участников - 8 [ andory, Olexandr, ArtHD, muha131, nn3ar, tyrist, BR4096, slava68]
 · Начало · Опросы · События · Статистика · Поиск · Регистрация · Правила · FAQ · Галерея ·
 Форум —› Прочее —› Спектральные игры. FFT, I/Q и прочие забавы. 
Си-Би радиостанции в нашем магазине: Alan и Midland, Alinco, Intek, MegaJet, President, Yosan, Беркут, Таис


Alan 48 Excel
руб.

Alinco DR-135CBA New
руб.

MegaJet MJ-3031M Turbo
руб.

President Harry III ASC
руб.

Yosan Stealth 5
руб.
 Страница:  ««  1  2  ...  4  5  6  7  8  ...  34  35  »»Поиск в теме
Автор Сообщение
RadioKoteg
Участник
Offline4.4
с сен 2006
Киев
Сообщений: 14486

Дата: 08 Дек 2011 19:55:51 #  
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 08 Дек 2011 20:17:55 · Поправил: Programmist (08 Дек 2011 20:23:07) #  

RadioKoteg
Разбирается все двумя Кулами быстро, но качество вот такое: http://www.radioscanner.ru/uploader/2011/130374_000fr2.wav
Это я тут еще шумы убрал и паузу вырезал. Частоту сносил два раза (с первого не попал), да и кверху ногами все было.
Есть подозрение, что половина качества где-то при сносе теряется.
Реклама
Google
RadioKoteg
Участник
Offline4.4
с сен 2006
Киев
Сообщений: 14486

Дата: 08 Дек 2011 20:23:17 #  

Кулами быстро, но качество вот тако слышен остаток перемножения частот с обратной боковой или еще что. В общем это ни есть гуд.
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 08 Дек 2011 20:27:03 · Поправил: Programmist (08 Дек 2011 20:43:06) #  

В общем это ни есть гуд Зря я шум убрал, теперь и непонятно, что там слышно, запись сильно исказилась, да и двойной снос ей на пользу не пошел. Можно было лучше сделать, спешил.
На спектре явно видно, что информации в 2 раза больше, но пока что-то никуда не движется, нужен перекур :)
mikasa76
Участник
Offline1.8
с сен 2008
USSR
Сообщений: 305

Дата: 08 Дек 2011 21:09:41 · Поправил: mikasa76 (08 Дек 2011 21:10:51) #  

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

Дата: 08 Дек 2011 21:18:34 · Поправил: Programmist (08 Дек 2011 21:36:22) #  

mikasa76
может поменяете что-либо в своем мировоззрении
Менять уже поздно, а принцип здесь простой: Если бы знал, что чего-то невозможно сделать, то и не сделал бы :)
Принцип действительно работает, только не всегда :))

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

Дата: 09 Дек 2011 00:39:42 · Поправил: Sinus (09 Дек 2011 04:03:31) #  

RadioKoteg
еще дядьки Спасибо! Правда, в данный миг до них ещё не добрался, но обязательно заслушаем. Надо вот фильтрацию освоить, и демодуляторы ждут своей очереди.

mikasa76
поймете какой удивительный мир перед Вами откроется и быть может поменяете что-либо в своем мировоззрении

Абсолютно верно, прислушайтесь Programmist. Изучать ничего никогда не поздно. Дык ведь без ежедневных новых знаний (хотя бы малыми дозами) и жизнь-то однообразна...

Насчёт вашего модуля FFT - если правильно понял его свойства, то, может быть, такой алгоритм будет работать (для конверсии IQ --> R; это, наверное, Вам будет сейчас легче проверить, чем в обратную сторону):

1) Входные данные:
ArrayA - реальные данные, прочитанные из канала 1 файла iq-wav.
ArrayB - реальные данные, прочитанные из канала 0 файла iq-wav.
SizeA - кол-во отсчётов в одном из этих массивов (оно у них одинаковое).

SizeS := SizeA*2 это вдвое большее число, чем SizeA.
C := SizeA / 2 это вдвое меньшее число, чем SizeA. Все эти три константы должны быть целыми.

ComplexArray1 - размером SizeA. Это будет матрица с 2 столбцами длиной SizeA.
ComplexArray2 - размером SizeS. Это будет матрица с 2 столбцами длиной SizeS.
ArrayS - размером SizeS. Это будет простой массив реальных чисел - выходной сигнал S(t).

2) Копируем данные в "комплексный массив 1" и вызываем FFT:

для k от 0 до SizeA-1 с шагом 1:
ComplexArray1.Re[k] := ArrayA[k]
ComplexArray1.Im[k] := ArrayB[k]
end;

FFT(ComplexArray1, SizeA)

3) Формируем комплексный массив фурье-амплитуд для выходного реального сигнала S(t):

ComplexArray2[SizeA] := 0

для k от 0 до С-1 с шагом 1:
ComplexArray2[k] := ComplexArray1[k+C]
end;

для k от C до SizeA-1 с шагом 1:
ComplexArray2[k] := ComplexArray1[k-C]
end;

для k от 1 до SizeA-1 с шагом 1:
ComplexArray2.Re[SizeA+k] := ComplexArray2.Re[SizeA-k]
ComplexArray2.Im[SizeA+k] := - ComplexArray2.Im[SizeA-k]
end;

4) Обратное Фурье-пр-е и вывод выходного сигнала S(t) в массив ArrayS:

IFFT(ComplexArray2, SizeS)
для k от 0 до SizeS-1 с шагом 1:
ArrayS[k] := ComplexArray2.Re[k]
end;


5) Записываете ArrayS как 1-канальный wav-файл с вдвое большей частотой дискр., чем была в iq-wav.
Sinus
Участник
Offline3.0
с авг 2010
Санкт-Петербург
Сообщений: 1055

Дата: 09 Дек 2011 00:44:05 · Поправил: Sinus (09 Дек 2011 00:52:05) #  

Сварганил для теста сугубо короткий iq-файлик :) Взял НЧ-звук длиной 0.512 сек, Fdiscr = 8 kHz, число отсчётов SizeS = 4096. И перенёс на 0 его серединную частоту (2 kHz), получился стерео-файл с Fdiscr = 4 kHz (его даже можно послушать :)

http://www.divshare.com/download/16340677-e4e

Конвертер Meshа и маткад оба успешно справляются с его обратной конверсией. Исходный моно-вав здесь:

http://www.divshare.com/download/16340683-f00
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 09 Дек 2011 02:35:18 · Поправил: Programmist (09 Дек 2011 05:38:40) #  

Sinus
Спасибо огромное! Работает!
Очень хорошо, что Вы выбрали пример с размером, соответствующим размеру блока, иначе пришлось бы ломать голову. Теперь дело за малым - написать цикл для склеивания кусков, это уже дело техники :)

Хотя нет, не работает, опять поспешил, что-то не совсем так, но оно уже где-то рядом: см. ниже

Наверно, вот тут я неверно записал:

//для k от 0 до С-1 с шагом 1:
//ComplexArray2[k] := ComplexArray1[k+C]

for k:= 0 to C-1 do
begin
ComplexArray2[k].Re:= ComplexArray1[k+C].Re;
ComplexArray2[k].Im:= ComplexArray1[k+C].Im;
end;

//для k от C до SizeA-1 с шагом 1:
//ComplexArray2[k] := ComplexArray1[k-C]

for k:= C to SizeA-1 do
begin
ComplexArray2[k].Re:= ComplexArray1[k-C].Re;
ComplexArray2[k].Im:= ComplexArray1[k-C].Im;
end;

Нужно указывать что чему равен массив по Re и по Im, записал так, как понял.

з.ы.
тогда Sinus просто бог чекитов, сходу такой сигналик сварганить. ©Mesh
Это точно! Завалил второй конвертер :)) Ушел в аут мой хваленый модуль FFT, после такой процедуры у него напрочь слетают мозги, спасает только перезагрузка программы. Значит есть ошибка в модуле, которую иначе найти было не реально.
Чем оно дальше - тем интересней! Буду разбираться. Хорошо, что успел сохранить все варианты. Теперь и калькулятор пригодится, копать надо глубже :)

Sinus
Кстати, если всё верно, то все значения ComplexArray2.Im должны быть = 0 (с точностью до "шума арифметики").
Не, в Image вот это: см. ниже
Похоже, что то же самое, но кверху ногами.
Пока не разберусь, что тут произошло, все это всерьез воспринимать не стоит :)
Писал по ходу эксперимента, который далеко не закончен.
Похоже на то, что модуль не терпит изменение FFTSize, в рамках одной процедуры, здесь чисто проблемы с вызовом.
Sinus
Участник
Offline3.0
с авг 2010
Санкт-Петербург
Сообщений: 1055

Дата: 09 Дек 2011 04:33:05 · Поправил: Sinus (09 Дек 2011 04:38:52) #  

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

Здесь понято правильно.

Пока я не вижу ошибку. Смоделировал в маткаде ваше FFT и IFFT вручную - строго по формулам DFT и IDFT - и у меня реализация всего алгоритма работает 1:1 как надо. (Кстати, предположение об умножении на 2 больше не нужно. И нулю мнимая часть выходного IFFT(ComplexArray2, SizeS) не равна - она мала и почти постоянна, позже с ней разберусь как следует).

Проверьте тщательно и третий цикл, где мнимая часть берётся со знаком минус...

Проверьте, не включено ли у Вас опять какое-нибудь Round где-нибудь, фильтр какой-нибудь, и т.п.

Ещё можетбыть, что обратное пр-е, IFFT, работает у Вас не так, как я предполагаю - мы же его ещё не проверяли... Если опечаток в вашем коде нигде не найдётся, то будем разбираться с FFT-IFFT.

Для этого Вы мне вышлите, плз, txt-распечатку результирующего массива из FFT(ComplexArray1, SizeA), который получается в пункте 3), и аналогично распечатку результата IFFT(ComplexArray2, SizeS), всё для этого файла test-2. Завтра к вечеру сравню с результатами в маткаде.
RadioKoteg
Участник
Offline4.4
с сен 2006
Киев
Сообщений: 14486

Дата: 09 Дек 2011 04:42:45 #  

офтоп:


Programmist


Увеличить

Чего то в голову "проспичило" инновационный интерфейс для поиска в длинных сигналах, так же делаем и с ватерфалом. шкалы естесно удобные для FFT, да бы не пропустит там чего.. Это так к делу не относиться но вдруг где то пригодиться.
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 09 Дек 2011 05:20:40 · Поправил: Programmist (09 Дек 2011 06:45:58) #  

Sinus
Я тут с сигналами, что положил выше, мог что-то напутать с инверсией, но как re, так и im на выходе содержат похожие данные. Проверить не успел, подключил второй модуль (FFT64 из калькулятора), он не вылетает, но результат примерно одинаковый. Модули разные, по знаку возвращаемых массивов.
Конечно, надо брать числовые массивы и смотреть, что куда попадает. Спешить не будем, очень легко ошибиться.
С первым модулем все верно, я забыл про тонкости его вызова, поэтому он и скончался. Здесь можно за основу взять и второй (64 бит, есть в калькуляторе выше), но он в 2 раза медленней.
(Первые записи удалил, чтобы копилку не засорять.)

RadioKoteg
инновационный интерфейс для поиска в длинных сигналах
Тут еще думать надо, я уже приспособил многослойный графический модуль, как в фотошопе, там возможностей очень много, имхо даже больше, чем в самом шопе, есть даже анимация с высокой скоростью вывода.
Вроде оно кажется, что знаешь, как надо сделать, а реально все меняется каждый день.
Есть задумка смотреть фазу на дополнительном слое, меняя прозрачность, все это можно реализовать, когда будет сделано самое необходимое.
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 09 Дек 2011 06:11:56 · Поправил: Programmist (09 Дек 2011 16:36:10) #  

Sinus
Нашел ошибку. Неверно указал размер, да еще I и Q перепутал :)
Ошибка с I/Q дает перевернутый спектр, а вот неполное заполнение массива была критической.

з.ы.
Проверил еще раз, что-то не то, идет удвоение частоты, сразу не заметил, ну ничего, разберемся, в FFT это место всегда было самым забавным :) Если больше ошибок не найду, буду делать распечатку всех операций, зато теперь работают оба модуля.
Подозрительна их разница в полярности, что хорошо видно на калькуляторе, но так все перевернуто, что результат у обоих, в данном случае, одинаковый.

з.ы.з.ы.
Больше не нашел. Вот здесь все результаты и модуль: http://www.radioscanner.ru/uploader/2011/uiqconverter3.rar
Строки матриц не пронумерованы, первая колонка всегда Real.
Попробую еще сделать то же самое из трех преобразований.
Таким образом, похоже, скоро до меня дойдет, что такое было "i" :)

з.ы.з.ы.з.ы.
Mesh
Если Вам не сложно, не могли бы Вы прислать файл Sinusа http://www.divshare.com/download/16340677-e4e
Конвертированный из I/Q в SA. Смущает отличие спектров Вашего конвертера (на картинке A) и конвертера Матлаба (B): http://www.divshare.com/download/16340683-f00


Увеличить

Проблема в получении верхней половинки спектра, как правильно - не понятно, у меня все время получается какой-то третий вариант 8(.
Должны сойтись хотя-бы два, то, что на картинке A, может быть и зеркалкой, очень похоже, но полной уверенности нет.
Сказать, что конвертер работает, можно будет только тогда, когда сравню матрицы в текстовом виде.

Пытаюсь разобраться сам, но везде какой-то мутняк, либо формулы, сложные для моего понимания, либо споры, приводящие, в конечном итоге ни к чему.
Так скоро дело может дойти до того, что придется ставить Матлаб и просить у Sinusа модель. Ставить его уже пробовал неоднократно, но чужой язык, где нужно знать множество нюансов, свел все старания на нет.
Mesh
Участник
Offline4.0
с мая 2006
Сообщений: 6169

Дата: 09 Дек 2011 16:38:37 · Поправил: Mesh (09 Дек 2011 16:49:43) #  

Programmist Да забудьте вы про мой конвертер, ну глючный он получился, что ж тут уже непонятного. Вот после SA http://www.radioscanner.ru/uploader/2011/sinusfile.wav запись, вроде ж уже порешили, что кривой он косой, да я и сам это не отрицаю, оно мне было понятно что нето чёто уже сразу после появления конверетера в SA или как там она тогда называлась. Из ваших ж скринов видно, что зеркало у меня прёт, да ещё в нахлёст ложится на нормал спектру.
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 09 Дек 2011 16:48:54 · Поправил: Programmist (09 Дек 2011 19:44:13) #  

Mesh
Спасибо! Теперь картина проясняется, 1:1 исходник Sinusа. А что конвертер вышел не совсем удачно, так в этом нет ничего страшного, там виноват LPF. Если бы конвертера не было, не было бы и этой темы, да и еще неизвестно чего не было-бы.

Sinus
Код, приведенный ниже, дает такую картину:


Увеличить

Все есть, но из двух перепутанных половин.

dspDoFFT(@ComplexArray1, SizeA, False, True, True); //Прямое 2048

j:= SizeA;
for k:= 1 to SizeA-1 do
begin
ComplexArray2[k].Re:= ComplexArray1[k].Re;
ComplexArray2[k].Im:= ComplexArray1[k].Im;
ComplexArray2[k + SizeA].Re:= -ComplexArray1[j].im;
ComplexArray2[k + SizeA].Im:= -ComplexArray1[j].re;
Dec(j); //уменьшение значения j на 1 (инверсия)
end;

//А здесь мы теряем частоту Найквиста, ничего лучшего не придумал, как разделить ее на 2.
//Делать этого нельзя, появится постоянка и блоки будут плохо состыковываться, придется клеить с окнами.

ComplexArray2[0].Re:= ComplexArray1[0].Re / 2;
ComplexArray2[0].Im:= 0;
ComplexArray2[SizeA].Re:= ComplexArray1[SizeA div 2].Re / 2;
ComplexArray2[SizeA].Im:= 0;

dspDoFFT(@ComplexArray2, SizeS, True, True, True); //Обратное 4096

Далее выход в файл из ComplexArray2.Re
Sinus
Участник
Offline3.0
с авг 2010
Санкт-Петербург
Сообщений: 1055

Дата: 10 Дек 2011 00:14:11 · Поправил: Sinus (10 Дек 2011 00:19:08) #  

RadioKoteg
офтоп

Вроде бы тема-то уже не про б/кисл. медь, а про "прочие забавы" :-)) Тут офтопа в принципе быть не может. Всем, кого чё-нибудь "проспичило", завсегда рады! ))

Programmist
Если я беру из вашего txt-файла ваш ComplexArray1 с результатом вашего FFT, и дальше использую его у себя в маткаде по моему алгоритму, то на выходе получается 100% то что надо. Но для этого мне пришлось левую колонку в вашем txt пользовать как Im-часть массива, а вторую - как Re (а в посте Вы пишете наоборот).

Значит, ваш первоначальный модуль FFT делает, то что надо. Но! Либо он возврящает Re и Im не в те колонки (переставляет их). Либо Вы не верно указали их в посте, а тогда ошибка возникает в вашем коде дальше - может быть в IFFT. Давайте разберёмся последовательно: для этого пришлите, плз, точно так же (две колонки, без номеров строк) тот ComplexArray2, который подаётся на вход IFFT, т.е. непосредственно до выполнения IFFT.

Вот. А произвольно, наугад, менять код не надо. Уже понятно, что собсно алгоритм правильный (или почти правильный; есть одно мелкое улучшение, но оно на слух не сказывается, о нём позже). Осталось проверить, что у Вас поступает на вход IFFT, и что получается на выходе, и тогда только можно будет внести обоснованные изменения в код.

Mesh, на мой слух одинаково звучат результаты конверсии из SA, из вашего конвертера, и из трёх вариантов на базе FFT в маткаде - по звучанию совпадают с исходным моно-сигналом. При этом, на графиках сигналов маткадные результаты с хорошей точностью ложатся на точки исходного сигнала. Сигнал же из SA и из вашего конвертера как бы задержан чуток во времени (либо его форма изменена из-за сдвигов фазы). Думаю, так и должно быть: фильтры вносят задержку, а FFT не меняет фазы бинов.
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 10 Дек 2011 00:20:45 · Поправил: Programmist (10 Дек 2011 00:33:17) #  

Sinus
Может быть только ошибка в самом модуле (перепутаны re и im), в коде у меня указано правильно.
После прямого преобразования:

for k:= 0 to SizeA-1 do
SL.Add(Format('%1.8f', [ComplexArray1[k].re]) + #9 + Format('%1.8f', [ComplexArray1[k].im] ) );
SL.SaveToFile('ComplexArray1_FFT.txt');

Где SL - список строк, а #9 - знак табуляции. Сейчас Попробую поменять их местами.
Sinus
Участник
Offline3.0
с авг 2010
Санкт-Петербург
Сообщений: 1055

Дата: 10 Дек 2011 00:37:35 · Поправил: Sinus (10 Дек 2011 00:43:45) #  

Programmist, сначала, плз, пришлите распечатку ComplexArray2 на входе IFFT, чтобы я уже занялся вашим IFFT; можно заодно и распечатку ComplexArray2 с выхода повторить, отдельным txt-файлом.

В маткаде легко менять местами, я и сам поменяю, если потребуется. Главное - иметь числовую информацию о ваших массивах в ходе одного экспериментального акта, так сказать. До и после IFFT без каких либо изменений кода по ходу дела.
Mesh
Участник
Offline4.0
с мая 2006
Сообщений: 6169

Дата: 10 Дек 2011 00:48:29 · Поправил: Mesh (10 Дек 2011 00:50:33) #  

Sinus Не, слух тут не рулит. На скринах видно что конвертер реал ерунду гонит. :-) Ну да я эт и так подозревал сильно, тут уже это во всю ширь показано. С задержками я не знаю, тут как бы нужно определятся кому чем они грозят, и не факт что когда будет сделано реал рабочее чего, то они будут ещё больше чем тут, я хз, чекит покажет.
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 10 Дек 2011 00:48:38 · Поправил: Programmist (10 Дек 2011 02:21:55) #  

Sinus
Так они абсолютно идентичны, код я не менял, просто сделал клоны модулей. Вот исходный вариант:
//дубль, удалил//
Крашу форму в красный цвет, чтобы больше ничего не перепутать и сохраняю проект.

Mesh
Да оно не на слух, я специально файл из SA просил, для сравнения, теперь все ясно, как оно должно быть, сто раз все перекрутил, но "метод тыка" тут не рулит. Последний скрин почти правильный, все есть, а развернуть, как положено, не могу.
Sinus
Участник
Offline3.0
с авг 2010
Санкт-Петербург
Сообщений: 1055

Дата: 10 Дек 2011 00:54:11 · Поправил: Sinus (10 Дек 2011 00:59:30) #  

Mesh, ну, не идеальный да конвертер, однако же работает, и другого-то всем доступного конвертора на сайте нет таки :) Думаю, много народу его уже пользуют и счастливы. Так что, не ругайте уж сильно-то своё детище, оно чего может то вполне делает!

А про задержки и не говорю, что они грозят. Нормальные задержки. Просто к сведению, мол графики посмотрел, результат вот такой.

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

Дата: 10 Дек 2011 00:59:05 #  

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

Дата: 10 Дек 2011 01:01:25 · Поправил: Sinus (10 Дек 2011 01:15:08) #  

Programmist, почему приставать, мне же это дело тож интересно.

Кстати, насчёт установки маткада, если созреете, можно через личку. Матлаб считается посильнее софтина, но у него командный язык, не владею. Маткад для пользователя очень прост - он как текстовый редактор, и формулы в него пишутся в той форме, как в книжках. Кроме того, в нём есть огромная встроенная помощь с реально работающими примерами. И по ЦОС там не только FFT, но около сотни разных функций встроенных есть, окна, фильтры, я их ещё и не начинал даже толком осваивать-то... Мощная штука. Вон, в тесте-1 файл с 8 млн. отсчётов обрабатывает за время меньше минуты (а на более шустром компе, ноутбуке, дык вообще за пару десятков секунд...)

Т.е. там можно полностью отмакетировать какой надо алгоритм, а потом его кодить на конкретном языке программирования. Очень легко текст "рабочего листа" менять, добавлять-убирать формулы, смотреть значения величин по ходу дела. Т.е. для отладки алгоритмов вычислений самое то. Но, конечно, математику-то надо при этом знать. Сам маткад за нас сочинять формулы не умеет...))
Mesh
Участник
Offline4.0
с мая 2006
Сообщений: 6169

Дата: 10 Дек 2011 01:03:04 · Поправил: Mesh (10 Дек 2011 01:04:55) #  

Sinus Дык я ж не его ругаю. :-) Я себя ругаю, мог б и сам всё прочекить и сразу написать что там и там типо острожней. А так. Так то просёк, что чтото не так, а что почему и когда и где, не стал. Расстроился так сказать, а так ну да конвертит, да и делался ж он под перспективные i/q ну и типо ессно задача кака была поставлена имхо выполнялась, ну не идеально правда.
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 10 Дек 2011 01:09:32 · Поправил: Programmist (10 Дек 2011 01:18:54) #  

Mesh
А с конвертером нормально все, фильтр плохой, вот он и "зеркалит" по краям спектра, файлы у нас специфические, на реальных такой глюк поймать сложно.
Может быть он и останется, в конечном итоге, когда фильтр усовершенствую. Окна с перекрытием должны стоять в обоих областях, имхо тогда он будет почти идеален. Можно смело обнулять любые частоты.

Sinus
насчёт установки маткада
Где-то был но у меня, версия не старая, кажется за 2010 год. Пока помучаюсь еще немного, если ничего не выйдет - буду ставить.
Sinus
Участник
Offline3.0
с авг 2010
Санкт-Петербург
Сообщений: 1055

Дата: 10 Дек 2011 01:29:24 · Поправил: Sinus (10 Дек 2011 01:33:47) #  

Programmist
Так они абсолютно идентичны

Какие идентичны, не понимаю. Надо два разных ComplexArray2 - тот, что приходит на вход обратного пр-я, т.е. на вход IFFT, и тот что возвращается c выхода IFFT. Кажется, Вы дважды прислали только второй из них. Жду первый ComplexArray2.
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 10 Дек 2011 01:40:57 · Поправил: Programmist (10 Дек 2011 02:07:49) #  

Sinus
Да, запутался :) Вот это вход и выход IFFT, SizeS, 4096:
http://www.radioscanner.ru/uploader/2011/iftt_io.rar

з.ы.
Насчет сигнала из SA.
Сигнал же из SA и из вашего конвертера как бы задержан чуток во времени (либо его форма изменена из-за сдвигов фазы). Думаю, так и должно быть: фильтры вносят задержку, а FFT не меняет фазы бинов.
Наверно ему пришлось добавлять нули в начало или конец, сигнал-то очень короткий, а там ограничение на мин. длину, я и забыл про это, потому фаза и ушла.
Sinus
Участник
Offline3.0
с авг 2010
Санкт-Петербург
Сообщений: 1055

Дата: 10 Дек 2011 01:42:16 #  

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

Дата: 10 Дек 2011 08:13:00 · Поправил: Programmist (10 Дек 2011 08:25:30) #  

Собрал, но при этом убивается зона Найквиста. На центральной частоте получается "хвост". Взять эту зону негде, размер блока обратного преобразования другой, наверно в Маткаде модуль, где она рассчитывается заново. Вариант вижу один - 50% перекрытие окнами Ханна. Ничего страшного в этом нет, фильтр уже так работает.


Увеличить

Могу ошибаться, если у Вас работает без окон, значит здесь самый интересный момент. Окна работают хорошо, но это не 100% качества, значит задача пока не решена.
Sinus
Участник
Offline3.0
с авг 2010
Санкт-Петербург
Сообщений: 1055

Дата: 10 Дек 2011 12:34:00 · Поправил: Sinus (10 Дек 2011 13:14:38) #  

Programmist, по присланным Вами числам видно, что у Вас есть опечатка в коде. Посмотрите ещё раз внимательно мой "псевдокод" алгоритма: там в пункте 3) есть 3 цикла, и в третьем цикле массив ComplexArray2 дополняется своими же комплексно сопряжёнными элементами:

для k от 1 до SizeA-1 с шагом 1:
ComplexArray2.Re[SizeA+k] := ComplexArray2.Re[SizeA-k]
ComplexArray2.Im[SizeA+k] := - ComplexArray2.Im[SizeA-k]

А у Вас, имхо, в правой стороне написан ComplexArray1 вместо ComplexArray2.

ps. И, кроме того, имхо, верните назад назначение каналов из вав-файла: канал 0 должен идти в ArrayB, канал 1 - ArrayA. Имхо, из-за того, что Вы их где-то переставили, у Вас поменялись местами Re и Im части в вашем ComplexArray1. ))
Реклама
Google
 Страница:  ««  1  2  ...  4  5  6  7  8  ...  34  35  »» 

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