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

tocha

Свой
  • Постов

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

  • Посещение

Сообщения, опубликованные tocha


  1. IRFFT как бы прилагается к RFTP в качестве обратной функции, а потому желательно, чтобы они были "от одного производителя". Лучше поищите вы в том же месте, где нашли прямую RFFT.

     

    Тут есть один нюанс:...

    Надо для 32-bit fixed point, коеффициенты - в табличке. Вопросы масштабирования пока не волнуют. Будем искать....Вам спасибо за ответ, Ксения.

  2. На практике же куда больший интерес представляет вычисление вдвое более длинной функции, чем двух отрезков разных функций обычной длины. И вот тут был сделан остроумный ход. Исходную функцию, длиной 2*N, режут пополам и получают FFT-преобразование ее обеих половин за один проход FFT так, как будто это были две разные функции. Потом восстанавливают результат для каждой из них сложением и вычитанием зеркальных половин. И, наконец, делают последнюю "бабочку" FFT-преобразования над этими половинками, получая FFT-результат на всю длину массива (2*N).

    Именно так и сделал.

     

    Обратное преобразование IRFFT устроено подобным же образом. Там тоже складывают пополам и прокручивают вместе на мясорубке за один проход :). Самое простое - не вникать во все эти премудрости, а взять готовый код. А то мне вникать пришлось, когда была задача написать RFFT и IRFFT на ассемблере x87, чтобы все расчеты были на регистрах сопроцессора и никакого другого обращения к памяти, кроме массива, не было. Как вспомню, так вздрогну :).

    А теперь хочу сделать это (IRFFT), то есть irfft симметричного комплексного сигнала у которого будет реальный выход. Макимально эффективно с точки зрения вычислительных затрат.

    Если можете ткнуть в готовый код, буду благодарен (в пятницу навскидку не нашёл - может плохо искал...).

    То есть, если я правильно понял, вы такое (IRFFT) делали: обратное преобразование симметричного сигнала длиной 2*N с помощью N-point ICFFT плюс немного вычислений и этим самым экономили ресурсы? Если скажете да, буду тоже благодарен.

     

     

  3. Делая FFT для реального сигнала длиной 2*N, мы получаем комплексный результат, причём выход имеет complex-conjugate симметрию. И реализовать его можно через комплексное FFT длиной N + небольшие манипуляции и на этом сэкономить вычислительные ресурсы.

    Нужно сделать обратное преобразовние IFFT для комплексного входа длиной 2*N, который имеет свойство complex-conjugate симметрии. Соответствено результат будет реальным.

    Правильно то, шо если мы сделали RFFT длиной 2*N упрощённым методом(CFFT длиной N), то и complex conjugate IFFT длиной 2*N мы можем вычислить через FFT длиной N?

     

     

     

  4. Я очень сомневаюсь, что вы найдете спеца имеющего опыт работы с DSP от CEVA на территроии СНГ.

    А чем не устраивает переход с Blackfin на TigerSharc. Или С6000, ну или MSC81x.

    По этим платформам пока еще можно найти вменяемых спецов с опытом.

    Или оутсорсте в Индию.

    Есть такие

  5. В шину GMII (или SerDes) к 1Gbps потоку надо подмешать низкоскоростной TDM трафик (пока 2 Е1).

     

    Думаю это сделать так: из микросхемы Gigabit Ethernet Switch-a выходит поток SGMII (10-ти битный поток с частотой 125МГц). Его хочу пропустить через FPGA: PLLкой немного повысить частоту и подмешать к нему низкоскоростной PDH траффик. Далее преобразовать в SerDes и скормить оптическому SFP модулю.

     

    Кто-нибудь делал подобное? Возможно ли это? Или как-нибудь по другому это лучше делать?

    Передают на уровне IP, так и называется tdm over ip

    http://en.wikipedia.org/wiki/TDMoIP

  6. А.. , так у вас притензии к Performance Analyzer-у Keil-а. :biggrin:

    Смотрите описание команды командной строки Keil-а - PerformanceAnalyze

    Открываю mVision3 v3.62с - Смотрю описание PerformanceAnalyze и вижу сноску

    что команда не доступна в arm симуляторе.

     

     

    Я правильно понимаю, что в симуляторе (без железа) кол-во тактов ядра на выполнение куска кода подсчитать невозможно или я не прав?

    Если неправ, ткните где написано, как это сделать.

  7. подскажите, литературу, для изучения стыков С1-И, С1-ТЧ, С1-ТГ, для разработки своего железа.

    Что есть помимо гостов (они наверное есть в закромах)?

    Думаю больше и подробнее чем в ГОСТе, врядли где будет описано. Да и изучать там вроде немного.

  8. Ну почему же не найти? Вот это не то, что требуется топикстартеру (вторая строка результатов поиска в Google)?

    Конвертер для стыка С1-ФЛ-БИ (С1-И)

    Думаю, что нет. Хотя всё возможно. В принципе, Зелакс - это готовое решение, осталось найти того, кто им поделится.)

  9. Вопрос по сабж.

    Нужен преобразователь C1-ФЛ-БИ <-> RS-232 ( либо RS-485)

    На чем оптимальней реализовать ПЛИС/МК по цена/затраты?

    нет ли готовых решений?

    Может кто нить поделиться реализацией?

     

    Заранее спасибо!

    Небольшой плис с буфером должно хватить шоб построить фапч для С1, выделить синхронизацию и данные -> в буфер -> из буфера в передатчик для UART.

    Найти контроллер с приёмником для С1 думаю врядли удастся.

  10. Исходники вашей телеги к БПФ в студию. Т.к. написали Вы уже много, но с увеличением количества букв смысл все дальше и дальше.

     

    Лично я сначала алгоритмы проверяю в Matlabe, а затем уже пихаю в MC.

    Так вот, не считая погрешности вычисления, то ДПФ=БПФ(строки-столбцы)=БПФ(столбцы-строки).

    xPLOIRi9OX.gif

    Значит, дело явно не в бобине.

     

    Или я не понимаю, о чем Вы говорите. :(

    Я говорю, что если у нас есть массив x0,x1,x2,x3 и мы хотим посчитать его ДПФ,

    для этого представляем его в виде:

    x0 x1

    x2 x3,

     

    то такая последовательность действий: ДПФ(x0,x1)+ДПФ(x2,x3)+умножение на матрицу поворачивающих коеффициентов+ДПФ(x0,x2)+ДПФ(x1,x3) правильного результата не даст. Исходников есстественно нет, т.к. не смог это сделать.

     

    П.с. это не двумерное ДПФ, а вычисление одномерного большого ДПФ через комбинацию малых.

     

    Неважно, забудьте. Рабинер частично реабилитирован :biggrin:

     

    Только частично. )

  11. Вроде разобрались...

     

    И что просчитав ДПФ по строкам, умножив на некую прорежённую матрицу и сделав ДПФ по столбцам нельзя получить результат?

    Нельзя. Если данные расположены в виде:

    x_0 x1 ... x_n-1

    x_n x_n+1 ... x_2n-1

    то вначале нужно делать ДПФ-столбцов, потом умножение на матрицу, потом ДПФ-строк.

     

    Если в обратном порядке (ДПФ-строк, потом умножение на матрицу, потом ДПФ-столбцов),

    то надо делать не одно умножение на матрицу (для вычисления каждого элемента вертикального ДПФ матрица разная), то есть два.

    Шо и выходит из формулы в Рабинере и Голде. А формула, как это ни удивительно, правильная. Только объём вычислений возрастает, а они это не учитывают и ничего не говорят об этом. Так шо немного, но обманули. И к типам прореживания это не имеет отношения, и по-времени и по-частоте вначале считают ДПФ-столбцов, просто разбиение, как выше сказали, разное (2xN или Nx2)

     

    По типу алгоритма Гуда-Томаса (для взаимно простых множителей декомпозиции, где вообще нет вращений и вычисления производятся в любом

    порядке), но с вращениями для Кули -Тьюки.

    Тут переставляют данные в хитром порядке. Можна как хочешь расставить, и построкам начинать, и по столбцам.

     

     

     

    Смысл был в том, чтоб без переставления начать с ДПФ-последовательного блока данных(x0,x1,...,xN-1) как написано в книге, а нельзя. Вот так.

  12. Что значит «не можете получить спектр»? Поподробнее пожалуйста.

    Ну и не забываем конечно об отличии между этими двумя способами: если в первом случае порядок выполнения: ДПФ столбцов - умножение на поворачивающие коэфф. - ДПФ строк, то во втором случае: умножение на поворачивающие коэфф. - ДПФ строк - ДПФ столбцов.

    А вообще читайте Рабинера с Гоулдом, глава 6-я если точнее, там все очень хорошо расписано.

    Главу 6 читал. Порядок перемножения соблюдаю. В таком порядке вычисленния "умножение на поворачивающие коэфф. - ДПФ строк - ДПФ столбцов" не могу получить результаты идентичные методу "ДПФ столбцов - умножение на поворачивающие коэфф. - ДПФ строк". Не могу понять кто виноват. Или так в принципе нельзя посчитать?

  13. Хочу посчитать FFT используя Cooley-Tukey алгоритм.

     

    Представляю отсчёты в виде квадратной матрицы, считаю дпф столбцов, умножаю на коэффициенты, потом дпф строк - получаю спектр.

    Хочу поменять порядок расчёта (сначала дпф строк, потом столбцов) - не могу получить спектр.

    Кто-то реализовывал расчёт иммено в таком порядке (сначала дпф строк, потом столбцов)?

  14. library IEEE;

    use IEEE.STD_LOGIC_1164.all;

    use IEEE.STD_LOGIC_ARITH.ALL;

    use IEEE.STD_LOGIC_UNSIGNED.ALL;

     

    entity primer is

    ...

     

     

    Вы обещали:

    a = a+b*c,

    а описали:

    Ai = Ai-1 + Bi*Ci,

    то есть конвеер, который даст осмысленный результат минимум после второго такта.

     

    Я так понял, вопрос был: как реализовать a = a+b*c за один такт. Может был неправ.

  15. интересно, что в МАС-е нужен результат предыдущей операции - ну то есть для прибавления i-го слагаемого нужно иметь i-1 результат - то есть сконвееризировать большой сумматор аккумулятора не получится (допустима задержка только 1 такт)

     

    вобщем решения есть (и наверно, не одно) - интересно, найдете ли их гуглем (мне было бы интересно посмотреть)

    Не понял, решение чего? Если того, как сделать мак за один такт, то приведите здесь, если не сложно.

    ЗЫ. По поводу гугла, если вам интересно, то и ищите сами.

     

     

    За один такт все делается. Вопрос лишь в быстродействии (или в максимальной тактовой частоте).

    Вам правильно сказали, умножение, как и сложение - это лишь комбинационная логика.

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

    Я не говорю, что умножение и сложение - некомбинацинная логика, и не говорю, что умножение должно быть за один такт. Я говорю, что один МАК за один такт не делается.

    Если можете, покажите, если не сложно, как за один такт сделать следующую операцию a = a + b*c.

  16. Про конвейер слышал и даже пользовался им, но мне не кажется, что внутри МАСа стоит конвейер, если не прав, то поправте.

    А как по-другому? За один такт МАК никак не сделать, значит - последовательная схема. Походу ваш товарищ прав. Вся сила в конвеере.

  17. Ну ладно, эт я с дуру написал - спешил, а вот если я вообще вынесу эту схему за процесс?

    architecture Behavioral of Str is
    begin
       if we='1' and ch='0' then
          strob<='1';
       else
          strob<='0';    
       end if;
    process (strob)
    begin
    ...
    end process;
    end Behavioral;

     

    так можно?

     

    Прекращайте спешить и сдуру писать в форум

    :)

  18. Ваш пример работает, однако при добавлении вот этого куска в process(clk) - опять FAILED...

    А вы не добавляйте :), а если сильно хочется, то в отдельный процесс.

     

    И все же - у вас только clk управляет схемой, мне же надо, чтоб управляли схемой два сигнала - strob and clk.

    У нас схемой управляет strob, который синхронизирован с clk, так шо усё как надо.

     

    И строб у Вас тоже завязан на clk. Хотелось бы сделать его асинхронным - вынести за rising_edge(clk) и вообще за любой *'event.

    ...

    Однако когда все совмещаю вмесое - FAILED...

    В принципе, в Xilinx возможно управление по двум клокам одной и той же комбинационной схемы? Коллизий не будет - за всем смотрит внешний процессор, поэтому я и хочу собрать такую схему.

    Позволит ли мне это сделать Xilinx-XST и вообще VHDL?

    Xilinx-XST может и позволит, но лучше так не делать, если нет очень острой необходимости. Схему лучше сделать синхронной, управляемой одним клоком, если это возможно. Так легче.

  19. Здрасьте!

    '''

    Что можете предложить, многоуважаемые кроты? :)

    Copyright: Thumberlina (Дюймовочка)

     

    Для начала разбить на несколько процессов, а не сваливать всё в кучу в один (будет наляднее). Затем для всех процессов использовать только ОДИН тактовый сигнал, например clk, а strob подавать на вход enable триггера. Например так:

     

    process(clk)
    begin
    
    --Проверяем на знакоперемену
    if rising_edge(clk) then
       
       if we='1' and ch='0' then 
       --Если we стал = "1" - держим strob в "1" 
          strob<='1';
       else 
          strob<='0';    
       end if;
    
    end if;
    
    end process;
    
    process(clk)
    begin
    
    if rising_edge(clk) then
       
       if (strob='1') then 
          cnt:=cnt+1;
          Reg<=Reg[158..0] & in;
      end if;--strob
    
    end if;
    
    end process;

  20. Так ведь я вопрос сам задавал. (Фактически с одной переменной два разных по реализации в железе оператора). Мне ответили - на любителя.

    Посмотрите в книге Полякова (со стр. 34). Там показаны различия.

     

    Каких два оператора? Всё однозначно.

    Переменная отличается от сигнала тем, что апдэйтится новой величиной сразу после оператора присваивания и может использоваться в этом же процессе ниже по тексту.

    Сигнал апдэйтится в конце выполнения процесса, хотя присваивание может стоять в середине или вначале, новое значение доступно только при следующем запуске процесса. Всё.

     

    Тут сделано лишнее присваивание:

    in_data_rs232<=RS232_IN; получение в переменную in_data_rs232 байта из UARTа

    получился сдвиговый регистр и задержка на такт.

     

    Строка с переменной

    command := in_data_rs232(7 downto 5);

    здесь вводит ещё одно имя "command" для "in_data_rs232(7 downto 5)".

    Всё. Больше она на ни на что не влияет.

     

    П.С. Переменные юзать можна, иногда помогают.

    Присваиваний делать столько, сколько нужно. В данном случае можна ниодного. Как в последнем варианте

    case RS232_IN(7 downto 5) is

  21. 2 tocha - кулраннер 2-й - там по обоим фронтам вроде синтезируемое.

     

    А на счёт решения вопроса - попробуйте сделать 2 сигнала -

     

    И тригеровться по rising_edge этих клоков.

     

    А вообсче на сколько я помню - в полякове вроде атрибут stable предлогали, только я не помню на сколько оно синтезируемое.

     

    Может и так.

    Отстал от жизни на :)

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