安安富富莱莱UUMM440033DDSSPP教教程程SSTTMM3322--VV55开开发发板板系系统统篇篇手手册册22001155年年0011月月1155日日版版本本::11..00第第11页页共共33页页第第2299章章SSTT官官方方汇汇编编FFFFTT库库实实现现IIFFFFTT本章主要讲解利用ST官方汇编FFT库实现IFFT,但由于官方的FFT库输入和输出参数都是由信号的实部和虚部两个16位的数据组成一个32位数据进行操作,在利用FFT库进行IFFT计算的过程中很容易溢出,所以本章节仅提供Matlab的实现思路。29.1利用FFT库实现IFFT的思路。29.2Matlab实现验证29.3总结。2299..11利利用用FFFFTT库库实实现现IIFFFFTT的的思思路路如果希望直接调用FFT程序计算IFFT,可以用下面的方法:X(k)=DFT[x(n)]= x(n)W 0≤k≤N−1x∗(n)=IDFT[X(k)]=1N X∗(k))W 0≤k≤N−1对上式两边同时去共轭,得:x(n)=IDFT[X(k)]=1N[ X∗(k) W ]∗ = 1N{DFT[X∗(k)]}∗简单的说就是先对原始信号做FFT变换,然后对转换结果取共轭,再次带到FFT中计算,并将结果再次取共轭就可以实现IFFT。2299..22MMaattllaabb实实现现验验证证根据上面小节的实现思路,我们在Matlab上面做一个验证,验证代码如下:Fs=1024;%采样率N=1024;%采样点数n=0:N-1;%采样序列t=0:1/Fs:1-1/Fs;%时间序列f=n*Fs/N;%真实的频率安安富富莱莱UUMM440033DDSSPP教教程程SSTTMM3322--VV55开开发发板板系系统统篇篇手手册册22001155年年0011月月1155日日版版本本::11..00第第22页页共共33页页x=1.5*sin(2*pi*20*t+pi/3);%原始信号y=fft(x,N);%对原始信号做FFT变换z=conj(y);%对转换结果取共轭subplot(2,1,2);z=fft(z,N);%再次做FFTk=conj(z);%对转换结果去共轭plot(f,real(k));%绘制转换后的波形title('IFFT转换后的波形');subplot(2,1,1);plot(f,x);%绘制原始波形title('原始波形');Matab的运行结果如下:从上面的转换结果看,两个波形信号基本是一致的。020040060080010001200-2000-1000010002000IFFT转换后的波形020040060080010001200-2-1012原始波形安安富富莱莱UUMM440033DDSSPP教教程程SSTTMM3322--VV55开开发发板板系系统统篇篇手手册册22001155年年0011月月1155日日版版本本::11..00第第33页页共共33页页2299..33总总结结本章节内容较少,有兴趣的可以尝试在原FFT库的基础上实现IFFT。