C_and_CPP 板


LINE

我這邊有一段FFT程式 可是他規定是只能用256點去跑 請問各位 有沒有辦法再這段程式的基礎上改成可以給定任意點呢? void FFT(double *segment, double **X) { int M = 8 , iN = Dim; int i, j, k, limit_1, limit_2, limit_3, ij, il; double farg, fpi = 3.1415926, fCos, fSin, fbr, fbi, fcr, fci, fx1, fx2; double *fxr = new double[window + 1]; double *fxi = new double[window + 1]; //****************** 將segment[256] => fxr[window] *************// for (i = 1; i <= window; i++) fxr[i] = fxi[i] = 0; //初始化fxr[window], fxi[window] for (i = 1; i <= window; i++) fxr[i] = segment[i - 1]; //將原始信號的256點個值 => fxr[window] // ***************** 傅立葉主程式開始 *************// limit_1 = iN - 1; limit_2 = iN / 2; ij = 1; // **************** 重排輸入值 ************// for (i = 1; i <= limit_1; i++) { if ((float) i <= ((float) ij - 0.01)) { fx1 = fxr[ij]; fx2 = fxi[ij]; fxr[ij] = fxr[i]; fxi[ij] = fxi[i]; fxr[i] = fx1; fxi[i] = fx2; } il = limit_2; while(1) { if ((float)il > ((float) (ij) - 0.01)) break; ij -= il; il /=2; } ij += il; } // **************** 傅立葉轉換 *************** // for(i = 1; i <= M; i++) // (limit_1, limit_2) =>(1, 256) (2, 128) (4, 64) (8, 32)..(256,1) { limit_1 = (int) pow(2, i - 1); limit_2 = (int) pow(2, (M - i)); for(j = 1; j <= limit_2; j++) //(1:256) (1:128) (1:64)..........(1:1) { for (k = 1; k <= limit_1; k++) { limit_3 = (k - 1) + (j - 1) * 2 * limit_1 + 1; //Odd Points //******************* fbr = fxr[limit_3]; fbi = fxi[limit_3]; fcr = fxr[limit_3 + limit_1]; fci = fxi[limit_3 + limit_1]; //******************* farg = 2.0 * fpi * (k - 1) * limit_2 / iN; fCos = cosl (farg); fSin = sinl (farg); //******************* fx1 = fcr * fCos + fci * fSin ; fx2 = fci * fCos + (0 - fcr) * fSin ; // fxr[limit_3] = fbr + fx1; fxi[limit_3] = fbi + fx2; fxr[limit_3 + limit_1] = fbr - fx1; fxi[limit_3 + limit_1] = fbi - fx2; } } } // for (i = 1; i <= window; i++) { X[0][i - 1] = fxr[i]; X[1][i - 1] = fxi[i]; } //cout << "X[] = " << X[0][0]; delete[] fxr, fxi; } 謝謝各位了!! --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.120.90.193
1F:推 yoco315:我可以先問一下,你希望的數字是多少嗎? 03/29 20:14
2F:推 zhi5566:上網隨邊抓都有現成的CODE 就256 512 1024 最普遍 03/30 00:22
3F:→ weast:我是自己可以找到512 1024的 可是我是要用128~256中間的 03/30 00:23
4F:→ weast:數字阿 ORZ 03/30 00:23
5F:→ weast:目前需要用到192~~ 03/30 22:45
6F:→ dcgkii:FFT沒有192的= =也不可能有 把192後面的值補零 補到256 03/31 13:05
7F:→ weast:可是為什麼matlab的FFT可以用任意數去轉換呢? 03/31 13:28
8F:→ zhi5566:去看FFT的演算法 你就知道為什麼一定是2^n點 03/31 22:18
9F:推 ohiammatt:想要任意點數就只能跑DFT了吧 04/02 14:23
10F:→ weast:恩 DFT我會寫 只是速度太慢了 ORZ 04/02 16:32







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Gossiping站內搜尋

TOP