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

 
 
> "враг" в DDC
pirri
сообщение Nov 11 2009, 19:48
Сообщение #1





Группа: Участник
Сообщений: 7
Регистрация: 17-07-09
Из: Nьrnberg
Пользователь №: 51 349



Помогите, пожалуйста, разобраться:
Необходимо перенести сигнал с IF=15MГц в baseband. Переношу с помощью смесителя на основе алгоритма CORDIC. Сама написать VHDL-код для него я не осилила, поэтому использую чужой, успешно опробованный в других проектах. Код работает, сигнал смещается, но на графике FFT смещенного сигнала в матлабе на частоте -15МГц присутствует пик, точно на частоте осциллятора.
Что это такое? Как этого избежать?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Oldring
сообщение Nov 12 2009, 03:32
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(pirri @ Nov 11 2009, 22:48) *
Помогите, пожалуйста, разобраться:
Необходимо перенести сигнал с IF=15MГц в baseband. Переношу с помощью смесителя на основе алгоритма CORDIC. Сама написать VHDL-код для него я не осилила, поэтому использую чужой, успешно опробованный в других проектах. Код работает, сигнал смещается, но на графике FFT смещенного сигнала в матлабе на частоте -15МГц присутствует пик, точно на частоте осциллятора.
Что это такое? Как этого избежать?


Перенесенная постоянная составляющая вхордного сигнала. Отфильтровать.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
pirri
сообщение Nov 12 2009, 07:24
Сообщение #3





Группа: Участник
Сообщений: 7
Регистрация: 17-07-09
Из: Nьrnberg
Пользователь №: 51 349



Спасибо.
Если это часть входного, почему ее нет на FFT сигнала, перенесенного в Матлабе умножением на синус (signal*e^(-jwt))?
Go to the top of the page
 
+Quote Post
bahurin
сообщение Nov 12 2009, 08:13
Сообщение #4


Местный
***

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



Цитата(pirri @ Nov 12 2009, 10:24) *
Спасибо.
Если это часть входного, почему ее нет на FFT сигнала, перенесенного в Матлабе умножением на синус (signal*e^(-jwt))?

добавьте в матлабе постоянную составляющую к исходному сигналу и она будет
Go to the top of the page
 
+Quote Post
pirri
сообщение Nov 12 2009, 10:41
Сообщение #5





Группа: Участник
Сообщений: 7
Регистрация: 17-07-09
Из: Nьrnberg
Пользователь №: 51 349



Простите, но не понимаю я: на вход Сordic смесителя я подаю сигнал из Матлаб программы, сигнал, в котором нет этой составляющей (на спектре ее нет). Она появляется только после смещения на VHDL.
Занимаюсь ЦОС только 4 месяца, не судите строго unsure.gif
Go to the top of the page
 
+Quote Post
diwil
сообщение Nov 12 2009, 12:10
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 366
Регистрация: 5-09-06
Из: Санкт-Петербург
Пользователь №: 20 107



Цитата(pirri @ Nov 12 2009, 13:41) *
Простите, но не понимаю я: на вход Сordic смесителя я подаю сигнал из Матлаб программы, сигнал, в котором нет этой составляющей (на спектре ее нет). Она появляется только после смещения на VHDL.
Занимаюсь ЦОС только 4 месяца, не судите строго unsure.gif


А вычисления потом целочисленные или в плавающей точке?

Если целочисленные, ибо кордик, то тогда так (наверное smile.gif ) :

- при преобразовании float -> int делают так:
1. int = ( (1<<(N-1)) - 1 )*float, где N - число бит всего в целочисленном представлении сигнала.
2. Иногда еще к этому произведению добавляют 0.5 для округления обрезанием smile.gif
3. в том и другом случае int_max + int_min == -1, т.е. сумма отсчетов синусоиды за период может быть не равна нулю.
Причем чем меньше амплитуда сигнала, равно как и маленькая разрядность числа (N) , тем больше может быть уровень постоянной составляющей.

Значит, на входе может быть постоянная составляющая, котороая, будучи умноженной на синус даст синус.

Далее... кордик... тоже вестч в себе:
- Операция x <= x - (y>>>n); (n - номер шага кордика) на каждом шаге дает ошибку, равно как и умножение на 0.60725... В самом простом случае вылезут спуры и их будет тем больше, чем меньше разрядность. Причем это не те спуры, которые получаются при табличной реализации синуса. Следовательно надо сначала проверить какие они и посмотреть какие комбинаторные составляющие они могут дать.
- Несколько помогает округление: xx <= x - ( (y + (1<<(n-1))) >>> n);
- dithering помогает хорошо, но надо хорошо посмотреть на выход. У меня, на первой реализации кордика получился плохой дизер и поползла постоянная составляющая. А она, умножаясь на синус сигнала дает палку в спектре выходного сигнала.


В плавающей точке, наверное, могут наблюдаться те же эффекты...

Только вопрос - ну видна палка на частоте гетеродина, ну и что? Если сигнал переносится в частоту ноль (или около того), то точно совершенно его полоса меньше частоты IF. На выходе уже перенесенный сигнал отфильтровать в своей полосе и счастье будет рядом smile.gif

Из опыта лишь могу добавить, что в случае большого усиления после смесителя, мне пришлось для избавления от постоянной составляющей (-120дБ от уровня сигнала... я, типа, извращенец) всякими хитрыми способами переделывать округления промежуточных результатов, использовать округление в кордике и делать смещенное округление в первом фильтре как:
Код
assign out_i = (x3_i[DON-1-COMB_RID_3] == 1'b0) ?  (x3_i[DON-1-COMB_RID_3 : DON-COMB_RID_3-DDA] + x3_i[DON-COMB_RID_3-DDA-1]) : (x3_i[DON-1-COMB_RID_3 : DON-COMB_RID_3-DDA]);// - x3_i[DON-COMB_RID_3-DDA-1]);
assign out_q = (x3_q[DON-1-COMB_RID_3] == 1'b0) ?  (x3_q[DON-1-COMB_RID_3 : DON-COMB_RID_3-DDA] + x3_q[DON-COMB_RID_3-DDA-1]) : (x3_q[DON-1-COMB_RID_3 : DON-COMB_RID_3-DDA]);// - x3_q[DON-COMB_RID_3-DDA-1]);

т.е. отрицательные числа округлять, а положительные не трогать.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st June 2025 - 22:51
Рейтинг@Mail.ru


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