Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Двумерное преобразование Фурье 
V
    Опции темы
Alexeis
Дата 17.5.2009, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(IvanoffAndrey @  17.5.2009,  15:58 Найти цитируемый пост)
Память можно и SetLength выделять. 

  Не факт, проблема в том что при использовании SSE адреса нужно выравнивать на границу 16ти байт, те функции как раз и выравнивали на границу 16ти, так что траблы еще могут быть.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
IvanoffAndrey
Дата 17.5.2009, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 8.7.2006
Где: СГАУ

Репутация: 1
Всего: 2



Мда......не дай боже появятся, я не выдержу.
SetLength - указан для применения в одномерном случае в оффициальном хелпе, там пример одномерный рассмотрен просто.
Но видимо все равно стоит ждать проблем.
--------------------
Размерность пространства есть число Pi и в каждой точке вселенной оно стремиться к этому числу.
PM MAIL   Вверх
Domkrat
Дата 17.5.2009, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 15.11.2008

Репутация: нет
Всего: нет



Цитата(IvanoffAndrey @ 17.5.2009,  16:58)
Ребята вссем спасибо. Разобрался. Нужно просто было одномерные массивы использовать. тогда все работает.
Память можно и SetLength выделять.

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

Напишите что у Вас получилось, тоже очень надо.
PM MAIL   Вверх
Alexeis
Дата 17.5.2009, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



  Да не одномерное, просто строки массива идут одна за другой в одном общем буфере. Физически он одномерный, логически это матрица.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
IvanoffAndrey
Дата 17.5.2009, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 8.7.2006
Где: СГАУ

Репутация: 1
Всего: 2



Да реально траблы, но поему уже не с массивами:
Вот код накотором останавливаюсь:
Код

program fftw_example;
{$APPTYPE CONSOLE}

 uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls;
      //fftw_interface in 'fftw_interface.pas',
      // fftw_s in 'fftw_s.pas';
type
fftw_complex = record
    re, im: Double;
  end;
  pfftw_complex = ^fftw_complex;

  fftw_plan = type Pointer;

const
  FFTW_FORWARD = WORD(-1);
  FFTW_BACKWARD = 1;

  FFTW_MEASURE = 0;
  FFTW_DESTROY_INPUT = 1; {1U << 0}
  FFTW_UNALIGNED = 2; {1U << 1}
  FFTW_CONSERVE_MEMORY = 4; {1U << 2}
  FFTW_EXHAUSTIVE = 8; {1U << 3} {NO_EXHAUSTIVE is default }
  FFTW_PRESERVE_INPUT = 16; {1U << 4} {cancels FFTW_DESTROY_INPUT}
  FFTW_PATIENT = 32; {1U << 5} {IMPATIENT is default }
  FFTW_ESTIMATE = 64; {1U << 6}

const
  fftw3f = 'libfftw3-3.dll';

function fftw_malloc(n: LongWord): Pointer; cdecl;
external fftw3f Name 'fftw_malloc';
procedure fftw_free(P: Pointer); cdecl;
external fftw3f Name 'fftw_free';

procedure fftw_destroy_plan(plan: fftw_plan); cdecl;
external fftw3f Name 'fftw_destroy_plan';
procedure fftw_execute(plan: fftw_plan); cdecl;
external fftw3f Name 'fftw_execute';

function fftw_plan_dft_r2c_2d(n0, n1: Integer; _in: PDouble; _out: pfftw_complex;
  flags: LongWord): fftw_plan; cdecl; external fftw3f Name 'fftw_plan_dft_r2c_2d';
function fftw_plan_dft_c2r_2d(n0, n1: Integer; _in: pfftw_complex; _out: PDouble;
  flags: LongWord): fftw_plan; cdecl; external fftw3f Name 'fftw_plan_dft_c2r_2d';


type
  TDoubleArray = array of  Double;
  TComplexArray =array of  fftw_complex;


var
pInArr: pointer;
buf : ^Double;
InArr: TDoubleArray;
OutArr: TComplexArray;
lInLength,lOutLength,I,J,nX,nY:Integer;
plan: fftw_plan;
begin
  nX := 3;
  nY := 3;

  SetLength(InArr,nX*nY);

  for i := 0 to nX-1 do begin
    writeln('');
    for j := 0 to nY-1 do begin
      InArr[i+j] := i+j;
      write (' ');
      write (InArr[i+j]:8:4);
    end;
  end;
  writeln('');

  SetLength(OutArr, nX*nY );
  plan := fftw_plan_dft_r2c_2d(nY,nX,@(InArr[0]),@(outArr[0]),FFTW_ESTIMATE);
  fftw_execute(plan);

  for i := 0 to nX - 1 do begin
    writeln('');
    for j := 0 to nY - 1 do begin
      write (' ');
      write (OutArr[i+j].re :8:2 );
      write ('+');
      write (OutArr[i+j].im :8:2 );
      write ('i');
      write ('|')
    end;
  end;

Строчка:
Код

SetLength(OutArr, nX*nY );
 - неверна - точно. В хелпе к библиотеке описывается на схеме как нужно выделять память под выходной массив Описание выходного формата.
по идее должна быть строчка вида:
Код

SetLength(OutArr, nX*(nY div 2 +1 );
 - по какой причине перевести я не смог, вернее ничего не понял.
Вот еще описание всех функций:
Список функций библиотеки
А так же фортрановский пример:
пример фортран
на этом заканчиваю. Времени сейчас разбираться совсем уже нету - диплом через неделю. Заюзал Двумерный Фурье из МатЛаба, МатЛаб к Дельфе через ActiveX просто подрубается, если кому надо дам ссылку и свой листинг.
Если кто всетаки разбереться, буду благодарен. Через Матлаб ой медленно пашет. - но хотябы пашет.

Добавлено через 4 минуты и 59 секунд
Кстати есть вариант сделать так - поскольку одномерное работает хорошо, то можно сделать одномерное преобразование всех строк поля, а затем одномерное преобразование всех столбцов.
получится тоже самое. Только работать будет не так быстро - всетаки матрицу как никак транспонировать в памяти придется. если у кого заработает такой вариант напишите - интересно.
--------------------
Размерность пространства есть число Pi и в каждой точке вселенной оно стремиться к этому числу.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0552 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.