幾行Matlab代碼教你上手傅立葉變換

2021-02-20 摔鍋同學
直接開始,如果你不熟悉Matlab,可以將代碼直接複製到編輯區,然後回車看結果就可以了。

f0 = ones(1,n);

g0 = fft(f0);

figure, stem(f0), title('原函數');

figure, stem(abs(g0)), title('傅立葉變換的幅度');

% 實驗1

close all; clear; n = 64;

f1=sin([0:2*pi/n:2*pi]);

f1=f1(1:n);

figure,stem(f1),title('原函數');

g1 = fft(f1);

figure,stem(abs(g1)),title('傅立葉變換的幅度');

% 實驗2

close all; clear; n = 64; w=2;

f2=sin([0:2*pi/n*w:2*w*pi]);

f2=f2(1:n);

figure,stem(f2),title('原函數');

g2 = fft(f2);

figure,stem(abs(g2)),title('傅立葉變換的幅度');

你可以試著將上面代碼中的w改成不同的數值,例如3,4或5 ,看看結果有什麼不同。w=5時,你會看到下圖的結果:

最後我們生成一個複合函數,看一看函數圖形,然後再看一看其傅立法變換的幅度圖是什麼樣的。你是不是有恍然大悟的收穫?歡迎留言討論。

close all; clear; n=64; 

f0 = ones(1,n)*rand;

figure, stem(f0), title('原函數f0');

w=2;

f2=sin([0:2*pi/n*w:2*w*pi]);

f2=f2(1:n)*rand;

figure, stem(f2), title('原函數f2');

w=3;

f3=sin([0:2*pi/n*w:2*w*pi]);

f3=f3(1:n)*rand;

figure, stem(f3), title('原函數f3');

w=5;

f5=sin([0:2*pi/n*w:2*w*pi]);

f5=f5(1:n)*rand;

figure, stem(f5), title('原函數f5');

f = f0+f2+f3+f5;

figure, stem(f), title('合成函數f=f0+f2+f3+f5');

g = fft(f);

figure, stem(abs(g)), title('合成函數f的傅立葉變換幅度圖');

有沒有發現,上面傅立葉變換的例子,結果數據往往是對稱的,為什麼?如果大家有興趣,我再發文進一步分析。我們最初接觸傅立葉變換,應該是從高等數學開始的,以後在電路分析、信號處理、自動控制等一系列課程中又不斷遇到傅立葉變換的概念和問題。如何理解傅立葉變換,對很多同學而言就如同一隻攔路虎。網上有題如「傅立葉變換的物理意義」、「傅立葉變換的直觀解釋」等文章,寫得都還不錯,但是很多同學感覺似乎是理解了,但還是不會做題和應用。這篇文章,不僅要教你理解,還要教會你上手應用傅立葉變換。
一般教材介紹傅立葉變換,是從連續函數的變換入手的。推導過程即使看得懂,也很難立即用直觀的結果加以驗證。而傅立葉變換的應用,往往是採用離散形式以便於計算機處理。如果你通過本文,能夠理解和上手離散形式的傅立葉變換,對連續函數的傅立葉變換就能自然而然地理解了。

*********

感謝支持

*********

相關焦點

  • 10分鐘快速上手MATLAB,畫出你的第一個圖形!
    現在大家學業確實繁忙,所以先上手,會使用MATLAB,然後你再回過頭補補理論。這才叫,「知其然,然後知其所以然」。如果,你都不會用,知道那麼些個所以然的理論幹嘛呢。你就把他當作你的草稿紙,先把你的代碼寫到草稿紙上,寫錯了隨時改。2.按快捷鍵「Ctrl+N」創建。3.如果出現上圖這樣的窗口,你就擁有了專屬草稿紙!1.函數三要素:自變量、定義域以及對應法則。2.依次寫下你的三要素;實際上,這一步既是重點、也是難點,大部分同學都難在這一步。
  • 代碼 | 求解LP問題單純形法的Matlab代碼
    Contents求LP問題的基本(可行)解Matlab代碼
  • Python幾行代碼就能搞定!
    Python幾行代碼就能搞定,還可以指定輸出順序。VLOOKUP函數是Excel中的一個縱向查找函數,功能是按列查找,最終返回該列所需查詢序列所對應的值。 然而這樣的功能在Excel有點複雜,很多人往往記不住怎麼做,本文使用Python的Pandas幾行代碼就能搞定,還可以按指定的列進行輸出。
  • matlab常用函數大全
    >roy90 矩陣翻轉 90 度tril 矩陣的下三角triu 矩陣的上三角dot 向量點集cross 向量叉集ismember 檢測一個集合的元素intersect 向量的交集setxor 向量異或集setdiff 向是的差集union 向量的併集數值分析和傅立葉變換
  • matlab對於含nan值的數據均值計算誤解
    對於像我這種剛入門matlab的小白,在遇到「求含nan的二維矩陣均值」這個問題,首先是百度一下「matlab 含nan值求均值」,看到matlab裡面有封裝好的nanmean()函數,肯定是高興的,so easy!但是如果你不仔細去深究,可能永遠也不知道,你的結果是錯誤的。
  • ​Matlab入門 | 求曲線上波峰、波谷的最值
    作者:Daniel時間:2020/8/18問題導向,從零開始,快速上手,熟練掌握Matlab
  • ​Matlab入門教程 | 005編程示例:閉區間上二次函數的最值
    作者:Daniel時間:2020/8/18問題導向,從零開始,快速上手,熟練掌握Matlab。, 編寫matlab如果你需要對照參考,可以長按下面的二維碼,回覆:eg12b, 獲取一般情形的原始碼:長按上面的二維碼,回覆:003, 領取2.5G Matlab視頻+入門進階電子書!
  • 用Python寫幾行代碼,一分鐘搞定一天工作量,同事直呼:好傢夥!
    輸出的目標 Excel 文件命名為 Meeting_temp.xlsx基本邏輯寫代碼之前都先明確完整的問題需要分為幾個小步驟實現。從需求中我們大概可以將代碼分為以下幾步:「解析每一份 Word 文件,獲取需要的四個信息,輸出到 Excel 中;」有了邏輯就有了寫代碼的思路了。第 1 步可以由 glob 庫完成,後面兩步就是操作 Word 的 python-docx 庫和操作 Excel 的 openpyxl 庫的交互協作了。
  • matlab數值積分1:中點規則與複合中點規則
    matlab代碼如下:clear allf=@(x)x^2;a=0;b=2;for n = 10:10:100 h=(b-a)/(n+2); int0=0; for j = 0:n/2 xj=a+(2*j+1)*h; int0=int0+f(xj); end fprintf
  • 教你一個新用法,OFFSET函數2個參數就可以多表引用
    盧子,你是不是忽悠人?」忽悠你幹嘛,在VBA中的OFFSET函數就是2個參數OFFSET(向下幾行,向右幾列)。繼續使用昨天的案例,先來做一個測試。選擇B3:D3的區域,Range("B2:d2").Offset(1, 0).Select。
  • 為什麼你寫的代碼連code review(代碼審查)都過不了?!
    啊,代碼啊,如流水。可是你為何又那麼美。漂亮的代碼,就像一首詩一樣,讀來讓人心動。小司機就很想做一個詩人,用代碼進行創作。寫山,寫水,寫人生。咳咳。可現實是殘酷的,小司機最近寫的代碼,反反覆覆,修修改改,可是別說優美了,連code review都過不了!!!
  • 教你excel如何凍結行和列或同時凍結首行和首列
    今天商務辦公培訓老師給介紹的是如何凍結行、凍結列、同時凍結某行某列和取消凍結四個教程。 從上面的步驟我們也可以簡單理解為:凍結行和列的坐標是(行的字母+列的數字),比如首行和首列是(B和2的交叉點),實際的坐標是行B+列2=B2,即凍結幾行幾列的原理就是選擇
  • Matlab 十進位負數轉換十六進位,簡單實用
    對於負數轉十六進位,matlab沒有相關的函數可以直接轉換。原理一個是在計算機中表達,一個是科學計數方式表達。% tempdec = bin2dec(tempbin);% end想法很美好,取反得一個一個的取…+1還得一位一位的判斷,上面的代碼我沒有寫完,發現實在是太麻煩了。最優的方法這是網上找到的分享,其實道理很簡單,就是負數和正數相加得0,對於十六進位也是如此。
  • 【精品博文】matlab一些常用函數總結
    這樣做完之後得到m個大小為n的行向量,將這些行向量拼接即可得到矩陣b。fopen()是個將數據按指定格式讀入到matlab中的函數。
  • 你還敢亂寫代碼??
    根本沒有設計這個最可怕,所有需求,上手就是一頓擼,'設計是什麼東西?我一個文件 5w 行,一個函數 5k 行,幹不完需求?'從第一行代碼開始,就是無設計的,隨意地踩著滿地的泥坑,對於旁人的眼光沒有感覺,一個人獨舞,產出的代碼,完成了需求,毀滅了接手自己代碼的人。
  • 《第一行代碼》第三版贈書來了!
    還記得在《第二行代碼》出版的時候,我也給大家送了一些書。
  • 教你用最快的方法將 Excel 表格轉置!
    今天我們要說的是怎樣將一個 Excel 電子表格轉置,既然我們昨天說了怎樣用 Python 處理 Excel 電子表格,那麼今天我們就教你用 10 行代碼將一個表格轉置!才10行,有沒有忽然感覺神清氣爽?
  • 不會寫代碼的技術經理不是好CTO
    在過去的 20 年中,開發者社區呈指數級增長,開發人員的多樣性也隨之增加。換句話說,找到具有管理能力這種軟技能的開發人員其實並不困難。我非常信奉喬幫主說過的一句話:儘管技術經理不必是團隊中能力最出眾的開發人員,但至少他們應該對相關技術有所了解。當團隊成員向老闆提出技術建議時,技術經理應該能夠針對這些建議提供有價值的反饋。
  • 60行代碼實現Excel轉Word...
    於是,大概花了半個小時,寫個點Python代碼實現把Excel轉成了Word文檔。大概,表格長這樣。最終效果圖,大概是這樣的。公眾號回復"Excel轉Word"獲取代碼。蛋疼,有什麼好獲取的。直接拿去。