matlab中使用FFT進行諧波分析的程式

時間 2021-08-30 11:02:52

1樓:匿名使用者

參考%二.fft應用舉例

%例1:x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t)。取樣頻率fs=100hz,分別繪製n=128、1024點幅頻圖。

clf;

fs=100;n=128; %取樣頻率和資料點數

n=0:n-1;

t=n/fs; %時間序列

x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %訊號

y=fft(x,n); %對訊號進行快速fourier變換

mag=abs(y); %求得fourier變換後的振幅

f=n*fs/n; %頻率序列

subplot(2,2,1),plot(f,mag); %繪出隨頻率變化的振幅

xlabel('頻率/hz');

ylabel('振幅');title('n=128');grid on;

subplot(2,2,2),plot(f(1:n/2),mag(1:n/2)); %繪出nyquist頻率之前隨頻率變化的振幅

xlabel('頻率/hz');

ylabel('振幅');title('n=128');grid on;

%對訊號取樣資料為1024點的處理

fs=100;n=1024;n=0:n-1;t=n/fs;

x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %訊號

y=fft(x,n); %對訊號進行快速fourier變換

mag=abs(y); %求取fourier變換的振幅

f=n*fs/n;

subplot(2,2,3),plot(f,mag); %繪出隨頻率變化的振幅

xlabel('頻率/hz');

ylabel('振幅');title('n=1024');grid on;

subplot(2,2,4)

plot(f(1:n/2),mag(1:n/2)); %繪出nyquist頻率之前隨頻率變化的振幅

xlabel('頻率/hz');

ylabel('振幅');title('n=1024');grid on;

%執行結果:

%fs=100hz,nyquist頻率為fs/2=50hz。整個頻譜圖是以nyquist頻率為對稱軸的。並且可以明顯識別出訊號中含有兩種頻率成

%分:15hz和40hz。由此可以知道fft變換資料的對稱性。因此用fft對訊號做譜分析,只需考察0~nyquist頻率範圍內的福頻特性。若沒有給

%出取樣頻率和取樣間隔,則分析通常對歸一化頻率0~1進行。另外,振幅的大小與所用取樣點數有關,採用128點和1024點的相同頻率的振幅是有不同的表

%現值,但在同一幅圖中,40hz與15hz振動幅值之比均為4:1,與真實振幅0.5:2是一致的。為了與真實振幅對應,需要將變換後結果乘以2除以n。

2樓:盧普龍

很多人問multilab的問題,,。可我就是不會啊

matlab中使用快速pca提取特徵

1 引數ma代表a的均值,也就是mean a 其實這個引數完全沒必要,因為可以從引數a計算得到。2 解釋一下你問的兩個語句的含義 z a repmat ma,m,1 作用是去除直流成分t z z 計算協方差矩陣的轉置 3 關於函式的呼叫 matlab統計工具箱中有函式princomp,也是進行主成分...

matlab中怎麼用fft變換求訊號的頻率,幅值和相位

i will not change no matter how u change 翻譯 電流不隨電壓的變化而變化。 懂點工程也要懂點生活 一 方法 把頻率值f先換算成角頻率,角頻率除以 2pi 在乘以你做fft的點數就可以。二 matlab的簡單介紹 matlab是美國mathworks公司出品的商...

c中使用bool函式的例子,C 中使用bool函式的例子

等待的幸福快樂 例子 bool 就兩個值,真或者假,通常用來儲存關係表示式或者邏輯表示式的結果。以前是用 int 來表示真假,大 int 有多個值,所以才規定 0 為假,非零為真,導致對應關係比較麻煩,有了 bool 就方便多了,如果把結果賦值給 bool 型別的變數,他會自動轉換,即把0轉換為假,...