teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

7

書式の改善

2018/06/29 05:12

投稿

raintree
raintree

スコア10

title CHANGED
File without changes
body CHANGED
@@ -37,13 +37,14 @@
37
37
 
38
38
  void readData(char filename[], int N, double xt[])
39
39
  {
40
- FILE *fi; /* ファイルポインタの宣言。fi: 入力用 */
40
+ /* ファイルポインタの宣言。fi: 入力用 */
41
+ FILE *fi;
41
42
 
42
43
  /* 入力ファイルをオープン*/
43
44
  if ( (fi = fopen("filename", "r") ) == NULL) {
44
45
  printf("入力ファイル %sをオープンできません.\n", filename);
45
- exit(1); /* 強制終了 */
46
+ /* 強制終了 */
46
- }
47
+ exit(1);
47
48
 
48
49
  /* データをファイルから読み込み */
49
50
  for (int i=0; i<N ;i++){

6

書式の改善

2018/06/29 05:12

投稿

raintree
raintree

スコア10

title CHANGED
File without changes
body CHANGED
@@ -22,7 +22,6 @@
22
22
 
23
23
  int main(void)
24
24
  {
25
-
26
25
  /* 変数宣言*/
27
26
  double x_n[100];
28
27
  char readfile[20];

5

書式の改善

2018/06/29 05:09

投稿

raintree
raintree

スコア10

title CHANGED
File without changes
body CHANGED
@@ -20,7 +20,8 @@
20
20
  /* プロトタイプ宣言 */
21
21
  void readData( char filename[], int N, double xt[] );
22
22
 
23
- int main(void) {
23
+ int main(void)
24
+ {
24
25
 
25
26
  /* 変数宣言*/
26
27
  double x_n[100];

4

書式の改善

2018/06/29 05:08

投稿

raintree
raintree

スコア10

title CHANGED
File without changes
body CHANGED
@@ -6,11 +6,9 @@
6
6
  ### 発生している問題・エラーメッセージ
7
7
 
8
8
  ```
9
- $ ./ap
9
+ $ ./te
10
10
  ファイル名を入力してください:c_da.txt
11
-
12
11
  入力ファイル c_da.txtをオープンできません.
13
-
14
12
  ```
15
13
 
16
14
  ### 該当のソースコード

3

書式の改善

2018/06/29 05:05

投稿

raintree
raintree

スコア10

title CHANGED
File without changes
body CHANGED
@@ -7,9 +7,9 @@
7
7
 
8
8
  ```
9
9
  $ ./ap
10
- ファイル名を入力してください:c_data.txt
10
+ ファイル名を入力してください:c_da.txt
11
11
 
12
- 入力ファイル c_data.txtをオープンできません.
12
+ 入力ファイル c_da.txtをオープンできません.
13
13
 
14
14
  ```
15
15
 
@@ -47,10 +47,10 @@
47
47
  exit(1); /* 強制終了 */
48
48
  }
49
49
 
50
- /* 波形データをファイルから読み込み */
50
+ /* データをファイルから読み込み */
51
51
  for (int i=0; i<N ;i++){
52
52
  fscanf(fi, "%lf", &xt[i]);
53
- printf("波形データ: %f\n", xt[i]);
53
+ printf("データ: %f\n", xt[i]);
54
54
  }
55
55
 
56
56
  /* 入力ファイルをクローズ */

2

書式の改善

2018/06/29 05:00

投稿

raintree
raintree

スコア10

title CHANGED
File without changes
body CHANGED
@@ -1,15 +1,15 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- 関数readwaveを使って音源データを読み込みたいです。
3
+ 関数readDataを使ってデータを読み込みたいです。
4
4
  Cygwin64 Terminalで実行すると、以下のように表示されました。
5
5
 
6
6
  ### 発生している問題・エラーメッセージ
7
7
 
8
8
  ```
9
9
  $ ./ap
10
- 音源ファイル名を入力してください:c_wave.txt
10
+ ファイル名を入力してください:c_data.txt
11
11
 
12
- 入力ファイル c_wave.txtをオープンできません.
12
+ 入力ファイル c_data.txtをオープンできません.
13
13
 
14
14
  ```
15
15
 
@@ -20,7 +20,7 @@
20
20
  #include <stdlib.h>
21
21
 
22
22
  /* プロトタイプ宣言 */
23
- void readwave( char filename[], int N, double xt[] );
23
+ void readData( char filename[], int N, double xt[] );
24
24
 
25
25
  int main(void) {
26
26
 
@@ -28,16 +28,16 @@
28
28
  double x_n[100];
29
29
  char readfile[20];
30
30
 
31
- /* 音源データを読み込む */
31
+ /* データを読み込む */
32
- printf("音源ファイル名を入力してください:");
32
+ printf("ファイル名を入力してください:");
33
33
  fflush(0); /*バッファにためている分を出力*/
34
34
  scanf("%20s",&readfile);
35
- readwave(readfile, 200, x_n);
35
+ readData(readfile, 200, x_n);
36
36
 
37
37
  return 0;
38
38
  }
39
39
 
40
- void readWave(char filename[], int N, double xt[])
40
+ void readData(char filename[], int N, double xt[])
41
41
  {
42
42
  FILE *fi; /* ファイルポインタの宣言。fi: 入力用 */
43
43
 

1

書式の改善

2018/06/29 04:57

投稿

raintree
raintree

スコア10

title CHANGED
File without changes
body CHANGED
@@ -1,6 +1,6 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- 関数readWaveを使って音源データを読み込みたいです。
3
+ 関数readwaveを使って音源データを読み込みたいです。
4
4
  Cygwin64 Terminalで実行すると、以下のように表示されました。
5
5
 
6
6
  ### 発生している問題・エラーメッセージ
@@ -18,65 +18,27 @@
18
18
  ```c
19
19
  #include <stdio.h>
20
20
  #include <stdlib.h>
21
- #include <math.h>
22
21
 
23
- /* 記号定数の定義 */
24
- #define SAMPLE_RATE 44100 /* 音の波形データのサンプルレート(Hz) */
25
- #define NUM_DATA 22050 /* 音の波形データのサンプル点数 N */
26
- #define NUM_FREQ 11025 /* k の数(周波数の分割数)(= N/2) */
27
-
28
22
  /* プロトタイプ宣言 */
29
- void readWave( char filename[], int N, double xt[] );
23
+ void readwave( char filename[], int N, double xt[] );
30
- void writeSpectrum( char filename[], int Nk,
31
- double f[], double sp[], double Re_F[], double Im_F[] );
32
- void windowing( int N, double xt[] );
33
- void fourierTrans( int N, double xt[], double Re_F[], double Im_F[] );
34
24
 
35
25
  int main(void) {
26
+
36
27
  /* 変数宣言*/
37
- double x_n[NUM_DATA], f_k[NUM_FREQ], I_k[NUM_FREQ], a_k[NUM_FREQ], b_k[NUM_FREQ];
28
+ double x_n[100];
38
- char readfile[20], writefile[20];
29
+ char readfile[20];
39
30
 
40
31
  /* 音源データを読み込む */
41
32
  printf("音源ファイル名を入力してください:");
42
33
  fflush(0); /*バッファにためている分を出力*/
43
34
  scanf("%20s",&readfile);
44
- printf("\n");
45
- readWave(readfile, NUM_DATA, x_n);
35
+ readwave(readfile, 200, x_n);
46
36
 
47
- /* 波形データに窓関数を掛ける */
48
- windowing(NUM_DATA, x_n);
49
-
50
- /* フーリエ変換 */
51
- fourierTrans(NUM_DATA, x_n, a_k, b_k);
52
-
53
- /* スペクトル密度 I と周波数fを計算 */
54
- for(int k=0; k<NUM_FREQ; k++){
55
- I_k[k] = sqrt(a_k[k]*a_k[k] + b_k[k]*b_k[k]);
56
- f_k[k] = (k / (double)NUM_DATA) * (double)SAMPLE_RATE;
57
- }
58
-
59
- /* スペクトルを出力 */
60
- printf("出力ファイル名を入力してください:");
61
- fflush(0); /*バッファにためている分を出力*/
62
- scanf("%20s", writefile);
63
- printf("\n");
64
- writeSpectrum(writefile, NUM_FREQ, f_k, I_k, a_k, b_k);
65
- printf("計算が完了しました.\n");
66
-
67
37
  return 0;
68
38
  }
69
39
 
70
- /*----------------------------------------------------------------------------
71
- 音源ファイルから波形データを読み込む関数
72
-
73
- (in) filename: 音源ファイル名
74
- N : 波形データ xt[] の要素数
75
-
76
- (out) xt[i] : 波形データ
77
- ----------------------------------------------------------------------------*/
78
- void readWave(char filename[], int N, double xt[]) {
40
+ void readWave(char filename[], int N, double xt[])
79
-
41
+ {
80
42
  FILE *fi; /* ファイルポインタの宣言。fi: 入力用 */
81
43
 
82
44
  /* 入力ファイルをオープン*/
@@ -96,75 +58,4 @@
96
58
 
97
59
  return;
98
60
  }
99
-
100
- /*----------------------------------------------------------------------------
101
- 音のスペクトルの計算結果をファイルに出力する関数
102
-
103
- (in) filename: 出力ファイル名
104
- Nk : スペクトルデータの要素数
105
- f[k] : 周波数(単位: Hz)
106
- sp[k] : スペクトル
107
- Re_F[k] : スペクトルの実部
108
- Im_F[k] : スペクトルの虚部
109
- ----------------------------------------------------------------------------*/
110
- void writeSpectrum( char filename[], int Nk,
111
- double f[], double sp[], double Re_F[], double Im_F[] ) {
112
-
113
- FILE *fo; /* ファイルポインタの宣言。fo: 出力用 */
114
-
115
- /* 出力ファイルをオープン*/
116
- if ( (fo = fopen("filename", "w") ) == NULL) {
117
- printf("出力ファイル %sをオープンできません.\n", filename);
118
- exit(1); /* 強制終了 */
119
- }
120
-
121
- fprintf(fo, "#-------------------------------------------------------------\n");
122
- fprintf(fo, "# freq(Hz) Spectrum Re_F(k) Im_F(k)\n");
123
- fprintf(fo, "#-------------------------------------------------------------\n");
124
- for (int i = 0; i < Nk; i++){
125
- fprintf(fo, "%9.3f %11.5e %11.5e %11.5e\n", f[i], sp[i], Re_F[i], Im_F[i]);
126
- }
127
- fprintf(fo, "#-------------------------------------------------------------\n");
128
-
129
- /* 出力ファイルをクローズ */
130
- fclose(fo);
131
-
132
- return;
133
- }
134
-
135
- /*----------------------------------------------------------------------------
136
- 波形データに "窓関数" をかける関数
137
-
138
- (in) N : 波形データ xt[] の要素数
139
- xt[i] : 波形データ
140
-
141
- (out) xt[i] : 波形データ(窓関数をかけたもの)
142
- ----------------------------------------------------------------------------*/
143
- void windowing( int N, double xt[] ) {
144
-
145
- for (int i = 0; i < N; i++){
146
- xt[i] = xt[i]*(1.0/2.0)*(1.0 - cos((2.0*M_PI*i)/N));
147
- }
148
- return;
149
- }
150
-
151
- /*----------------------------------------------------------------------------
152
- 離散 Fourier 変換(DFT)を行う関数
153
-
154
- (in) N : 元の波形データ xt[] の要素数(サンプル点の数)
155
- xt[i] : 元の波形データ
156
-
157
- (out) Re_F[k]: フーリエ変換後の関数 X_k の実部 (a_k)
158
- Im_F[k]: フーリエ変換後の関数 X_k の虚部 (b_k)
159
- ----------------------------------------------------------------------------*/
160
- void fourierTrans( int N, double xt[], double Re_F[], double Im_F[] ) {
161
- /*a_kとb_kを計算*/
162
- for (int k = 0; k < N/2; k++){
163
- for (int i = 0; i < N; i++){
164
- Re_F[k] += xt[i]*cos((2.0*M_PI*k*i)/N);
165
- Im_F[k] += xt[i]*sin((2.0*M_PI*k*i)/N);
166
- }
167
- }
168
- return;
169
- }
170
61
  ```