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 ...