你好,我要用matlab對x(t)exp t u t 做FFT的頻譜分析,程式應該如何寫

2021-09-05 10:57:08 字數 5554 閱讀 1201

1樓:

我也不是太懂,這是我從help 裡面給你找的一個例子,可以參考一下。

clc;

t = 0:0.001:0.6;

x = sin(2*pi*50*t)+sin(2*pi*120*t);

y = x + 2*randn(size(t));

subplot(2,1,1)

plot(1000*t(1:50),y(1:50))title('signal corrupted with zero-mean random noise')

xlabel('time (milliseconds)')subplot(2,1,2)

y = fft(y,512);

pyy = y.* conj(y) / 512;

f = 1000*(0:256)/512;

plot(f,pyy(1:257))

title('frequency content of y')xlabel('frequency (hz)')

2樓:匿名使用者

用help命令好好看看fft函式的使用說明

3樓:

>> n=0:15;

>> x=exp(-n);

>> subplot(2,1,1);stem(n,x);

>> subplot(2,1,2);stem(n,abs(fft(x)));

如何使用matlab,對一組資料進行fft變換,得到頻譜分析,萬分感謝。

4樓:匿名使用者

看看下面的程式,應該能幫上你的忙,已經通過除錯:

fs=256; %取樣頻率(hz)

n=256; %取樣點數

t=[0:1/fs:n/fs]; %取樣時刻

s=2+3*cos(2*pi*10*t+pi*30/180)+cos(2*pi*20*t+pi*90/180);

%我的除錯訊號,你自己是電流電壓資料的話,最開始通過load指令載入就是

y = fft(s,n); %做fft變換

ayy = abs(y); %取模

ayy=ayy/(n/2); %換算成實際的幅度

ayy(1)=ayy(1)/2;

f=([1:n]-1)*fs/n; %換算成實際的頻率值,fn=(n-1)*fs/n

stem(f(1:n/2),ayy(1:n/2)); %顯示換算後的fft模值結果

title('幅度-頻率曲線圖');

matlab中進行fft譜分析,如何將頻譜圖的橫座標轉換成頻率?

5樓:楊好巨蟹座

一.呼叫方法

x=fft(x);

x=fft(x,n);

x=ifft(x);

x=ifft(x,n)

用matlab進行譜分析時注意:

(1)函式fft返回值的資料結構具有對稱性。

例:n=8;

n=0:n-1;

xn=[4 3 2 6 7 8 9 0];

xk=fft(xn)

→xk =

39.0000 -10.7782 + 6.

2929i 0 - 5.0000i 4.7782 - 7.

7071i 5.0000 4.7782 + 7.

7071i 0 + 5.0000i -10.7782 - 6.

2929i

xk與xn的維數相同,共有8個元素。xk的第一個數對應於直流分量,即頻率值為0。

(2)做fft分析時,幅值大小與fft選擇的點數有關,但不影響分析結果。在ifft時已經做了處理。要得到真實的振幅值的大小,只要將得到的變換後結果乘以2除以n即可。

二.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:x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t),fs=100hz,繪製:

(1)資料個數n=32,fft所用的取樣點數nfft=32;

(2)n=32,nfft=128;

(3)n=136,nfft=128;

(4)n=136,nfft=512。

clf;fs=100; %取樣頻率

ndata=32; %資料長度

n=32; �t的資料長度

n=0:ndata-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); %求取振幅

f=(0:n-1)*fs/n; %真實頻率

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

xlabel('頻率/hz');ylabel('振幅');

title('ndata=32 nfft=32');grid on;

ndata=32; %資料個數

n=128; %t採用的資料長度

n=0:ndata-1;t=n/fs; %時間序列

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

y=fft(x,n);

mag=abs(y);

f=(0:n-1)*fs/n; %真實頻率

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

xlabel('頻率/hz');ylabel('振幅');

title('ndata=32 nfft=128');grid on;

ndata=136; %資料個數

n=128; �t採用的資料個數

n=0:ndata-1;t=n/fs; %時間序列

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

y=fft(x,n);

mag=abs(y);

f=(0:n-1)*fs/n; %真實頻率

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

xlabel('頻率/hz');ylabel('振幅');

title('ndata=136 nfft=128');grid on;

ndata=136; %資料個數

n=512; �t所用的資料個數

n=0:ndata-1;t=n/fs; %時間序列

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

y=fft(x,n);

mag=abs(y);

f=(0:n-1)*fs/n; %真實頻率

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

xlabel('頻率/hz');ylabel('振幅');

title('ndata=136 nfft=512');grid on;

結論:(1)當資料個數和fft採用的資料個數均為32時,頻率解析度較低,但沒有由於添零而導致的其他頻率成分。

(2)由於在時間域內訊號加零,致使振幅譜中出現很多其他成分,這是加零造成的。其振幅由於加了多個零而明顯減小。

(3)fft程式將資料截斷,這時解析度較高。

(4)也是在資料的末尾補零,但由於含有訊號的資料個數足夠多,fft振幅譜也基本不受影響。

對訊號進行頻譜分析時,資料樣本應有足夠的長度,一般fft程式中所用資料點數與原含有訊號資料點數相同,這樣的頻譜圖具有較高的質量,可減小因補零或截斷而產生的影響。

例3:x=cos(2*pi*0.24*n)+cos(2*pi*0.26*n)

(1)資料點過少,幾乎無法看出有關訊號頻譜的詳細資訊;

(2)中間的圖是將x(n)補90個零,幅度頻譜的資料相當密,稱為高密度頻譜圖。但從圖中很難看出訊號的頻譜成分。

(3)訊號的有效資料很長,可以清楚地看出訊號的頻率成分,一個是0.24hz,一個是0.26hz,稱為高解析度頻譜。

可見,取樣資料過少,運用fft變換不能分辨出其中的頻率成分。新增零後可增加頻譜中的資料個數,譜的密度增高了,但仍不能分辨其中的頻率成分,即譜的解析度沒有提高。只有資料點數足夠多時才能分辨其中的頻率成分。

形容「你好」的句子有哪些,形容我對你好一點你對我更好的句子有哪些?

一 這件事 抄我不想和你計較,希望你好好想一想。二 你好好掂量一下,看看這樣做會有什麼後果。三 雖然我很過分,但是都是為了你好。四 只要你好好學習了你的學習成績就會方心未艾的進步。五 你我之間沒有什麼舊恨新仇,我說你幾句完全是為你好,希望不要見怪。六 老兄的經濟困難,我很瞭解,但我的處境也比你好不了...

以後誰對我好,我就對誰好,我對你好不是你好,是我好請你搞清楚,怎麼回答

理解與尊重是互相的,付出不是為了回報,付出也不一定就有回報,但是我們還是要奉獻和付出,只要對方值得我們付出,對於任何一個人都是這樣的,世界上沒有無緣無故的愛,也沒有無緣無故的恨。要想別人對你好首先要付出,也要看看自己是不是值。不是教你怎麼回答,幫你分析一下 說的都這麼明白了,誰對你好你就對誰好,既然...

你好,我剛做了半永久眉,塗完修復液的之後要用棉籤擦掉嗎?輕輕

不用擦掉。紋身眉後,區域性塗上少量眼藥膏,然後沿眉毛的方向再反著擦拭,這樣就非常乾淨了,可以防止感染,也便於觀察紋身的均勻程度。對不均勻處可繼續紋刺,直到滿意為止。此外,除了要注意眉毛的設計,還要掌握眉毛的禁忌。如果眉毛和眉弓太倒或高或低,眉弓過高,眼睛是凹陷的,顴骨很高,眉毛不長眉弓上,或眉毛經常...