« 高周波・RFニュース 2025年12月5日 QorvoがUWBとAIを用いた人体検知を解説、SEMCOが低ESL MLCCをADASに使う提案、TaoglasがWi-Fi 6/7, UWB, ISM向け小型チップアンテナ発表、京セラが5G基地局開発断念と報道、Yageoがシャークフィン+ホイップアンテナ発表 | トップページ | 天空のアトラス イタリア館の至宝@大阪中之島美術館を観てきた。ファルネーゼのアトラスはやはりすごい。正義の旗もよかった。しかし何と言ってもレオナルドダヴィンチのアトランティコ手稿が本当に鏡文字で感動した。 »

2025年12月 5日 (金)

Clojure(JVMで動くLISP系)でJavaの数値計算ライブラリApache Commons Mathを使う(3) 高速フーリエ変換(FFT)を実行してJFreeChartでプロットする。

今回はこの移植。

 Javaの数値計算ライブラリApache Commons Mathを使う(3) 高速フーリエ変換(FFT)を実行してJFreeChartでプロットする。

コードはこんな感じで。


(ns mini.fft
  (:import [org.apache.commons.math3.complex Complex]
           [org.apache.commons.math3.transform FastFourierTransformer DftNormalization TransformType]
           [org.jfree.data.xy XYSeriesCollection XYSeries]
           [org.jfree.chart ChartFactory  ChartPanel]
           [org.jfree.chart.renderer.xy XYLineAndShapeRenderer]
           [javax.swing JFrame]))

(def n 256)
(def t (make-array Double/TYPE n))
(def y (make-array Double/TYPE n))
(def f (make-array Double/TYPE n))
(def fft (FastFourierTransformer. DftNormalization/STANDARD))
(dotimes [i n]
  (aset t i (double i))
  (aset y i (Math/sin (aget t i)))
  (aset f i (- (/ (double i) (double n)) 0.5)))
(def result (.transform fft y TransformType/FORWARD))

(def resultShift (make-array Complex n))
(dotimes [i (/ n 2)]
  (aset resultShift i (aget result (+ i (/ n 2))))
  (aset resultShift (+ i (/ n 2)) (aget result i)))

(defn create-dataset []
  (let [series  (XYSeries. "Real Part")
        series2 (XYSeries. "Imaginary Part")]
    (dotimes [i n]
      (.add series (aget f i) (.getReal (aget resultShift i)))
      (.add series2 (aget f i) (.getImaginary (aget resultShift i))) )
      (doto (XYSeriesCollection.)
        (.addSeries series)
        (.addSeries series2)
        )))

(defn create-chart [dataset]
  (ChartFactory/createXYLineChart
   "Fast Fourier Transform"
   "frequency"
   "result"
   dataset))

(defn display-chart [chart]
  (let [frame (JFrame. "FFT")
        plot (.getXYPlot chart)
        renderer (XYLineAndShapeRenderer.)
        chart-panel (ChartPanel. chart)]
    (.setSeriesShapesVisible renderer 0 false) ; 線だけ
    (.setSeriesShapesVisible renderer 1 false) ; 線だけ
    (.setRenderer plot renderer)
    (doto frame
      (.add chart-panel)
      (.pack)
      (.setVisible true))))

(defn -main []
  (let [dataset (create-dataset)
        chart (create-chart dataset)]
    (display-chart chart)))

(-main)

結果はこちら。

Clojurefft1

 

 

 

« 高周波・RFニュース 2025年12月5日 QorvoがUWBとAIを用いた人体検知を解説、SEMCOが低ESL MLCCをADASに使う提案、TaoglasがWi-Fi 6/7, UWB, ISM向け小型チップアンテナ発表、京セラが5G基地局開発断念と報道、Yageoがシャークフィン+ホイップアンテナ発表 | トップページ | 天空のアトラス イタリア館の至宝@大阪中之島美術館を観てきた。ファルネーゼのアトラスはやはりすごい。正義の旗もよかった。しかし何と言ってもレオナルドダヴィンチのアトランティコ手稿が本当に鏡文字で感動した。 »

パソコン・インターネット」カテゴリの記事

学問・資格」カテゴリの記事

日記・コラム・つぶやき」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« 高周波・RFニュース 2025年12月5日 QorvoがUWBとAIを用いた人体検知を解説、SEMCOが低ESL MLCCをADASに使う提案、TaoglasがWi-Fi 6/7, UWB, ISM向け小型チップアンテナ発表、京セラが5G基地局開発断念と報道、Yageoがシャークフィン+ホイップアンテナ発表 | トップページ | 天空のアトラス イタリア館の至宝@大阪中之島美術館を観てきた。ファルネーゼのアトラスはやはりすごい。正義の旗もよかった。しかし何と言ってもレオナルドダヴィンチのアトランティコ手稿が本当に鏡文字で感動した。 »

最近の記事

2026年1月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
無料ブログはココログ
フォト