
相互相関関数を求めるプログラムを書いたのですが、入力信号のずらし幅が負の時と正の時で処理を分けた場合、結果の波形の整合性が取れずに困っております。計算上の根本的違いやコードのミスも含めて、ご指南頂きたいです。
ちなみに参考にしたのは、
http://wwwdoi.elec.nara-k.ac.jp/html/jisyu/j5ec0 …
の最後の2ページで、入力のサンプルデータは、
http://www.mech.tohoku-gakuin.ac.jp/nken/java/ne …
のデータを用いました。結果画像を添付します。
#include "stdafx.h"
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define MAX 10000000
#define buf 256
int main (){
FILE *fpi; //_入力ファイル
FILE *fpo; //_出力ファイル
int num; //_対象波形全点数
double *x,*y; //_波形データ
double *cxy1,*cxy2;//結果
char filename[buf];
/////////ファイルオープン///////////
(省略)
////////////データ読み込み///////////////////
if(((x=(double*)malloc(MAX))==NULL)||((y=(double*)malloc(MAX))==NULL)){
fprintf(stderr,"Can't_allocate_memory.\n");
return 0;
}
num=0;
while ( fscanf(fpi,"%lf,%lf",&x[num],&y[num]) != EOF && num < MAX ){
num++;
}
printf("%d",num);
////////相互相関関数//////////////////////////
if(((cxy1=(double*)malloc(MAX))==NULL)||((cxy2=(double*)malloc(MAX))==NULL)){
fprintf(stderr,"Can't_allocate_memory.\n");
return 0;
}
int i,j,n;
double sum;
n = num-1;
//////////////ずらし幅が負の時の演算////////////
for( i=0; i<n; i++ ) {
sum = 0.0;
for( j=0; j < n-i; j++ ) {
//k = (j + i) % num;
sum = sum + x[j] * y[j+i];
}
cxy1[i]=double(sum/(n-i));
}
////ずらし幅が正の時の演算///
n = num-1;
for( i=0; i<n; i++ ) {
sum = 0.0;
for( j=0; j < n-i; j++ ) {
//k = (j + i) % num;
sum = sum + x[i+j] * y[j];
}
cxy2[i]=double(sum/(n-i));
}
/////////結果の出力///////////////
for(i=0;i<n;i++){
fprintf(fpo,"%f\n",cxy1[i]);
}
for(i=0;i<n;i++){
fprintf(fpo,"%f\n",cxy2[i]);
}
/////////////////////////
fclose(fpi);
fclose(fpo);
free(x);
free(y);
free(cxy1);
free(cxy2);
}

No.1ベストアンサー
- 回答日時:
2つの URL がどちらも 404 になるので見えません.
あと, この画像は何を意味するのでしょうか?
あなたはどのような順序で出力したいのでしょうか?
蛇足ですが, 「malloc で MAXバイトとっておきながらそのあとの while ループで num < MAX という比較を行っている」ところはおかしい可能性が高い (sizeof(double)==1 という環境でない限りおかしい)です.
この回答への補足
申し訳ありません。一つ目が、以下URLの
[後期:Javaで試しながら学ぶ信号処理]の欄、
1.自己相関と相互相関の項目の右側のPDFファイルになります。
http://wwwdoi.elec.nara-k.ac.jp/html/jisyu/j5ec02/
2つ目が以下URLの[周波数解析など]の欄、相互相関の項目になります。
http://www.mech.tohoku-gakuin.ac.jp/nken/java/ja …
No.3
- 回答日時:
「404 になる」自体は本当はどうでもよくて本題は「あと」以降なんだけどなぁ.... 特に, 最も重要なのは
あなたはどのような順序で出力したいのでしょうか?
のところ. たとえば, 画像のグラフにおいて横軸の 1 とか 1600 とかにはどのようなものが対応するのですか? そして, それはどのようにして得られるはずのものなんですか?
この回答への補足
説明不足でしたので、お答えしますと、
横軸はずらし幅、で実際には0を中央として、右に行くほど正の方向へずれ、左に行くほど負の方向へずれるようなグラフにしたいのです。
縦軸は各ずれ幅における相関係数になるのだと思います。
ちなみに上記のプログラムには、負方向のにずらした時の相関を現在とは逆の順序に並べ替える必要があることは分かりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 関数プロトタイプ宣言の...
-
プログラムでの数字につく”f”の...
-
C言語のプログラムで#include<m...
-
-1.#IND00と出てしまうのですが...
-
C言語を実行すると-infが出てき...
-
difftime()について
-
doubleの変数にintとintの割り...
-
C言語で-23乗を取り扱うには
-
C言語でdouble型の小数点の引き...
-
listに構造体を格納
-
^この記号を使わない
-
C言語 入力した数値の平均値の...
-
二分探索で方程式の解を求める方法
-
c言語のプログラミングについて...
-
関数におけるif文とreturn文に...
-
float型とdouble型の変数の違い...
-
c言語で、繰り返し文の中で、0....
-
斜辺と角度て底辺と高さを出したい
-
C言語(プログラミング)関連の質...
-
2自由度減衰振動のルンゲクッタ法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
C言語を実行すると-infが出てき...
-
doubleの変数にintとintの割り...
-
float型とdouble型の変数の違い...
-
c言語で、繰り返し文の中で、0....
-
至急です! マクロ定義で #defi...
-
C 開放してるのにエラー(doubl...
-
C言語の型による処理速度の違い
-
C言語 関数プロトタイプ宣言の...
-
float と double
-
ラグランジュの補間法のCプログ...
-
C言語のプログラムで#include<m...
-
c言語のコンパイルエラー canno...
-
2分法で方程式の複数の解を自...
-
2次方程式の解を求めるプログ...
-
C言語で台形公式を使った二重積...
-
Cプログラミングの問題です。ニ...
-
物体が往復する動きを作りたい
-
関数におけるif文とreturn文に...
-
doubleは常に%lfとするべきなのか
おすすめ情報