我正在尝试将FFT应用于4008x2
大小的数组。数据从excel导入。
按照Mathworks中显示的示例,他们会说如果我有一个数组(矩阵),那么fft(X)
会将X
的列视为向量,并返回每列的傅里叶变换
我这样做如下
format long
filename='Dean_Ignacio2.xls';
sheet=1;
xlRange='A9:B4008';
subsetA=xlsread(filename,sheet,xlRange);
f=fft(subsetA);
plot(f)
但FFT中的每个元素都显示为NaN + NaNi
。我错过了什么?
答案 0 :(得分:0)
如果将fft
应用于MATLAB中包含任何NaN
值的变量,则fft
输出中的每个值都将包含NaN + NaNi
。 NaN
代表非数字,并且最有可能发生,因为您从excel文件导入的某些数据不是MATLAB可以解释的有效数字数据。它可以像在excel文件中将数据格式化为test一样简单。
NaN
>> A = zeros(4008, 2);
>> A(randi(numel(A), 10)) = NaN; % Make 10 random values NaN
>> any(isnan(A))
ans =
1 1
如果any(isnan(A))
返回1
,则输入数据中至少有1个值为NaN
,而fft(A)
将为每个元素返回NaN + NaNi
。
MATLAB中的xlsread
函数可以使用多个输出参数从正在读取的excel文件返回numeric data, text data or the raw data。我建议你用
>> [num, txt, raw] = xlsread(filename, sheet, xlRange);
从excel文件中读取数据。然后,您可以检查输出以确定MATLAB正在为每种类型读取的内容。数字数据位于num
中(与问题中的subsetA
相同),文本数据位于txt
,原始数据位于raw
。< / p>