/* DATファイル形式のPosteriorgramを2つ読み込んで局所距離行列を作成し、DPを行うプログラム ・PosteriorgramのDATファイルの中は一行目にフレーム数、二行目に状態数、三行目以降からフレーム毎の状態数分の事後確率がタブ区切りで入っている。 ・VisualStudioではスタック領域が1MBまでで足りないため、以下のような設定の変更が必要である。 プロジェクトの[プロパティ]→[構成プロパティ]→[リンカー]→[システム]→[スタックのサイズの設定]に適当な値を入力。   デフォルト値は1MBなので、10MB(10485760)を割り当てる。入力値の単位はバイトであることに注意 ・最大フレーム数を70にしたのはこれ以上大きな値になると、visual studio codeで動かなくなってしまうためです。 */ #include #include #include #include #pragma warning(disable: 4996) #define MAXFRAME 1024 #define STATE 3009 // メイン関数 int main(void) { char filename[2][10]; // ファイル名の配列 float pg[2][MAXFRAME][STATE]; // Posteriorgramの事後確率用配列 float ld_m[MAXFRAME][MAXFRAME]; // 局所距離行列 float gd_m[MAXFRAME][MAXFRAME]; // 累積距離行列 int frame_len[2]; // Posteriorgramのフレーム数を入れるための変数 float ip; // 内積計算用の変数 printf("Posteriorgramのファイル名を入力\n"); printf("一つ目:"); scanf("%s", filename[0]); printf("二つ目:"); scanf("%s", filename[1]); for (int i = 0; i < 2; i++) { FILE* fp; // ファイルポインタ fp = fopen(filename[i], "r"); // ファイルを読み出し専用で開く if (fp == NULL) { // ファイルが開けていなかった場合 printf("%sをオープンできませんでした\n", filename[i]); return 0; } else { // ファイルが開けた場合 fscanf(fp, "%d\n", &frame_len[i]); // フレーム数を読み込む fscanf(fp, "%*d\n"); // 状態数を読み込み飛ばす // Posteriorgramを読み込み for (int j = 0; j < frame_len[i]; j++) // 行のループ for (int k = 0; k < STATE; k++) // 列のループ fscanf(fp, "%f", &pg[i][j][k]); // データ1つ読み込み fclose(fp); // ファイル閉じる } } // i番目の列について局所距離と累積距離の計算 for (int i = 0; i < ; i++) { // 行のループ for (int j = 0; j < ; j++) { // 列のループ ip = 0; // 内積を初期化 for (int k = 0; k < ; k++) // フレーム同士の内積を計算 ip = ; // 状態毎に事後確率の積を取り、足し合わせる = -log10f(ip); // 内積の負の対数を取り、局所距離行列に代入 // DPを行う } } // 累積距離の取得と表示 printf("%sと%sのscore:%f\n", filename[0], filename[1], ); return 0; }