使用Matlab對采樣數據進行頻譜分析
1、采樣數據導入Matlab
采樣數據的導入至少有三種方法。
第一就是手動將數據整理成Matlab支持的格式,這種方法僅適用于數據量比較小的采樣。
第二種方法是使用Matlab的可視化交互操作,具體操作步驟為:File --> Import Data,然后在彈出的對話框中找到保存采樣數據的文件,根據提示一步一步即可將數據導入。這種方法適合于數據量較大,但又不是太大的數據。據本人經驗,當數據大于15萬對之后,讀入速度就會顯著變慢,出現假死而失敗。
第三種方法,使用文件讀入命令。數據文件讀入命令有textread、fscanf、load 等,如果采樣數據保存在txt文件中,則推薦使用 textread命令。如
[a,b]=textread('data.txt','%f%*f%f'); 這條命令將data.txt中保存的數據三個三個分組,將每組的第一個數據送給列向量a,第三個數送給列向量b,第二個數據丟棄。命令類似于C語言,詳細可查看其幫助文件。文件讀入命令錄入采樣數據可以處理任意大小的數據量,且錄入速度相當快,一百多萬的數據不到20秒即可錄入。強烈推薦!
2、對采樣數據進行頻譜分析
頻譜分析自然要使用快速傅里葉變換FFT了,對應的命令即 fft ,簡單使用方法為:Y=fft(b,N),其中b即是采樣數據,N為fft數據采樣個數。一般不指定N,即簡化為Y=fft(b)。Y即為FFT變換后得到的結果,與b的元素數相等,為復數。以頻率為橫坐標,Y數組每個元素的幅值為縱坐標,畫圖即得數據b的幅頻特性;以頻率為橫坐標,Y數組每個元素的角度為縱坐標,畫圖即得數據b的相頻特性。典型頻譜分析M程序舉例如下:
clc
fs=100;
t=[0:1/fs:100];
N=length(t)-1;%減1使N為偶數
%頻率分辨率F=1/t=fs/N
p=1.3*sin(0.48*2*pi*t)+2.1*sin(0.52*2*pi*t)+1.1*sin(0.53*2*pi*t)... +0.5*sin(1.8*2*pi*t)+0.9*sin(2.2*2*pi*t);
%上面模擬對信號進行采樣,得到采樣數據p,下面對p進行頻譜分析
figure(1)
plot(t,p);
grid on
title('信號 p(t)');
xlabel('t')
ylabel('p')