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

質問編集履歴

5

あああ

2022/06/03 03:43

投稿

Cass-_.4567
Cass-_.4567

スコア4

title CHANGED
@@ -1,1 +1,1 @@
1
- C言語 離散フーリエ変換実数部の値がうく出力されない
1
+ C言語 質問削除しした
body CHANGED
@@ -1,85 +1,4 @@
1
- ```ここに言語を入力
1
+ ```ここに言語を入力
2
- #include<stdio.h>
2
+
3
- #include <stdlib.h>
3
+
4
- #include<math.h>
5
- int main()
6
- { float *gr,*gi,*G,*t,*g,*f,sum,sum1,sum2;
7
- int i,N=32,k;
8
- gr=(float*)malloc(sizeof(float)*N);
9
- gi=(float*)malloc(sizeof(float)*N);
10
- g=(float*)malloc(sizeof(float)*N);
11
- t=(float*)malloc(sizeof(float)*N);
12
- G=(float*)malloc(sizeof(float)*N);
13
- f=(float*)malloc(sizeof(float)*N);
14
- t[0]=0;
15
- for(i=1;i<N;i++)
16
- {
17
- t[i]=t[i-1]+(float)3/32;
18
- }
19
- for(i=0;i<N;i++)
20
- {
21
- g[i]=sin(2*M_PI*t[i])+0.5*cos(6*M_PI*t[i]);
22
- }
23
- printf("周波数 実部Gr 虚部Gi 振幅スペクトル\n");
24
- for(k=-N/2;k<=N/2-1;k++)
25
- { sum=0;
26
- sum1=0;
27
- for(i=0;i<32;i++)
28
- {
29
- sum+=g[i]*cos(2*M_PI*i*k/N);
30
- sum1+=-(g[i]*sin(2*M_PI*i*k/N));
31
- }
32
- gr[k+N/2]=sum;
33
- gi[k+N/2]=sum1;
34
- sum2=(float)1/(N*3/32);
35
- f[k+N/2]=(float)k*sum2;
36
- G[k+N/2]=sqrt(gr[k+N/2]*gr[k+N/2]+gi[k+N/2]*gi[k+N/2]);
37
- printf("%f %.1f %.1f %.1f\n",f[k+N/2],gr[k+N/2],gi[k+N/2],G[k+N/2]);
38
- }
39
- free(gr);
40
- free(gi);
41
- free(g);
42
- free(t);
43
- free(G);
44
- free(f);
45
- }
46
-
47
- ```
48
-
49
- 現在のコードです。
50
- 出力結果は
51
- 周波数 実部Gr 虚部Gi 振幅スペクトル
52
- -5.333333 0.0 0.0 0.0
53
- -5.000000 -0.0 0.0 0.0
54
- -4.666667 0.0 -0.0 0.0
55
- -4.333333 0.0 0.0 0.0
56
- -4.000000 0.0 -0.0 0.0
57
- -3.666667 0.0 0.0 0.0
58
- -3.333333 -0.0 0.0 0.0
59
- -3.000000 8.0 -0.0 8.0
60
- -2.666667 -0.0 0.0 0.0
61
- -2.333333 0.0 0.0 0.0
62
- -2.000000 -0.0 0.0 0.0
63
- -1.666667 0.0 0.0 0.0
64
- -1.333333 0.0 0.0 0.0
65
- -1.000000 -0.0 16.0 16.0
66
- -0.666667 0.0 -0.0 0.0
67
- -0.333333 0.0 0.0 0.0
68
- 0.000000 0.0 0.0 0.0
69
- 0.333333 0.0 -0.0 0.0
70
- 0.666667 0.0 0.0 0.0
71
- 1.000000 -0.0 -16.0 16.0
72
- 1.333333 0.0 -0.0 0.0
73
- 1.666667 0.0 -0.0 0.0
74
- 2.000000 -0.0 -0.0 0.0
75
- 2.333333 0.0 -0.0 0.0
76
- 2.666667 -0.0 -0.0 0.0
77
- 3.000000 8.0 0.0 8.0
78
- 3.333333 -0.0 -0.0 0.0
79
- 3.666667 0.0 -0.0 0.0
80
- 4.000000 0.0 0.0 0.0
81
- 4.333333 0.0 -0.0 0.0
82
- 4.666667 0.0 0.0 0.0
83
- 5.000000 -0.0 -0.0 0.0
84
-
85
- のようになっています。出力結果の-0.0で-の部分を消すことは可能でしょうか?
4
+ のようになっています。出ああああああああああああああああああああ

4

質問内容の変更

2022/01/03 04:53

投稿

Cass-_.4567
Cass-_.4567

スコア4

title CHANGED
File without changes
body CHANGED
@@ -1,15 +1,16 @@
1
1
  ```ここに言語を入力
2
- コード
3
2
  #include<stdio.h>
4
3
  #include <stdlib.h>
5
4
  #include<math.h>
6
5
  int main()
7
- { float *gr,*gi,*t,*g,sum;
6
+ { float *gr,*gi,*G,*t,*g,*f,sum,sum1,sum2;
8
7
  int i,N=32,k;
9
8
  gr=(float*)malloc(sizeof(float)*N);
10
9
  gi=(float*)malloc(sizeof(float)*N);
11
10
  g=(float*)malloc(sizeof(float)*N);
12
11
  t=(float*)malloc(sizeof(float)*N);
12
+ G=(float*)malloc(sizeof(float)*N);
13
+ f=(float*)malloc(sizeof(float)*N);
13
14
  t[0]=0;
14
15
  for(i=1;i<N;i++)
15
16
  {
@@ -17,94 +18,68 @@
17
18
  }
18
19
  for(i=0;i<N;i++)
19
20
  {
20
- g[i]=(float)sin(2*M_PI*t[i])+(float)0.5*cos(6*M_PI*t[i]);
21
+ g[i]=sin(2*M_PI*t[i])+0.5*cos(6*M_PI*t[i]);
21
- printf("信号は%f\n",g[i]);
22
22
  }
23
+ printf("周波数 実部Gr 虚部Gi 振幅スペクトル\n");
23
- for(k=-N/2;k<N/2-1;k++)
24
+ for(k=-N/2;k<=N/2-1;k++)
24
25
  { sum=0;
26
+ sum1=0;
25
27
  for(i=0;i<32;i++)
26
28
  {
27
- sum+=g[i]*cos((float)2*M_PI*i*k/N);
29
+ sum+=g[i]*cos(2*M_PI*i*k/N);
30
+ sum1+=-(g[i]*sin(2*M_PI*i*k/N));
28
31
  }
29
- gr[k]=sum;
32
+ gr[k+N/2]=sum;
33
+ gi[k+N/2]=sum1;
34
+ sum2=(float)1/(N*3/32);
30
- printf("%f\n",gr[k]);
35
+ f[k+N/2]=(float)k*sum2;
36
+ G[k+N/2]=sqrt(gr[k+N/2]*gr[k+N/2]+gi[k+N/2]*gi[k+N/2]);
37
+ printf("%f %.1f %.1f %.1f\n",f[k+N/2],gr[k+N/2],gi[k+N/2],G[k+N/2]);
31
38
  }
32
39
  free(gr);
33
40
  free(gi);
34
41
  free(g);
35
42
  free(t);
43
+ free(G);
44
+ free(f);
36
45
  }
37
- ```コード
38
- include<stdio.h>
39
- include <stdlib.h>
40
- include<math.h>
41
- int main()
42
- { float *gr,*gi,*t,*g,sum;
43
- int i,N=32,k;
44
- gr=(float*)malloc(sizeof(float)*N);
45
- gi=(float*)malloc(sizeof(float)*N);
46
- g=(float*)malloc(sizeof(float)*N);
47
- t=(float*)malloc(sizeof(float)*N);
48
- t[0]=0;
49
- for(i=1;i<N;i++)
50
- {
51
- t[i]=t[i-1]+(float)3/32;
52
- }
53
- for(i=0;i<N;i++)
54
- {
55
- g[i]=(float)sin(2*M_PI*t[i])+(float)0.5*cos(6*M_PI*t[i]);
56
- printf("信号は%f\n",g[i]);
57
- }
58
- for(k=-N/2;k<N/2-1;k++)
59
- { sum=0;
60
- for(i=0;i<32;i++)
61
- {
62
- sum+=g[i]*cos((float)2*M_PI*i*k/N);
63
- }
64
- gr[k]=sum;
65
- printf("%f\n",gr[k]);
66
- }
67
- free(gr);
68
- free(gi);
69
- free(g);
70
- free(t);
71
- }
72
46
 
73
- このコードによってgr[k]=∑[n=0→N-1]{g[i]cos(2πnk/N)}の値を出力したいのですがgr[k]の出力結果が
74
- 0.000000
47
+ ```
48
+
75
- -0.000000
49
+ 現在のコードです。
50
+ 出力結果は
51
+ 周波数 実部Gr 虚部Gi 振幅スペクトル
52
+ -5.333333 0.0 0.0 0.0
53
+ -5.000000 -0.0 0.0 0.0
54
+ -4.666667 0.0 -0.0 0.0
55
+ -4.333333 0.0 0.0 0.0
56
+ -4.000000 0.0 -0.0 0.0
57
+ -3.666667 0.0 0.0 0.0
58
+ -3.333333 -0.0 0.0 0.0
59
+ -3.000000 8.0 -0.0 8.0
60
+ -2.666667 -0.0 0.0 0.0
61
+ -2.333333 0.0 0.0 0.0
62
+ -2.000000 -0.0 0.0 0.0
63
+ -1.666667 0.0 0.0 0.0
64
+ -1.333333 0.0 0.0 0.0
65
+ -1.000000 -0.0 16.0 16.0
66
+ -0.666667 0.0 -0.0 0.0
76
- -0.000000
67
+ -0.333333 0.0 0.0 0.0
77
- -0.000000
78
- -0.000000
79
- -0.000000
80
- 0.000000
81
- 8.000000
82
- -0.000000
83
- 0.000000
84
- -0.000000
85
- 0.000000
86
- 0.000000
87
- -0.000000
88
- -0.000000
89
- 0.000000
90
- 0.000000
91
- 0.000000
92
- -0.000000
93
- -0.000000
94
- 0.000000
95
- 0.000000
96
- -0.000000
97
- 0.000000
98
- -0.000000
99
- 8.000000
100
- 0.000000
101
- -0.000000
102
- -0.000000
103
- -0.000000
104
- -0.000000
105
- munmap_chunk(): invalid pointer
68
+ 0.000000 0.0 0.0 0.0
106
- Aborted (core dumped)
69
+ 0.333333 0.0 -0.0 0.0
107
- となってうまく表示されません。
108
- munmap_chunk(): invalid pointer
70
+ 0.666667 0.0 0.0 0.0
71
+ 1.000000 -0.0 -16.0 16.0
72
+ 1.333333 0.0 -0.0 0.0
73
+ 1.666667 0.0 -0.0 0.0
74
+ 2.000000 -0.0 -0.0 0.0
75
+ 2.333333 0.0 -0.0 0.0
76
+ 2.666667 -0.0 -0.0 0.0
109
- Aborted (core dumped)
77
+ 3.000000 8.0 0.0 8.0
78
+ 3.333333 -0.0 -0.0 0.0
79
+ 3.666667 0.0 -0.0 0.0
80
+ 4.000000 0.0 0.0 0.0
81
+ 4.333333 0.0 -0.0 0.0
82
+ 4.666667 0.0 0.0 0.0
83
+ 5.000000 -0.0 -0.0 0.0
84
+
110
- コードが出る理由、-0.000になってしまわなようにるにはどうすればよいでしょうかg[i]の出力はうまくいっており、k範囲すが-N/2からN/2-1となっていま
85
+ ようになっていす。出力結果-0.0で-の部分を消ことは可能でしょうか?

3

コード変更

2022/01/03 04:53

投稿

Cass-_.4567
Cass-_.4567

スコア4

title CHANGED
File without changes
body CHANGED
@@ -1,4 +1,40 @@
1
+ ```ここに言語を入力
1
2
  コード
3
+ #include<stdio.h>
4
+ #include <stdlib.h>
5
+ #include<math.h>
6
+ int main()
7
+ { float *gr,*gi,*t,*g,sum;
8
+ int i,N=32,k;
9
+ gr=(float*)malloc(sizeof(float)*N);
10
+ gi=(float*)malloc(sizeof(float)*N);
11
+ g=(float*)malloc(sizeof(float)*N);
12
+ t=(float*)malloc(sizeof(float)*N);
13
+ t[0]=0;
14
+ for(i=1;i<N;i++)
15
+ {
16
+ t[i]=t[i-1]+(float)3/32;
17
+ }
18
+ for(i=0;i<N;i++)
19
+ {
20
+ g[i]=(float)sin(2*M_PI*t[i])+(float)0.5*cos(6*M_PI*t[i]);
21
+ printf("信号は%f\n",g[i]);
22
+ }
23
+ for(k=-N/2;k<N/2-1;k++)
24
+ { sum=0;
25
+ for(i=0;i<32;i++)
26
+ {
27
+ sum+=g[i]*cos((float)2*M_PI*i*k/N);
28
+ }
29
+ gr[k]=sum;
30
+ printf("%f\n",gr[k]);
31
+ }
32
+ free(gr);
33
+ free(gi);
34
+ free(g);
35
+ free(t);
36
+ }
37
+ ```コード
2
38
  include<stdio.h>
3
39
  include <stdlib.h>
4
40
  include<math.h>

2

コード変更

2022/01/03 00:48

投稿

Cass-_.4567
Cass-_.4567

スコア4

title CHANGED
File without changes
body CHANGED
@@ -1,3 +1,4 @@
1
+ コード
1
2
  include<stdio.h>
2
3
  include <stdlib.h>
3
4
  include<math.h>

1

質問内容の変更

2022/01/03 00:45

投稿

Cass-_.4567
Cass-_.4567

スコア4

title CHANGED
File without changes
body CHANGED
@@ -67,4 +67,7 @@
67
67
  -0.000000
68
68
  munmap_chunk(): invalid pointer
69
69
  Aborted (core dumped)
70
+ となってうまく表示されません。
71
+ munmap_chunk(): invalid pointer
72
+ Aborted (core dumped)
70
- なってく表示されません。どこが間違っているでしょうか。g[i]の出力はうまくいっており、kの範囲ですが-N/2からN/2-1となっています。
73
+ のコードが出る理由、-0.000になってわなようにすにはどうすればよいでしょうか。g[i]の出力はうまくいっており、kの範囲ですが-N/2からN/2-1となっています。