Автор |
Сообщение |
|
Дата: 08 Дек 2011 19:55:51
#
|
|
Дата: 08 Дек 2011 20:17:55 · Поправил: Programmist (08 Дек 2011 20:23:07)
#
RadioKoteg
Разбирается все двумя Кулами быстро, но качество вот такое: http://www.radioscanner.ru/uploader/2011/130374_000fr2.wav
Это я тут еще шумы убрал и паузу вырезал. Частоту сносил два раза (с первого не попал), да и кверху ногами все было.
Есть подозрение, что половина качества где-то при сносе теряется. |
Реклама Google
|
|
|
Дата: 08 Дек 2011 20:23:17
#
Кулами быстро, но качество вот тако слышен остаток перемножения частот с обратной боковой или еще что. В общем это ни есть гуд.
|
|
Дата: 08 Дек 2011 20:27:03 · Поправил: Programmist (08 Дек 2011 20:43:06)
#
В общем это ни есть гуд Зря я шум убрал, теперь и непонятно, что там слышно, запись сильно исказилась, да и двойной снос ей на пользу не пошел. Можно было лучше сделать, спешил.
На спектре явно видно, что информации в 2 раза больше, но пока что-то никуда не движется, нужен перекур :)
|
|
Дата: 08 Дек 2011 21:09:41 · Поправил: mikasa76 (08 Дек 2011 21:10:51)
#
Programmist
Вот с буквой "i" пока не понял, у меня таких переменных быть не может, это обязательно должно быть каким-то реальным числом. В Паскале вся математика предельно проста. в этом, как говорится, и есть весь "корень зла", Вы не хотите сначала разобраться с теорией и прислушаться к советам, а упорно наступаете на одни и те же грабли. разберитесь сначала хотя бы с понятиями аналитического сигнала и комплексной огибающей (тогда может и с конвертером разберетесь), это напрямую имеет отношение к этой букве "i". машина (компьютер) не оперирует с комплексными числами напрямую и это не зависит от языка, на котором программируете. Так что начните с азов и Вы поймете какой удивительный мир перед Вами откроется и быть может поменяете что-либо в своем мировоззрении :)))))))))
|
|
Дата: 08 Дек 2011 21:18:34 · Поправил: Programmist (08 Дек 2011 21:36:22)
#
mikasa76
может поменяете что-либо в своем мировоззрении
Менять уже поздно, а принцип здесь простой: Если бы знал, что чего-то невозможно сделать, то и не сделал бы :)
Принцип действительно работает, только не всегда :))
з.ы.
А грабли - она вещь в хозяйстве полезная. Чем больше раз на них наступишь, тем больше опыт, а когда все заранее знаешь, уже не интересно :)
Если серьезно, тут еще такая куча мелочей, которые надо просто сделать, без них все равно ничего не получится.
|
|
Дата: 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.
|
|
Дата: 09 Дек 2011 00:44:05 · Поправил: Sinus (09 Дек 2011 00:52:05)
#
|
|
Дата: 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, в рамках одной процедуры, здесь чисто проблемы с вызовом.
|
|
Дата: 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. Завтра к вечеру сравню с результатами в маткаде.
|
|
Дата: 09 Дек 2011 04:42:45
#
офтоп:
Programmist
Увеличить
Чего то в голову "проспичило" инновационный интерфейс для поиска в длинных сигналах, так же делаем и с ватерфалом. шкалы естесно удобные для FFT, да бы не пропустит там чего.. Это так к делу не относиться но вдруг где то пригодиться. |
|
Дата: 09 Дек 2011 05:20:40 · Поправил: Programmist (09 Дек 2011 06:45:58)
#
Sinus
Я тут с сигналами, что положил выше, мог что-то напутать с инверсией, но как re, так и im на выходе содержат похожие данные. Проверить не успел, подключил второй модуль (FFT64 из калькулятора), он не вылетает, но результат примерно одинаковый. Модули разные, по знаку возвращаемых массивов.
Конечно, надо брать числовые массивы и смотреть, что куда попадает. Спешить не будем, очень легко ошибиться.
С первым модулем все верно, я забыл про тонкости его вызова, поэтому он и скончался. Здесь можно за основу взять и второй (64 бит, есть в калькуляторе выше), но он в 2 раза медленней.
(Первые записи удалил, чтобы копилку не засорять.)
RadioKoteg
инновационный интерфейс для поиска в длинных сигналах
Тут еще думать надо, я уже приспособил многослойный графический модуль, как в фотошопе, там возможностей очень много, имхо даже больше, чем в самом шопе, есть даже анимация с высокой скоростью вывода.
Вроде оно кажется, что знаешь, как надо сделать, а реально все меняется каждый день.
Есть задумка смотреть фазу на дополнительном слое, меняя прозрачность, все это можно реализовать, когда будет сделано самое необходимое.
|
|
Дата: 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а модель. Ставить его уже пробовал неоднократно, но чужой язык, где нужно знать множество нюансов, свел все старания на нет. |
|
Дата: 09 Дек 2011 16:38:37 · Поправил: Mesh (09 Дек 2011 16:49:43)
#
Programmist Да забудьте вы про мой конвертер, ну глючный он получился, что ж тут уже непонятного. Вот после SA http://www.radioscanner.ru/uploader/2011/sinusfile.wav запись, вроде ж уже порешили, что кривой он косой, да я и сам это не отрицаю, оно мне было понятно что нето чёто уже сразу после появления конверетера в SA или как там она тогда называлась. Из ваших ж скринов видно, что зеркало у меня прёт, да ещё в нахлёст ложится на нормал спектру. |
|
Дата: 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 |
|
Дата: 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 не меняет фазы бинов.
|
|
Дата: 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 - знак табуляции. Сейчас Попробую поменять их местами.
|
|
Дата: 10 Дек 2011 00:37:35 · Поправил: Sinus (10 Дек 2011 00:43:45)
#
Programmist, сначала, плз, пришлите распечатку ComplexArray2 на входе IFFT, чтобы я уже занялся вашим IFFT; можно заодно и распечатку ComplexArray2 с выхода повторить, отдельным txt-файлом.
В маткаде легко менять местами, я и сам поменяю, если потребуется. Главное - иметь числовую информацию о ваших массивах в ходе одного экспериментального акта, так сказать. До и после IFFT без каких либо изменений кода по ходу дела.
|
|
Дата: 10 Дек 2011 00:48:29 · Поправил: Mesh (10 Дек 2011 00:50:33)
#
Sinus Не, слух тут не рулит. На скринах видно что конвертер реал ерунду гонит. :-) Ну да я эт и так подозревал сильно, тут уже это во всю ширь показано. С задержками я не знаю, тут как бы нужно определятся кому чем они грозят, и не факт что когда будет сделано реал рабочее чего, то они будут ещё больше чем тут, я хз, чекит покажет.
|
|
Дата: 10 Дек 2011 00:48:38 · Поправил: Programmist (10 Дек 2011 02:21:55)
#
Sinus
Так они абсолютно идентичны, код я не менял, просто сделал клоны модулей. Вот исходный вариант:
//дубль, удалил//
Крашу форму в красный цвет, чтобы больше ничего не перепутать и сохраняю проект.
Mesh
Да оно не на слух, я специально файл из SA просил, для сравнения, теперь все ясно, как оно должно быть, сто раз все перекрутил, но "метод тыка" тут не рулит. Последний скрин почти правильный, все есть, а развернуть, как положено, не могу.
|
|
Дата: 10 Дек 2011 00:54:11 · Поправил: Sinus (10 Дек 2011 00:59:30)
#
Mesh, ну, не идеальный да конвертер, однако же работает, и другого-то всем доступного конвертора на сайте нет таки :) Думаю, много народу его уже пользуют и счастливы. Так что, не ругайте уж сильно-то своё детище, оно чего может то вполне делает!
А про задержки и не говорю, что они грозят. Нормальные задержки. Просто к сведению, мол графики посмотрел, результат вот такой.
Programmist, спасибо, пошёл с массивами разбираться.
|
|
Дата: 10 Дек 2011 00:59:05
#
Sinus
Мне уже неудобно приставать к Вам с этой чепухой, буду сам разбираться, пока не выйдет :)
|
|
Дата: 10 Дек 2011 01:01:25 · Поправил: Sinus (10 Дек 2011 01:15:08)
#
Programmist, почему приставать, мне же это дело тож интересно.
Кстати, насчёт установки маткада, если созреете, можно через личку. Матлаб считается посильнее софтина, но у него командный язык, не владею. Маткад для пользователя очень прост - он как текстовый редактор, и формулы в него пишутся в той форме, как в книжках. Кроме того, в нём есть огромная встроенная помощь с реально работающими примерами. И по ЦОС там не только FFT, но около сотни разных функций встроенных есть, окна, фильтры, я их ещё и не начинал даже толком осваивать-то... Мощная штука. Вон, в тесте-1 файл с 8 млн. отсчётов обрабатывает за время меньше минуты (а на более шустром компе, ноутбуке, дык вообще за пару десятков секунд...)
Т.е. там можно полностью отмакетировать какой надо алгоритм, а потом его кодить на конкретном языке программирования. Очень легко текст "рабочего листа" менять, добавлять-убирать формулы, смотреть значения величин по ходу дела. Т.е. для отладки алгоритмов вычислений самое то. Но, конечно, математику-то надо при этом знать. Сам маткад за нас сочинять формулы не умеет...))
|
|
Дата: 10 Дек 2011 01:03:04 · Поправил: Mesh (10 Дек 2011 01:04:55)
#
Sinus Дык я ж не его ругаю. :-) Я себя ругаю, мог б и сам всё прочекить и сразу написать что там и там типо острожней. А так. Так то просёк, что чтото не так, а что почему и когда и где, не стал. Расстроился так сказать, а так ну да конвертит, да и делался ж он под перспективные i/q ну и типо ессно задача кака была поставлена имхо выполнялась, ну не идеально правда.
|
|
Дата: 10 Дек 2011 01:09:32 · Поправил: Programmist (10 Дек 2011 01:18:54)
#
Mesh
А с конвертером нормально все, фильтр плохой, вот он и "зеркалит" по краям спектра, файлы у нас специфические, на реальных такой глюк поймать сложно.
Может быть он и останется, в конечном итоге, когда фильтр усовершенствую. Окна с перекрытием должны стоять в обоих областях, имхо тогда он будет почти идеален. Можно смело обнулять любые частоты.
Sinus
насчёт установки маткада
Где-то был но у меня, версия не старая, кажется за 2010 год. Пока помучаюсь еще немного, если ничего не выйдет - буду ставить.
|
|
Дата: 10 Дек 2011 01:29:24 · Поправил: Sinus (10 Дек 2011 01:33:47)
#
Programmist
Так они абсолютно идентичны
Какие идентичны, не понимаю. Надо два разных ComplexArray2 - тот, что приходит на вход обратного пр-я, т.е. на вход IFFT, и тот что возвращается c выхода IFFT. Кажется, Вы дважды прислали только второй из них. Жду первый ComplexArray2.
|
|
Дата: 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 не меняет фазы бинов.
Наверно ему пришлось добавлять нули в начало или конец, сигнал-то очень короткий, а там ограничение на мин. длину, я и забыл про это, потому фаза и ушла. |
|
Дата: 10 Дек 2011 01:42:16
#
получено, ок.
|
|
Дата: 10 Дек 2011 08:13:00 · Поправил: Programmist (10 Дек 2011 08:25:30)
#
Собрал, но при этом убивается зона Найквиста. На центральной частоте получается "хвост". Взять эту зону негде, размер блока обратного преобразования другой, наверно в Маткаде модуль, где она рассчитывается заново. Вариант вижу один - 50% перекрытие окнами Ханна. Ничего страшного в этом нет, фильтр уже так работает.
Увеличить
Могу ошибаться, если у Вас работает без окон, значит здесь самый интересный момент. Окна работают хорошо, но это не 100% качества, значит задача пока не решена. |
|
Дата: 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 |
|