線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3113
推到 Plurk!
推到 Facebook!

關於用JAVA寫FFT的問題

尚未結案
wolfs
一般會員


發表:2
回覆:5
積分:1
註冊:2004-10-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-18 01:42:15 IP:140.113.xxx.xxx 未訂閱
請問各位先進: 我看了很多的討論內容 像C之類的語言都有直接處理複數裡的虛數問題 但在JAVA上,似乎好像沒辦法直接處理? 在寫DFT或FFT時,其中的複數問題應該要怎麼來處理呢? 另外想請問網路上是否有這類問題較詳細的資料? 我有找過很多,但都不是很深入,所以看完了還是沒有什麼幫助。 謝謝
warke
一般會員


發表:19
回覆:32
積分:10
註冊:2004-09-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-18 08:00:56 IP:218.170.xxx.xxx 未訂閱
小弟的印象中,之前小弟自己的實做是把實數部分和虛數部分宣告成一個一維陣列。
double[] number1 = new double[2];
換句話說,用兩個不同的變數來對付實數與虛數的部分。如此的話,比較要小心的就是計算了。
warke
一般會員


發表:19
回覆:32
積分:10
註冊:2004-09-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-18 09:29:03 IP:218.170.xxx.xxx 未訂閱
附上補充程式碼@"@~~
public class t
{
        public static void main (String[] arg)
        {
                double[] a = new double[]{10,10};
                double[] b = new double[]{10,10};
                String str = "";
                
                str  = "a = "   a[0]   "   "   a[1]   "i\n";
                str  = "b = "   b[0]   "   "   b[1]   "i\n";
                
                for (int i = 0; i < 2; i  )
                        a[i] = a[i]   b[i];
                
                str  = "a b = "   a[0]   "   "   a[1]   "i\n";
                System.out.println(str);
        }
}
warke
一般會員


發表:19
回覆:32
積分:10
註冊:2004-09-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-18 10:16:22 IP:218.170.xxx.xxx 未訂閱
在上面的程式碼看懂之後,你可以嘗試用附程式的方法寫出四則運算。
public class t
{
        public static void main (String[] arg)
        {
                double[] x = new double[]{10,10};
                double[] y = new double[]{10,10};
                double[] z = new double[]{0,0};
                String str = "";
                
                z = SuperMan(x,y,arg[0]);                    str  = "x = "   x[0]   "   "   x[1]   "i\n";
                str  = "y = "   y[0]   "   "   y[1]   "i\n";
                
                if (arg[0].equals("1"))
                        str  = "x   y = ";
                if (arg[0].equals("2"))
                        str  = "x - y = ";
                if (arg[0].equals("3"))
                        str  = "x * y = ";
                if (arg[0].equals("4"))
                        str  = "x / y = ";                    str  = z[0]   "   "   z[1]   "i\n";
                
                System.out.println(str);
        }
        static double[] SuperMan(double[] a, double[] b, String tp)
        {
                double[] ans = new double[]{100,1000};
                if (tp.equals("1"))
                {
                        for (int i = 0; i < 2; i  )
                                ans[i] = a[i]   b[i];
                }
                if (tp.equals("2"))
                {
                        for (int i = 0; i < 2; i  )
                                ans[i] = a[i] - b[i];
                }
                if (tp.equals("3"))
                {
                        double tmp0 = a[0] * b[0] - a[1] * b[1];
                        ans[1] = a[1] * b[1]   a[0] * b[1];
                        ans[0] = tmp0;
                }
                if (tp.equals("4"))
                {
                        double tmp0 = b[0] * b[0]   b[1] * b[1];
                        double tmp1 = a[0] * b[0]   a[1] * b[1];
                        double tmp2 = a[1] * b[0] - a[0] * b[1];
                        
                        ans[0] = tmp1/tmp0;
                        ans[1] = tmp2/tmp0;
                }
                return ans;
        }
}
warke
一般會員


發表:19
回覆:32
積分:10
註冊:2004-09-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-18 10:18:29 IP:218.170.xxx.xxx 未訂閱
我複數的運算方式是參考下面這個網址: http://enjoy_xyy.go.nease.net/Math/Algebra/Complex.htm
wolfs
一般會員


發表:2
回覆:5
積分:1
註冊:2004-10-06

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-11-18 15:32:26 IP:140.113.xxx.xxx 未訂閱
謝謝warke的回應    我想再請問的是,我在DFT上的計算一開始也是將其分成實虛兩部分來算 不過最後算完後是否就把結果相加就好了呢? 我是想把一般的圖片透過FFT轉到頻率域上,因此目前先從DFT來著手看看    
for (int u = 0; u < M; u  )
  for (int x = 0; x < M; x  )
  {
    Real[u] = Real[u]   Gray[x]*(Math.cos(2*Math.PI*u*x/M)/M);
    Imaginary[u] = Imaginary[u] - Gray[x]*(Math.sin(2*Math.PI*u*x/M)/M);
  }      for (int u = 0; u < M; u  )
    FFTpic[u] = (int)(255*(Real[u] Imaginary[u])) ;
warke
一般會員


發表:19
回覆:32
積分:10
註冊:2004-09-04

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-11-18 16:58:13 IP:218.170.xxx.xxx 未訂閱
阿咧~~DFT?是The Department for Transport嗎? 抱歉...我不知道dft是什麼qq"~ 可以稍加解說一下嗎? 不然單看你的程式碼的部分,執行上是沒有問題的。
wolfs
一般會員


發表:2
回覆:5
積分:1
註冊:2004-10-06

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-11-19 00:01:14 IP:140.113.xxx.xxx 未訂閱
DFT指的是離散傅立葉轉換 而FFT指的是快速傅立葉轉換 http://astronomy.swin.edu.au/~pbourke/analysis/dft/ 這個網址有一些它的演算法,不過我的問題是不知如何用JAVA把它寫出來,因為它會處理到複數的問題。
warke
一般會員


發表:19
回覆:32
積分:10
註冊:2004-09-04

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-11-19 00:43:24 IP:211.76.xxx.xxx 未訂閱
請問一下你是寫到哪邊寫不下去呢? 根據上面所說的一來小弟看不是很懂,二來他後面不是已經有附上C語言的程式碼了嗎? 或許你可以把"完整的"程式碼PO上來給大家看看。說不定大家會比較知道你哪邊寫不出來。 畢竟在您文章內容裡面您已經知道可以利用陣列來解決複數的問題。
引言: 謝謝warke的回應 我想再請問的是,我在DFT上的計算一開始也是將其分成實虛兩部分來算 不過最後算完後是否就把結果相加就好了呢? 我是想把一般的圖片透過FFT轉到頻率域上,因此目前先從DFT來著手看看 for (int u = 0; u < M; u ) for (int x = 0; x < M; x ) { Real[u] = Real[u] Gray[x]*(Math.cos(2*Math.PI*u*x/M)/M); Imaginary[u] = Imaginary[u] - Gray[x]*(Math.sin(2*Math.PI*u*x/M)/M); } for (int u = 0; u < M; u ) FFTpic[u] = (int)(255*(Real[u] Imaginary[u])) ;
請問您最後面所指的相加是什麼呢? 又...您想輸出的結果是啥啊?
系統時間:2024-04-26 13:32:46
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!