论坛里面有人学ada的吗 出了问题想找人解决?
我最近用ada编写了一个FFT 的程序包 但是发现 可以通过编译 但是却无法运行 总是出现Error while trying to execute C:\Users\chinaboris\Exec\dit_2_fft: not an executable我的程序分为三部分 申明 执行包 主程序包 分别如下:
申明:package DIT_2_FFT is
type FFT_Complex is
record
real,imag : float;
end record;
Subtype Positive is Integer range 0..Integer'Last;
type Signal_arrays is array (Positive range <>) of FFT_Complex;
function EE (FFT_Complex_a,FFT_Complex_b:FFT_Complex) return FFT_Complex;
procedure bitumkehrordnung (X:in out Signal_arrays;Punkte_Zahl:integer);
procedure DIT_base2_FFT (X:in out Signal_arrays;Punkte_Zahl:integer);
end DIT_2_FFT;
程序包部分
with Ada.Integer_Text_IO;use Ada.Integer_Text_IO;
with Ada.Numerics.Generic_Elementary_Functions;
use Ada.Numerics;
with Ada.Text_IO;use Ada.Text_IO;
package body DIT_2_FFT is
package Numerics is new
Ada.Numerics.Generic_Elementary_Functions (Float_Type => float);
function EE (FFT_Complex_a,FFT_Complex_b:FFT_Complex) return FFT_Complex is
--man kann die Gleichung für FFT_Complex definieren.
FFT_Complex_c:FFT_Complex;
begin
FFT_Complex_c.real:=FFT_Complex_a.real*FFT_Complex_b.real - FFT_Complex_a.imag*FFT_Complex_b.imag;
FFT_Complex_c.imag:=FFT_Complex_a.real*FFT_Complex_b.imag + FFT_Complex_a.imag*FFT_Complex_b.real;
return FFT_Complex_c;
end EE;
procedure bitumkehrordnung (X:in out Signal_arrays;Punkte_Zahl:integer) is
--Bevor man ein Signal FFT mancht,muss man die Ordnung umkehren.Danach kann man die richtige Ordnung bekommen.
k:integer:=Punkte_Zahl/2;
Z:FFT_Complex;
P:Integer;
begin
for Counter in 1..Punkte_Zahl-2 loop
if Counter<k then
Z:=X(Counter);
X(Counter):=X(k);
x(k):=Z;
end if;
p:=Punkte_Zahl/2;
while k>=p loop
k:=k-p;
p:=p/2;
end loop;
k:=k+p;
End loop;
end bitumkehrordnung;
procedure DIT_base2_FFT (X:in out Signal_arrays;Punkte_Zahl:integer) is--Abtastwerten von X[n]
use Numerics;
function Potenz (Punkte_Zahl:Integer) return Integer is
--Berechnung der Potenz der Base 2 von Punkte_Zahl.
Counter:integer:=1;
P:integer:=Punkte_Zahl;
begin
if p/2/=1 then
p:=p/2;
Counter:=Counter+1;
end if;
return Counter;
end Potenz;
Stufe_FFT : integer;
Abstand : Integer;--Abstand von zwei eingegebenen Daten
W : FFT_Complex;--übertragungsfaktoren
K_W : FFT_Complex;--Beziehung K_W=W(i)/W(i-1);
T : FFT_Complex;
i_b,i_a : Integer;
Variable : Float;
begin
Stufe_FFT:=Potenz(Punkte_Zahl);
for counter in 1..Stufe_FFT loop
Abstand:=2**(counter-1);
W.real:=1.0;
W.imag:=0.0;
Variable:=pi/float(Abstand);
K_W.real:=Numerics.Cos (Variable) ;
K_W.imag:=-Numerics.Sin (Variable) ;
for Counter in 0..Abstand-1 loop
i_a:=Counter;
while i_a <= Punkte_Zahl - 1 loop
i_b := i_a + Abstand;
T := dit_2_fft.EE(X(i_b),W);
X(i_a).real := X(i_a).real + T.real;
X(i_a).imag := X(i_a).imag + T.imag;
X(i_b).real := X(i_a).real - T.real;
X(i_a).imag := X(i_a).imag - T.imag;
i_a:=i_a+2**Stufe_FFT;
end loop;
W:=dit_2_fft.EE(W,K_W);
end loop;
end loop;
end DIT_base2_FFT;
end dit_2_fft;
主程序部分
with ada.Text_io;use ada.text_io;
with Ada.Integer_Text_IO;use Ada.Integer_Text_IO;
with Ada.Float_Text_IO;use Ada.Float_Text_IO;
with DIT_2_FFT;use DIT_2_FFT;
with Ada.Numerics.Generic_Elementary_Functions;use Ada.Numerics;
procedure FFT_main is
package Numerics is new
Ada.Numerics.Generic_Elementary_Functions (Float_Type => float);
N:Integer;
real,imag:float;
Variable:float;
procedure Array_length is
begin
put("Wie viele Punkte brauchen Sie:");get(N);
end Array_Length;
FFT_array:Signal_arrays (1..n-1);
begin
for Counter in 0..N-1 loop
Variable:=2.0*pi*float(Counter)/float(N);
FFT_array(Counter).real:=Numerics.Sin(Variable);
FFT_array(Counter).imag:=0.0;
end loop;
DIT_base2_FFT (X => FFT_array,Punkte_Zahl => N);
for Counter in 0..N-1 loop
real:=FFT_array(Counter).real;
put(real);
put(" ");
imag:=FFT_array(Counter).imag;
put(imag);new_line;
end loop;
end FFT_main;
如果 谁能帮我 也可以 私密我 我的邮箱是 chinaboris1986@ 谢谢了 我也是初学者 找不到 能帮我的人