關於matlab的FFT不懂!急

2021-08-28 07:11:01 字數 3325 閱讀 1799

1樓:韓立騎紫靈

1 、一般頻域的取樣點要大於時域的取樣點,最好是2的冪數,便於計算。可以看看數字訊號處理這類的書 2、 假設取樣頻率為fs,訊號頻率f,取樣點數為n。那麼fft之後結果就是乙個為n點的複數。

每乙個點就對應著乙個頻率點。這個點的模值,就是該頻率值下的幅度特性。具體跟原始訊號的幅度有什麼關係呢?

假設原始訊號的峰值為a,那麼fft的結果的每個點(除了第乙個點直流分量之外)的模值就是a的n/2倍 所以這裡應該是 3 linspace(x0,x1,n) 其中n代表的是點的數目,即分成n-1等分。其實fs/2*linspace(0,1,nfft/2+1);就是在0到1之間分成nfft/2份,也就是fs/nfft,也就是設定間隔點的頻率。最後2*abs(y(1:

nfft/2+1)) 因為前面y = fft(x,nfft)/ nfft 是原來訊號的二分之一 所以要乘以2

假設fft之後某點n用複數a+bi表示,那麼這個複數的模就是an=根號a*a+b*b,相位就是pn=atan2(b,a)。根據以上的結果,

就可以計算出n點(n≠1,且n<=n/2)對應的訊號的表示式為:

an/(n/2)*cos(2*pi*fn*t+pn),即2*an/n*cos(2*pi*fn*t+pn)。

對於n=1點的訊號,是直流分量,幅度即為a1/n。

由於fft結果的對稱性,通常我們只使用前半部分的結果,即小於取樣頻率一半的結果。

2樓:匿名使用者

第乙個問題:fft()函式中,你設定的nfft變數 它的長度必須是2的冪次方,比如2 , 4 , 8 , 16,32之類的。l=50不滿足這要求。

這是因為fft是基於2的快速傅利葉變換。

關於matlab的fft的問題

3樓:

這問題好有意思,呵呵!一時不知如何形容。1.b[10]的確

跟a[10]沒關係,b[10]的確是代表第10個頻率點的相內位和幅值,理解完全容正確;2.b陣列的長度跟a陣列一致是fft演算法計算的結果,但是其實你也知道這頻譜是對稱的,所以去掉後一半資料繪圖即可;3.ft是沒有定位功能的,也就是你得不到對應a(1)的fft值,所以為了分析訊號的特徵才進一步發展出了短時ft和小波變換。

matlab中關於fft的問題 100

4樓:匿名使用者

現成的fft程式網上可以下到很多,但如何定義相似度需要考慮一下。可以考慮用相對變化率的形式(相對變化率=(數值1-數值2)/數值1 或者 相對變化率=(數值1-數值2)/數值2 )。

有一種情況跟你的需求很像:設計濾波器後說明濾波效果。這種情況,需要比較變化前後的訊號進行幅頻特性、相頻特性曲線,以此說明濾波效果。

在這一過程中就需要對兩個訊號分別進行fft變換,以求得幅頻曲線和相頻曲線。

具體過程如下:

step1:將橫座標定義為t(matlab賦值語句t=[*,*,*];),將縱座標定義為y(matlab賦值語句y=[*,*,*];),取樣頻率就是臨近兩個橫座標差值的倒數(一般橫座標都應為時間);

step2:新建乙個m檔案(快捷鍵為ctrl+n);

step3:將如下程式複製到m檔案中

t=[*,*,*];%填入橫軸資料

y=[*,*,*];%填入縱軸資料

n = size(t,2);%行向量時,列向量是為n = size(t,1);

n = 2^(nextpow2(n)-1);

y = fft(y,n);

mag_y = abs(y)/n*2;%各個頻率點處的幅值,這個就是fft變換後的資料

f = fs/2*linspace(0,1,n/2+1);%對應的頻率值

plot(f,mag_y(1:n/2+1))%顯示變換後的曲線

step4:親測例項

t = 1:0.001:10;

y= 2*sin(2*pi*100*t);%頻率為100hz

%***************==以下同step3中************====

n = size(t,2);%行向量時,列向量是為n = size(t,1);

n = 2^(nextpow2(n)-1);

y = fft(y,n);

mag_y = abs(y)/n*2;%各個頻率點處的幅值,這個就是fft變換後的資料

f = fs/2*linspace(0,1,n/2+1);%對應的頻率值

plot(f,mag_y(1:n/2+1))%顯示變換後的曲線

%***************==以上同step3中************====結果:

5樓:匿名使用者

就是分別對兩組資料做傅利葉變換,從頻域上來分析他們的相似度(也就是看他們的頻譜有什麼差別)。你能把資料給我嗎,我幫你看看。

關於matlab中fft與ifft的問題

6樓:淡定的先知

最後加一句

y = real(y);

real為求複數實部的函式

這樣x和y就一樣了,因為反變換後虛部係數都為零

7樓:

我試了下,我的是一樣的。。。。。。。。。。。

如何使用matlab,對一組資料進行fft變換,求得基波分量?十分感謝!

8樓:

x = load('data.dat'); %load 資料fs=10000; % 取樣頻率,自己根據實際情況設定n=length(x); % x 是待分析的資料n=1:n;

%1-fft

x=fft(x); % fft

x=x(1:n/2);

xabs=abs(x);

xabs(1) = 0; %直流分量置0

for i= 1 : m

[amax,index]=max(xabs);

if(xabs(index-1) > xabs(index+1))a1 = xabs(index-1) / xabs(index);

r1 = 1/(1+a1);

k01 = index -1;

else

a1 = xabs(index) / xabs(index+1);

r1 = 1/(1+a1);

k01 = index;

endfn = (k01+r1-1)*fs/n; %基波頻率an = 2*pi*r1*xabs(k01)/(n*sin(r1*pi)); %基波幅值

pn = phase(x(k01))-pi*r1; %基波相角 單位弧度

pn = mod(pn(1),pi);end

matlab求fft的圖形時,f 0 length y 1119 length y 是什麼意思

你的那個程式對初學者來說比較難理解,我幫你改了一下,概念比較清晰,你可以對照一下 fs 128 取樣頻率 n 512 取樣點數 dt 1 fs 時域最小間隔,即時域解析度 t 0 n 1 dt 取樣時間長度 df fs n 頻域最小間隔,即頻域解析度 f n 2 1 n 2 df x 5 sin 2...

關於matlab的氣泡排序法,matlab中氣泡排序法,要求對輸入的陣列元素進行排序

function n bub p n p if length size p 2 min size p 1,disp 引數必須為bai向量.else for i 1 length p for j 2 length p if n j 1 n j q n j 1 n j 1 n j n j q enden...

關於matlab的圖例,matlab中legend什麼意思

可以這樣,用 空格 把不想出現的示例替換掉。legend 解析解 模擬值 之前我也沒有弄好,但是這樣好,效果還可以。matlab中legend什麼意思 matlab中的legend是圖例的意思。legend 使用格式 legend string1,string2,string3,n string1 ...