Перейти к содержанию
    

"враг" в DDC

Помогите, пожалуйста, разобраться:

Необходимо перенести сигнал с IF=15MГц в baseband. Переношу с помощью смесителя на основе алгоритма CORDIC. Сама написать VHDL-код для него я не осилила, поэтому использую чужой, успешно опробованный в других проектах. Код работает, сигнал смещается, но на графике FFT смещенного сигнала в матлабе на частоте -15МГц присутствует пик, точно на частоте осциллятора.

Что это такое? Как этого избежать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Помогите, пожалуйста, разобраться:

Необходимо перенести сигнал с IF=15MГц в baseband. Переношу с помощью смесителя на основе алгоритма CORDIC. Сама написать VHDL-код для него я не осилила, поэтому использую чужой, успешно опробованный в других проектах. Код работает, сигнал смещается, но на графике FFT смещенного сигнала в матлабе на частоте -15МГц присутствует пик, точно на частоте осциллятора.

Что это такое? Как этого избежать?

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Возможно будет не понятно, что имел ввиду Oldring. Поясню. Фильтровать нужно постоянную составляющую до того, как подаете сигнал на смеситель.

Как это сделать, посмотреть можно здесь

http://electronix.ru/forum/index.php?act=S...f=2&t=54351

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо.

Если это часть входного, почему ее нет на FFT сигнала, перенесенного в Матлабе умножением на синус (signal*e^(-jwt))?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо.

Если это часть входного, почему ее нет на FFT сигнала, перенесенного в Матлабе умножением на синус (signal*e^(-jwt))?

добавьте в матлабе постоянную составляющую к исходному сигналу и она будет

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Простите, но не понимаю я: на вход Сordic смесителя я подаю сигнал из Матлаб программы, сигнал, в котором нет этой составляющей (на спектре ее нет). Она появляется только после смещения на VHDL.

Занимаюсь ЦОС только 4 месяца, не судите строго :unsure:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Простите, но не понимаю я: на вход Сordic смесителя я подаю сигнал из Матлаб программы, сигнал, в котором нет этой составляющей (на спектре ее нет). Она появляется только после смещения на VHDL.

Занимаюсь ЦОС только 4 месяца, не судите строго :unsure:

 

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

 

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

 

- при преобразовании float -> int делают так:

1. int = ( (1<<(N-1)) - 1 )*float, где N - число бит всего в целочисленном представлении сигнала.

2. Иногда еще к этому произведению добавляют 0.5 для округления обрезанием :)

3. в том и другом случае int_max + int_min == -1, т.е. сумма отсчетов синусоиды за период может быть не равна нулю.

Причем чем меньше амплитуда сигнала, равно как и маленькая разрядность числа (N) , тем больше может быть уровень постоянной составляющей.

 

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

 

Далее... кордик... тоже вестч в себе:

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

- Несколько помогает округление: xx <= x - ( (y + (1<<(n-1))) >>> n);

- dithering помогает хорошо, но надо хорошо посмотреть на выход. У меня, на первой реализации кордика получился плохой дизер и поползла постоянная составляющая. А она, умножаясь на синус сигнала дает палку в спектре выходного сигнала.

 

 

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

 

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

 

Из опыта лишь могу добавить, что в случае большого усиления после смесителя, мне пришлось для избавления от постоянной составляющей (-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]);

т.е. отрицательные числа округлять, а положительные не трогать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо всем за скорую помощь, я - бестолочь. =)

Я симулировала 1 мкс, а входных данных хватало на 300 нс. Поэтому в оставшееся время смеситель обрабатывал нули, генерируя на выходе синусоиду. Отсюда и "палка".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...