Home
大浦拓哉 助教 作製 汎用 FFT パッケージ の修正箇所の説明
Ver.1.0 '19/07/14
All rights reserved JA3OOK 中村 利和
大浦拓哉 京大助教 作製 汎用 FFT パッケージ(参考文献1)に含まれている
・fft8g.c C言語 - 高速版 (基数 8, 4, 2)
の修正箇所を、ライセンス事項に従い説明します。(本パッケージを SDRsoft88の製作 に使用)
なお、修正と動作後の検証にあたり、一木裕貴氏の「C→Javaへの移植」事例(参考文献2)を
参考にしました。
ソースの比較に「のん」さん作製の テキスト差分表示ツール TextDiffDsp (参考文献3)
を使用しました。
上記の方々に感謝申し上げます。
1.修正の目的
C から Visual C# 2017 への移植。
2.修正箇所
a 今回使用する関数を絞り込む。
void cdft(int n, int isgn, double* a, int* ip, double* w)
void makewt(int nw, int* ip, double* w)
void bitrv2(int n, int* ip, double* a)
void bitrv2conj(int n, int* ip, double* a)
void cftfsub(int n, double* a, double* w)
void cftbsub(int n, double* a, double* w)
void cft1st(int n, double* a, double* w)
void cftmdl(int n, int l, double* a, double* w)
修正はこれらの関数に対して行い、他はコメント化する。
以下、修正箇所を例で示します。
b 関数の仮引数での配列宣言の違い
void cdft(int n, int isgn, double *a, int *ip, double *w)
↓
public static void cdft(int n, int isgn, double[] a, int[] ip, double[] w)
c 関数呼び出し側の引数に 配列名+2 と書かれている箇所があり、これは配列要素番号の
2つ先を示す意味である。
C#ではこの書き方は許されないので、関数定義側のこの配列の要素番号に +2 を書き加え
る。
<実引数に必ず +2 を付けてこの関数を呼び出しているので、以下の修正方法でOK。g項参照 >
関数呼び出し側
bitrv2(n, ip + 2, a);
↓
bitrv2_p2(n, ip, a);
関数定義側
void bitrv2(int n, int* ip, double* a)
↓
static void bitrv2_p2(int n, int[] ip, double[] a)
この関数内のこの配列を使っている全ての命令に + 2 を追記する。
ip[m + j] = ip[j] + l;
↓
ip[m + j + 2] = ip[j + 2] + l;
ip[0] = 0;
↓
ip[2] = 0;
d atan、sin、cos等の関数に Math. を付け、先頭文字を大文字に変更
delta = atan(1.0) / nwh;
↓
delta = Math.Atan(1.0) / nwh;
e C#では不要になる行をコメント化
・関数のプロトタイプ宣言
・#include宣言
f ソースコードに修正前後のコードを記載
g 参考
今回は使用していない関数で、呼び出し側の引数に 配列名+nw と書かれている箇所があり
ます。これは、上記c項の 配列名+2 が 配列名+nw と、定数が変数に変わったのです。
この場合、引数を1個増やし、nw を引数として引き渡すようにコードを変更し、それに合わ
せて関数定義側コードも変更します。
参考文献
1 大浦 拓哉 京都大学数理解析研究所 “汎用 FFT (高速 フーリエ/コサイン/サイン 変換) パッケージ
2 一木裕貴 明治大学 理工学部 数学科 Javaによる音のFourier解析 大浦FFTの書き換え(C→Javaへの移植)
3 のん テキスト差分表示ツール
直前の画面へは ブラウザの戻る をクリックしてください。Topに戻るにはHome