武汉工程大学毕业设计(论文)说明书
k?11?WNz ? (3-24)
1?2cos((2?/N)k)z?1?z?2与此相应的信号流图示于图3-3。由式(3-24)可见,滤波器是一个二阶系统,有一对复数共轭极点和一个复数零点。
为了便于运算,在图3-3所示的流图中,设立状态变量 u和v。按照图3-3计算X(k)时,步骤有二,即: 1.实现一对复数极点
输入点依次取 x(0),x(1),x(2),...,x(n?1),进行递推运算。每次运算中,更新状态变量u和v。作N次迭代所需的计算量是2N次实数乘法和4N次实数加法。 2.实现复数零点。
x(n)是一个N点序列, n?0,1,2,...,N?1。在x(N)?0点上。计算状态变量u和v。
这时,按照图3-2算出滤波器的输出yk(N),此即X(k)。所需的计算量是4次实数乘法和4N次实数加法[11]。
综上所述,计算一点X(k)需要进行2(N?2)次实数乘法和4(N?1)次实数加法。这种算法要求的乘法次数约为直接算法的一半。在这种较为有效的方案中,
k仍具有这样的优点,即必须计算和存储的系数只有cos((2?/N)k)和WN。
还要说明图3-3所示的算法的另一个优点。当输入序列为实序列时,离散付里叶变换序列X(k)是对称的,即X(k)?X*(N?k)。容易证明,图3-3的网络形式在计算X(N?k)时和计算X(k)时具有完全相同的极点,但前者的零点系数与后者的零点系数成复共轭关系。由于零点仅在最后的迭代中实现,所以诸极点要求的
2N次乘法和 4N 次加法可以用来计算离散付里叶变换的两个值。因此,若用Goertzel 算法计算离散付里叶变换的所有N个点的值,需要的乘法次数近似为
N2,加法次数近似为2N2。然而,它同直接计算离散付里叶变换一样,计算量
仍然正比于N2。
12
武汉工程大学毕业设计(论文)说明书
4.快速傅里叶变换在信号处理中的理论应用
4.1 连续时间信号的快速傅里叶变换
设x(t)是连续时间信号,并假设t?0时x(t)?0,则其傅里叶变换由下式给出:
X(?)??x(t)e?i?tdt (4-1)
0?令?是一固定的正实数,N是一个固定的正整数。当??k?,k?0,1,2,,N?1时,利用FFT算法可计算X(?)。
已知一个固定的时间间隔T,选择让T足够小,使得每一个T秒的间隔
nT?t?(n?1)T内,x(t)的变化很小,则式中积分可近似为
X(?)??(?n?0??(n?1)TnTe?iwtdt)x(nT)
??[n?0?1?i?tt?(n?1)Te]t?nTx(nT) i?1?e?i?T ?i??en?0??i?nT x(nT) (4-2)
假设N足够大,对于所有n?N的整数,幅值x(nT)很小,则式(4-2)变为
1?e?i?T X(?)?i??en?0N?1?i?nT x(nT) (4-3)
当??2?k/NT时,式(4-2)两边的值为
2?k1?e?i2?k/N X()?NTi2?k/NT?en?0N?1?i2?nk/N1?e?i2?k/Nx(nT)?X[k] (4-4)
i2?k/NT其中X[k]代表抽样信号x[n]?x(nT)的N点DFT。最后令??2?/NT,则上式变为
1?e?i2?k/NX[k]k?0,1,2, X(k?)?i2?k/NT,N?1 (4-5)
,?时的1首先用FFT算法求出X[k],然后可用上式求出k?0,1,2,N
13
武汉工程大学毕业设计(论文)说明书
X(k?)。
应该强调的是,式(4-3)只是一个近似表示,计算得到的X(?)只是一个近似值。通过取更小的抽样间隔T,或者增加点数N,可以得到更精确的值。如果
??B时,幅度谱X(?)很小,对应于奈奎斯特抽样频率?s?2B,抽样间隔T选
择?/B比较合适。如果已知信号只在时间区间0?t?t1内存在,可以通过对
nT?t1时的抽样信号x[n]?x(nT)补零,使N足够大[12]。
将连续时间傅立叶变换进行数字近似,用函数fft(快速傅立叶算法)高效地计算这个近似值。很多信号都能用(4-1)式连续时间傅立叶变换(CTFT)来表示。利用MATLAB可以计算(CTFT)积分的数值近似。利用在密集的等间隔t的样本上的求和来近似这个积分,就可以用函数fft高效地计算这个近似值。所用的近似式是根据积分的定义得到的,即
????x(t)e?j?tdt?lim?x(n?)e?j?n?? (4-6)
??0n????对于一般信号,在足够小的τ下,上式右边的和式是对于CTFT积分的一个好的近似。若信号x(t)对于t?0和t?T为零,那么这个近似式就能写成
????x(t)e?j?tdt??x(t)e0T?j?tdt??x(n?)e?j?n?? (4-7)
n?0N?1式中T?n?,N为一整数。可以利用函数fft对一组离散的频率?k计算上式中的和式。如果N个样本x(n?)是存在向量x内的话,那么调用函数X=tau*fft(x)就可以计算出 X(k?1)???x(n?)en?0N?1?j?nk??X(j?k) (4-8)
N?2?k 0?k??N?2式中 ?k????2?k?2? N?1?k?N ??2?N?
以及N假设为偶数。为了计算高效,fft在负的频率样本之前先产生正频率样本。为了将频率样本置于上升的顺序,能用函数fftshift。为了将存入X中的X(j?k)的样本排列成使X(K?1)就是对于0?k?N?1,在????(2?kN?)上求得
14
武汉工程大学毕业设计(论文)说明书
的CTFT,可用X=fftshift(tau*fft(x))。
例4-1 利用FFT计算傅里叶变换 如图4-1所示的信号
?t?10?t?2 x(t)??0其它?其傅里叶变换为:
X(?)??cos(?)?sin(?)?i?2ei 2?利用下面的命令,可得到x(t)的近
似值和准确值。 图4-1 连续时间信号x(t)
N=input('Input N:'); T=input('Input T:'); %计算X(w)近似值 t=0:T:2;
x=[t-1 zeros(1,N-length(t))]; X=fft(x); gamma=2*pi/(N*T); k=0:10/gamma;
Xapp=(1-exp(-i*k*gamma*T))/(i*k*gamma)*X; %计算真实值X(w) w=0.05:0.05:10;
Xact=exp(-i*w)*2*i.*(w.*cos(w)-sin(w))./(w.*w); plot(k*gamma,abs(Xapp(1:length(k))),'o',w,abs(Xact)); legend('近似值','真实值');
xlabel('频率(rad/s)');ylabel('|X|')
运行程序后输入N=128,T=0.1,此时??0.4909,得到实际的和近似的傅里叶变换的幅度谱如图4-2所示,此时近似值已经相当准确。通过增加NT可以增加更多的细节,减少T使得到的值更精确。再次运行程序后输入N=512,T=0.05,此时??0.2454,得到实际的和近似的傅里叶变换的幅度谱如图4-3所示。
15
武汉工程大学毕业设计(论文)说明书
图4-2 N=128,T=0.1时的幅度谱
图4-3 N=512,T=0.05时的幅度谱
16
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库毕业论文-快速傅里叶变换算法及其在信号处理中的应用(4)在线全文阅读。
相关推荐: