2015-04-06 133 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