为什么不能一个fft函数输出int数据类型?

13个视图(30天)
我想使用浮点和定点实验模型。我明白了fft不能处理定点数据但是它可以取整数数据类型但只有输出单引号和双浮点。为什么fft功能还不输出整数数据类型?
如果我输入一个整数数组转换成一个fft,然后将fft输出转换为整数数组会有任何内部chnages数据?
3评论
沃尔特·罗伯森
沃尔特·罗伯森 2021年5月14日
提醒我们,第一个输出本是信号的总和。无符号整数、零足够长的信号,将溢出整数数据类型。带符号整数它不一定会溢出,但它很容易。

登录置评。

答案(1)

安迪·巴特利特
安迪·巴特利特 2021年6月8日
编辑:安迪·巴特利特 2021年6月8日
MATLAB的内置类型通常用来支持操作产生一个相同类型的输出作为输入。
(主要的例外是标量自由与其他类型和逻辑混合双打也混合在某些情况下)。
世界上类型的豪华数字双和单一,通常是没有缺点都使用相同的输入和输出类型。
但正如沃尔特fft运算表明,均匀使用相同的整数输入和输出不适合需要。
当处理类型,没有豪华的大范围和精度,混合不同类型的输入,输出,状态,临时变量是一个久经考验的方法实现好的数字行为和效率的平衡。
定点类型在MATLAB仿真软件和支持这些类型的函数通常用来支持类型的混合万博1manbetx物。万博1manbetx看看FFT DSP系统作为一个MATLAB工具箱可调用系统提供的对象 dsp.FFT 或者 FFT块 。在它们的文档中,您将看到他们支持定点和提供不同类型的输入,输出,productDataTy万博1manbetxpe AccumulatorDataType。不同的元素可以有不同的字和可伸缩性。
下面的例子显示了dsp。FFT系统对象处理输入整数或定点。
《不扩散核武器条约》= 2 ^ 13;
halfN = npt / 2;
Fs = 800;
t = (0: nPts-1) / Fs;
阵线= linspace (0 f halfN);
x =罪(2 *π* 250 * t) + 0.75 * cos(2 *π* 340 * t) + 0.3 *罪(2 *π* 200 * t + 0.7 *π);
u = x + 3 * randn(大小(x));%噪声信号
u = int16 (4000 * u);
%可以将输入转换为fi喂养dsp.FFT之前
%,但不需要。
% u = fi (u);
ft2 = dsp.FFT;
y2 = ft2 (u);
情节(阵线、abs (y2 (1: halfN)))
宋惠乔
默认情况下,FFT自动选择输出数据类型的对象。
> > numerictype (y2)
ans =
DataTypeMode:定点:二进制扩展
Signedness:签署
字:29
FractionLength: 0
在引擎盖下,dsp。FFT是设计来处理定点对象,而不是内置的MATLAB整数。但对象有一个友好的设计,自动将内置整数输入转换为fi等价的。
如果你遇到一些代码问题处理内置整数,试着做一个转换
= int16 (1234)
b = fi (a)
c = castIntToFi (a)
这两种方法中的任何一个容易内置整数的fi等价转换。
一个=
int16
1234年
b =
1234年
numerictype (1 16 0)
c =
1234年
numerictype (1 16 0)

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!