質問編集履歴
4
プログラムの修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
|
11
11
|
周波数は25000Hzくらいまで表示できるのですが
|
12
12
|
|
13
|
-
パワースペクトルが
|
13
|
+
パワースペクトルが周波数と対応しません。
|
14
14
|
|
15
15
|
どなたかご教示お願い致します。
|
16
16
|
|
@@ -52,7 +52,17 @@
|
|
52
52
|
|
53
53
|
double dt = 0.01;
|
54
54
|
|
55
|
+
double sc;
|
56
|
+
|
55
|
-
double
|
57
|
+
double* x, * y;
|
58
|
+
|
59
|
+
x = (double*)malloc(sizeof(double) * N);
|
60
|
+
|
61
|
+
y = (double*)malloc(sizeof(double) * N);
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
|
56
66
|
|
57
67
|
double fq, pw;
|
58
68
|
|
@@ -84,7 +94,11 @@
|
|
84
94
|
|
85
95
|
for (i = 0; i < N; i++) {
|
86
96
|
|
97
|
+
if (i % 256 == 0) {
|
98
|
+
|
87
|
-
pw = sqrt(x[i] * x[i] + y[i] * y[i]) * 100; // パワースペクトル
|
99
|
+
pw = sqrt(x[i] * x[i] + y[i] * y[i]) * 100; // パワースペクトル
|
100
|
+
|
101
|
+
}
|
88
102
|
|
89
103
|
fq = i / (dt * Fr); // 周波数
|
90
104
|
|
@@ -114,7 +128,9 @@
|
|
114
128
|
|
115
129
|
void S_fft(double ak[], double bk[], int n, int ff) {
|
116
130
|
|
117
|
-
int i, j, k, k1, num, nhalf, phi, phi0
|
131
|
+
int i, j, k, k1, num, nhalf, phi, phi0;
|
132
|
+
|
133
|
+
static int rot[N];
|
118
134
|
|
119
135
|
double s, sc, c, a0, b0, tmp;
|
120
136
|
|
@@ -178,8 +194,6 @@
|
|
178
194
|
|
179
195
|
}
|
180
196
|
|
181
|
-
|
182
|
-
|
183
197
|
```
|
184
198
|
|
185
199
|
|
@@ -188,7 +202,15 @@
|
|
188
202
|
|
189
203
|
|
190
204
|
|
191
|
-
|
205
|
+
mallocを使ってみましたが、下記の警告が出て異常終了してしまいます。
|
206
|
+
|
207
|
+
|
208
|
+
|
209
|
+
### 警告
|
210
|
+
|
211
|
+
NULLポインター'x'を逆参照しています。
|
212
|
+
|
213
|
+
NULLポインター'y'を逆参照しています。
|
192
214
|
|
193
215
|
|
194
216
|
|
3
誤字修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -62,7 +62,7 @@
|
|
62
62
|
|
63
63
|
for (i = 0; i < N; i++) { // 1Hzに60Hzのノイズが重なった波形の例
|
64
64
|
|
65
|
-
x[i] = sin(sc *
|
65
|
+
x[i] = sin(sc * i);
|
66
66
|
|
67
67
|
y[i] = 0.0;
|
68
68
|
|
2
誤字
test
CHANGED
File without changes
|
test
CHANGED
@@ -8,11 +8,9 @@
|
|
8
8
|
|
9
9
|
http://www-in.aut.ac.jp/~minemura/pub/Csimu/C/FFT.html
|
10
10
|
|
11
|
-
|
11
|
+
周波数は25000Hzくらいまで表示できるのですが
|
12
12
|
|
13
|
-
20000Hzくらいまで表示できるようにしたいのですが、約100Hzまでしか表示できなくて困っています。
|
14
|
-
|
15
|
-
|
13
|
+
パワースペクトルが一致しません。
|
16
14
|
|
17
15
|
どなたかご教示お願い致します。
|
18
16
|
|
@@ -190,7 +188,7 @@
|
|
190
188
|
|
191
189
|
|
192
190
|
|
193
|
-
配列の要素数
|
191
|
+
配列の要素数を変えてみました。
|
194
192
|
|
195
193
|
|
196
194
|
|
1
このプログラムで周波数は25000Hzくらいまで表示できるのですが、右側のパワースペクトルが一致しません。ご教示お願いします。
test
CHANGED
File without changes
|
test
CHANGED
@@ -44,17 +44,19 @@
|
|
44
44
|
|
45
45
|
void S_fft(double* x, double* y, int, int);
|
46
46
|
|
47
|
+
#define N 32768 // N=データ総数(2,4,8,16,32,64,128,256,512,1024 のどれか)
|
48
|
+
|
47
49
|
|
48
50
|
|
49
51
|
int main(void) {
|
50
52
|
|
51
|
-
int i,
|
53
|
+
int i, count, Fr = 128;
|
52
54
|
|
53
55
|
double dt = 0.01;
|
54
56
|
|
55
|
-
double sc,
|
57
|
+
double sc, x[N], y[N];
|
56
|
-
|
58
|
+
|
57
|
-
|
59
|
+
double fq, pw;
|
58
60
|
|
59
61
|
|
60
62
|
|
@@ -62,21 +64,19 @@
|
|
62
64
|
|
63
65
|
for (i = 0; i < N; i++) { // 1Hzに60Hzのノイズが重なった波形の例
|
64
66
|
|
65
|
-
x[i] = sin(sc *
|
67
|
+
x[i] = sin(sc * 30 * i);
|
66
68
|
|
67
69
|
y[i] = 0.0;
|
68
70
|
|
69
71
|
}
|
70
72
|
|
71
|
-
|
72
|
-
|
73
73
|
// Fourier変換
|
74
74
|
|
75
75
|
S_fft(x, y, N, -1);
|
76
76
|
|
77
77
|
|
78
78
|
|
79
|
-
for (i = 0; i <
|
79
|
+
//for (i = 0; i < Fr; i++) printf(" i=%d %f %f \n", i, x[i], y[i]);
|
80
80
|
|
81
81
|
|
82
82
|
|
@@ -88,11 +88,11 @@
|
|
88
88
|
|
89
89
|
pw = sqrt(x[i] * x[i] + y[i] * y[i]) * 100; // パワースペクトル
|
90
90
|
|
91
|
-
fq = i / (dt *
|
91
|
+
fq = i / (dt * Fr); // 周波数
|
92
92
|
|
93
93
|
//printf("%f = %d / (%f * %d)\n", fq, i, dt, N);
|
94
94
|
|
95
|
-
fprintf(fp, "%fHz %
|
95
|
+
fprintf(fp, "%fHz %f \n", fq, pw);
|
96
96
|
|
97
97
|
}
|
98
98
|
|
@@ -116,7 +116,7 @@
|
|
116
116
|
|
117
117
|
void S_fft(double ak[], double bk[], int n, int ff) {
|
118
118
|
|
119
|
-
int i, j, k, k1, num, nhalf, phi, phi0, rot[
|
119
|
+
int i, j, k, k1, num, nhalf, phi, phi0, rot[N];
|
120
120
|
|
121
121
|
double s, sc, c, a0, b0, tmp;
|
122
122
|
|