fft
快速傅里叶变换
描述
例子
噪声信号
用傅里叶变换找到埋在信号噪声的频率成分。
指定的参数信号1 kHz的采样频率和信号持续时间1.5秒。
Fs = 1000;%采样频率T = 1 / f;%采样周期L = 1500;%长度的信号t = t (0: l - 1) *;%的时间向量
形成一个包含50赫兹的信号正弦信号的振幅0.7和120赫兹正弦信号的振幅1。
S = 0.7 * sin(2 *π* 50 * t) +罪(2 *π* 120 * t);
腐败与零均值白噪声信号的方差4。
X = S + 2 * randn(大小(t));
噪声信号在时域的阴谋。难以识别的频率成分通过查看信号X (t)
。
情节(1000 * t (1:50) X(1:50))标题(“与零均值随机噪声信号损坏”)包含(“t(毫秒)”)ylabel (“X (t)”)
计算信号的傅里叶变换。
Y = fft (X);
计算双边频谱P2
。然后计算出单面频谱P1
基于P2
和even-valued信号长度l
。
P2 = abs (Y / L);P1, P2 (1: L / 2 + 1);P1 (2: end-1) = 2 * P1 (2: end-1);
频域定义f
单面振幅谱和情节P1
。0.7和1振幅并不完全,正如所料,由于增加了噪音。平均时间信号产生更好的频率近似。
f = f * (0: (L / 2)) / L;情节(f, P1)标题(“单面振幅谱的X (t)”)包含(“f (Hz)”)ylabel (“| P1 (f) |”)
现在,进行傅里叶变换的原始,未堕落的信号和检索的振幅,0.7和1.0。
Y = fft(年代);P2 = abs (Y / L);P1, P2 (1: L / 2 + 1);P1 (2: end-1) = 2 * P1 (2: end-1);情节(f, P1)标题(“S (t)单面振幅谱”)包含(“f (Hz)”)ylabel (“| P1 (f) |”)
高斯脉冲
将高斯脉冲从时域到频域。
指定一个信号的参数44.1 kHz的采样频率和信号持续时间为1毫秒。创建一个高斯脉冲标准差为0.1 ms。
Fs = 44100;%采样频率T = 1 / f;%采样周期t = -0.5: 0.5;%的时间向量L =长度(t);%信号长度X = 1 /(0.4 *√(2 *π))* (exp (- t ^ 2 / (2 * (0.1 * 1 e - 3) ^ 2)));
脉冲在时域的阴谋。
情节(t, X)标题(“高斯脉冲在时间域”)包含(“时间(t)”)ylabel (“X (t)”)轴([1 e - 3 1 e - 3 0 1.1])
的执行时间fft
取决于变换的长度。变换长度,只有小'因素导致更快的执行时间比那些大的主要因素。
在这个例子中,信号长度l
是44101,这是一个非常大的质数。改进的性能fft
确定输入长度,是下一个从原始信号长度2的幂。调用fft
输入长度垫脉冲X
与落后0指定变换长度。
n = 2 ^ nextpow2 (L);
高斯脉冲转换为频域。
Y = fft (X, n);
定义了频域和情节独特的频率。
f = f * (0: (n / 2)) / n;P = abs (Y / n) ^ 2;情节(f P (1: n / 2 + 1)标题(“高斯脉冲在频域”)包含(“f (Hz)”)ylabel (“| P (f) | ^ 2”)
余弦波
比较余弦波在时域和频域。
指定的参数信号1 kHz的采样频率和信号持续时间1秒。
Fs = 1000;%采样频率T = 1 / f;%采样周期L = 1000;%长度的信号t = t (0: l - 1) *;%的时间向量
创建一个矩阵,每一行代表一个余弦波的频率了。结果,X
3 -到- 1000矩阵。第一行有一个波的频率,第二行波频率为150,第三行波频率为300。
x1 = cos(2 *π* 50 * t);%第一行波x2 = cos(2 *π* 150 * t);%第二行波x3 = cos(2 *π* 300 * t);%第三行波X = [x1;x2;x3);
每一行的前100个条目X
在一个图,比较它们的频率。
为i = 1:3次要情节(3、1,i)情节(t (1:10 0) X(我,1:10 0))标题(“行”+ num2str(我)+“在时域”)结束
指定昏暗的
参数使用fft
的行X
,为每一个信号。
昏暗的= 2;
计算信号的傅里叶变换。
Y = fft (X, L,昏暗的);
计算每个的双面谱和单面谱信号。
P2 = abs (Y / L);P1, P2 (: 1: L / 2 + 1);P1 (: 2: end-1) = 2 * P1 (:, 2: end-1);
在频域中,画出单面振幅谱为每一行在一个单一的数字。
为i = 1:3次要情节(3、1,i)图(0:(Fs / L): (Fs / 2 - f / L), P1(我,1:L / 2)标题(“行”+ num2str(我)+“在频域”)结束
阶段的正弦曲线
创建一个包含两个正弦信号的频率的信号15赫兹和40 Hz。第一个正弦信号相位的余弦波 ,第二个是相位的余弦波 。样品在100赫兹的信号。
Fs = 100;t = 0:1 / Fs: 1 - 1 / f;x = cos(2 *π* 15 * t -π/ 4)+ cos(2 *π* 40 * t +π/ 2);
计算信号的傅里叶变换。情节的大小变换作为频率的函数。
y = fft (x);z = fftshift (y);ly =长度(y);f =(以某方式/ 2:ly / 2 - 1) / ly * Fs;茎(f、abs (z))标题(“x (t)的双面振幅谱”)包含(“频率(赫兹)”)ylabel (“y | |”网格)
计算转换的阶段,消除较小变换值。绘制阶段作为频率的函数。
托尔= 1 e-6;z (abs (z) < tol) = 0;θ=角(z);茎(f,θ/ pi)标题(“x (t)的相位谱”)包含(“频率(赫兹)”)ylabel (“阶段/ \π”网格)
插值FFT的
插入一个信号的傅里叶变换和零填充。
指定的参数信号采样频率为80赫兹的信号持续时间0.8秒。
Fs = 80;T = 1 / f;L = 65;t = t (0: l - 1) *;
创建一个2赫兹正弦信号叠加及其高次谐波。信号包含一个2赫兹余弦波,4赫兹余弦波和6赫兹正弦波。
X = 3 * cos(2 *π* 2 * t) + 2 * cos(2 * 4π* * t) +罪(2 *π* 6 * t);
信号在时域的阴谋。
情节(t, X)标题(“时域信号叠加”)包含(“t”(ms))ylabel (“X (t)”)
计算信号的傅里叶变换。
Y = fft (X);
计算出单面振幅谱的信号。
f = f * (0: (L - 1) / 2) / L;P2 = abs (Y / L);P1, P2 (1: (L + 1) / 2);P1(2:结束)= 2 * P1(2:结束);
在频域中,单面频谱。因为信号的采样时间相当短,傅里叶变换的频率分辨率不够精确的峰值频率附近4赫兹。
情节(f, P1,“o”)标题(“原始信号的单面谱”)包含(“f (Hz)”)ylabel (“| P1 (f) |”)
为了更好地评估峰值频率,你可以增加分析窗口的长度用0填充原始信号。该方法自动插入的傅里叶变换的信号更精确的频率分辨率。
确定一个新的输入长度是下一个2的幂的原始信号长度。垫的信号X
与落后的零扩展它的长度。计算的傅里叶变换在信号。
n = 2 ^ nextpow2 (L);Y = fft (X, n);
计算单面的振幅谱的信号。因为信号的长度n
从65增加到128,频率分辨率Fs / n
0.625赫兹。
f = f * (0: (n / 2)) / n;P2 = abs (Y / L);P1, P2 (1: n / 2 + 1);P1 (2: end-1) = 2 * P1 (2: end-1);
情节的单面频谱的信号。这个新的光谱显示了峰值频率附近2赫兹,4赫兹、6赫兹在0.625赫兹的频率分辨率。
情节(f, P1,“o”)标题(“单面垫的光谱信号”)包含(“f (Hz)”)ylabel (“| P1 (f) |”)
输入参数
X
- - - - - -输入数组
向量|矩阵|多维数组
输入数组,指定为一个向量,矩阵,或多维数组。
如果X
是一个空0-by-0矩阵,然后呢fft (X)
返回一个空0-by-0矩阵。
数据类型:双
|单
|int8
|int16
|int32
|uint8
|uint16
|uint32
|逻辑
复数的支持:金宝app是的
n
- - - - - -变换长度
[]
(默认)|非负整数标量
变换长度指定为[]
或者一个非负整数标量。指定一个正整数的标量变换长度可以改善的性能fft
。长度通常指定为2的乘方或值,可以分解成小的产物质数(素数因子不大于7)。如果n
小于信号的长度,然后呢fft
忽略了其余的信号值过去n
th条目并返回截断的结果。如果n
是0
,然后fft
返回一个空矩阵。
例子:n = 2 ^ nextpow2(大小(X, 1))
数据类型:双
|单
|int8
|int16
|int32
|uint8
|uint16
|uint32
|逻辑
昏暗的
- - - - - -维一起操作
正整数标量
维操作,指定为一个正整数标量。如果你不指定维度,那么默认的是第一个数组大小尺寸大于1。
fft (X, [], 1)
操作的列X
并返回每一列的傅里叶变换。fft (X, [], 2)
沿着一排排的运作X
并返回每一行的傅里叶变换。
如果昏暗的
大于ndims (X)
,然后fft (X,[],昏暗的)
返回X
。当n
是指定的,fft (X, n,昏暗的)
垫或截断X
长度n
沿着维度昏暗的
。
数据类型:双
|单
|int8
|int16
|int32
|uint8
|uint16
|uint32
|逻辑
输出参数
Y
——频域表示
矩阵向量| |多维数组
频域表示返回为一个向量,矩阵,或多维数组。
如果X
的类型是单
,然后fft
在单精度本地计算,Y
类型的也单
。否则,Y
返回类型双
。
的大小Y
如下:
为
Y = fft (X)
或Y = fft (X,[],昏暗的)
的大小Y
等于的大小X
。为
Y = fft (X, n,昏暗的)
的价值,大小(Y,昏暗的)
等于n
,而所有其他维度的大小仍在X
。
如果X
是真实的,那么Y
共轭对称,独特的点的数量吗Y
是装天花板((n + 1) / 2)
。
数据类型:双
|单
更多关于
离散傅里叶变换的向量
Y = fft (X)
和X =传输线(Y)
分别实现傅里叶变换和傅里叶反变换。为X
和Y
的长度n
,这些变换定义如下:
在哪里
是其中之一n根的团结。
提示
的执行时间
fft
取决于变换的长度。变换长度,只有小'因素(不大于7)导致更快的执行时间比黄金或大的主要因素。对于大多数的值
n
,实质性贡献阶需要大约一半的计算时间复杂的输入阶。然而,当n
有大的主要因素,很少或没有速度的差异。你可以增加的速度
fft
使用效用函数fftw
。这个函数控制的优化算法用于计算FFT的一个特定的大小和尺寸。
引用
[1]FFTW (https://www.fftw.org)
[2]冻结器,M。,和S. G. Johnson. “FFTW: An Adaptive Software Architecture for the FFT.”国际会议声学学报》,演讲,和信号处理。3卷,1998年,页1381 - 1384。
扩展功能
C / c++代码生成
生成C和c++代码使用MATLAB®编码器™。
使用笔记和限制:
相关的限制来适应数据,看看适应限制工具箱函数的代码生成(MATLAB编码器)。
对墨西哥人输出,MATLAB®编码器™使用MATLAB所使用的库进行FFT算法。对于独立的C / c++代码,默认情况下,FFT算法的代码生成器生成的代码,而不是生产FFT库调用。生成调用一个特定的安装FFTW库,提供一个FFT图书馆回调类。一个FFT图书馆回调类的更多信息,见
coder.fftw.StandaloneFFTW3Interface
(MATLAB编码器)。的模拟MATLAB函数块,MATLAB仿真软件使用库使用FFT算法。对于C / c++代码生成,默认情况下,FFT算法的代码生成器生成的代码,而不是生产FFT库调用。生成调用一个特定的安装FFTW库,提供一个FFT图书馆回调类。一个FFT图书馆回调类的更多信息,见
coder.fftw.StandaloneFFTW3Interface
(MATLAB编码器)。使用代码替换库(CRL),您可以生成优化上运行的代码手臂®皮质®——与氖扩展处理器。要生成这个优化的代码,您必须安装嵌入式编码器®金宝app支持包臂Cortex-A处理器(嵌入式编码支持包臂Cortex金宝app-A处理器)。生成的代码手臂皮层——使用Ne10库。有关更多信息,请参见Ne10条件MATLAB函数支持ARM Cortex-A处理器金宝app(嵌入式编码支持包臂Cortex金宝app-A处理器)。
使用代码替换库(CRL),您可以生成优化上运行的代码手臂皮层- m处理器。要生成这个优化的代码,您必须安装嵌入式编码支持包臂Cortex金宝app-M处理器(嵌入式编码支持包臂Cortex金宝app-M处理器)。生成的代码手臂皮层使用- m CMSIS库。有关更多信息,请参见CMSIS条件MATLAB函数支持ARM Cortex-M处理器金宝app(嵌入式编码支持包臂Cortex金宝app-M处理器)。
GPU的代码生成
生成NVIDIA的CUDA®代码®GPU使用GPU编码器™。
线程环境
在后台运行代码使用MATLAB®backgroundPool
与并行计算工具箱™或加速代码ThreadPool
。
这个函数完全支持线程的环境。金宝app有关更多信息,请参见MATLAB函数线程环境中运行。
GPU数组
加速代码运行在一个图形处理单元(GPU)使用并行计算工具箱™。
的fft
函数部分支持GPU数组。金宝app一些语法的函数运行在GPU当你指定输入数据gpuArray
(并行计算工具箱)。使用笔记和限制:
输出
Y
总是复杂的,即使所有的虚部为零。
有关更多信息,请参见运行在GPU MATLAB函数(并行计算工具箱)。
分布式阵列
分区大数组在内存使用并行计算集群的工具箱相结合™。
使用笔记和限制:
对分布式阵列,而不是使用并行FFT算法,
fft
收集向量在单个工人执行'长度fft算法。对于大型prime-length向量fft算法,会导致内存不足的错误。
有关更多信息,请参见运行MATLAB函数与分布式阵列(并行计算工具箱)。
版本历史
之前介绍过的R2006a
MATLAB命令
你点击一个链接对应MATLAB命令:
运行该命令通过输入MATLAB命令窗口。Web浏览器不支持MATLAB命令。金宝app
你也可以从下面的列表中选择一个网站:
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。