主要内容

dsp。FFT

离散傅里叶变换

描述

dsp。FFT系统对象™使用快速傅立叶变换(FFT)计算输入的离散傅立叶变换(DFT)。该对象使用以下一个或多个快速傅立叶变换(FFT)算法,这取决于输入的复杂性以及输出是线性顺序还是位反转顺序:

  • 着算法

  • 半身的算法

  • 基数-2实时抽取(DIT)算法

  • 基数-2频率抽取(DIF)算法

  • 从FFTW中选择的算法[1][2]

计算输入的DFT:

  1. 创建dsp。FFT对象并设置其属性。

  2. 调用带有参数的对象,就像调用函数一样。

要了解更多关于System对象如何工作的信息,请参见什么是系统对象?

创建

描述

英国《金融时报》= dsp。FFT返回一个FFT对象,计算实数或复数的离散傅里叶变换(DFT)N使用快速傅里叶变换(FFT)沿第一个维度输入-D数组。

例子

英国《金融时报》= dsp。FFT (名称,值返回一个FFT对象,并将每个指定的属性设置为指定的值。将每个属性名用单引号括起来。未指定的属性有默认值。

属性

全部展开

除非另有说明,属性为nontunable,这意味着在调用对象后不能更改它们的值。对象在调用时锁定,而释放函数打开它们。

如果属性是可调,您可以随时更改其值。

有关更改属性值的更多信息,请参见在MATLAB中使用系统对象设计系统

指定用于FFT的实现作为之一汽车Radix-2,或FFTW.当您将此属性设置为Radix-2, FFT长度必须是2的幂。

指定输出通道元素的顺序相对于输入元素的顺序。将此属性设置为真正的按位反转顺序输出频率指数。默认值是,对应于频率指数的线性排序。

将此属性设置为真正的如果FFT的输出要除以FFT的长度。当你想要FFT的输出保持在与其输入相同的振幅范围时,这个选项是有用的。这在处理定点数据类型时特别有用。

该属性的默认值为没有扩展。

指定如何确定FFT长度为汽车财产.当您将此属性设置为汽车, FFT长度等于输入信号的行数。

FFT长度,指定为大于或等于2的整数。

如果适用以下任何条件,此属性必须为2的幂:

依赖关系

属性时应用此属性FFTLengthSource财产财产

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

当FFT长度小于输入长度时换行输入数据。如果该属性设置为true,则在FFT操作之前进行模块长度的数据包装,前提是FFT长度小于输入长度。如果此属性设置为false,则在FFT操作之前将输入数据截断为FFT长度。

定点属性

指定舍入方法。

将溢出操作指定为包装饱和

指定正弦表数据类型为与输入字长度相同自定义

将正弦表定点类型指定为未缩放类型numerictype(定点设计师)对象与一个Signedness汽车

依赖关系

属性时应用此属性SineTableDataType财产自定义

指定产品数据类型为完整的精度同样作为输入,或自定义

指定产品不动点类型作为缩放numerictype(定点设计师)对象与一个Signedness汽车

依赖关系

属性时应用此属性ProductDataType财产自定义

将累加器数据类型指定为完整的精度同样作为输入一样的产品,或自定义

指定累加器定点类型为缩放numerictype(定点设计师)对象与一个Signedness汽车

依赖关系

属性时应用此属性AccumulatorDataType财产自定义

将输出数据类型指定为完整的精度同样作为输入自定义

将输出定点类型指定为缩放类型numerictype(定点设计师)对象与一个Signedness汽车

依赖关系

属性时应用此属性OutputDataType财产自定义

使用

语法

描述

例子

y=英尺(x计算DFT,y的输入x沿着的第一个维度x

输入参数

全部展开

时域输入信号,指定为矢量、矩阵或N- d数组。

FFTLengthSource属性设置为“汽车”的长度。x第一个维度必须是2的正整数次幂。这个长度也是FFT的长度。当FFTLengthSource属性是“属性”中指定的值FFTLength属性必须是2的正整数幂。

变量大小的输入信号仅在FFTLengthSource属性设置为“汽车”

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|fi
复数的支持:是的

输出参数

全部展开

输入信号的离散傅里叶变换,以向量,矩阵或N- d数组。当FFTLengthSource属性设置为“汽车”, FFT长度与输入信号的行数相同。当FFTLengthSource属性设置为“属性”时,FFT长度通过FFTLength财产。

要支持具有可变大小数据的非二次方转换长度,请设置FFTImplementation财产“FFTW”

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|fi
复数的支持:是的

对象的功能

要使用对象函数,请将System对象指定为第一个输入参数。例如,释放名为obj,使用以下语法:

发行版(obj)

全部展开

一步 运行系统对象算法
释放 释放资源并允许更改系统对象属性值和输入特征
重置 的内部状态重置系统对象

例子

全部折叠

在加性噪声中求信号的频率分量。

请注意:本例仅在R2016b或更高版本中运行。如果您使用的是较早的版本,请将对函数的每次调用替换为等效函数一步语法。例如,myObject(x)变成step(myObject,x)。

Fs = 800;L = 1000;t = (0: l - 1) / Fs;X = sin(2* *250*t) + 0.75*cos(2* *340*t)Y = x + .5*randn(size(x));%噪声信号英国《金融时报》= dsp。FFT (“FFTLengthSource”“属性”...“FFTLength”, 1024);Y =英尺(Y);

绘制单边振幅谱

情节(Fs / 2 * linspace (0, 1512), 2 * abs (Y(1:512) / 1024))标题(“噪声信号y(t)单边振幅谱”)包含(的频率(赫兹));ylabel (“Y (f) | |”

图中包含一个axes对象。标题为噪声信号y(t)单边振幅谱的轴对象中包含一个线型的对象。

计算一个有噪声的正弦输入信号的FFT。信号的能量存储为FFT系数的大小平方。确定占信号能量99.99%的FFT系数,对这些系数取IFFT重构时域信号。将重构信号与原始信号进行比较。

请注意如果您使用的是R2016a或更早的版本,请将对对象的每次调用替换为等价的调用一步语法。例如,obj (x)就变成了步骤(obj (x))

考虑一个时域信号 x n ,它是在有限时间区间内定义的 0 n N - 1 .信号的能量 x n 由下式给出:

E N n 0 N - 1 | x n | 2

FFT系数, X k ,被认为是频域的信号值。信号的能量 x n 因此为FFT系数大小的平方和:

E N 1 N k 0 N - 1 | X k | 2

根据Parseval定理,信号在时域和频域的总能量是相同的。

E N n 0 N - 1 | x n | 2 1 N k 0 N - 1 | X k | 2

初始化

初始化一个dsp。SineWave系统目标生成一个44.1 kHz采样的频率为1000 Hz的正弦波。构造一个dsp。FFT而且dsp。传输线对象,计算输入信号的FFT和IFFT。

“FFTLengthSource”属性的值设置为“汽车”.FFT长度因此被认为是输入帧的大小。本例中的输入帧大小为1020,这不是2的幂,因此选择“FFTImplementation”作为“FFTW”

L = 1020;Sineobject = dsp。SineWave (“SamplesPerFrame”L,...“PhaseOffset”10...“SampleRate”, 44100,...“频率”, 1000);英国《金融时报》= dsp。FFT (“FFTImplementation”“FFTW”);界面张力= dsp。传输线(“FFTImplementation”“FFTW”...“ConjugateSymmetricInput”,真正的);rng (1);

流媒体

流中的噪声输入信号。计算每帧的FFT并确定构成信号99.99%能量的系数。对这些系数进行IFFT重构时域信号。

numIter = 1000;Iter = 1:numIter Sinewave1 = Sineobject();输入= Sinewave1 + 0.01*randn(size(Sinewave1));FFTCoeff =英尺(输入);FFTCoeffMagSq = abs (FFTCoeff) ^ 2;EnergyFreqDomain = (1 / L) *总和(FFTCoeffMagSq);[FFTCoeffSorted, ind] = sort(((1/L)*FFTCoeffMagSq),...1,“下”);CumFFTCoeffs = cumsum (FFTCoeffSorted);EnergyPercent = (CumFFTCoeffs / EnergyFreqDomain) * 100;Vec = find(EnergyPercent > 99.99);FFTCoeffsModified = 0 (L, 1);FFTCoeffsModified(印第安纳州(1:Vec (1))) = FFTCoeff(印第安纳州(1:Vec (1)));ReconstrSignal = ift (FFTCoeffsModified);结束

99.99%的信号能量可以用FFT系数的个数表示Vec (1)

Vec (1)
ans = 296

利用这些系数可以有效地重构信号。如果您将重构信号的最后一帧与原始时域信号进行比较,您可以看到差异非常小,并且图非常匹配。

马克斯(abs (Input-ReconstrSignal))
ans = 0.0431
情节(输入,‘*’);持有;情节(ReconstrSignal“o”);持有

图中包含一个axes对象。坐标轴对象包含两个line类型的对象。

算法

类中描述的算法、输入和输出FFT块引用页面。对象属性对应于块参数。

参考文献

[1] FFTW (https://www.fftw.org

[2] Frigo, M.和S. G. Johnson,“FFTW: FFT的自适应软件体系结构”,声学、语音和信号处理国际会议论文集, 1998年第3卷,第1381-1384页。

扩展功能

版本历史

介绍了R2012a

另请参阅

对象

Baidu
map