2015-04-06 92 views
0

我想根据我保存在文件上的测量值来表示FFT。 该文件的格式为[频率,幅度]即Matlab - fft form ascii

0,00;0,15; 
3,91;0,34; 
7,81;0,60; 
11,72;1,66; 
15,63;3,66; 
19,53;0,98; 
23,44;0,60; 
27,34;0,44; 
31,25;0,35; 
35,16;0,29; 
39,06;0,25; 
42,97;0,22; 
46,88;0,20; 

如何可以绘制这些数据?

回答

0

从文件读取这个问题时,它使用逗号而不是点来分隔小数。为了避免任何这方面的问题,您可以在MATLAB读取该文件为文本(导致一个字符串变量)的内容,代之以分逗号:

fileContent = fileread('input_file.txt'); 
fileContent = strrep(fileContent ,',','.'); 

接下来,您可以使用sscanf(字符串扫描)函数从字符串中提取浮点值(%f)。用[2,inf]指定您希望输出具有所需的两行和多列。

A = sscanf(fileContent ,'%f;%f;\n',[2,inf]); 

您然后具有与第一行中的频率和相应的值在第二行中的阵列A。有了这个,你可以创建你喜欢的任何情节,例如

stem(A(1,:),A(2,:)); 
title('FFT of a signal'); 
xlabel('Frequency (Hz)'); 
ylabel('Amplitude'); 
+0

您的解决方案似乎工作,寿IM绘图数据,并将其返回像[链接] http://i.imgur.com/lWKu9bL.png?1这看起来不可思议的曲线图。我有点想我应该取平均值来得到一个曲线,而不是一堆点。但那是另一件我不能在matlab中做的事情:P干杯。 – 2015-04-06 09:23:10

+0

看起来很奇怪。在文件末尾是否有奇怪的条目(例如frequency = 0)(或者更好:矩阵'A')?或者有可能数据在文件中重复多次?即在频率500之后,它从0开始,依此类推? – hbaderts 2015-04-06 09:29:22

+0

我有一个0频率与一些振幅的条目,但这很自然。看来解决方案在于你的第二个假设,我有多个条目。试着用第一组0-500频率,其中500hz对奈奎斯特频率做出反应,并取得了诀窍。但是我认为FFT对于一个周期来说不是那么准确,而不是对于几个周期。 – 2015-04-06 09:36:36