реклама на сайте
подробности

 
 
> Преобразование комплексного сигнала в вещественный
RadioWave
сообщение Nov 30 2006, 11:57
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 23
Регистрация: 12-07-06
Пользователь №: 18 761



Подскажите, пожалуйста, быстрый алгоритм преобразования сигнала, представленного
в квадратурных комплексных отсчетах, в вещественный сигнал.
Go to the top of the page
 
+Quote Post
4 страниц V  < 1 2 3 4 >  
Start new topic
Ответов (15 - 29)
shf_05
сообщение Apr 4 2009, 07:20
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 22-04-08
Из: г. Екатеринбург
Пользователь №: 36 992



Цитата(Ykidia @ Apr 3 2009, 20:50) *
Есть массив комплексных значений после вышеуказанной обработки из n элементов, надо получить массив вещественных значений из n*2 элементов

из n элементов не получить 2n элементов.

имхо:
s(t)-физический сигнал
для переноса на несущую необходимо выполнить операцию: s_hi_freq(t)=[s(t)+j*HILBERT(s(t))]*exp(j*Wnes) в идеале получается только реальная составляющая без боковых полос
для переноса на ноль s_lo_freq= s_hi_freq(t)*exp(-j*(Wnes+delta))= I+Q, получим т.наз. комплексную огибающую сигнала s_hi_freq(t), спектр такого колебания совпадает со спектром s(t)
с точностю delta
в итоге если надо получить ту же частоту с точн до 0, то исп фапч и соотв сигнал (пилот)
если важна ампл., то sqrt(i^+q^2)
если сдвиг на delta не принципиален - можно взять или i или q (без разницы)
Go to the top of the page
 
+Quote Post
DRUID3
сообщение Apr 4 2009, 11:21
Сообщение #17


山伏
*****

Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294



Цитата(Ykidia @ Apr 3 2009, 17:50) *
Есть массив комплексных значений после вышеуказанной обработки из n элементов

какой именно обработки? Выше указали их много...

Цитата(Ykidia @ Apr 3 2009, 17:50) *
...надо получить массив вещественных значений из n*2 элементов. Частота вещественного сигнала - 200 MSamples (спектр 0..100 МГц), соответственно комплексного - 100 MSamples (-50..50 МГц). Что я должен делать?

я делал бы так.

есть n*I, n*Q временных отсчетов.

1) cFFT //получили n*I n*Q в частотной области

2) тупо сдвинули все частотные отсчеты в сторону положительных на 50 MHz. Имеем только положительные отсчеты спектра.

3) дополняем отрицательную часть спектра до 2*n элементов в соответствии с правилами спектра Фурье для действительных последовательностей. Вещественная ось четная симметрия([i]=[N-i]). Мнимая - нечетная симметрия([i]=-[N-i]), "0"-й и "N/2" отсчеты пусты т.е. "0"...

4) RealRFFT //обратное для действительных чисел.

получаем действительную временнУю последовательность для 2*n действительных отсчетов.

Этот блочный алгоритм вполне работоспособен для Real Time. smile.gif
Цитата(Ykidia @ Apr 3 2009, 17:50) *
Спасибо.

неее...давайте 50$... biggrin.gif

P.S.: временнОй метод с преобразованием Гильберта тоже проканает, при отвратительном результате для "0"-й частоты. Просто мне частотные методы "ближе"...


--------------------
Нас помнят пока мы мешаем другим...
//--------------------------------------------------------
Хороший блатной - мертвый...
//--------------------------------------------------------
Нет старик, это те дроиды которых я ищу...
Go to the top of the page
 
+Quote Post
729
сообщение Apr 4 2009, 13:08
Сообщение #18


Местный
***

Группа: Участник
Сообщений: 312
Регистрация: 21-10-05
Пользователь №: 9 952



Цитата(Ykidia @ Apr 3 2009, 18:50) *
Прошу прощения, как говорится, смотрю в книгу, а вижу... Описанный случай - один-в-один как у меня, однако не могу я понять из написанного в мануале, что конкретно мне необходимо делать для преобразования. Есть массив комплексных значений после вышеуказанной обработки из n элементов, надо получить массив вещественных значений из n*2 элементов. Частота вещественного сигнала - 200 MSamples (спектр 0..100 МГц), соответственно комплексного - 100 MSamples (-50..50 МГц). Что я должен делать?
Спасибо.

Сначала надо увеличить частоту дискретизации вдвое. Самый честный способ - вставить между отсчетами сигнала ноль (было x(1), x(2), x(3), ..., стало x(1), 0, x(2), 0, x(3), 0, ...,).
Затем обе квадратуры надо пропустить через ФНЧ с полосой пропускания Fs (Fs - частота дискретизации до вставления нулей).
Понятен ли этот момент? Без понимания сего дальше будет трудно. Если не совсем понятен, то напишите.

Сообщение отредактировал 729 - Apr 4 2009, 13:37
Go to the top of the page
 
+Quote Post
Ykidia
сообщение Apr 6 2009, 01:32
Сообщение #19


Частый гость
**

Группа: Свой
Сообщений: 80
Регистрация: 3-08-06
Пользователь №: 19 287



Цитата
какой именно обработки? Выше указали их много...

Я имел в виде эту обработку:
Цитата
Распространённый вариант получения квадратур, через Digital Down Converter (DDC), как правило, выдает комплексный сигнал со спектром, сосредоточеным вокруг нулевой частоты. В этом случае самый быстрый алгоритм получения вещественного сигнала описан в мануале на HSP50016 (Intersil). Суть алгоритма - перенос комплексного сигнала на центральную частоту Fs/4 и взятие реальной части. Если всё это расписать, то проще не бывает

Именно о ней шла речь с отсылом к мануалу HSP50016, в котором раздел Quadrature to real мне как следует и непонятен.

DRUID3
Вариант сделать это через FFT туда-сюда, к сожалению, мне не подходит из-за специфично написанного приложения, в котором я ковыряюсь, чтобы добавить в него поддержку комплексного сигнала с платы АЦП.

729
Цитата
Затем обе квадратуры надо пропустить через ФНЧ с полосой пропускания Fs (Fs - частота дискретизации до вставления нулей).
Понятен ли этот момент? Без понимания сего дальше будет трудно. Если не совсем понятен, то напишите.

Извиняюсь, но и в самом деле не совсем понятен...
Go to the top of the page
 
+Quote Post
Ykidia
сообщение Apr 6 2009, 15:22
Сообщение #20


Частый гость
**

Группа: Свой
Сообщений: 80
Регистрация: 3-08-06
Пользователь №: 19 287



Поясните, пожалуйста, подробнее, если можно.
Go to the top of the page
 
+Quote Post
729
сообщение Apr 6 2009, 15:23
Сообщение #21


Местный
***

Группа: Участник
Сообщений: 312
Регистрация: 21-10-05
Пользователь №: 9 952



Цитата(Ykidia @ Apr 6 2009, 05:32) *
729

Извиняюсь, но и в самом деле не совсем понятен...

После вставления нулей удваивается частота дискретизации. В частотной области получится повторение исходного спектра на частотах Fs-2Fs (Fs частота дискретизации до вставления нулей), то есть был просто спектр в полосе 0-Fs, стало два одинаковых спектра в полосах 0-Fs и Fs-2Fs (с точностью до множителя). Теперь надо то, что на интервале Fs/2-3Fs/2, отфильтровать.
Если не совсем понятно, то спрашивайте.

Сообщение отредактировал 729 - Apr 6 2009, 15:25
Go to the top of the page
 
+Quote Post
=GM=
сообщение Apr 6 2009, 17:24
Сообщение #22


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(DRUID3 @ Apr 4 2009, 10:21) *
тупо сдвинули все частотные отсчеты в сторону положительных на 50 MHz. Имеем только положительные отсчеты спектра

Не имеем. Отсчёты тупо вдвинутся с отрицательной стороны(:-).


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
leksa
сообщение Apr 6 2009, 18:58
Сообщение #23


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 20-09-08
Пользователь №: 40 352



Пример в помощь cool.gif (обсуждаемый алгоритм на языке матлаба):
Прикрепленный файл  C2R_signal_convert.rar ( 529 байт ) Кол-во скачиваний: 200


Правда в моем примере фильтр взят КИХ на 512 отсчетов произвольно, и при фильтрации он фильтрует все отсчеты, в том числе и нулевые входные, так как используется стандартная функция фильтрации матлаба. Если его заменить на фильтр, который не будет использовать при фильтрации нулевые входные отсчеты, а также подобрать длину его ИХ, исходя из требований к допустимому уровню наложения спектров, то можно получить дополнительный выигрыш производительности.

Почему это работает:
Если есть комплексная огибающая c(t)=I(t)+jQ(t), из нее можно получить реальный сигнал следующей операцией:
g(t)=real{c(t)*exp(j*2*pi*fc*t)}=
=real{I(t)*cos(2*pi*fc*t)+jQ(t)*cos(2*pi*fc*t)+jI(t)*sin(2*pi*fc*t)+j*j*Q(
t)*sin(2*pi*fc*t)}=
=I(t)*cos(2*pi*fc*t)-Q(t)*sin(2*pi*fc*t)
В нашем случае fc=fs/4, при этом cos(2*pi*fc*t) принимает значения 1 0 -1 0 и далее повторяется, а sin(2*pi*fc*t) принимает значения 0 1 0 -1.
Вот и получается что выходной сигнал равен [I(0) -Q(1) -I(2) Q(3) ...] и так далее.
А повышение частоты дискретизации и фильтрация нужны для того чтобы избежать наложения спектра после умножения на комплексную экспоненту и перехода к реальному сигналу.

Отредактировал, "описки" поправил вроде все...

Сообщение отредактировал leksa - Apr 6 2009, 19:39


--------------------
A designer knows he has achieved perfection not when there is nothing left to add, but when there is nothing left to take away (Antoine de Saint-Exupery)
Go to the top of the page
 
+Quote Post
qxov
сообщение Apr 7 2009, 06:46
Сообщение #24


Частый гость
**

Группа: Свой
Сообщений: 86
Регистрация: 22-03-07
Из: Санкт-Петербург
Пользователь №: 26 406



Не вполне понятно, зачем это нужно. Быть может, более подробное описание проблемы в целом позволит найти элегантное её решение. Не исключено, что изначально выбран не самый лучший путь решения и лучше работать с комплексным сигналом?
Go to the top of the page
 
+Quote Post
Ykidia
сообщение Apr 8 2009, 15:59
Сообщение #25


Частый гость
**

Группа: Свой
Сообщений: 80
Регистрация: 3-08-06
Пользователь №: 19 287



С комплексными числами работаю при отображении спектра и вычислении всяких параметров. А для отображения на осциллоскопе хотелось бы иметь вещественные отсчеты (т.к. программа изначально была разработана для вещественного сигнала, потому и хочется при работе с платой АЦП, выдающей комплексные отсчеты, рисовать осциллоскоп, как и раньше).
Цитата
Вот и получается что выходной сигнал равен [I(0) -Q(1) -I(2) Q(3) ...] и так далее.

Т.е. вещественных отсчетов получается не в 2 раза больше, а столько же, сколько и комплексных? Я думал, что, если у меня 32-битные комплексные отсчеты (по 16 бит на I и Q), то итоговая вещественная последовательность по 16 бит займет столько же байт? Где я неправильно понял?
Go to the top of the page
 
+Quote Post
DRUID3
сообщение Apr 8 2009, 16:06
Сообщение #26


山伏
*****

Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294



Цитата(=GM= @ Apr 6 2009, 20:24) *
Не имеем. Отсчёты тупо вдвинутся с отрицательной стороны(:-).

??? wacko.gif куда если массив становится в 2-а раза больше?

Цитата(Ykidia @ Apr 8 2009, 18:59) *
С комплексными числами работаю при отображении спектра и вычислении всяких параметров. А для отображения на осциллоскопе хотелось бы иметь вещественные отсчеты (т.к. программа изначально была разработана для вещественного сигнала, потому и хочется при работе с платой АЦП, выдающей комплексные отсчеты, рисовать осциллоскоп, как и раньше).

Раз Вы выводите спектр - то уже работаете по-блочно. Что мешает применить предложенный мной способ!? 07.gif


Цитата(Ykidia @ Apr 8 2009, 18:59) *
Т.е. вещественных отсчетов получается не в 2 раза больше, а столько же, сколько и комплексных? Я думал, что, если у меня 32-битные комплексные отсчеты (по 16 бит на I и Q), то итоговая вещественная последовательность по 16 бит займет столько же байт? Где я неправильно понял?

все верно Вы поняли...


--------------------
Нас помнят пока мы мешаем другим...
//--------------------------------------------------------
Хороший блатной - мертвый...
//--------------------------------------------------------
Нет старик, это те дроиды которых я ищу...
Go to the top of the page
 
+Quote Post
Ykidia
сообщение Apr 8 2009, 16:28
Сообщение #27


Частый гость
**

Группа: Свой
Сообщений: 80
Регистрация: 3-08-06
Пользователь №: 19 287



Цитата
все верно Вы поняли...

Я про вышеописанное:
Цитата
Вот и получается что выходной сигнал равен [I(0) -Q(1) -I(2) Q(3) ...] и так далее.

Тут получается в 2 раза меньше байт?

Цитата
Раз Вы выводите спектр - то уже работаете по-блочно. Что мешает применить предложенный мной способ!?

Если Вы про FFT туда-сюда, то дело вот в чем. В приложении сделано так, что перед тем как делается вывод спектра, ожидается вывод осциллоскопа :-D, а предложенный Вами способ предполагает наоборот, значит, мне надо копаться и дергать за веревочки, а там где я работаю едва ли понимают, что такое копание в чужом коде и сколько на это может требоваться времени. Тем более нежелательно в результате дополнительного копания что-нибудь сломать, а это иногда бывает smile.gif, тогда приходится чинить и т.д.
Go to the top of the page
 
+Quote Post
Serg76
сообщение Apr 8 2009, 16:52
Сообщение #28


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



Цитата(qxov @ Apr 7 2009, 10:46) *
Не вполне понятно, зачем это нужно. Быть может, более подробное описание проблемы в целом позволит найти элегантное её решение. Не исключено, что изначально выбран не самый лучший путь решения и лучше работать с комплексным сигналом?

С комплексным сигналом однозначно работать лучше
Go to the top of the page
 
+Quote Post
DRUID3
сообщение Apr 8 2009, 17:08
Сообщение #29


山伏
*****

Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294



Цитата(Ykidia @ Apr 8 2009, 19:28) *
Я про вышеописанное:
...
Тут получается в 2 раза меньше байт?

Нужно думать не про байты, а про принцип. Сдвигу в частотной области соответствует умножение на комплексную экспоненту, leksa чертовски прав!!! Это кстати принцип написания алгоритма RealFFT, может кто не знал smile.gif . Но двигать то надо на Fs/2. Потому откуда там у него "0"-ли я тоже не догнал. Мож он перепутал со случаем когда частота дискретизации в 4-е раза выше макимальной частоты сигнала?

Цитата(Serg76 @ Apr 8 2009, 19:52) *
С комплексным сигналом однозначно работать лучше

...когда ты мастер рукопашного боя, то тебе легко убивать и табуреткой smile.gif ...


--------------------
Нас помнят пока мы мешаем другим...
//--------------------------------------------------------
Хороший блатной - мертвый...
//--------------------------------------------------------
Нет старик, это те дроиды которых я ищу...
Go to the top of the page
 
+Quote Post
Serg76
сообщение Apr 8 2009, 17:20
Сообщение #30


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



Цитата(DRUID3 @ Apr 8 2009, 21:08) *
...когда ты мастер рукопашного боя, то тебе легко убивать и табуреткой smile.gif ...

Я сказал это не применительно к этой задаче, а в общем rolleyes.gif
Go to the top of the page
 
+Quote Post

4 страниц V  < 1 2 3 4 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 21:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.01518 секунд с 7
ELECTRONIX ©2004-2016