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

2021-08-28 07:13:07 字數 1494 閱讀 6265

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編寫實現fft的程式

function y myditfft x 本程式對輸入序列實現dit fft基2演算法,點數取大於等於長度的2的冪次 myditfft.c m nextpow2 x 求的x長度對應的2的最低冪次m n 2 m if length x x x,zeros 1,n length x 若的長度不是2的冪...

c 中使用陣列對數值進行排序(選擇排序法)?

c 都幫你封裝好了 無腦呼叫sort函式就行了。c 中陣列的排序方法有哪些呢?除了氣泡排序 sort方法和reverse方法,c 還提供了許多其他的排序演算法和方法。下面對常用的排序方法進行簡要介紹 氣泡排序 bubble sort 氣泡排序是一種簡單的排序演算法,它通過比較兩個相鄰的元素,將較大的元素...

php中使用yii框架的問題,PHP中使用YII框架的問題

因為你users model的對應的表明沒改,在這個users模型類裡,有這樣的方法 public static function tablename users1是你的新表版名 而且直接執行 php yii 框架問題 元件的意思是封 裝了一定邏輯處理的,可以在控制器間共享使用的包。當你發版現你總是...