matlab傅里叶级数展开
生活随笔
收集整理的這篇文章主要介紹了
matlab傅里叶级数展开
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
傅里葉級數
- 傅里葉級數展開
- 傅里葉級數展開原理
- 源碼
- 方波
- 方波+三角波
- matalb 傅里葉級數展開結果圖片
傅里葉級數展開
傅里葉級數展開原理
周期函數可以通過一系列的三角函數的線性組合來逼近,傅里葉技術展開可以找到這些三角函數.
首先我們可以通過三角函數的正交性計算出傅里葉級數中的系數
源碼
方波
function F=fouriersquare syms x; %創建變量x T=0.00001; i=100; %諧波的階數 數字越大越接近直線 t=0:0.00000001:0.0001; %采樣點實際使用可調大 %如果創建-1,+1的方波直接調用square即可 %40是40%占空比 f=max(0.7055*square(pi*2*t/0.00001,40),0); %創建方波最大值是0.7055,最小值是0 除周期 %square(t,duty_cycle)產生一個周期為2 π,幅值為±1的周期性方波, duty_cycle占空比 %square輸入的數小于pi,就是1,大于pi小于2*pi就是-1。 %max取正數部分 plot(t,f); grid on; hold on; axis([0 5*10^(-5) -0.5 1.5]); A0=0.7055*2/5;%可根據函數直接算出 F=0; Fx=0; for n=1:iAs=int(0.7055*2*cos(2*pi*n*x/T)/T,x,0,2*T/5);%傅里葉系數an M = int ( fn, x, xmin, xmax )一重積分Bs=int(0.7055*2*sin(2*pi*n*x/T)/T,x,0,2*T/5);%傅里葉系數bnF=F+As*cos(2*pi*n*t/T)+Bs*sin(2*pi*n*t/T);%求傅里葉級數展開Fx=Fx+As*cos(2*pi*n*x/T)+Bs*sin(2*pi*n*x/T); end F=F+A0; Fx=Fx+A0; Fx %figure(2) plot(t,F)方波+三角波
function F=fourier_square(amplitude,duty_cycle,T,slope) syms x amp; %求傅里葉展開 %amplitude 幅值 %duty_cycle 占空比 %T 周期 %slope 斜率 %amplitude=0.7055; %duty_cycle=0.4; %T=0.00001; %slope=62125; i=20; %諧波的階數 數字越大越接近直線 t=0:T/1000:T*10; %采樣點范圍,調大更精確 deviant=(0.5-duty_cycle)*2; f=max(slope*T/2*((sawtooth((2*t/T+1.0+deviant)*pi)-deviant)),0)+max(amplitude*square(pi*2*t/T,duty_cycle*100),0); plot(t,f); grid on; hold on; axis([0 T*5 -0.5*amplitude 1.5*amplitude]); A0=amplitude*duty_cycle+1/2*slope*duty_cycle^2*T; F=0; Fx=0; for n=1:iAs=int(2*(amplitude+slope*x)*cos(2*pi*n*x/T)/T,x,0,T*duty_cycle);%傅里葉系數an M = int ( fn, x, xmin, xmax )一重積分Bs=int(2*(amplitude+slope*x)*sin(2*pi*n*x/T)/T,x,0,T*duty_cycle);%傅里葉系數bnendF=F+As*cos(2*pi*n*t/T)+Bs*sin(2*pi*n*t/T); %求傅里葉級數展開Fx=Fx+As*cos(2*pi*n*x/T)+Bs*sin(2*pi*n*x/T); end F=F+A0; Fx=Fx+A0; Fx plot(t,F) 簡單說明一下函數,本邏輯將電流分成三角波和方波的周期函數疊加,分別做傅里葉分 解。函數需要輸入周期函數的周期、方波的幅值、周期函數的占空比、以及三角波的斜率。 首先作出方波和三角波函數疊加后的圖像,而后將函數進行傅里葉分解,同時輸出傅里葉函 數直流、基波、二次諧波、三次諧波的幅值和角度用于 Ansys Maxwell 仿真時候加激勵源, 最后畫出傅里葉展開設定次數內函數疊加的圖片用于原函數對比傅里葉展開的收斂程度。函 數內有兩個可調值 i 和 t,i 為傅里葉分解的諧波的階數,數字越大越接近直線;t 為采樣 點范圍,數據越小越精確,但調大會讓仿真時間較長。 由于 matalb 只有幾種周期函數,因此實現目標電流函數需要通過位移、函數取正、更改 周期來實現。matalb 傅里葉級數展開結果圖片
結果展示: 收斂 i=20 結果仍有較多毛刺
收斂 i=50 時候較為接近
i 繼續增大仿真時間指數增加,因此沒有繼續,理論上 i 無限大時會與原曲線重合,從而驗 證傅里葉分解正確性
補充:實際matlab好像有自己傅里葉分解函數fft(),可以通過help查看用法,自己編寫函數會掉一些精度
參考引用
MATLAB實現周期信號的傅里葉級數的展開
方波信號傅里葉級數展開
總結
以上是生活随笔為你收集整理的matlab傅里叶级数展开的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Cocos2d-x CocosBuild
- 下一篇: 利用xposed自动获得微信个人收款二维