やりたいこと
①csvファイルの数値を読み込んで,二次元フーリエ変換(2DFFT)を行い,計算結果をcsvファイルで出力したいです.
pythonで書かれた1DFFTプログラム https://watlab-blog.com/2021/04/17/csv-dft/
こちらの2DFFT版を作りたいです.
②①で得られた結果から動径方向分布 p(r) と角度方向分布 q(θ)のスペクトル分布を算出したいです.
python スペクトル分析 https://teratail.com/questions/157585
こちらは上記のものを参考にしたいと考えています.
困っている事
①のcsvファイルから数値を読み込み2DFFTを行う部分.
CSVファイルの中身
CSVファイルの中身はこのようになっています.
実際には1行目とA列は削除しています.縦90×横82の数値データです.
試してみたこと
①2DFFT(C言語)の改造
初めはC言語で書かれた二次元フーリエ変換のプログラムを見つけたので改造してデータ部分や行列の数値を変更して2DFFTを行っていました.
二次元フーリエ変換 http://hooktail.org/computer/index.php?2%BC%A1%B8%B5%A5%D5%A1%BC%A5%EA%A5%A8%CA%D1%B4%B9
c言語
1#include<stdio.h> 2#include<math.h> 3#include"calculation.h" 4 5#define PI 3.1415926535897 6 7int samp[] = {0, 3.427308426, 0, 3.088006157, 1.499976379, 0, 0, 0, 4.731893003, 0, 8 数値が膨大なため省略 9, 6.380783053, 0, 0, 0.136650868, 0}; 10 11int main() 12{ 13 double re[7380], im[7380]; 14 int i, j; 15 16 for(i=0; i<7380; i++){ 17 re[i] = samp[i]; 18 im[i] = 0; 19 } 20 21 for(i=0; i<90; i++){ 22 for(j=0; j<82; j++){ 23 printf("%.3d ", (int)re[i*82 + j]); 24 } 25 printf("\n"); 26 } 27 28 dft_swap2(re, im, 90, 82); 29 30 printf("\n"); 31 32 dft_idft2(re, im, 90, 82, DFT); 33 34 dft_swap2(re, im, 90, 82); 35 36 for(i=0; i<90; i++){ 37 for(j=0; j<82; j++){ 38 printf("%.3d ", (int)re[i*82 + j]); 39 } 40 printf("\n"); 41 } 42 43 printf("\n"); 44 45 dft_swap2(re, im, 90, 82); 46 47 dft_idft2(re, im, 90, 82, IDFT); 48 49 dft_swap2(re, im, 90, 82); 50 51 for(i=0; i<90; i++){ 52 for(j=0; j<82; j++){ 53 printf("%.3d ", (int)re[i*82 + j]); 54 } 55 printf("\n"); 56 } 57 printf("\n"); 58 59 return 0; 60}
しかし,毎度データごとにを書き換える作業がとても非効率なのでpythonで同様の事が行えないか試しました.
②画像の2DFFTのプログラム(python)の改造
pythonで書かれた画像の2DFFTのプログラム https://watlab-blog.com/2020/03/22/2d-fft/
画像を読み込む部分をcsvに置き換えれば上手くいくのでは?と考えましたが計算結果を出力する事が出来ませんでした.
Python
1import pandas as pd 2import numpy as np 3 4# csvを読み込み、2Dフーリエ変換をする 5df = pd.read_csv('date.csv') # csvを読み込み 6f = np.fft.fft2(df) # 2Dフーリエ変換 7f_shift = np.fft.fftshift(f) # 直流成分を中心に移動させるためN/2シフトさせる 8mag = 20 * np.log(np.abs(f_shift)) # 振幅成分を計算 9f.to_csv('out.csv') # フーリエ変換の結果をcsvに保存
質問
画像を読み込む部分をcsvに置き換えるアプローチは間違っていますか?間違えっている場合はどうすればよいでしょうか?
参考にしたもの一覧
- pythonで書かれた1DFFTのプログラム ← これの2DFFT版を作りたい
https://watlab-blog.com/2021/04/17/csv-dft/
- pythonで書かれた画像の2DFFTのプログラム
https://watlab-blog.com/2020/03/22/2d-fft/
- c言語で書かれた2DFFTのプログラム
http://hooktail.org/computer/index.php?2%BC%A1%B8%B5%A5%D5%A1%BC%A5%EA%A5%A8%CA%D1%B4%B9
- 2DFFT後に行いたいスペクトル分布について
https://teratail.com/questions/157585
- 2DFFTを行った後に求めたいグラフが乗っているレポート
https://www.edu.kobe-u.ac.jp/eng-arch-sled/dat/research/adachi-kigami-1/1.pdf

回答1件
あなたの回答
tips
プレビュー