資源簡(jiǎn)介
給出了完整的FFT的C語(yǔ)言代碼,以及MATLAB的仿真效果,主要解決了FFT計(jì)算頻譜圖的問(wèn)題。注意大部分周期信號(hào)的最小非零頻率分量就是基波,但是還有很多信號(hào)并不是這樣:比如y=sin(2πx) +sin(3πx)的信號(hào)周期為2,對(duì)應(yīng)的基波角頻率為π,而頻譜圖中角頻率為π的那個(gè)點(diǎn)的幅度為0。

代碼片段和文件信息
#include?“fft.h“
inline?void?swap?(float?&a?float?&b)
{
????float?t;
????t?=?a;
????a?=?b;
????b?=?t;
}
void?bitrp?(float?xreal?[]?float?ximag?[]?int?n)
{
????//?位反轉(zhuǎn)置換?Bit-reversal?Permutation
????int?i?j?a?b?p;
????for?(i?=?1?p?=?0;?i?????????{
????????p?++;
????????}
????for?(i?=?0;?i?????????{
????????a?=?i;
????????b?=?0;
????????for?(j?=?0;?j?????????????{
????????????b?=?(b?<1)?+?(a?&?1);????//?b?=?b?*?2?+?a?%?2;
????????????a?>>=?1;????????//?a?=?a?/?2;
????????????}
????????if?(?b?>?i)
????????????{
????????????swap?(xreal?[i]?xreal?[b]);
????????????swap?(ximag?[i]?ximag?[b]);
????????????}
????????}
}
void?FFT(float?xreal?[]?float?ximag?[]?int?n)
{
????//?快速傅立葉變換,將復(fù)數(shù)?x?變換后仍保存在?x?中,xreal?ximag?分別是?x?的實(shí)部和虛部
????float?wreal?[N?/?2]?wimag?[N?/?2]?treal?timag?ureal?uimag?arg;
????int?m?k?j?t?index1?index2;
????bitrp?(xreal?ximag?n);
????//?計(jì)算?1?的前?n?/?2?個(gè)?n?次方根的共軛復(fù)數(shù)?W‘j?=?wreal?[j]?+?i?*?wimag?[j]??j?=?0?1?...??n?/?2?-?1
????arg?=?-?2?*?PI?/?n;
????treal?=?cos?(arg);
????timag?=?sin?(arg);
????wreal?[0]?=?1.0;
????wimag?[0]?=?0.0;
????for?(j?=?1;?j?????????{
????????wreal?[j]?=?wreal?[j?-?1]?*?treal?-?wimag?[j?-?1]?*?timag;
????????wimag?[j]?=?wreal?[j?-?1]?*?timag?+?wimag?[j?-?1]?*?treal;
????????}
????for?(m?=?2;?m?<=?n;?m?*=?2)
????????{
????????for?(k?=?0;?k?????????????{
????????????for?(j?=?0;?j?????????????????{
????????????????index1?=?k?+?j;
????????????????index2?=?index1?+?m?/?2;
????????????????t?=?n?*?j?/?m;????//?旋轉(zhuǎn)因子?w?的實(shí)部在?wreal?[]?中的下標(biāo)為?t
????????????????treal?=?wreal?[t]?*?xreal?[index2]?-?wimag?[t]?*?ximag?[index2];
????????????????timag?=?wreal?[t]?*?ximag?[index2]?+?wimag?[t]?*?xreal?[index2];
????????????????ureal?=?xreal?[index1];
????????????????uimag?=?ximag?[index1];
????????????????xreal?[index1]?=?ureal?+?treal;
????????????????ximag?[index1]?=?uimag?+?timag;
????????????????xreal?[index2]?=?ureal?-?treal;
????????????????ximag?[index2]?=?uimag?-?timag;
????????????????}
????????????}
????????}
}
void??IFFT?(float?xreal?[]?float?ximag?[]?int?n)
{
????//?快速傅立葉逆變換
????float?wreal?[N?/?2]?wimag?[N?/?2]?treal?timag?ureal?uimag?arg;
????int?m?k?j?t?index1?index2;
????bitrp?(xreal?ximag?n);
????//?計(jì)算?1?的前?n?/?2?個(gè)?n?次方根?Wj?=?wreal?[j]?+?i?*?wimag?[j]??j?=?0?1?...??n?/?2?-?1
????arg?=?2?*?PI?/?n;
????treal?=?cos?(arg);
????timag?=?sin?(arg);
????wreal?[0]?=?1.0;
????wimag?[0]?=?0.0;
????for?(j?=?1;?j?????????{
????????wreal?[j]?=?wreal?[j?-?1]?*?treal?-?wimag?[j?-?1]?*?timag;
????????wimag?[j]?=?wreal?[j?-?1]?*?timag?+?wimag?[j?-?1]?*?treal;
????????}
????for?(m?=?2;?m?<=?n;?m?*=?2)
????????{
????????for?(k?=?0;?k?????????????{
????????????for?(j?=?0;?j?????????????????{
????????????????index1?=?k?+?j;
????????????????index2?=?index1?+?m?/?2;
????????????????t?=?n?*?j?/?m;????//?旋轉(zhuǎn)因子?w?的實(shí)部在?wreal?[]?中的下標(biāo)為?t
????????????????treal?=?wreal?[t]?*
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????739??2018-07-21?16:28??FFT計(jì)算頻譜圖\C語(yǔ)言實(shí)現(xiàn)\Debug\.qmake.stash
?????文件??????90994??2018-08-20?23:41??FFT計(jì)算頻譜圖\C語(yǔ)言實(shí)現(xiàn)\Debug\debug\FFT.exe
?????文件??????25926??2018-08-20?23:41??FFT計(jì)算頻譜圖\C語(yǔ)言實(shí)現(xiàn)\Debug\debug\fft.o
?????文件??????17165??2018-08-20?23:41??FFT計(jì)算頻譜圖\C語(yǔ)言實(shí)現(xiàn)\Debug\debug\main.o
?????文件??????50744??2018-07-21?19:13??FFT計(jì)算頻譜圖\C語(yǔ)言實(shí)現(xiàn)\Debug\FFT
?????文件??????46808??2018-07-21?19:13??FFT計(jì)算頻譜圖\C語(yǔ)言實(shí)現(xiàn)\Debug\fft.o
?????文件???????7164??2018-07-21?18:53??FFT計(jì)算頻譜圖\C語(yǔ)言實(shí)現(xiàn)\Debug\input.txt
?????文件??????38043??2018-07-21?16:47??FFT計(jì)算頻譜圖\C語(yǔ)言實(shí)現(xiàn)\Debug\input1.txt
?????文件????????111??2018-07-21?16:34??FFT計(jì)算頻譜圖\C語(yǔ)言實(shí)現(xiàn)\Debug\input11.txt
?????文件??????32728??2018-07-21?19:09??FFT計(jì)算頻譜圖\C語(yǔ)言實(shí)現(xiàn)\Debug\main.o
?????文件??????26586??2018-08-20?22:54??FFT計(jì)算頻譜圖\C語(yǔ)言實(shí)現(xiàn)\Debug\Makefile
?????文件??????14483??2018-08-20?22:54??FFT計(jì)算頻譜圖\C語(yǔ)言實(shí)現(xiàn)\Debug\Makefile.Debug
?????文件??????14522??2018-08-20?22:54??FFT計(jì)算頻譜圖\C語(yǔ)言實(shí)現(xiàn)\Debug\Makefile.Release
?????文件?????147558??2018-07-21?18:59??FFT計(jì)算頻譜圖\C語(yǔ)言實(shí)現(xiàn)\Debug\output.txt
?????文件???????6442??2018-08-21?00:53??FFT計(jì)算頻譜圖\C語(yǔ)言實(shí)現(xiàn)\fft.cpp
?????文件????????662??2018-08-21?00:53??FFT計(jì)算頻譜圖\C語(yǔ)言實(shí)現(xiàn)\fft.h
?????文件????????142??2018-07-21?16:24??FFT計(jì)算頻譜圖\C語(yǔ)言實(shí)現(xiàn)\FFT.pro
?????文件??????23607??2018-08-21?00:21??FFT計(jì)算頻譜圖\C語(yǔ)言實(shí)現(xiàn)\FFT.pro.user
?????文件??????23662??2018-07-21?16:23??FFT計(jì)算頻譜圖\C語(yǔ)言實(shí)現(xiàn)\FFT.pro.user.6ed20e1
?????文件?????????92??2018-08-20?22:57??FFT計(jì)算頻譜圖\C語(yǔ)言實(shí)現(xiàn)\main.cpp
?????文件???????1164??2018-07-21?16:46??FFT計(jì)算頻譜圖\matlab驗(yàn)證試驗(yàn)\FFT.m
?????文件????????261??2018-07-21?18:43??FFT計(jì)算頻譜圖\readme.txt
?????文件?????347069??2018-07-21?19:13??FFT計(jì)算頻譜圖\實(shí)驗(yàn)結(jié)果\2018-07-21?19-13-22屏幕截圖.png
?????文件?????363558??2018-07-21?19:14??FFT計(jì)算頻譜圖\實(shí)驗(yàn)結(jié)果\2018-07-21?19-14-07屏幕截圖.png
????..A.SH.???????162??2018-08-20?22:47??FFT計(jì)算頻譜圖\實(shí)驗(yàn)結(jié)果\~$試驗(yàn)結(jié)果記錄.docx
?????文件?????792980??2018-07-21?19:25??FFT計(jì)算頻譜圖\實(shí)驗(yàn)結(jié)果\試驗(yàn)結(jié)果記錄.docx
?????目錄??????????0??2018-08-21?00:45??FFT計(jì)算頻譜圖\C語(yǔ)言實(shí)現(xiàn)\Debug\debug
?????目錄??????????0??2018-08-20?22:54??FFT計(jì)算頻譜圖\C語(yǔ)言實(shí)現(xiàn)\Debug\release
?????目錄??????????0??2018-08-21?00:45??FFT計(jì)算頻譜圖\C語(yǔ)言實(shí)現(xiàn)\Debug
?????目錄??????????0??2018-08-21?00:45??FFT計(jì)算頻譜圖\C語(yǔ)言實(shí)現(xiàn)
............此處省略6個(gè)文件信息
- 上一篇:MFC畫時(shí)鐘自適應(yīng)大小
- 下一篇:C++ 拼音輸入法
評(píng)論
共有 條評(píng)論