
相互相関関数を求めるプログラムを書いたのですが、入力信号のずらし幅が負の時と正の時で処理を分けた場合、結果の波形の整合性が取れずに困っております。計算上の根本的違いやコードのミスも含めて、ご指南頂きたいです。
ちなみに参考にしたのは、
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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# LU分解法のピボッティングについて(C言語/gcc-9) 3 2022/07/11 23:10
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・【大喜利】【投稿~1/31】『寿司』がテーマの本のタイトル
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C 開放してるのにエラー(doubl...
-
doubleの変数にintとintの割り...
-
プログラムでの数字につく”f”の...
-
数値を指数部と仮数部に分離したい
-
浮動小数点の誤差のあわせ方
-
ルンゲクッタ法(RK4)で斜方投...
-
P値(統計学)を求めるプログラム
-
doubleは常に%lfとするべきなのか
-
指数形式で入力するには
-
C言語 関数プロトタイプ宣言の...
-
C++で外積
-
C言語の型による処理速度の違い
-
C言語のプログラムで#include<m...
-
float?数字の後にLがつくもの
-
difftime()について
-
C言語初心者 構造体 課題について
-
C言語で内積、、、わかりません。
-
テイラー展開(C言語)
-
正規分布するプログラムを教え...
-
timeGetTimeについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
doubleの変数にintとintの割り...
-
C言語を実行すると-infが出てき...
-
C 開放してるのにエラー(doubl...
-
float型とdouble型の変数の違い...
-
c言語で、繰り返し文の中で、0....
-
至急です! マクロ定義で #defi...
-
C言語 関数プロトタイプ宣言の...
-
C言語の型による処理速度の違い
-
2次方程式の解を求めるプログ...
-
関数におけるif文とreturn文に...
-
int とdoubleの比較
-
C++で外積
-
C言語で台形公式を使った二重積...
-
指数の表示
-
C言語のpow関数の不具合
-
(C,C++言語)関数の引数は自動キ...
-
C言語のプログラムで#include<m...
-
数値を指数部と仮数部に分離したい
-
プログラミングでのテイラー展開
おすすめ情報