利用MATLAB编写FFT快速傅里叶变换
matlab中fft快速傅里叶变换

matlab中fft快速傅⾥叶变换视频来源很好的解释了:1 .傅⾥叶变换过程,经过傅⾥叶变化得到了,频率w,振幅a0,相位⾓φ;2. 傅⾥叶变换主要应⽤领域:声⾳,图像处理;博⽂则很好的解释了:1. 傅⾥叶变换在matlab软件中怎样应⽤2.. 傅⾥叶变换的作⽤效果的展⽰,从时域到频域的变化,时域难以解决的问题到频域中却很清晰。
语法说明= fft()⽤快速傅⾥叶变换 (FFT) 算法计算X的 (DFT)。
如果X是向量,则fft(X)返回该向量的傅⾥叶变换。
如果X是矩阵,则fft(X)将X的各列视为向量,并返回每列的傅⾥叶变换。
如果X是⼀个多维数组,则fft(X)将沿⼤⼩不等于 1 的第⼀个数组维度的值视为向量,并返回每个向量的傅⾥叶变换。
= fft(,)返回n点 DFT。
如果未指定任何值,则Y的⼤⼩与X相同。
如果X是向量且X的长度⼩于n,则为X补上尾零以达到长度n。
如果X是向量且X的长度⼤于n,则对X进⾏截断以达到长度n。
如果X是矩阵,则每列的处理与在向量情况下相同。
如果X为多维数组,则⼤⼩不等于 1 的第⼀个数组维度的处理与在向量情况下相同。
= fft(,,)返回沿维度dim的傅⾥叶变换。
例如,如果X是矩阵,则fft(X,n,2)返回每⾏的 n 点傅⾥叶变换。
⽰例噪声信号使⽤傅⾥叶变换求噪声中隐藏的信号的频率分量。
指定信号的参数,采样频率为 1 kHz,信号持续时间为 1.5 秒。
Fs = 1000; % Sampling frequencyT = 1/Fs; % Sampling periodL = 1500; % Length of signalt = (0:L-1)*T; % Time vector构造⼀个信号,其中包含幅值为 0.7 的 50 Hz 正弦量和幅值为 1 的 120 Hz 正弦量。
S = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);⽤均值为零、⽅差为 4 的⽩噪声扰乱该信号。
matlab自行编写fft傅里叶变换

傅里叶变换(Fourier Transform)是信号处理中的重要数学工具,它可以将一个信号从时域转换到频域。
在数字信号处理领域中,傅里叶变换被广泛应用于频谱分析、滤波、频谱估计等方面。
MATLAB作为一个功能强大的数学软件,自带了丰富的信号处理工具箱,可以用于实现傅里叶变换。
在MATLAB中,自行编写FFT(Fast Fourier Transform)的过程需要以下几个步骤:1. 确定输入信号我们首先需要确定输入信号,可以是任意时间序列数据,例如声音信号、振动信号、光学信号等。
假设我们有一个长度为N的信号x,即x = [x[0], x[1], ..., x[N-1]]。
2. 生成频率向量在进行傅里叶变换之前,我们需要生成一个频率向量f,用于表示频域中的频率范围。
频率向量的长度为N,且频率范围为[0, Fs),其中Fs 为输入信号的采样频率。
3. 实现FFT算法FFT算法是一种高效的离散傅里叶变换算法,它可以快速计算出输入信号的频域表示。
在MATLAB中,我们可以使用fft函数来实现FFT 算法,其调用方式为X = fft(x)。
其中X为输入信号x的频域表示。
4. 计算频谱通过FFT算法得到的频域表示X是一个复数数组,我们可以计算其幅度谱和相位谱。
幅度谱表示频率成分的强弱,可以通过abs(X)得到;相位谱表示不同频率成分之间的相位差,可以通过angle(X)得到。
5. 绘制结果我们可以将输入信号的时域波形和频域表示进行可视化。
在MATLAB 中,我们可以使用plot函数来绘制时域波形或频谱图。
通过以上几个步骤,我们就可以在MATLAB中自行编写FFT傅里叶变换的算法。
通过对信号的时域和频域表示进行分析,我们可以更好地理解信号的特性,从而在实际应用中进行更精确的信号处理和分析。
6. 频谱分析借助自行编写的FFT傅里叶变换算法,我们可以对信号进行频谱分析。
频谱分析是一种非常重要的信号处理技术,可以帮助我们了解信号中所包含的各种频率成分以及它们在信号中的能量分布情况。
matlab如何做傅里叶变换

matlab如何做傅里叶变换
MATLAB 提供了多种函数来完成傅里叶变换,其中 fft 函数是最
常用的一种。
fft 函数是通用快速傅里叶变换函数,它可以将任意时
域信号变换成频域信号,并得到该信号的功率谱和相位角信息。
fft 操作可以用下面六步完成:
(1)准备时域信号,得到 N 个样本数据;
(2)实施 N 点 DFT,得到 N 个复数的频域输出 X[k];
(3)将 X[k] 用数组形式表述出来,得到频域数组;
(4)计算频域功率信号,使用 P=|X[k]|^2 求出功率,形成功率.数组;
(5)计算频域信号的相位角,使用 C=arg(X[k]) 求出相位角,
形成相位角数组;
(6)根据产生的功率数组和相位角数组,绘制出功率谱和相位角图像。
如果想要改变深度,可以使用混合的方法,即使用 fft 将时域信号转换为频域信号,再用离散傅里叶变换(DFT)或者离散余弦变换(DCT)来改变深度。
使用 MATLAB 编写的 fft 程序可以发现,fft 函数是一种快速方法,可以大大减少处理时间。
因此,通过使用 MATLAB fft 函数,相
比传统的 DFT 和 DCT,利用 MATLAB 来完成傅里叶变换显得更为简便快捷。
快速傅里叶变换-基4时间抽取FFT算法matlab实现

快速傅⾥叶变换-基4时间抽取FFT算法matlab实现快速傅⾥叶变换-基4时间抽取FFT 算法matlab 实现作者姓名:李林摘要:FFT ( 快速傅⾥叶变换) 算法与DFT (离散傅⾥叶变换) 算法⽐较, 其运算量显著减少, ⽤计算机实现时速度⼤为提⾼。
但FFT 过程所需的运算量仍较可观, 常给数字信号的实时处理带来困难,理论和实践表明, 若要加快FFT 算法在计算机上的实现, 关键是得设法减少FFT 过程在乘法运算上的时间开销。
若改进算法, 减少过程中的乘法次数, 则⽆疑能加快FFT 的实现。
通常的FFT 幂法都是“基2 分解法” , 即长度为N 的DFT 序列由两个长度为2 / N 的DFT 序列的组合表⽰; ⽽这两个长度为2 / N 的DFT 序列各⾃⼜分别由两个长度为4 / N 的DFT 序列的组合表⽰ , 按照这⼀做法对序列进⾏反复分解, 直到每个序列的长度等于2为⽌。
这个分解、组合过程如同⼀棵标准⼆叉树。
按分解的逆过程进⾏组合运算便得到所要求的频谱序列)n ( F ,... , l , 0 (n ,1- N ) 整个变换过程共需要进⾏ N log 2 / N 2次复数乘法运算。
参考上述的分解、组合⽅法, 对序列进⾏“ 基4 分解” ,即长度为N 的DFT 序列由四个长度为4 / N 的DFT 序列组合表⽰。
关键词: FFT 基2分解法基4分解运算时间和精度⽬录⼀,前⾔1,实验⽬的2,题⽬要求3,考查要求⼆,基—4FFT算法原理1,基—4FFT定义:2,举例3,旋转因⼦kmW的性质N4,16点基4时间抽取FFT算法流图三,基—4FFT运算的实现1,算法分析2.算法流程图3.Matlab程序执⾏结果四,两种程序运算量分析和⽐较 1,matlab⾃带函数运算量分析2,基四FFT的运算量3,运算结果⽐较4,结果分析五,设计总结六,参考⽂献七,附录:⼀,前⾔1,实验⽬的:检查学⽣的综合应⽤能⼒。
matlab如何做傅里叶变换

matlab如何做傅里叶变换Matlab是一款高级的计算机可视化程序,具有强大的图形和数据处理功能。
它可以帮助你快速处理大量数据,并进行准确的分析。
Matlab中的傅里叶变换(FFT)是用于分析数字信号(如声音或图像)的有用工具,它将时域信号转换为频域信号。
FFT可以显示出信号中每一段的频率、幅度和相位,从而可以反映出信号的构成成分。
在Matlab中,可以使用fft()函数来计算信号的傅里叶变换。
假设要对一段持续时间为T的实信号X(t)做FFT变换,首先要定义变换的采样频率fs,然后构造一个长度为N(N>T*fs)的数组x,填充X(t)的采样点,其中x[k] = X(k/fs)。
在Matlab中,可以使用linspace()函数快速生成x。
之后使用fft()来计算X(t)的FFT:y = fft(x);在此调用后,y数组就会保存有X(t)的FFT结果,它的长度为N,其中y[k]表示X(t)在频率为k/T的Fourier系数。
对于对称的实信号,Matlab还提供了一种快速的FFT实现——fftshift()函数,它可以快速计算一维实信号的FFT,省去了上述步骤所需的构造数组和调用fft()函数的时间。
要使用fftshift(),只需要调用函数fftshift(X)即可,其中X是X(t)的采样点。
总之,Matlab中的FFT工具可用于快速分析信号,方法简单便捷。
可以通过fft()和fftshift()函数快速获得信号的频谱,其结果可以反映出信号的频率、幅度和相位。
Matlab中的FFT功能可以为你的信号处理工作带来很大的方便。
matlab自己写傅里叶变换程序

matlab自己写傅里叶变换程序傅里叶变换是一种重要的数学工具,广泛应用于信号处理、图像处理、通信等领域。
它可以将一个信号在频域和时域之间进行转换,帮助我们理解信号的频谱特性。
在本文中,我将介绍如何使用Matlab编写傅里叶变换程序,以及一些相关的应用。
我们需要明确傅里叶变换的定义和公式。
傅里叶变换可以将一个连续时间的信号分解为多个不同频率的正弦和余弦函数的叠加。
在Matlab中,可以使用fft函数进行傅里叶变换。
具体步骤如下:1. 准备信号数据:首先,我们需要准备一个信号数据。
这可以是一个连续时间的信号,也可以是一个离散时间的信号。
可以通过输入一组数据来表示信号。
2. 进行傅里叶变换:使用fft函数对信号进行傅里叶变换。
该函数会返回一个复数数组,表示信号在频域中的幅度和相位信息。
3. 绘制频谱图:使用plot函数将频域信息绘制成频谱图。
这可以帮助我们直观地理解信号的频率分布情况。
4. 反变换:如果需要将傅里叶变换后的频域信号重新转换回时域信号,可以使用ifft函数进行反变换。
除了基本的傅里叶变换,Matlab还提供了一些相关的函数和工具箱,例如快速傅里叶变换(FFT)、离散傅里叶变换(DFT)、傅里叶级数等。
这些工具可以帮助我们更方便地处理和分析信号。
傅里叶变换在信号处理中有着广泛的应用。
例如,我们可以使用傅里叶变换对音频信号进行频谱分析,以便了解音频中各个频率分量的贡献。
另外,傅里叶变换还可以用于图像处理,例如图像压缩和滤波等方面。
总结起来,Matlab提供了丰富的函数和工具箱,可以帮助我们进行傅里叶变换及相关的信号处理任务。
通过编写傅里叶变换程序,我们可以更好地理解信号在频域和时域之间的转换关系,以及信号的频谱特性。
这对于许多科学研究和工程应用都具有重要意义。
快速傅里叶变换fft的Matlab实现 实验报告
一、实验目的1在理论学习的基础上,通过本实验加深对快速傅立叶变换的理解;2熟悉并掌握按时间抽取FFT算法的程序;3了解应用FFT进行信号频谱分析过程中可能出现的问题,例如混淆、泄漏、栅栏效应等,以便在实际中正确应用FFT。
二、实验内容1仔细分析教材第六章‘时间抽取法FFT’的算法结构,编制出相应的用FFT 进行信号分析的C语言(或MATLAB语言)程序;用MATLAB语言编写的FFT源程序如下:%%输入数据f、N、T及是否补零clc;clear;f=input('输入信号频率f:');N=input('输入采样点数N:');T=input('输入采样间隔T:');C=input('信号是否补零(补零输入1,不补零输入0):');%补零则输入1,不补则输入0if(C==0)t=0:T:(N-1)*T;x=sin(2*pi*f*t);b=0;e lseb=input('输入补零的个数:');while(log2(N+b)~=fix(log2(N+b)))b=input('输入错误,请重新输入补零的个数:');endt=0:T:(N+b-1)*T;x=sin(2*pi*f*t).*(t<=(N-1)*T);end%%fft算法的实现A=bitrevorder(x);%将序列按二进制倒序N=N+b;M=log2(N);%M为蝶形算法的层数W=exp(-j*2*pi/N);for L=1:1:M%第L层蝶形算法B=2^L/2;%B为每层蝶形算法进行加减运算的两个数的间隔K=N/(2^L);%K为每层蝶形算法中独立模块的个数for k=0:1:K-1for J=0:1:B-1p=J*2^(M-L);%p是W的指数q=A(k*2^L+J+1);%用q来代替运算前面那个数A(k*2^L+J+1)=q+W^p*A(k*2^L+J+B+1);A(k*2^L+J+B+1)=q-W^p*A(k*2^L+J+B+1);endendend%%画模特性的频谱图z=abs(A);%取模z=z./max(z);%归一化hold onsubplot(2,1,1);stem(0:1:N-1,x,'DisplayName','z');title('时域信号');subplot(2,1,2);stem(0:1:N-1,z,'DisplayName','z');title('频谱图');figure(gcf)%画图2用FFT 程序计算有限长度正弦信号()sin(2),0*y t f t t N Tπ=≤<分别在以下情况下所得的DFT 结果并进行分析和讨论:a )信号频率f =50Hz ,采样点数N=32,采样间隔T=0.000625sb )信号频率f =50Hz ,采样点数N=32,采样间隔T=0.005sT=0.0046875sc)信号频率f=50Hz,采样点数N=32,采样间隔051015202530350510152025303505101520253035 e)信号频率f=50Hz,采样点数N=64,采样间隔T=0.000625sg)将c)信号后补32个0,做64点FFT三、实验分析DFT是对有限序列做傅里叶变换后在频域上进行采样,而相对应的时域以频谱上的采样频率的倒数进行周期拓展。
数字信号处理实验 matlab版 快速傅里叶变换(FFT)
实验14 快速傅里叶变换(FFT)(完美格式版,本人自己完成,所有语句正确,不排除极个别错误,特别适用于山大,勿用冰点等工具下载,否则下载之后的word 格式会让很多部分格式错误,谢谢)XXXX 学号姓名处XXXX一、实验目的1、加深对双线性变换法设计IIR 数字滤波器基本方法的了解。
2、掌握用双线性变换法设计数字低通、高通、带通、带阻滤波器的方法。
3、了解MA TLAB 有关双线性变换法的子函数。
二、实验内容1、双线性变换法的基本知识2、用双线性变换法设计IIR 数字低通滤波器3、用双线性变换法设计IIR 数字高通滤波器4、用双线性变换法设计IIR 数字带通滤波器三、实验环境MA TLAB7.0四、实验原理1、实验涉及的MATLAB 子函数(1)fft功能:一维快速傅里叶变换(FFT)。
调用格式:)(x fft y =;利用FFT 算法计算矢量x 的离散傅里叶变换,当x 为矩阵时,y 为矩阵x每一列的FFT 。
当x 的长度为2的幂次方时,则fft 函数采用基2的FFT 算法,否则采用稍慢的混合基算法。
),(n x fft y =;采用n 点FFT 。
当x 的长度小于n 时,fft 函数在x 的尾部补零,以构成n点数据;当x 的长度大于n 时,fft 函数会截断序列x 。
当x 为矩阵时,fft 函数按类似的方式处理列长度。
(2)ifft功能:一维快速傅里叶逆变换(IFFT)。
调用格式:)(x ifft y =;用于计算矢量x 的IFFT 。
当x 为矩阵时,计算所得的y 为矩阵x 中每一列的IFFT 。
),(n x ifft y =;采用n 点IFFT 。
当length(x)<n 时,在x 中补零;当length(x)>n 时,将x 截断,使length(x)=n 。
(3)fftshift功能:对fft 的输出进行重新排列,将零频分量移到频谱的中心。
调用格式:)(x fftshift y =;对fft 的输出进行重新排列,将零频分量移到频谱的中心。
利用MATLAB编写FFT快速傅里叶变换
一、实验目的1.利用MATLAB 编写FFT 快速傅里叶变换。
2.比较编写的myfft 程序运算结果与MATLAB 中的FFT 的有无误差。
二、实验条件PC 机,MATLAB7.0三、实验原理1. FFT (快速傅里叶变换)原理:将一个N 点的计算分解为两个N/2点的计算,每个N/2点的计算再进一步分解为N/4点的计算,以此类推。
根据DFT 的定义式,将信号x[n]根据采样号n 分解为偶采样点和奇采样点。
设偶采样序列为y[n]=x[2n],奇采样序列为z[n]=x[2n+1]。
上式中的k N W -为旋转因子N k j e /2π-。
下式则为y[n]与z[n]的表达式:2.蝶形变换的原理:下图给出了蝶形变换的运算流图,可由两个N/2点的FFT(Y[k]和Z[k]得出N点FFT X[k])。
同理,每个N/2点的FFT可以由两个N/4点的FFT求得。
按这种方法,该过程可延迟后推到2点的FFT。
下图为N=8的分解过程。
图中最右边的为8个时域采样点的8点FFTX[k],由偶编号采样点的4点FFT和奇编号采样点的4点得到。
这4点偶编号又由偶编号的偶采样点的2点FFT和奇编号的偶采样点的2点FFT产生。
相同的4点奇编号也是如此。
依次往左都可以用相同的方法算出,最后由偶编号的奇采样点和奇编号的偶采样点的2点FFT算出。
图中没2点FFT成为蝶形,第一级需要每组一个蝶形的4组,第二级有每组两个蝶形的两组,最后一级需要一组4个蝶形。
四、实验内容1.定义函数disbutterfly ,程序根据FFT 的定义:]2[][][N n x n x n y ++=、n N W N n x n x n z -+-=])2[][(][,将序列x 分解为偶采样点y 和奇采样点z 。
function [y,z]=disbutterfly(x)N=length(x);n=0:N/2-1;w=exp(-2*1i*pi/N).^n;x1=x(n+1);x2=x(n+1+N/2);y=x1+x2;z=(x1-x2).*w;2.定义函数rader ,纠正输出序列的输出顺序。
matlab中fft的用法
matlab中fft的用法
在MATLAB中,FFT(Fast Fourier Transform)是一种常用的快速傅里叶变换算法,用于计算离散时间信号的频谱。
FFT是一种高效算法,可以快速计算信号在时域和频域之间的转换。
下面是在MATLAB中使用FFT的一些基本步骤:
1. 定义信号:首先需要定义一个离散时间信号。
可以使用向量或矩阵来表示信号。
2. 计算FFT:使用fft函数来计算信号的FFT。
例如,可以输入以下命令来计算信号x的FFT:
```matlab
y = fft(x);
```
3. 显示频谱:使用plot函数来显示FFT计算得到的频谱。
例如,可以输入以下命令来显示信号x的频谱:
```matlab
plot(abs(y));
```
4. 进行傅里叶变换:如果需要对信号进行傅里叶变换,可以使用fft2函数来计算二维FFT。
例如,可以输入以下命令来计算图像x的傅里叶变换:
```matlab
Y = fft2(x);
```
5. 进行逆傅里叶变换:如果需要对信号进行逆傅里叶变换,可以使用ifft函数来计算。
例如,可以输入以下命令来对信号x进行逆傅里叶变换:
```matlab
x_inv = ifft(Y);
```
以上是在MATLAB中使用FFT的基本步骤。
需要注意的是,在进行FFT计算时,需要将信号转换为复数形式。
此外,在进行傅里叶变换时,需要将信号转换为二维形式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、实验目的
1.利用MATLAB 编写FFT 快速傅里叶变换。
2.比较编写的myfft 程序运算结果与MATLAB 中的FFT 的有无误差。
二、实验条件
PC 机,MATLAB7.0
三、实验原理
1. FFT (快速傅里叶变换)原理:
将一个N 点的计算分解为两个N/2点的计算,每个N/2点的计算再进一步分解为N/4点的计算,以此类推。
根据DFT 的定义式,将信号x[n]根据采样号n 分解为偶采样点和奇采样点。
设偶采样序列为y[n]=x[2n],奇采样序列为z[n]=x[2n+1]。
上式中的k N W -为旋转因子N k j e /2π-。
下式则为y[n]与z[n]的表达式:
2. 蝶形变换的原理:
下图给出了蝶形变换的运算流图,可由两个N/2点的FFT (Y[k]和Z[k]得出N 点FFT X[k])。
同理,每个N/2点的FFT 可以由两个N/4点的FFT 求得。
按这种方法,该过程可延迟后推到2点的FFT 。
下图为N=8的分解过程。
图中最右边的为8个时域采样点的8点FFTX[k],由偶编号采样点的4点FFT 和奇编号采样点的4点得到。
这4点偶编号又由偶编号的偶采
样点的2点FFT 和奇编号的偶采样点的2点FFT 产生。
相同的4点奇编号也是如此。
依次往左都可以用相同的方法算出,最后由偶编号的奇采样点和奇编号的偶采样点的2点FFT 算出。
图中没2点FFT 成为蝶形,第一级需要每组一个蝶形的4组,第二级有每组两个蝶形的两组,最后一级需要一组4个蝶形。
四、实验内容
1.定义函数disbutterfly ,程序根据FFT 的定义:]2[][][N n x n x n y +
+=、n N W N n x n x n z -+-=])2
[][(][,将序列x 分解为偶采样点y 和奇采样点z 。
function [y,z]=disbutterfly(x)
N=length(x);
n=0:N/2-1;
w=exp(-2*1i*pi/N).^n;
x1=x(n+1);
x2=x(n+1+N/2);
y=x1+x2;
z=(x1-x2).*w;
2.定义函数rader ,纠正输出序列的输出顺序。
function y=rader(x,N)
n=[0:N-1];
bn=dec2bin(n);
rbn=fliplr(bn);
rn=bin2dec(rbn);
y=x(rn+1);
3.定义函数myfft ,程序中套了两个循环。
function X=myfft(x)
N=length(x);
h=log2(N); %h=3
for i=1:h %第一次i=1;第二次i=2
s=[];
for j=1:2^(i-1);%i=1时,j=1;i=2时,j=1:2
M=2^(h-i+1);%M:M=8;M=4
xj=x([1:M]+(j-1)*M);%xj=x([1:8]+(1-1)*8)=x(1)+x(2)...+x(8); %j=1:xj=x([1:4]);j=2:xj=x([1:4]+4)
[y,z]=disbutterfly(xj);
s=[s,y,z];
end
x=s;
end
X=rader(x,N);
4.主程序,将myfft与fft相减,比较之间的误差。
a=[1,2,3,4,5,6,7,8];
X=fft(a);
X1=myfft(a);
X0=fft(a)-myfft(a);
subplot(4,1,1);
stem(a);
title('a序列');
subplot(4,1,2);
stem(X);
title('a序列的fft');
subplot(4,1,3);
stem(X1);
title('a序列的myfft');
subplot(4,1,4);
stem(X0);
title('fft(a)-myfft(a)');
图中可看出fft与myfft的图几乎一模一样,且fft-myfft所得到的值几乎为零(虽然在4时有不等于零的结果,但是其值为15-10数量级,误差极小)。
五、实验结论和讨论
1.通过自行编写FFT的运行程序,更加深入的了解了FFT的运算方法。
如果设x(n)为N项的序列,由DFT变换,任一X(m)的计算都需要N次复数乘法和N-1次复数加法,而一次复数乘法等于四次乘法和两次实数加法,一次复数加法等于两次实数加法,即使把一次复数乘法和一次复数加法定义成一次“运算”,那么求出N项复数序列的X(m),即N点DFT变换大约就需要N^2次运算。
当N=1024点甚至更多时,需要N2=1048576次运算,在FFT中,利用WN的周期性和对称性,把一个N项序列(设N=k2,k为正整数),分为两个N/2项的子序列,每个N/2点DFT变换需要(N/2)2次运算,再用N次运算把两个N/2点的DFT变换组合成一个N点的DFT变换。
这样变换以后,总的运算次数就变成N+(N^2)/2。
继续上
面的例子,N=1024时,总的运算次数就变成了525312次,节省了大约50%的运算量。
而如果我们将这种“一分为二”的思想不断进行下去,直到分成两两一组的DFT运算单元,那么N点的DFT变换就只需要Nlog2N次的运算,点数越多,运算量的节约就越大,这就是FFT的优越性。
2.本次实验中的myfft函数由两个子函数:disbutterfly和rader以及两个for循环组成。
这两个for循环分别实现了对于输入矩阵x[n]需要进行h次的蝶形运算和用于调用每次蝶形运算所需要的x[n]序列的第某号数。
3.这次实验是在老师的一步一步指导下完成的,在跟着老师的思路的完成程序的时候,我意识到自己虽然能意识到应该写的程序的轮廓以及程序要实现的功能,却不知道该如何将这种思想变为计算机的逻辑思想。
这让我知道自己对计算机思维转换的不熟练,需要更多的练习来巩固和完善自己。