|
|
 |
Ответов
(15 - 29)
|
Apr 4 2009, 07:20
|
Профессионал
    
Группа: Свой
Сообщений: 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 (без разницы)
|
|
|
|
|
Apr 4 2009, 11:21
|

山伏
    
Группа: Свой
Сообщений: 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. Цитата(Ykidia @ Apr 3 2009, 17:50)  Спасибо. неее...давайте 50$... P.S.: временнОй метод с преобразованием Гильберта тоже проканает, при отвратительном результате для "0"-й частоты. Просто мне частотные методы "ближе"...
--------------------
Нас помнят пока мы мешаем другим... //-------------------------------------------------------- Хороший блатной - мертвый... //-------------------------------------------------------- Нет старик, это те дроиды которых я ищу...
|
|
|
|
|
Apr 4 2009, 13:08
|
Местный
  
Группа: Участник
Сообщений: 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
|
|
|
|
|
Apr 6 2009, 01:32
|
Частый гость
 
Группа: Свой
Сообщений: 80
Регистрация: 3-08-06
Пользователь №: 19 287

|
Цитата какой именно обработки? Выше указали их много... Я имел в виде эту обработку: Цитата Распространённый вариант получения квадратур, через Digital Down Converter (DDC), как правило, выдает комплексный сигнал со спектром, сосредоточеным вокруг нулевой частоты. В этом случае самый быстрый алгоритм получения вещественного сигнала описан в мануале на HSP50016 (Intersil). Суть алгоритма - перенос комплексного сигнала на центральную частоту Fs/4 и взятие реальной части. Если всё это расписать, то проще не бывает Именно о ней шла речь с отсылом к мануалу HSP50016, в котором раздел Quadrature to real мне как следует и непонятен. DRUID3Вариант сделать это через FFT туда-сюда, к сожалению, мне не подходит из-за специфично написанного приложения, в котором я ковыряюсь, чтобы добавить в него поддержку комплексного сигнала с платы АЦП. 729Цитата Затем обе квадратуры надо пропустить через ФНЧ с полосой пропускания Fs (Fs - частота дискретизации до вставления нулей). Понятен ли этот момент? Без понимания сего дальше будет трудно. Если не совсем понятен, то напишите. Извиняюсь, но и в самом деле не совсем понятен...
|
|
|
|
|
Apr 6 2009, 15:23
|
Местный
  
Группа: Участник
Сообщений: 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
|
|
|
|
|
Apr 6 2009, 18:58
|
Участник

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

|
Пример в помощь  (обсуждаемый алгоритм на языке матлаба):
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)
|
|
|
|
|
Apr 8 2009, 15:59
|
Частый гость
 
Группа: Свой
Сообщений: 80
Регистрация: 3-08-06
Пользователь №: 19 287

|
С комплексными числами работаю при отображении спектра и вычислении всяких параметров. А для отображения на осциллоскопе хотелось бы иметь вещественные отсчеты (т.к. программа изначально была разработана для вещественного сигнала, потому и хочется при работе с платой АЦП, выдающей комплексные отсчеты, рисовать осциллоскоп, как и раньше). Цитата Вот и получается что выходной сигнал равен [I(0) -Q(1) -I(2) Q(3) ...] и так далее. Т.е. вещественных отсчетов получается не в 2 раза больше, а столько же, сколько и комплексных? Я думал, что, если у меня 32-битные комплексные отсчеты (по 16 бит на I и Q), то итоговая вещественная последовательность по 16 бит займет столько же байт? Где я неправильно понял?
|
|
|
|
|
Apr 8 2009, 16:06
|

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

|
Цитата(=GM= @ Apr 6 2009, 20:24)  Не имеем. Отсчёты тупо вдвинутся с отрицательной стороны(:-). ???  куда если массив становится в 2-а раза больше? Цитата(Ykidia @ Apr 8 2009, 18:59)  С комплексными числами работаю при отображении спектра и вычислении всяких параметров. А для отображения на осциллоскопе хотелось бы иметь вещественные отсчеты (т.к. программа изначально была разработана для вещественного сигнала, потому и хочется при работе с платой АЦП, выдающей комплексные отсчеты, рисовать осциллоскоп, как и раньше). Раз Вы выводите спектр - то уже работаете по-блочно. Что мешает применить предложенный мной способ!? Цитата(Ykidia @ Apr 8 2009, 18:59)  Т.е. вещественных отсчетов получается не в 2 раза больше, а столько же, сколько и комплексных? Я думал, что, если у меня 32-битные комплексные отсчеты (по 16 бит на I и Q), то итоговая вещественная последовательность по 16 бит займет столько же байт? Где я неправильно понял? все верно Вы поняли...
--------------------
Нас помнят пока мы мешаем другим... //-------------------------------------------------------- Хороший блатной - мертвый... //-------------------------------------------------------- Нет старик, это те дроиды которых я ищу...
|
|
|
|
|
Apr 8 2009, 16:28
|
Частый гость
 
Группа: Свой
Сообщений: 80
Регистрация: 3-08-06
Пользователь №: 19 287

|
Цитата все верно Вы поняли... Я про вышеописанное: Цитата Вот и получается что выходной сигнал равен [I(0) -Q(1) -I(2) Q(3) ...] и так далее. Тут получается в 2 раза меньше байт? Цитата Раз Вы выводите спектр - то уже работаете по-блочно. Что мешает применить предложенный мной способ!? Если Вы про FFT туда-сюда, то дело вот в чем. В приложении сделано так, что перед тем как делается вывод спектра, ожидается вывод осциллоскопа :-D, а предложенный Вами способ предполагает наоборот, значит, мне надо копаться и дергать за веревочки, а там где я работаю едва ли понимают, что такое копание в чужом коде и сколько на это может требоваться времени. Тем более нежелательно в результате дополнительного копания что-нибудь сломать, а это иногда бывает  , тогда приходится чинить и т.д.
|
|
|
|
|
Apr 8 2009, 17:08
|

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

|
Цитата(Ykidia @ Apr 8 2009, 19:28)  Я про вышеописанное: ... Тут получается в 2 раза меньше байт? Нужно думать не про байты, а про принцип. Сдвигу в частотной области соответствует умножение на комплексную экспоненту, leksa чертовски прав!!! Это кстати принцип написания алгоритма RealFFT, может кто не знал  . Но двигать то надо на Fs/2. Потому откуда там у него "0"-ли я тоже не догнал. Мож он перепутал со случаем когда частота дискретизации в 4-е раза выше макимальной частоты сигнала? Цитата(Serg76 @ Apr 8 2009, 19:52)  С комплексным сигналом однозначно работать лучше ...когда ты мастер рукопашного боя, то тебе легко убивать и табуреткой  ...
--------------------
Нас помнят пока мы мешаем другим... //-------------------------------------------------------- Хороший блатной - мертвый... //-------------------------------------------------------- Нет старик, это те дроиды которых я ищу...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|