@@ -58,7 +58,7 @@ TEST_F(FFTKernelTest, FFTReturnsZero) {
58
58
}
59
59
auto result = bm->executeKernel (*data);
60
60
for (int i=0 ; i<(1 << LOG_FFT_SIZE); i++) {
61
- EXPECT_FLOAT_EQ (std::abs (data->data [i]), 0.0 );
61
+ EXPECT_FLOAT_EQ (std::abs (data->data_out [i]), 0.0 );
62
62
}
63
63
}
64
64
@@ -72,11 +72,11 @@ TEST_F(FFTKernelTest, FFTCloseToZeroForAll1And1) {
72
72
data->data [i].imag (1.0 );
73
73
}
74
74
auto result = bm->executeKernel (*data);
75
- EXPECT_NEAR (data->data [0 ].real (), (1 << LOG_FFT_SIZE), 0.00001 );
76
- EXPECT_NEAR (data->data [0 ].imag (), (1 << LOG_FFT_SIZE), 0.00001 );
75
+ EXPECT_NEAR (data->data_out [0 ].real (), (1 << LOG_FFT_SIZE), 0.00001 );
76
+ EXPECT_NEAR (data->data_out [0 ].imag (), (1 << LOG_FFT_SIZE), 0.00001 );
77
77
for (int i=1 ; i < (1 << LOG_FFT_SIZE); i++) {
78
- EXPECT_NEAR (data->data [i].real (), 0.0 , 0.00001 );
79
- EXPECT_NEAR (data->data [i].imag (), 0.0 , 0.00001 );
78
+ EXPECT_NEAR (data->data_out [i].real (), 0.0 , 0.00001 );
79
+ EXPECT_NEAR (data->data_out [i].imag (), 0.0 , 0.00001 );
80
80
}
81
81
}
82
82
@@ -90,11 +90,11 @@ TEST_F(FFTKernelTest, IFFTCloseToZeroForAll1And1) {
90
90
data->data [i].imag (0.0 );
91
91
}
92
92
auto result = bm->executeKernel (*data);
93
- EXPECT_NEAR (data->data [0 ].real (), static_cast <HOST_DATA_TYPE>(1 << LOG_FFT_SIZE), 0.00001 );
94
- EXPECT_NEAR (data->data [0 ].imag (), 0.0 , 0.00001 );
93
+ EXPECT_NEAR (data->data_out [0 ].real (), static_cast <HOST_DATA_TYPE>(1 << LOG_FFT_SIZE), 0.00001 );
94
+ EXPECT_NEAR (data->data_out [0 ].imag (), 0.0 , 0.00001 );
95
95
for (int i=1 ; i < (1 << LOG_FFT_SIZE); i++) {
96
- EXPECT_NEAR (data->data [i].real (), 0.0 , 0.00001 );
97
- EXPECT_NEAR (data->data [i].imag (), 0.0 , 0.00001 );
96
+ EXPECT_NEAR (data->data_out [i].real (), 0.0 , 0.00001 );
97
+ EXPECT_NEAR (data->data_out [i].imag (), 0.0 , 0.00001 );
98
98
}
99
99
}
100
100
@@ -108,18 +108,24 @@ TEST_F(FFTKernelTest, FFTandiFFTProduceResultCloseToSource) {
108
108
109
109
// Normalize iFFT result
110
110
for (int i=0 ; i<(1 << LOG_FFT_SIZE); i++) {
111
- data->data [i] /= (1 << LOG_FFT_SIZE);
111
+ data->data_out [i] /= (1 << LOG_FFT_SIZE);
112
112
}
113
113
114
114
// Need to again bit reverse input for iFFT
115
- fft::bit_reverse (data->data , 1 );
115
+ fft::bit_reverse (data->data_out , 1 );
116
+
117
+ // Copy to input buffer for iFFT
118
+ for (int i=0 ; i<(1 << LOG_FFT_SIZE); i++) {
119
+ data->data [i] = data->data_out [i];
120
+ }
121
+
116
122
bm->getExecutionSettings ().programSettings ->inverse = true ;
117
123
auto result2 = bm->executeKernel (*data);
118
124
// Since data was already sorted by iFFT the bit reversal of the kernel has t be undone
119
- fft::bit_reverse (data->data , 1 );
125
+ fft::bit_reverse (data->data_out , 1 );
120
126
121
127
for (int i=1 ; i < (1 << LOG_FFT_SIZE); i++) {
122
- EXPECT_NEAR (std::abs (data->data [i]), std::abs (verify_data->data [i]), 0.001 );
128
+ EXPECT_NEAR (std::abs (data->data_out [i]), std::abs (verify_data->data [i]), 0.001 );
123
129
}
124
130
}
125
131
@@ -136,10 +142,10 @@ TEST_F(FFTKernelTest, FPGAFFTAndCPUFFTGiveSameResults) {
136
142
137
143
// Normalize iFFT result
138
144
for (int i=0 ; i<(1 << LOG_FFT_SIZE); i++) {
139
- data->data [i] -= verify_data->data [i];
145
+ data->data_out [i] -= verify_data->data [i];
140
146
}
141
147
for (int i=1 ; i < (1 << LOG_FFT_SIZE); i++) {
142
- EXPECT_NEAR (std::abs (data->data [i]), 0.0 , 0.001 );
148
+ EXPECT_NEAR (std::abs (data->data_out [i]), 0.0 , 0.001 );
143
149
}
144
150
}
145
151
@@ -157,9 +163,9 @@ TEST_F(FFTKernelTest, FPGAiFFTAndCPUiFFTGiveSameResults) {
157
163
158
164
// Normalize iFFT result
159
165
for (int i=0 ; i<(1 << LOG_FFT_SIZE); i++) {
160
- data->data [i] -= verify_data->data [i];
166
+ data->data_out [i] -= verify_data->data [i];
161
167
}
162
168
for (int i=1 ; i < (1 << LOG_FFT_SIZE); i++) {
163
- EXPECT_NEAR (std::abs (data->data [i]), 0.0 , 0.001 );
169
+ EXPECT_NEAR (std::abs (data->data_out [i]), 0.0 , 0.001 );
164
170
}
165
171
}
0 commit comments