[問題] 傅立葉轉換

看板C_and_CPP (C/C++)作者 (kkk1225)時間16年前 (2009/10/08 12:59), 編輯推噓4(4024)
留言28則, 4人參與, 最新討論串1/1
請各位高手幫幫忙,如何壤這個matlab寫成C語言, 小弟剛學C沒多久,不太懂的地方還很多 matlab程式: x=zeros(256); x(130:140,130:140)=1; imshow(x); F=fftshift(fft2(x)); figure;imshow(F) C語言: /*fft2*/ #include<stdio.h> #include<stdlib.h> #include<math.h> #define PI 3.141592654 int main(void) { int i,j,m,n,u,v,x[256][256]={0},F[256][256]={0}; for(i=130;i<=139;i++) { for(j=130;j<=139;j++) { x[i][j]=1; printf("x=%d\t",x[i][j]); for(u=0;u<=256;u++) { for(v=0;v<=256;v++) { for(m=0;m<=256;m++) { for(n=0;n<=256;n++) { ★ ★ F[u][v]+=(-1)^(m+n)*x[m][n]*exp(-j*2*PI*(m*u/256+n*v/256)); printf("F[u][v]=%f\t",F[u][v]); } } } } } } system("pause"); return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.120.32.178

10/08 13:10, , 1F
那兩個星星是幹麻的啊?? 先說, ^ 在C語言不是幾次方的意
10/08 13:10, 1F

10/08 13:11, , 2F
思, a^b 是a和b做xor!! 另外, 你的F[][]是用int宣告的,
10/08 13:11, 2F

10/08 13:11, , 3F
可是你printf的時候用%f在印, 除非有特別設計, 不然這顯
10/08 13:11, 3F

10/08 13:11, , 4F
來求答案的嗎? 沒關鍵字喔
10/08 13:11, 4F

10/08 13:12, , 5F
然是錯的; 另外, C語言裡, 兩個整數做運算就只會是整數,
10/08 13:12, 5F

10/08 13:12, , 6F
所以如果希望以浮點數運算, 請改用float或整運算式中使
10/08 13:12, 6F

10/08 13:13, , 7F
用強制轉型.
10/08 13:13, 7F

10/08 13:13, , 8F
最後忘了一開始就要講的, 你說了要做什麼, 也貼了code,
10/08 13:13, 8F

10/08 13:14, , 9F
可是你沒說有什麼問題啊!! compile有錯??結果不對??執行
10/08 13:14, 9F

10/08 13:14, , 10F
時有錯?? 只是想請板友幫忙驗證的話也要說一下啊....Orz
10/08 13:14, 10F

10/08 13:15, , 11F
題外話, 有心的話可以稍微解釋一下matlab原來寫法的意思
10/08 13:15, 11F

10/08 13:15, , 12F
, 因為不見得所有人都會用matlab, 像小弟就不會(羞XD)
10/08 13:15, 12F

10/08 13:22, , 13F
星星是用像MATLAB寫的,我不太懂怎麼寫
10/08 13:22, 13F

10/08 13:24, , 14F
換句話說, 你的問題就是不懂怎麼把星星那邊(還有相關的
10/08 13:24, 14F

10/08 13:25, , 15F
因為我不會用C寫離散傅立葉轉換
10/08 13:25, 15F

10/08 13:25, , 16F
地方啦)改用C語言寫對吧?? 那你文章要解釋清楚啊....Orz
10/08 13:25, 16F

10/08 13:26, , 17F
sorry 我表達錯誤ㄌ
10/08 13:26, 17F

10/08 13:27, , 18F
fft這種純數學運算的東西沒有會不會用C寫的問題, 只有你
10/08 13:27, 18F

10/08 13:27, , 19F
自己對C的語法與所需函式庫了解不了解的問題, 接著就只
10/08 13:27, 19F

10/08 13:28, , 20F
是把fft的演算流程, "翻譯"成C語言, 然後讓它去跑:)
10/08 13:28, 20F

10/08 13:31, , 21F
math.h裡有exp()可以照著用, 所以問題應該只剩和 ^ 有關
10/08 13:31, 21F

10/08 13:32, , 22F
那個, 我覺得你就簡單用if寫, m+n是偶數就做+, 是奇數就
10/08 13:32, 22F

10/08 13:32, , 23F
做-, 就可以簡單解決; 當然也有其他作法就是了....
10/08 13:32, 23F

10/08 13:33, , 24F
只是你的F[][]要改用float宣告先....
10/08 13:33, 24F

10/08 13:34, , 25F
最近才剛看C,所以函式庫不是很了解,不過非常謝謝你的講解
10/08 13:34, 25F

10/08 22:08, , 26F
c的exp不會虛數..
10/08 22:08, 26F

10/08 22:16, , 27F
他的code也不像有虛數啊?? 我得承認傅立葉轉換這種東西
10/08 22:16, 27F

10/08 22:17, , 28F
我從來沒從數學老師那邊得到過....XD
10/08 22:17, 28F
文章代碼(AID): #1ApN6smA (C_and_CPP)
文章代碼(AID): #1ApN6smA (C_and_CPP)