Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как сделать digital down conversion I/Q сигнала ?
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
iradio
Имеется I/Q сигнал полученный с SDR приёмника. Нужно получить сдвинутый по частоте I/Q сигнал. Вопрос как это сделать ?
Dr.Alex
Очевидно, умножить на комплексную экспоненту.... :-о
BooZe
Если конкретнее, то умножить на сигнал вида cos(2*pi*f/fd*n)+i*sin(2*pi*f/fd*n), где n=0,1,2... - номер точек, f - частота несущей, fd - частота дискретизации. Затем - НЧ фильтрация.
Corner
Я так понимаю, под I/Q имеются в виду отсчеты АЦП взятые через 1?
В этом случае каждая компонента фильтруется отдельно до нужной полосы (обычно КИХ фильтрами), а потом "натягивается" на удобную несущую (умножается на её СИН/КОС) для дальнейшей обработки. Результирующая полоса равна двум полосам КИХ фильтра, с новой несущей посередине.
Михаил_K
Цитата(Corner @ Aug 17 2013, 21:39) *
Я так понимаю, под I/Q имеются в виду отсчеты АЦП взятые через 1?
В этом случае каждая компонента фильтруется отдельно до нужной полосы (обычно КИХ фильтрами), а потом "натягивается" на удобную несущую (умножается на её СИН/КОС) для дальнейшей обработки. Результирующая полоса равна двум полосам КИХ фильтра, с новой несущей посередине.

Неправильно вы понимаете. Под I/Q обычно имеются ввиду отсчеты, полученные путем одновременной оцифровки двумя АЦП, на которые сигнал подается с квадратурного смесителя.
Corner
Цитата(Михаил_K @ Sep 16 2013, 17:25) *
Неправильно вы понимаете. Под I/Q обычно имеются ввиду отсчеты, полученные путем одновременной оцифровки двумя АЦП, на которые сигнал подается с квадратурного смесителя.


Это практически тоже самое...
Михаил_K
Гхм.... Ну в принципе, если использовать такие отсчеты для "натягивания", то наверное можно считать это тем-же самым. Собственно, какая разница, что "натягивать" sm.gif
Corner
Цитата(Михаил_K @ Sep 20 2013, 16:29) *
Гхм.... Ну в принципе, если использовать такие отсчеты для "натягивания", то наверное можно считать это тем-же самым. Собственно, какая разница, что "натягивать" sm.gif

Если центр ПЧ лежит на Fs/4 результат идентичен. Практически АЦП и выполняет умножение с преобразованием в I/Q.
Михаил_K
Цитата(Corner @ Sep 20 2013, 22:13) *
Если центр ПЧ лежит на Fs/4 результат идентичен. Практически АЦП и выполняет умножение с преобразованием в I/Q.

Мдя, такой глупости даже не знаешь как и возразить-то...
Результат, дорогой вы наш, будет идентичен только для частоты Fs/4. А АЦП в своем УВХ выполняет умножение на дельта-функцию.
А люди, которые для получения I и Q c АЦП видимо не идиоты, раз все-таки ставят квадратурный смеситель, и потом 2 АЦП.
Ну а если уж и оцифровываются на ПЧ одним АЦП, и делят выборки на четные и нечетные, то для получения I/Q зачем-то ставят еще либо преобразователь Гильберта.
Видимо от темноты своей. Вы же их не просветили, что можно так не делать. Ресурсы понимаешь лишние тратят.
thermit
Если f0=fd/4 вполне можно и 1 ацп обойтись. Для сноса в 0 придется результат оцифровки умножать на exp(-j*pi/2*(0:inf)) что является тривиальным умножением на последовательности 1 0 -1 0 ... для получения синфазной и 0 -1 0 1 ... квадратурной компонент. Ну а потом фнч естественно...
Corner
Цитата(thermit @ Sep 23 2013, 14:53) *
Если f0=fd/4 вполне можно и 1 ацп обойтись. Для сноса в 0 придется результат оцифровки умножать на exp(-j*pi/2*(0:inf)) что является тривиальным умножением на последовательности 1 0 -1 0 ... для получения синфазной и 0 -1 0 1 ... квадратурной компонент. Ну а потом фнч естественно...


Или взять четыре отсчета: А0, А1, А2, А3.
Выровнять sin(x)/x;
I=A0-A2;
Q=A1-A3;
И следом 2*КИХ до нужной полосы.

А Гильберт пусть остается там где он есть. RIP
Михаил_K
Цитата(thermit @ Sep 23 2013, 14:53) *
Если f0=fd/4 вполне можно и 1 ацп обойтись. Для сноса в 0 придется результат оцифровки умножать на exp(-j*pi/2*(0:inf)) что является тривиальным умножением на последовательности 1 0 -1 0 ... для получения синфазной и 0 -1 0 1 ... квадратурной компонент. Ну а потом фнч естественно...

Совершенно верно. Но:
1. Это лишь частный случай
2. Квадратурные компоненты получаются после умножения, а не путем тупого разделения выборок на четные и нечетные!
3. Сначала производится умножение, а лишь потом фильтрация, и никак не наоборот!

Цитата(Corner @ Sep 23 2013, 18:58) *
I=A0-A2;
Q=A1-A3;

Сам-то понял, что написал?
KalashKS
Цитата(Михаил_K @ Sep 24 2013, 13:37) *
Сам-то понял, что написал?

Это еще более частный случай. С уже примененным скользящим средним на 4 отсчета и прореживанием в 4 раза. sm.gif
Corner

KalashKS, thermit a14.gif
KalashKS
Цитата(Corner @ Sep 24 2013, 20:21) *
KalashKS, thermit a14.gif

Но это все-таки не "отсчеты через 1" и тем более не "АЦП и выполняет умножение с преобразованием в I/Q".
Михаил_K
Цитата(KalashKS @ Sep 24 2013, 14:37) *
Это еще более частный случай. С уже примененным скользящим средним на 4 отсчета и прореживанием в 4 раза. sm.gif

Забыли, что помимо этого, и того что центральная частота равна Fs/4, так еще и перед АЦП фильтр ПОЛОСОВОЙ должен быть, чтобы после прореживания фигню не получить.
Очень такой частный случай получается. В жизни вот только не бывает таких....
KalashKS
Цитата(Михаил_K @ Sep 25 2013, 14:59) *
Забыли, что помимо этого, и того что центральная частота равна Fs/4, так еще и перед АЦП фильтр ПОЛОСОВОЙ должен быть, чтобы после прореживания фигню не получить.
Очень такой частный случай получается. В жизни вот только не бывает таких....

Можете конкретизировать ожидаемую фигню?
Upd: Хотя, если речь именно про вариант Corner'а, то да, скользящее среднее на 4 отсчета может и не отфильтровать нормально до прореживания.
thermit
Цитата
Михаил_K:
Забыли, что помимо этого, и того что центральная частота равна Fs/4, так еще и перед АЦП фильтр ПОЛОСОВОЙ должен быть, чтобы после прореживания фигню не получить.
Очень такой частный случай получается. В жизни вот только не бывает таких....



Фильтр перед ацп должен быть в любом случае вне зависимости от частоты несущей. Другое дело, что пч и частота дискретизации могут быть выбраны так, что при оцифровке пч превратится в fd/4...
Corner
Если переда АЦП стоит фильтр, ограничивающий полосу до одной зоны Найквиста (не важно какой, лишь бы АЦП адекватно воспринимал такие частоты), то никакой "фигни" не будет. Просто надо перед вычитанием сделать коррекцию sin(x)/x. А то на краях зоны после вычитания сигнал уйдет в 0. Еще надо учесть что в зонах 2, 4... происходит инверсия боковой полосы, а в 1, 3... не происходит. У меня первый смеситель Flo-Frf поэтому я использую 3*Fs/4 середину ПЧ. Два раза инвертируя боковые полосы.
KalashKS
Цитата(Corner @ Sep 28 2013, 13:34) *
Если переда АЦП стоит фильтр, ограничивающий полосу до одной зоны Найквиста (не важно какой, лишь бы АЦП адекватно воспринимал такие частоты), то никакой "фигни" не будет. Просто надо перед вычитанием сделать коррекцию sin(x)/x. А то на краях зоны после вычитания сигнал уйдет в 0. Еще надо учесть что в зонах 2, 4... происходит инверсия боковой полосы, а в 1, 3... не происходит. У меня первый смеситель Flo-Frf поэтому я использую 3*Fs/4 середину ПЧ. Два раза инвертируя боковые полосы.

У вас после скользящего среднего на 4 отсчета составляющие спектра давятся не более чем на 10 дБ, а наложение после прореживания происходит вообще на уровне -4 дБ. Ваша схема нормально работает только с очень узкополосными сигналами (полоса порядка пары процентов частоты дискретизации и наложения после прореживания не более -25 дБ).
Corner
Цитата(KalashKS @ Sep 30 2013, 12:25) *
У вас после скользящего среднего на 4 отсчета составляющие спектра давятся не более чем на 10 дБ, а наложение после прореживания происходит вообще на уровне -4 дБ. Ваша схема нормально работает только с очень узкополосными сигналами (полоса порядка пары процентов частоты дискретизации и наложения после прореживания не более -25 дБ).


Нет у меня скользящего среднего. Только прореживание на 4. При Fs=125 МГц ПЧ=93,75 МГц и цифровой полосе 31,25 МГц (аналоговый фильтр режет ~20 МГЦ полосу). Я получаю 4 фазы относительно частоты оцифровки 31,25: 0, 90, 180 и 270. Делаю коррекцию sin(x)/x и вычитаю 0-180 и 90-270.
Получаю I и Q каждое с полосой 0... 15,625 МГц, но использую только 0... 7,8125 МГц. Остальное дорезаю с помощью БИХ. Общая полоса таким образом 15,625 МГц. Изоляция двух несущих OFDM (любых двух в ортогональной сетке) около 70 дБ. Полоса 12,5 % - далеко не единицы...
KalashKS
Цитата(Corner @ Sep 30 2013, 18:56) *
Нет у меня скользящего среднего. Только прореживание на 4. При Fs=125 МГц ПЧ=93,75 МГц и цифровой полосе 31,25 МГц (аналоговый фильтр режет ~20 МГЦ полосу). Я получаю 4 фазы относительно частоты оцифровки 31,25: 0, 90, 180 и 270. Делаю коррекцию sin(x)/x и вычитаю 0-180 и 90-270.
Получаю I и Q каждое с полосой 0... 15,625 МГц, но использую только 0... 7,8125 МГц. Остальное дорезаю с помощью БИХ. Общая полоса таким образом 15,625 МГц. Изоляция двух несущих OFDM (любых двух в ортогональной сетке) около 70 дБ. Полоса 12,5 % - далеко не единицы...

Ваши 0-180 и 90-270 математически эквивалентны домножению на комплексную экспоненту и последующему скользящему среднему на 4 отсчета.
Набросал тут код в матлабе:
CODE
x=exp(1i*pi*(random('unid',2,53,100)-1));
data=cat(1,x(27:end,sm.gif,zeros(256-53,100),x(1:26,sm.gif); %распределение амплитуд по несущим
data=ifft(data);
data=cat(1,data(end-15:end,sm.gif,data); %защитный интервал
data=reshape(data,1,numel(data)); %реорганизация массива в последовательность отсчетов
data=real(data.*exp(1i*pi/2*(0:length(data)-1))); %перенос на ПЧ
y=data(1:4:end)-data(3:4:end)-1i*(data(2:4:end)-data(4:4:end)); %сброс на нулевую частоту
y=(buffer(y,68)); %разделение на символы
y=fft(y(5:end,sm.gif);
y=fftshift(y,1);
y=y(7:59,sm.gif; %выделение принятых амплитуд
plot(-26:26,angle(y(:,1)./x(:,1))) %построение ФЧХ

Код генерит OFDM сигнал на несущей 1/4 частоты дискретизации с соотношением параметров, близким к вашему, после чего сбрасывает его в ноль вашим методом. Наложения проявляются в виде рваной ФЧХ полученной системы. Про -4 дБ я, возможно погорячился, а вот указанные -11 дБ вполне себя проявляют. Ну и, как ожидалось, чем ближе к нулевой частоте, тем наложения меньше.
Код простой, буду благодарен, если укажете мне мою ошибку.
Corner
Цитата(KalashKS @ Sep 30 2013, 20:47) *
Ваши 0-180 и 90-270 математически эквивалентны домножению на комплексную экспоненту и последующему скользящему среднему на 4 отсчета.
Набросал тут код в матлабе:
CODE
x=exp(1i*pi*(random('unid',2,53,100)-1));
data=cat(1,x(27:end,sm.gif,zeros(256-53,100),x(1:26,sm.gif); %распределение амплитуд по несущим
data=ifft(data);
data=cat(1,data(end-15:end,sm.gif,data); %защитный интервал
data=reshape(data,1,numel(data)); %реорганизация массива в последовательность отсчетов
data=real(data.*exp(1i*pi/2*(0:length(data)-1))); %перенос на ПЧ
y=data(1:4:end)-data(3:4:end)-1i*(data(2:4:end)-data(4:4:end)); %сброс на нулевую частоту
y=(buffer(y,68)); %разделение на символы
y=fft(y(5:end,sm.gif);
y=fftshift(y,1);
y=y(7:59,sm.gif; %выделение принятых амплитуд
plot(-26:26,angle(y(:,1)./x(:,1))) %построение ФЧХ

Код генерит OFDM сигнал на несущей 1/4 частоты дискретизации с соотношением параметров, близким к вашему, после чего сбрасывает его в ноль вашим методом. Наложения проявляются в виде рваной ФЧХ полученной системы. Про -4 дБ я, возможно погорячился, а вот указанные -11 дБ вполне себя проявляют. Ну и, как ожидалось, чем ближе к нулевой частоте, тем наложения меньше.
Код простой, буду благодарен, если укажете мне мою ошибку.

Я не собираюсь искать ошибку ибо -70 дБ намерено на живом устройстве методом пропуска поднесущей: убираем одну поднесущую и смотрим уровень помех в ее полосе. Причем эти -70 дБ рождает аналоговый тракт+АЦП.
KalashKS
Цитата(Corner @ Oct 8 2013, 20:20) *
Я не собираюсь искать ошибку ибо -70 дБ намерено на живом устройстве методом пропуска поднесущей: убираем одну поднесущую и смотрим уровень помех в ее полосе. Причем эти -70 дБ рождает аналоговый тракт+АЦП.

Дело ваше.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.