P
pascal
Unregistered / Unconfirmed
GUEST, unregistred user!
这里找到的:
现在已经知道N个采样点经FFT后转换后得到N个复数,即时域变成频域,却不明白如何调整各频率段的振幅,qince你说实现了EQ,可否赐教?
X[1..N]是wav采样数据,FFT转换得到实数XR[1..N],虚数XI[1..N]
对采样信号的频谱,为提高计算效率,通常采用FFT算法进行计算,设数据点数为:
N = T/dt = T.fs
则计算得到的离散频率点为: Xs(fi) , fi = i.fs/N , i = 0,1,2,.....,N/2
不明白,请教:T,dt,fs,实数XR[1..N],虚数XI[1..N]的物理意义是什么?
X[1..N]是什么类型? A.实数;
B.复数
如何FFT逆转换:输入参数是什么?
数学没学好,看书不懂啊
分不够再加.
我也下载了两个FFT的程序,怎么使用啊?
TDSXFastFourier = Class(TComponent)
private
FNumSamples : integer;
FInBuffer : PComplexArray;
FOutBuffer : PComplexArray;
FOnGetData : TOnGetDataEvent;
function IsPowerOfTwo ( x: word ): boolean;
function NumberOfBitsNeeded ( PowerOfTwo: word ): word;
function ReverseBits ( index, NumBits: word ): word;
procedure FourierTransform ( AngleNumerator: do
uble );
procedure SetNumSamples(value : integer);
function GetTransformedData(idx : integer) : TComplex;
constructor
create(AOwner : TComponent);
destructor
destroy;
public
property TransformedData[idx : integer] : TComplex read GetTransformedData;
procedure fft;
procedure ifft;
procedure CalcFrequency (FrequencyIndex: word);
published
property OnGetData : TOnGetDataEvent read FOnGetData write FOnGetData;
property NumSamples : integer read FNumSamples write SetNumSamples;
property SampleCount : Integer read FNumSamples;
end;
NumSamples,SampleCount,TransformedData[idx : integer]该给什么值?结果在哪?什么意义?请举例说明好吗?
2.
procedure real_fft(tau,tau_2:Integer;VAR y:array of single;direkt:Boolean);
------------------------------------------------------------------------
real_fft(tau,
tau_2: Integer;
VAR y:array of single;
direkt:Boolean);
******* Usage to perform FFT : real_fft()
direkt=FALSE
size = tau = 2^tau_2
y : array[1..size] of single = Input
Output: y[0]=a0
y[k]=a(k+1)/2
with k=1,3,...,tau_2-1
if you need the real values you have to use the procedure
fft_makereal(var y:array of single;size:Integer);
Input: y : array[1..size] of single = Output of previous FFT
Output: y[0] = a0
y[1..size/2] = abs(FFT)
******* Usage to perform reverse FFT : real_fft()
direkt=TRUE
size = tau = 2^tau_2
y : array[1..size] of single = Output of previous FFT
Output: y[1..size] = Real Values
You can delete some of the y[...] values before you preform the reverse FFT.
If youdo
so and use WAV-Values for Input, you will get a digital filter.
You can use the procedure
delete_fft(from,to,count:Integer;
VAR y:array of single);
to delete y[1..from-1] and y[to+1..size-1]
---------------------------------------------------------------------------}
还是不明白,tau,tau_2:Integer;VAR y:array of single是什么.
direkt:Boolean应该是正/逆变换吧?
现在已经知道N个采样点经FFT后转换后得到N个复数,即时域变成频域,却不明白如何调整各频率段的振幅,qince你说实现了EQ,可否赐教?
X[1..N]是wav采样数据,FFT转换得到实数XR[1..N],虚数XI[1..N]
对采样信号的频谱,为提高计算效率,通常采用FFT算法进行计算,设数据点数为:
N = T/dt = T.fs
则计算得到的离散频率点为: Xs(fi) , fi = i.fs/N , i = 0,1,2,.....,N/2
不明白,请教:T,dt,fs,实数XR[1..N],虚数XI[1..N]的物理意义是什么?
X[1..N]是什么类型? A.实数;
B.复数
如何FFT逆转换:输入参数是什么?
数学没学好,看书不懂啊
分不够再加.
我也下载了两个FFT的程序,怎么使用啊?
TDSXFastFourier = Class(TComponent)
private
FNumSamples : integer;
FInBuffer : PComplexArray;
FOutBuffer : PComplexArray;
FOnGetData : TOnGetDataEvent;
function IsPowerOfTwo ( x: word ): boolean;
function NumberOfBitsNeeded ( PowerOfTwo: word ): word;
function ReverseBits ( index, NumBits: word ): word;
procedure FourierTransform ( AngleNumerator: do
uble );
procedure SetNumSamples(value : integer);
function GetTransformedData(idx : integer) : TComplex;
constructor
create(AOwner : TComponent);
destructor
destroy;
public
property TransformedData[idx : integer] : TComplex read GetTransformedData;
procedure fft;
procedure ifft;
procedure CalcFrequency (FrequencyIndex: word);
published
property OnGetData : TOnGetDataEvent read FOnGetData write FOnGetData;
property NumSamples : integer read FNumSamples write SetNumSamples;
property SampleCount : Integer read FNumSamples;
end;
NumSamples,SampleCount,TransformedData[idx : integer]该给什么值?结果在哪?什么意义?请举例说明好吗?
2.
procedure real_fft(tau,tau_2:Integer;VAR y:array of single;direkt:Boolean);
------------------------------------------------------------------------
real_fft(tau,
tau_2: Integer;
VAR y:array of single;
direkt:Boolean);
******* Usage to perform FFT : real_fft()
direkt=FALSE
size = tau = 2^tau_2
y : array[1..size] of single = Input
Output: y[0]=a0
y[k]=a(k+1)/2
with k=1,3,...,tau_2-1
if you need the real values you have to use the procedure
fft_makereal(var y:array of single;size:Integer);
Input: y : array[1..size] of single = Output of previous FFT
Output: y[0] = a0
y[1..size/2] = abs(FFT)
******* Usage to perform reverse FFT : real_fft()
direkt=TRUE
size = tau = 2^tau_2
y : array[1..size] of single = Output of previous FFT
Output: y[1..size] = Real Values
You can delete some of the y[...] values before you preform the reverse FFT.
If youdo
so and use WAV-Values for Input, you will get a digital filter.
You can use the procedure
delete_fft(from,to,count:Integer;
VAR y:array of single);
to delete y[1..from-1] and y[to+1..size-1]
---------------------------------------------------------------------------}
还是不明白,tau,tau_2:Integer;VAR y:array of single是什么.
direkt:Boolean应该是正/逆变换吧?