■76958 / inTopicNo.3) |
Re[2]: ヒルベルト変換 |
□投稿者/ 名無しの権兵衛 (5回)-(2015/08/31(Mon) 16:42:30)
|
■No76927 (774RR さん) に返信 > google 様にキーワード hilbert変換 C++ で訊いてみた。返ってきた結果のいくつか > http://stackoverflow.com/questions/21893481/ > http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1193169981 > 妥当性までは知らん。 > > っていうか自分で検索ぐらいしたの?少しは自分でコード書いたりしたの? > オイラを含め、掲示板の読者のほとんどはあなたの仕事を代わりに解いたりしないよ。 >
ありがとうございました。ごもっともです。 ということで、おバカなもので大分時間かかったのですが 自分で調べて組んだので載せておきますので、 間違えていたら、ご指摘ください!!
#include "stdlib.h"
typedef struct { double R; double I; } Complex;
extern void fft(Complex* x, int n); extern void ifft(Complex* x, int n);
void Hilbert(double* xi, Complex* xo, int n) { double* h; int n2 = n / 2; int i;
h = (double*)malloc(sizeof(double) * n);
for (i = 0; i < n; i++) { xo[i].R = xi[i]; xo[i].I = 0.0; h[i] = 0.0; }
fft(xo, n); //FFT実行 ← 自前のライブラリを使用
if (n == (n2 * 2)) { h[0] = 1; h[n2] = 1; for (i = 1; i < n2; i++) { h[i] = 2; } } else { h[0] = 1; for (i = 1; i <= n2; i++) { h[i] = 2; } }
for (i = 0; i < n; i++) { xo[i].R *= h[i]; xo[i].I *= h[i]; }
ifft(xo, n); //逆FFT実行 ← 自前のライブラリを使用 free(h); }
|
|