久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
VC++6.0測(cè)試的FFT程序(快速傅里葉變換)
[打印本頁(yè)]
作者:
heise
時(shí)間:
2014-8-18 21:37
標(biāo)題:
VC++6.0測(cè)試的FFT程序(快速傅里葉變換)
#include"stdio.h"
#include "math.h"
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
#define PI 3.141592653589793238462643 //定義圓周率
#define FFT_N 64 //采樣點(diǎn)數(shù)
typedef struct Compex //復(fù)數(shù)結(jié)構(gòu)體
{
double real;
double image;
}COMPLEX;
COMPLEX FFT_result[FFT_N]={{1,0},{3,0},{2,0},{5,0},{8,0},{4,0},{1,0},{3,0},{2,0},{5,0},{8,0},{4,0},{1,0},{3,0},{2,0},{5,0},{8,0},{4,0},{1,0},{3,0},{2,0},{5,0},{8,0},{4,0},{1,0},{3,0},{2,0},{5,0},{8,0},{4,0},{1,0},{3,0},{2,0},{5,0},{8,0},{4,0},{1,0},{3,0},{2,0},{5,0},{8,0},{4,0},{1,0},{3,0},{2,0},{5,0},{8,0},{4,0},{1,0},{3,0},{2,0},{5,0},{8,0},{4,0},{1,0},{3,0},{2,0},{5,0},{8,0},{4,0},{1,0},{3,0},{2,0},{5,0}}; //輸入輸出數(shù)據(jù)存儲(chǔ)數(shù)組
void Init_forward(void); //倒位序,采用所謂的雷德算法
COMPLEX MUL_EE(COMPLEX X1,COMPLEX X2); //復(fù)數(shù)乘法公式
COMPLEX ADD_EE(COMPLEX X1,COMPLEX X2); //復(fù)數(shù)加法公式
COMPLEX SUB_EE(COMPLEX X1,COMPLEX X2); //復(fù)數(shù)減法公式
/**************************雷德算法思想*************************
* 自然順序 倒位序
* 000 000
* 001 100
* 010 010
* 011 110
* 100 001
* 101 101
* 110 011
* 111 000
由此可見(jiàn)到位序?qū)嶋H上就是鏡像運(yùn)算,然而我們沒(méi)有采用鏡像算法,(據(jù)說(shuō)可以用匯編來(lái)實(shí)現(xiàn)比較容易)
我們所要做的工作是:
1.如果我們已知自然順序的一個(gè)數(shù)想要知道下一個(gè)數(shù)只需要將當(dāng)前數(shù)加1即可
2.再觀察倒位序之后數(shù)據(jù)的規(guī)律,,,
3.如果我們知道倒位序后的其中一個(gè)數(shù),要想求出下一個(gè)數(shù),同樣也可以采用加法,
然而,此處的加法跟我們從小學(xué)習(xí)的不同,我們要實(shí)現(xiàn)的是向低位進(jìn)位的加法(這里看不懂腦袋砸兩下)
話不多說(shuō),此函數(shù)就是實(shí)現(xiàn)這個(gè)功能仔細(xì)分析,如果能看懂說(shuō)明邏輯思維不錯(cuò)
*/
/**********************************************************
*函數(shù)名稱(chēng):COMPLEX MUL_EE(COMPLEX X1,COMPLEX X2)
*函數(shù)功能:實(shí)現(xiàn)復(fù)數(shù)乘法
*輸入?yún)?shù):COMPLEX X1,COMPLEX X2
*返回值:COMPLEX c
***********************************************************/
COMPLEX MUL_EE(COMPLEX X1,COMPLEX X2)
{
COMPLEX c;
c.real = X1.real*X2.real - X1.image*X2.image;
c.image = X1.real*X2.image + X1.image*X2.real;
return c;
}
/**********************************************************
*函數(shù)名稱(chēng):COMPLEX ADD_EE(COMPLEX X1,COMPLEX X2)
*函數(shù)功能:進(jìn)行復(fù)數(shù)加法
*輸入?yún)?shù):COMPLEX X1,COMPLEX X2
*返回值:
***********************************************************/
COMPLEX ADD_EE(COMPLEX X1,COMPLEX X2)
{
COMPLEX c;
c.real = X1.real + X2.real;
c.image = X1.image + X2.image;
return c;
}
/**********************************************************
*函數(shù)名稱(chēng):COMPLEX Dcc_EE(COMPLEX X1,COMPLEX X2)
*函數(shù)功能:進(jìn)行復(fù)數(shù)減法
*輸入?yún)?shù):COMPLEX X1,COMPLEX X2
*返回值:COMPLEX c
***********************************************************/
COMPLEX SUB_EE(COMPLEX X1,COMPLEX X2)
{
COMPLEX c;
c.real = X1.real - X2.real;
c.image = X1.image - X2.image;
return c;
}
/**********************************************************
*函數(shù)名稱(chēng):void Init_forward(void)
*函數(shù)功能:倒位序
*輸入函數(shù):void
*返回值:void
***********************************************************/
void Init_forward(void)
{
u8 I,J,LH,N1,K ;
COMPLEX T; //替換結(jié)構(gòu)體
LH = FFT_N/2; //N/2
J = LH;
N1 = FFT_N - 2;
for(I=1;I<N1;I++) //從1到N-2開(kāi)始倒位序
{
if(I<J) //此處的意思是當(dāng)I不等于J時(shí)交換位置
{ //然而I>J時(shí)不交換因?yàn)橹耙呀?jīng)交換了
T = FFT_result[I];
FFT_result[I] = FFT_result[J];
FFT_result[J] = T;
}
K = LH; //將給K賦值N/2
while(J>=K) //循環(huán),,判斷所需判斷的位是否為1
{
J = J-K;
K = K/2;
}
J = J+K;
}
}
/**************************************************************
*函數(shù)名稱(chēng):void FFT_Run(void)
*函數(shù)功能:進(jìn)行快速傅里葉運(yùn)算
*輸入?yún)?shù):void
*返回值:void
***************************************************************/
void FFT_Run(void)
{
u8 B,P,K;
u8 L = 0; //蝶形變換級(jí)數(shù)
u8 M = 0; //N = 2^M
u8 J;
u8 FFT_N1 = FFT_N;
COMPLEX Result_Wn,Result_MUL,Result_ADD,Result_SUB;
Init_forward(); //進(jìn)行倒位序運(yùn)算
for(M=1; (FFT_N1=FFT_N1/2)!=1;M++); //計(jì)算蝶形級(jí)數(shù)
for(L=1;L<=M;L++)
{
B = pow(2,L-1); // 旋轉(zhuǎn)因子個(gè)數(shù)
for(J=0;J<=B-1;J++)
{
P = pow(2,M-L)*J; //旋轉(zhuǎn)因子系數(shù)
for(K=J;K<FFT_N;K=K+pow(2,L))
{
Result_Wn.real = cos((2*PI/FFT_N)*P);
Result_Wn.image = -sin((2*PI/FFT_N)*P);
Result_MUL = MUL_EE(Result_Wn,FFT_result[K+B]); //復(fù)數(shù)乘法
Result_ADD = ADD_EE(FFT_result[K],Result_MUL); //復(fù)數(shù)加法
Result_SUB = SUB_EE(FFT_result[K],Result_MUL); //復(fù)數(shù)減法
FFT_result[K] = Result_ADD; //把加法后的結(jié)果放到 FFT_result[K]
FFT_result[K+B] = Result_SUB; //把減法之后的結(jié)果放到FFT_result[K+B]
}
}
}
}
void main(void)
{
u8 a;
u8 M;
u8 FFT_N1 = FFT_N;
FFT_Run();
for(a=0;a<FFT_N;a++)
{
printf("%f",FFT_result[a].real/100);
printf(" ");
printf("%f",FFT_result[a].image/100);
printf("\n");
}
a= pow(2,3);
printf("%d",a);
printf("\n");
}
經(jīng)過(guò)一星期已搞定,學(xué)弟學(xué)妹可以看看。。
作者:
a7336615a1230
時(shí)間:
2015-5-16 23:18
謝謝學(xué)長(zhǎng)。
作者:
mokezhi
時(shí)間:
2018-7-22 15:49
謝謝學(xué)長(zhǎng)咯
作者:
jackyhuang0408
時(shí)間:
2020-6-7 00:58
學(xué)習(xí),謝謝分享!
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
日本一级淫片色费放
|
欧美日韩一区二区三区视频
|
国产黄色精品
|
久久99深爱久久99精品
|
久久青
|
国产精品三级视频
|
国产乡下妇女三片
|
精品国产aⅴ麻豆
|
欧美日一区二区三区
|
日韩视频精品
|
嫩草久久
|
韩国三级中文字幕hd久久精品
|
精品乱子伦一区二区三区
|
久久一区精品
|
美女黄色免费网站
|
色婷婷国产精品综合在线观看
|
亚洲啊v
|
久久久久国产精品视频
|
黄色片aaa
|
欧美日韩综合
|
欧美一区二区视频在线观看
|
成人毛片在线观看
|
深夜福利在线播放
|
日韩欧美一级片
|
天天噜
|
91成人国产
|
一级片网址
|
午夜成人影片
|
日韩中文字幕在线视频
|
亚欧洲精品在线视频免费观看
|
亚洲激情视频在线
|
国产h片在线观看
|
成人av网站在线观看
|
国产福利视频在线观看
|
亚洲精品视频免费在线观看
|
麻豆精品在线播放
|
日批视频免费在线观看
|
吃奶动态图
|
国产一区在线视频
|
黄视频网站在线观看
|
免费黄色网址在线观看
|