我正在嘗試使用MATLAB計算波形的傅立葉係數。所述係數可以使用下面的公式來計算:如何使用MATLAB計算傅立葉係數
T被選擇爲1,其給出的ω= 2PI。
但是我有問題執行積分。函數是三角波(如果我沒有錯誤,可以使用sawtooth(t,0.5)
生成)以及方波。
我試着用下面的代碼(對於三角波):
function [ a0,am,bm ] = test(numTerms)
b_m = zeros(1,numTerms);
w=2*pi;
for i = 1:numTerms
f1 = @(t) sawtooth(t,0.5).*cos(i*w*t);
f2 = @(t) sawtooth(t,0.5).*sin(i*w*t);
am(i) = 2*quad(f1,0,1);
bm(i) = 2*quad(f2,0,1);
end
end
但是它沒有得到接近我所需要的任何地方的值。 b_m係數給出了一個 三角波,並假設m爲奇數時從正項開始,1/m^2和-1/m^2。
我面臨的主要問題是我不太瞭解積分是如何在MATLAB中工作的,我不確定我選擇的方法是否有效。
編輯: 要clairify,這是我期待時寫的係數已被確定的函數形式:
下面是一個嘗試使用FFT:
function [ a0,am,bm ] = test(numTerms)
T=2*pi;
w=1;
t = [0:0.1:2];
f = fft(sawtooth(t,0.5));
am = real(f);
bm = imag(f);
func = num2str(f(1));
for i = 1:numTerms
func = strcat(func,'+',num2str(am(i)),'*cos(',num2str(i*w),'*t)','+',num2str(bm(i)),'*sin(',num2str(i*w),'*t)');
end
y = inline(func);
plot(t,y(t));
end
fft() – 0x90 2013-02-22 16:32:19
我有什麼問題我需要一個適合使用正弦和餘弦函數近似函數的係數,我真的不知道如何從fft給出的形式得到答案,所以我認爲這可能是一種更簡單的方法。 – Rick 2013-02-22 16:33:28
FFT在被積函數中使用表達式exp(i x)= cos(x)+ i sin(x),所以爲了得到cos和sin部分,你只需要取實部和虛部。 – roadrunner66 2013-02-22 16:41:23