質問編集履歴

7

書式の改善

2018/06/29 05:12

投稿

raintree
raintree

スコア10

test CHANGED
File without changes
test CHANGED
@@ -76,7 +76,9 @@
76
76
 
77
77
  {
78
78
 
79
- FILE *fi; /* ファイルポインタの宣言。fi: 入力用 */
79
+ /* ファイルポインタの宣言。fi: 入力用 */
80
+
81
+ FILE *fi;
80
82
 
81
83
 
82
84
 
@@ -86,9 +88,9 @@
86
88
 
87
89
  printf("入力ファイル %sをオープンできません.\n", filename);
88
90
 
89
- exit(1); /* 強制終了 */
91
+ /* 強制終了 */
90
92
 
91
- }
93
+ exit(1);
92
94
 
93
95
 
94
96
 

6

書式の改善

2018/06/29 05:12

投稿

raintree
raintree

スコア10

test CHANGED
File without changes
test CHANGED
@@ -45,8 +45,6 @@
45
45
  int main(void)
46
46
 
47
47
  {
48
-
49
-
50
48
 
51
49
  /* 変数宣言*/
52
50
 

5

書式の改善

2018/06/29 05:09

投稿

raintree
raintree

スコア10

test CHANGED
File without changes
test CHANGED
@@ -42,7 +42,9 @@
42
42
 
43
43
 
44
44
 
45
- int main(void) {
45
+ int main(void)
46
+
47
+ {
46
48
 
47
49
 
48
50
 

4

書式の改善

2018/06/29 05:08

投稿

raintree
raintree

スコア10

test CHANGED
File without changes
test CHANGED
@@ -14,15 +14,11 @@
14
14
 
15
15
  ```
16
16
 
17
- $ ./ap
17
+ $ ./te
18
18
 
19
19
  ファイル名を入力してください:c_da.txt
20
20
 
21
-
22
-
23
21
  入力ファイル c_da.txtをオープンできません.
24
-
25
-
26
22
 
27
23
  ```
28
24
 

3

書式の改善

2018/06/29 05:05

投稿

raintree
raintree

スコア10

test CHANGED
File without changes
test CHANGED
@@ -16,11 +16,11 @@
16
16
 
17
17
  $ ./ap
18
18
 
19
- ファイル名を入力してください:c_data.txt
19
+ ファイル名を入力してください:c_da.txt
20
20
 
21
21
 
22
22
 
23
- 入力ファイル c_data.txtをオープンできません.
23
+ 入力ファイル c_da.txtをオープンできません.
24
24
 
25
25
 
26
26
 
@@ -96,13 +96,13 @@
96
96
 
97
97
 
98
98
 
99
- /* 波形データをファイルから読み込み */
99
+ /* データをファイルから読み込み */
100
100
 
101
101
  for (int i=0; i<N ;i++){
102
102
 
103
103
  fscanf(fi, "%lf", &xt[i]);
104
104
 
105
- printf("波形データ: %f\n", xt[i]);
105
+ printf("データ: %f\n", xt[i]);
106
106
 
107
107
  }
108
108
 

2

書式の改善

2018/06/29 05:00

投稿

raintree
raintree

スコア10

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- 関数readwaveを使って音源データを読み込みたいです。
5
+ 関数readDataを使ってデータを読み込みたいです。
6
6
 
7
7
  Cygwin64 Terminalで実行すると、以下のように表示されました。
8
8
 
@@ -16,11 +16,11 @@
16
16
 
17
17
  $ ./ap
18
18
 
19
- 音源ファイル名を入力してください:c_wave.txt
19
+ ファイル名を入力してください:c_data.txt
20
20
 
21
21
 
22
22
 
23
- 入力ファイル c_wave.txtをオープンできません.
23
+ 入力ファイル c_data.txtをオープンできません.
24
24
 
25
25
 
26
26
 
@@ -42,7 +42,7 @@
42
42
 
43
43
  /* プロトタイプ宣言 */
44
44
 
45
- void readwave( char filename[], int N, double xt[] );
45
+ void readData( char filename[], int N, double xt[] );
46
46
 
47
47
 
48
48
 
@@ -58,15 +58,15 @@
58
58
 
59
59
 
60
60
 
61
- /* 音源データを読み込む */
61
+ /* データを読み込む */
62
62
 
63
- printf("音源ファイル名を入力してください:");
63
+ printf("ファイル名を入力してください:");
64
64
 
65
65
  fflush(0); /*バッファにためている分を出力*/
66
66
 
67
67
  scanf("%20s",&readfile);
68
68
 
69
- readwave(readfile, 200, x_n);
69
+ readData(readfile, 200, x_n);
70
70
 
71
71
 
72
72
 
@@ -76,7 +76,7 @@
76
76
 
77
77
 
78
78
 
79
- void readWave(char filename[], int N, double xt[])
79
+ void readData(char filename[], int N, double xt[])
80
80
 
81
81
  {
82
82
 

1

書式の改善

2018/06/29 04:57

投稿

raintree
raintree

スコア10

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- 関数readWaveを使って音源データを読み込みたいです。
5
+ 関数readwaveを使って音源データを読み込みたいです。
6
6
 
7
7
  Cygwin64 Terminalで実行すると、以下のように表示されました。
8
8
 
@@ -38,41 +38,23 @@
38
38
 
39
39
  #include <stdlib.h>
40
40
 
41
- #include <math.h>
42
-
43
-
44
-
45
- /* 記号定数の定義 */
46
-
47
- #define SAMPLE_RATE 44100 /* 音の波形データのサンプルレート(Hz) */
48
-
49
- #define NUM_DATA 22050 /* 音の波形データのサンプル点数 N */
50
-
51
- #define NUM_FREQ 11025 /* k の数(周波数の分割数)(= N/2) */
52
-
53
41
 
54
42
 
55
43
  /* プロトタイプ宣言 */
56
44
 
57
- void readWave( char filename[], int N, double xt[] );
45
+ void readwave( char filename[], int N, double xt[] );
58
-
59
- void writeSpectrum( char filename[], int Nk,
60
-
61
- double f[], double sp[], double Re_F[], double Im_F[] );
62
-
63
- void windowing( int N, double xt[] );
64
-
65
- void fourierTrans( int N, double xt[], double Re_F[], double Im_F[] );
66
46
 
67
47
 
68
48
 
69
49
  int main(void) {
70
50
 
51
+
52
+
71
53
  /* 変数宣言*/
72
54
 
73
- double x_n[NUM_DATA], f_k[NUM_FREQ], I_k[NUM_FREQ], a_k[NUM_FREQ], b_k[NUM_FREQ];
55
+ double x_n[100];
74
56
 
75
- char readfile[20], writefile[20];
57
+ char readfile[20];
76
58
 
77
59
 
78
60
 
@@ -84,49 +66,7 @@
84
66
 
85
67
  scanf("%20s",&readfile);
86
68
 
87
- printf("\n");
88
-
89
- readWave(readfile, NUM_DATA, x_n);
69
+ readwave(readfile, 200, x_n);
90
-
91
-
92
-
93
- /* 波形データに窓関数を掛ける */
94
-
95
- windowing(NUM_DATA, x_n);
96
-
97
-
98
-
99
- /* フーリエ変換 */
100
-
101
- fourierTrans(NUM_DATA, x_n, a_k, b_k);
102
-
103
-
104
-
105
- /* スペクトル密度 I と周波数fを計算 */
106
-
107
- for(int k=0; k<NUM_FREQ; k++){
108
-
109
- I_k[k] = sqrt(a_k[k]*a_k[k] + b_k[k]*b_k[k]);
110
-
111
- f_k[k] = (k / (double)NUM_DATA) * (double)SAMPLE_RATE;
112
-
113
- }
114
-
115
-
116
-
117
- /* スペクトルを出力 */
118
-
119
- printf("出力ファイル名を入力してください:");
120
-
121
- fflush(0); /*バッファにためている分を出力*/
122
-
123
- scanf("%20s", writefile);
124
-
125
- printf("\n");
126
-
127
- writeSpectrum(writefile, NUM_FREQ, f_k, I_k, a_k, b_k);
128
-
129
- printf("計算が完了しました.\n");
130
70
 
131
71
 
132
72
 
@@ -136,25 +76,9 @@
136
76
 
137
77
 
138
78
 
139
- /*----------------------------------------------------------------------------
79
+ void readWave(char filename[], int N, double xt[])
140
80
 
141
- 音源ファイルから波形データを読み込む関数
81
+ {
142
-
143
-
144
-
145
- (in) filename: 音源ファイル名
146
-
147
- N : 波形データ xt[] の要素数
148
-
149
-
150
-
151
- (out) xt[i] : 波形データ
152
-
153
- ----------------------------------------------------------------------------*/
154
-
155
- void readWave(char filename[], int N, double xt[]) {
156
-
157
-
158
82
 
159
83
  FILE *fi; /* ファイルポインタの宣言。fi: 入力用 */
160
84
 
@@ -194,146 +118,4 @@
194
118
 
195
119
  }
196
120
 
197
-
198
-
199
- /*----------------------------------------------------------------------------
200
-
201
- 音のスペクトルの計算結果をファイルに出力する関数
202
-
203
-
204
-
205
- (in) filename: 出力ファイル名
206
-
207
- Nk : スペクトルデータの要素数
208
-
209
- f[k] : 周波数(単位: Hz)
210
-
211
- sp[k] : スペクトル
212
-
213
- Re_F[k] : スペクトルの実部
214
-
215
- Im_F[k] : スペクトルの虚部
216
-
217
- ----------------------------------------------------------------------------*/
218
-
219
- void writeSpectrum( char filename[], int Nk,
220
-
221
- double f[], double sp[], double Re_F[], double Im_F[] ) {
222
-
223
-
224
-
225
- FILE *fo; /* ファイルポインタの宣言。fo: 出力用 */
226
-
227
-
228
-
229
- /* 出力ファイルをオープン*/
230
-
231
- if ( (fo = fopen("filename", "w") ) == NULL) {
232
-
233
- printf("出力ファイル %sをオープンできません.\n", filename);
234
-
235
- exit(1); /* 強制終了 */
236
-
237
- }
238
-
239
-
240
-
241
- fprintf(fo, "#-------------------------------------------------------------\n");
242
-
243
- fprintf(fo, "# freq(Hz) Spectrum Re_F(k) Im_F(k)\n");
244
-
245
- fprintf(fo, "#-------------------------------------------------------------\n");
246
-
247
- for (int i = 0; i < Nk; i++){
248
-
249
- fprintf(fo, "%9.3f %11.5e %11.5e %11.5e\n", f[i], sp[i], Re_F[i], Im_F[i]);
250
-
251
- }
252
-
253
- fprintf(fo, "#-------------------------------------------------------------\n");
254
-
255
-
256
-
257
- /* 出力ファイルをクローズ */
258
-
259
- fclose(fo);
260
-
261
-
262
-
263
- return;
264
-
265
- }
266
-
267
-
268
-
269
- /*----------------------------------------------------------------------------
270
-
271
- 波形データに "窓関数" をかける関数
272
-
273
-
274
-
275
- (in) N : 波形データ xt[] の要素数
276
-
277
- xt[i] : 波形データ
278
-
279
-
280
-
281
- (out) xt[i] : 波形データ(窓関数をかけたもの)
282
-
283
- ----------------------------------------------------------------------------*/
284
-
285
- void windowing( int N, double xt[] ) {
286
-
287
-
288
-
289
- for (int i = 0; i < N; i++){
290
-
291
- xt[i] = xt[i]*(1.0/2.0)*(1.0 - cos((2.0*M_PI*i)/N));
292
-
293
- }
294
-
295
- return;
296
-
297
- }
298
-
299
-
300
-
301
- /*----------------------------------------------------------------------------
302
-
303
- 離散 Fourier 変換(DFT)を行う関数
304
-
305
-
306
-
307
- (in) N : 元の波形データ xt[] の要素数(サンプル点の数)
308
-
309
- xt[i] : 元の波形データ
310
-
311
-
312
-
313
- (out) Re_F[k]: フーリエ変換後の関数 X_k の実部 (a_k)
314
-
315
- Im_F[k]: フーリエ変換後の関数 X_k の虚部 (b_k)
316
-
317
- ----------------------------------------------------------------------------*/
318
-
319
- void fourierTrans( int N, double xt[], double Re_F[], double Im_F[] ) {
320
-
321
- /*a_kとb_kを計算*/
322
-
323
- for (int k = 0; k < N/2; k++){
324
-
325
- for (int i = 0; i < N; i++){
326
-
327
- Re_F[k] += xt[i]*cos((2.0*M_PI*k*i)/N);
328
-
329
- Im_F[k] += xt[i]*sin((2.0*M_PI*k*i)/N);
330
-
331
- }
332
-
333
- }
334
-
335
- return;
336
-
337
- }
338
-
339
121
  ```