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

eteP

Свой
  • Постов

    49
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о eteP

  • Звание
    Участник
    Участник

Контакты

  • ICQ
    Array

Посетители профиля

885 просмотров профиля
  1. Это просто классическое квадратурное детектирование путем домножения на sin(wt) и cos(wt) с последующим low pass FIR filter или что то другое? Извените что долго не отвечал, был очень занят. Делается это так. Разрабатывается lowpass FIR с частатой среза Fc. Имеем его коэффициенты K(n). Далее из этого фильтра получаем пару Hilbert FIR фильтров. Для этого применяем quadrature bandpass transform. Ksin(n) = 2*K(n)*sin(2*pi*n*F/Fs) Kcos(n) = 2*K(n)*cos(2*pi*n*F/Fs) Где, F - это центральная частота и от нее +-Fc. Fs - это частота семплирования. Т.е. получается два Bandpass FIR фильтра с одинаковыми (почти) характеристиками. Между двумя выходами имеем 90 градусов. Ввиду того что не всегда можно получить одинаковые характеристики, то можно к примеру сделать усреднение углов и уже среднее брать как более точную величину. Ну а дальше вы можете делать все что вам захочится. Задержка фильтра известа, фаза ленейна от частоты. И узнать в какой фазе пришел сигнал не составит большого труда. Минусы в этой системе это два фильтра придется реализовать и тайм-летенси может быть большим. Другой вариант на IIR фильтрах. Разрабатываем lowpass IIR с частатой среза Fc. Переходим в z-плоскость. На ней имеем комплексносопряженные нули и полюса. Зная что в этой плоскости: угол 0 соотвествует частоте 0 90 градусов (против часовой стрелки) Fs/4 180 - Fs/2 270 - 3*Fs/4 Где Fs - частота семплирования. Делаем простую вещь. Поварачиваем каждый ноль и полюсь на угол = 360 * F/Fs где F - центральная частота нашего будущего bandpass фильтра. После поворота получили новые коэффициенты фильтра которые теперь комплексные. То есть у нас комплексный фильтр. Который имеет один вход и два выхода. В реализации это будет выглядить как два bandpass IIR фильтра c полосой 2Fc и между выходами ровно 90 градусов (комплексное число на выходе) Проблемы: все которые имеет IIR фильтр Если нужно что бы фаза была линейна от частоты, то дальше я вижу пока два варианта решения. 1. Приминить allpass фильтр и уже им скорректированть груповую задержку. 2. Это просто таблица. Где к примеру угол это адрес памяти по которому лежит число на какой угол нужно сделать поворот. Ну а если частоты или частота фиксирована, то это займет не много памяти.
  2. Посмотрите эту статью. Можно зайти на сайт GlobalDSP Стастья за декабрь 2003 года -> Algorithms (Fast, Continuous, Sine Wave Generator) Судя по статье, результаты не плохие. Там же есть пример кода на DSP. Успехов.Pages_from_GlobalDSP_December2003.pdf
  3. Можно попробывать так. Если я правильно понял вашу задачу. Разрабатываете два бандпас ФИР фильтра на вашу частоту. Один делает косинус преобразование, другой синус преобразовние. На выходе у вас будет сигнал I and Q. Вот вам и угол. Задержа фильтра известна, ее можно учесть. Угол между соседними векторами и есть ваша частота. Вом она тоже известна. Так что вычислисть начальную фазу не составит большого труда. Можно потом еще среднее считать для увеличения точности. Тоже самое но другим путем. Ставится один фильтр который выделит вашу частоту уберет шум из сигнала (шума должно быть как-можно меньше :) ). Зная частоту сигнала и частоту сэмплирования подготавливаются две таблицы косинуса и синуса на периуд. Сигнал после фильтра умножается на две эти таблицы и суммируется. Получаем два числа -> вектор. Угол начальная фаза.
  4. Если вам нужны дополнительные задержки, то я видел статью от ксала, где они рекомендуют использовать последовательно соединенные мультиплексоры.
  5. synplifyем синтезируется это я проверил конечно, спасибо. Но вот XST не берет, а я работаю с ним. А как быть, к примеру простой алгоритм: Берем данный с АЦП, умножаем на какой-то гейн (который может задавать юзер) и выдаем в ЦАП. Если возникает переполнение при умножении, то на вход ЦАП надо выставить максимальное значение (для отрицательных минимальное). С АЦП приходят данные допустим в формате 0.0000 (+-1 макс). Гейн в формате 000.00 (+-3.75 макс). А ЦАП результат в формате 0.0000 (+-1 макс). Для единственного случая можно сделать самим логику котрая будет следить за переполнением для конкретного случая. Но это не единственный проект. Или, захотелось поминять формат гейна. Тогда опять весь код править и проверять? В связи с этим и был задан вопрос. Наверника каждый сталкивается с подобным и было бы не плохо иметь синтезируемую библиотеку. И что интерестно не могу найти внятного описания как работать с fixed-point включая переполнения. Если посоветуете что почитать по этому поводу, а лучше бы ссылку, то большое спасибо от меня.
  6. Не синтезируется этот пакет. ========================================================================= * HDL Analysis * ========================================================================= Analyzing Entity <test> (Architecture <test_arch>). ERROR:Xst:1548 - "C:/My_Designs/fixedpoint/fixedpoint/synthesis/./../src/test.vhd" line 19: Negative range in type of signal <v2> is not supported. где v2 объявлен: signal v2: sfixed(3 downto -4);
  7. Для синтеза. Ее как раз сейчас и тестирую. Но Active-HDL ругается при компиляции. Убрал все что ему не нравится. Вроде работает. Работает она без ошибок или как? Вы ее пользовали? Спасибо.
  8. Не могу ни как найти готовую библиотеку или пакет для работы с fixed-point на VHDL. Нужны простые вычисления: *,/,+,- Может есть у кого? Спасибо.
  9. А разве DCM in Virtex II может залочить 25 МГц? Вроде как минимум у него 28 МГц. Я могу ошибаться, завтра гляну в даташит. И еще иногда бывают проблемы, если стоит опция duty cycle correction. Если вам это не кретично, то лучше убрать. Иногда DCM не стартует. Бывает очень редко, но бывает. Может у меня борт кривой или еще что, но случается.
  10. Еще один вопрос. Сгрузил с фтп Riviera 2004.08. Скоплировал simprim and unisim без проблем, а вот когда компилирую xilinxcorelib выдает ошибку: Error: COMP96_0529: xilinxcorelib\src\c_compare_v8_0.vhd : (351, 28): Condition in a generation scheme must be a static expression. У кого есть готовая библиотека выложите на фтп или подскажите плз. как эту ошибку избежать. ISE 7.1.02i IP Update 1 спасибо.
  11. Да. Вообщем когда я создал тестбенч и запустил его, то все нормально работает. А если тестировать эту-же модель но стимулировать из waveform, то не хочет.
  12. Я так понимаю, что ни кто тайминг симуляцию с помощью софта от альдека не делает?
  13. Взял вашу первую схему. Посмотрел после синтеза RTL schematic, все нормально. Ну кроме того что CLKIN_IBUFG_OUT идет на выход. Сделал Implementation все ок. Дела все под альдеком, но синтезил и разводил с помощью ISE 7.1
  14. Сталкнулся с такой проблемой в Active-HDL симуляторе. Написал компонент на VHDL. Хочу его прогнать в тайменг симуляции. Синтезирую с XST ставлю опцию добавить входные выходные буфера. (Xilinx Specific -> Add I/O Buffers). Дальше в Implementation Options -> Translate -> Create I/O Pads from Ports и использую Default UCF File. После Implementation получаю файл TIME_SIM.VHD. Запускаю на симуляцию, прикручиваю стимулы к входным сигналам. Ставлю на вход данных все 1-ки, на выходе входного триггера вижу ХХХХХ. Тот же файл симулирую в модельсиме, все нормально. Ну надоело туда сюда переключаться, в чем может быть проблема? Может кто сталкивался
  15. Сдается мне, судя по описанию, вы в Design Flow -> Flow Settings поставили в HDL Synthesis -> Xilinx ISE 6.1 Synthesys and Implimatation. По этому у вас открывается ISE. А если выставить в HDL Synthesis -> Xilinx ISE 6.1 XST VHDL/Verilog, а чуть ниже в Implemenatition -> Xilinx ISE 6.1, то все будет чики поки:) Да, еще перед тем как делать симуляцию в Design Flow есть кнопочка Options. Не забывайте там настроики сделать. Если я правильно понял проблему. Успехов.
×
×
  • Создать...