質問編集履歴

5

あああ

2022/06/03 03:43

投稿

Cass-_.4567
Cass-_.4567

スコア4

test CHANGED
@@ -1 +1 @@
1
- C言語 離散フーリエ変換実数部の値がうく出力されない
1
+ C言語 質問削除しした
test CHANGED
@@ -1,169 +1,4 @@
1
1
  ```ここに言語を入力
2
2
 
3
- #include<stdio.h>
4
3
 
5
- #include <stdlib.h>
6
-
7
- #include<math.h>
8
-
9
- int main()
10
-
11
- { float *gr,*gi,*G,*t,*g,*f,sum,sum1,sum2;
12
-
13
- int i,N=32,k;
14
-
15
- gr=(float*)malloc(sizeof(float)*N);
16
-
17
- gi=(float*)malloc(sizeof(float)*N);
18
-
19
- g=(float*)malloc(sizeof(float)*N);
20
-
21
- t=(float*)malloc(sizeof(float)*N);
22
-
23
- G=(float*)malloc(sizeof(float)*N);
24
-
25
- f=(float*)malloc(sizeof(float)*N);
26
-
27
- t[0]=0;
28
-
29
- for(i=1;i<N;i++)
30
-
31
- {
32
-
33
- t[i]=t[i-1]+(float)3/32;
34
-
35
- }
36
-
37
- for(i=0;i<N;i++)
38
-
39
- {
40
-
41
- g[i]=sin(2*M_PI*t[i])+0.5*cos(6*M_PI*t[i]);
42
-
43
- }
44
-
45
- printf("周波数 実部Gr 虚部Gi 振幅スペクトル\n");
46
-
47
- for(k=-N/2;k<=N/2-1;k++)
48
-
49
- { sum=0;
50
-
51
- sum1=0;
52
-
53
- for(i=0;i<32;i++)
54
-
55
- {
56
-
57
- sum+=g[i]*cos(2*M_PI*i*k/N);
58
-
59
- sum1+=-(g[i]*sin(2*M_PI*i*k/N));
60
-
61
- }
62
-
63
- gr[k+N/2]=sum;
64
-
65
- gi[k+N/2]=sum1;
66
-
67
- sum2=(float)1/(N*3/32);
68
-
69
- f[k+N/2]=(float)k*sum2;
70
-
71
- G[k+N/2]=sqrt(gr[k+N/2]*gr[k+N/2]+gi[k+N/2]*gi[k+N/2]);
72
-
73
- printf("%f %.1f %.1f %.1f\n",f[k+N/2],gr[k+N/2],gi[k+N/2],G[k+N/2]);
74
-
75
- }
76
-
77
- free(gr);
78
-
79
- free(gi);
80
-
81
- free(g);
82
-
83
- free(t);
84
-
85
- free(G);
86
-
87
- free(f);
88
-
89
- }
90
-
91
-
92
-
93
- ```
94
-
95
-
96
-
97
- 現在のコードです。
98
-
99
- 出力結果は
100
-
101
- 周波数 実部Gr 虚部Gi 振幅スペクトル
102
-
103
- -5.333333 0.0 0.0 0.0
104
-
105
- -5.000000 -0.0 0.0 0.0
106
-
107
- -4.666667 0.0 -0.0 0.0
108
-
109
- -4.333333 0.0 0.0 0.0
110
-
111
- -4.000000 0.0 -0.0 0.0
112
-
113
- -3.666667 0.0 0.0 0.0
114
-
115
- -3.333333 -0.0 0.0 0.0
116
-
117
- -3.000000 8.0 -0.0 8.0
118
-
119
- -2.666667 -0.0 0.0 0.0
120
-
121
- -2.333333 0.0 0.0 0.0
122
-
123
- -2.000000 -0.0 0.0 0.0
124
-
125
- -1.666667 0.0 0.0 0.0
126
-
127
- -1.333333 0.0 0.0 0.0
128
-
129
- -1.000000 -0.0 16.0 16.0
130
-
131
- -0.666667 0.0 -0.0 0.0
132
-
133
- -0.333333 0.0 0.0 0.0
134
-
135
- 0.000000 0.0 0.0 0.0
136
-
137
- 0.333333 0.0 -0.0 0.0
138
-
139
- 0.666667 0.0 0.0 0.0
140
-
141
- 1.000000 -0.0 -16.0 16.0
142
-
143
- 1.333333 0.0 -0.0 0.0
144
-
145
- 1.666667 0.0 -0.0 0.0
146
-
147
- 2.000000 -0.0 -0.0 0.0
148
-
149
- 2.333333 0.0 -0.0 0.0
150
-
151
- 2.666667 -0.0 -0.0 0.0
152
-
153
- 3.000000 8.0 0.0 8.0
154
-
155
- 3.333333 -0.0 -0.0 0.0
156
-
157
- 3.666667 0.0 -0.0 0.0
158
-
159
- 4.000000 0.0 0.0 0.0
160
-
161
- 4.333333 0.0 -0.0 0.0
162
-
163
- 4.666667 0.0 0.0 0.0
164
-
165
- 5.000000 -0.0 -0.0 0.0
166
-
167
-
168
-
169
- のようになっています。出力結果の-0.0で-の部分を消すことは可能でしょうか?
4
+ のようになっています。出ああああああああああああああああああああ

4

質問内容の変更

2022/01/03 04:53

投稿

Cass-_.4567
Cass-_.4567

スコア4

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,4 @@
1
1
  ```ここに言語を入力
2
-
3
- コード
4
2
 
5
3
  #include<stdio.h>
6
4
 
@@ -10,7 +8,7 @@
10
8
 
11
9
  int main()
12
10
 
13
- { float *gr,*gi,*t,*g,sum;
11
+ { float *gr,*gi,*G,*t,*g,*f,sum,sum1,sum2;
14
12
 
15
13
  int i,N=32,k;
16
14
 
@@ -21,6 +19,10 @@
21
19
  g=(float*)malloc(sizeof(float)*N);
22
20
 
23
21
  t=(float*)malloc(sizeof(float)*N);
22
+
23
+ G=(float*)malloc(sizeof(float)*N);
24
+
25
+ f=(float*)malloc(sizeof(float)*N);
24
26
 
25
27
  t[0]=0;
26
28
 
@@ -36,27 +38,39 @@
36
38
 
37
39
  {
38
40
 
39
- g[i]=(float)sin(2*M_PI*t[i])+(float)0.5*cos(6*M_PI*t[i]);
41
+ g[i]=sin(2*M_PI*t[i])+0.5*cos(6*M_PI*t[i]);
40
-
41
- printf("信号は%f\n",g[i]);
42
42
 
43
43
  }
44
44
 
45
+ printf("周波数 実部Gr 虚部Gi 振幅スペクトル\n");
46
+
45
- for(k=-N/2;k<N/2-1;k++)
47
+ for(k=-N/2;k<=N/2-1;k++)
46
48
 
47
49
  { sum=0;
50
+
51
+ sum1=0;
48
52
 
49
53
  for(i=0;i<32;i++)
50
54
 
51
55
  {
52
56
 
53
- sum+=g[i]*cos((float)2*M_PI*i*k/N);
57
+ sum+=g[i]*cos(2*M_PI*i*k/N);
58
+
59
+ sum1+=-(g[i]*sin(2*M_PI*i*k/N));
54
60
 
55
61
  }
56
62
 
57
- gr[k]=sum;
63
+ gr[k+N/2]=sum;
58
64
 
65
+ gi[k+N/2]=sum1;
66
+
67
+ sum2=(float)1/(N*3/32);
68
+
59
- printf("%f\n",gr[k]);
69
+ f[k+N/2]=(float)k*sum2;
70
+
71
+ G[k+N/2]=sqrt(gr[k+N/2]*gr[k+N/2]+gi[k+N/2]*gi[k+N/2]);
72
+
73
+ printf("%f %.1f %.1f %.1f\n",f[k+N/2],gr[k+N/2],gi[k+N/2],G[k+N/2]);
60
74
 
61
75
  }
62
76
 
@@ -68,152 +82,88 @@
68
82
 
69
83
  free(t);
70
84
 
71
- }
85
+ free(G);
72
86
 
73
- ```コード
74
-
75
- include<stdio.h>
76
-
77
- include <stdlib.h>
78
-
79
- include<math.h>
80
-
81
- int main()
82
-
83
- { float *gr,*gi,*t,*g,sum;
84
-
85
- int i,N=32,k;
86
-
87
- gr=(float*)malloc(sizeof(float)*N);
88
-
89
- gi=(float*)malloc(sizeof(float)*N);
90
-
91
- g=(float*)malloc(sizeof(float)*N);
92
-
93
- t=(float*)malloc(sizeof(float)*N);
94
-
95
- t[0]=0;
96
-
97
- for(i=1;i<N;i++)
98
-
99
- {
100
-
101
- t[i]=t[i-1]+(float)3/32;
102
-
103
- }
104
-
105
- for(i=0;i<N;i++)
106
-
107
- {
108
-
109
- g[i]=(float)sin(2*M_PI*t[i])+(float)0.5*cos(6*M_PI*t[i]);
110
-
111
- printf("信号は%f\n",g[i]);
112
-
113
- }
114
-
115
- for(k=-N/2;k<N/2-1;k++)
116
-
117
- { sum=0;
118
-
119
- for(i=0;i<32;i++)
120
-
121
- {
122
-
123
- sum+=g[i]*cos((float)2*M_PI*i*k/N);
124
-
125
- }
126
-
127
- gr[k]=sum;
128
-
129
- printf("%f\n",gr[k]);
130
-
131
- }
132
-
133
- free(gr);
134
-
135
- free(gi);
136
-
137
- free(g);
87
+ free(f);
138
-
139
- free(t);
140
88
 
141
89
  }
142
90
 
143
91
 
144
92
 
145
- このコードによってgr[k]=∑[n=0→N-1]{g[i]cos(2πnk/N)}の値を出力したいのですがgr[k]の出力結果が
93
+ ```
146
94
 
147
- 0.000000
148
95
 
149
- -0.000000
150
96
 
151
- -0.000000
97
+ 現在のコードです。
152
98
 
153
- -0.000000
99
+ 出力結果は
154
100
 
155
- -0.000000
101
+ 周波数 実部Gr 虚部Gi 振幅スペクトル
156
102
 
157
- -0.000000
103
+ -5.333333 0.0 0.0 0.0
158
104
 
159
- 0.000000
105
+ -5.000000 -0.0 0.0 0.0
160
106
 
161
- 8.000000
107
+ -4.666667 0.0 -0.0 0.0
162
108
 
163
- -0.000000
109
+ -4.333333 0.0 0.0 0.0
164
110
 
165
- 0.000000
111
+ -4.000000 0.0 -0.0 0.0
166
112
 
167
- -0.000000
113
+ -3.666667 0.0 0.0 0.0
168
114
 
169
- 0.000000
115
+ -3.333333 -0.0 0.0 0.0
170
116
 
171
- 0.000000
117
+ -3.000000 8.0 -0.0 8.0
172
118
 
173
- -0.000000
119
+ -2.666667 -0.0 0.0 0.0
174
120
 
175
- -0.000000
121
+ -2.333333 0.0 0.0 0.0
176
122
 
177
- 0.000000
123
+ -2.000000 -0.0 0.0 0.0
178
124
 
179
- 0.000000
125
+ -1.666667 0.0 0.0 0.0
180
126
 
181
- 0.000000
127
+ -1.333333 0.0 0.0 0.0
182
128
 
183
- -0.000000
129
+ -1.000000 -0.0 16.0 16.0
184
130
 
185
- -0.000000
131
+ -0.666667 0.0 -0.0 0.0
186
132
 
187
- 0.000000
133
+ -0.333333 0.0 0.0 0.0
188
134
 
189
- 0.000000
135
+ 0.000000 0.0 0.0 0.0
190
136
 
191
- -0.000000
137
+ 0.333333 0.0 -0.0 0.0
192
138
 
193
- 0.000000
139
+ 0.666667 0.0 0.0 0.0
194
140
 
195
- -0.000000
141
+ 1.000000 -0.0 -16.0 16.0
196
142
 
197
- 8.000000
143
+ 1.333333 0.0 -0.0 0.0
198
144
 
199
- 0.000000
145
+ 1.666667 0.0 -0.0 0.0
200
146
 
201
- -0.000000
147
+ 2.000000 -0.0 -0.0 0.0
202
148
 
203
- -0.000000
149
+ 2.333333 0.0 -0.0 0.0
204
150
 
205
- -0.000000
151
+ 2.666667 -0.0 -0.0 0.0
206
152
 
207
- -0.000000
153
+ 3.000000 8.0 0.0 8.0
208
154
 
209
- munmap_chunk(): invalid pointer
155
+ 3.333333 -0.0 -0.0 0.0
210
156
 
211
- Aborted (core dumped)
157
+ 3.666667 0.0 -0.0 0.0
212
158
 
213
- となってうまく表示されません。
159
+ 4.000000 0.0 0.0 0.0
214
160
 
215
- munmap_chunk(): invalid pointer
161
+ 4.333333 0.0 -0.0 0.0
216
162
 
217
- Aborted (core dumped)
163
+ 4.666667 0.0 0.0 0.0
218
164
 
165
+ 5.000000 -0.0 -0.0 0.0
166
+
167
+
168
+
219
- コードが出る理由、-0.000になってわないようにるにはどうすればよいでしょうかg[i]の出力はうまくいっており、k範囲ですが-N/2らN/2-1となっています。
169
+ ようになってます。出力結果-0.0-の部分を消ことは可能でしょう

3

コード変更

2022/01/03 04:53

投稿

Cass-_.4567
Cass-_.4567

スコア4

test CHANGED
File without changes
test CHANGED
@@ -1,5 +1,77 @@
1
+ ```ここに言語を入力
2
+
1
3
  コード
2
4
 
5
+ #include<stdio.h>
6
+
7
+ #include <stdlib.h>
8
+
9
+ #include<math.h>
10
+
11
+ int main()
12
+
13
+ { float *gr,*gi,*t,*g,sum;
14
+
15
+ int i,N=32,k;
16
+
17
+ gr=(float*)malloc(sizeof(float)*N);
18
+
19
+ gi=(float*)malloc(sizeof(float)*N);
20
+
21
+ g=(float*)malloc(sizeof(float)*N);
22
+
23
+ t=(float*)malloc(sizeof(float)*N);
24
+
25
+ t[0]=0;
26
+
27
+ for(i=1;i<N;i++)
28
+
29
+ {
30
+
31
+ t[i]=t[i-1]+(float)3/32;
32
+
33
+ }
34
+
35
+ for(i=0;i<N;i++)
36
+
37
+ {
38
+
39
+ g[i]=(float)sin(2*M_PI*t[i])+(float)0.5*cos(6*M_PI*t[i]);
40
+
41
+ printf("信号は%f\n",g[i]);
42
+
43
+ }
44
+
45
+ for(k=-N/2;k<N/2-1;k++)
46
+
47
+ { sum=0;
48
+
49
+ for(i=0;i<32;i++)
50
+
51
+ {
52
+
53
+ sum+=g[i]*cos((float)2*M_PI*i*k/N);
54
+
55
+ }
56
+
57
+ gr[k]=sum;
58
+
59
+ printf("%f\n",gr[k]);
60
+
61
+ }
62
+
63
+ free(gr);
64
+
65
+ free(gi);
66
+
67
+ free(g);
68
+
69
+ free(t);
70
+
71
+ }
72
+
73
+ ```コード
74
+
3
75
  include<stdio.h>
4
76
 
5
77
  include <stdlib.h>

2

コード変更

2022/01/03 00:48

投稿

Cass-_.4567
Cass-_.4567

スコア4

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

1

質問内容の変更

2022/01/03 00:45

投稿

Cass-_.4567
Cass-_.4567

スコア4

test CHANGED
File without changes
test CHANGED
@@ -136,4 +136,10 @@
136
136
 
137
137
  Aborted (core dumped)
138
138
 
139
+ となってうまく表示されません。
140
+
141
+ munmap_chunk(): invalid pointer
142
+
143
+ Aborted (core dumped)
144
+
139
- なってうまく表示さません。どこが間違ってるのでしょうか。g[i]の出力はうまくいっており、kの範囲ですが-N/2からN/2-1となっています。
145
+ のコードが出る理由、-0.000になってしまわないよにするにはどうすばよいでしょうか。g[i]の出力はうまくいっており、kの範囲ですが-N/2からN/2-1となっています。