C++实现LFM波形模糊函数计算结果异常求助
LFM波形模糊函数计算问题
我正在计算LFM波形的模糊函数(Ambiguity Function),以下是我的实现代码:
std::vector<std::vector<double>> Waveform::AmbiguityFunction(std::vector<std::complex<double>>& signal) { int size = signal.size() ; // Compute FFT of the original signal std::vector<std::complex<double>> fftResultOriginal = FFT(signal); // Initialize the ambiguity matrix std::vector<std::vector<double>> ambiguity(size, std::vector<double>(size, 0.0)); for (int m = 0; m < size; ++m) { // iterate through all delays m // Generate delayed signal std::vector<std::complex<double>> delayedSignal(size, 0.0); for (int k = 0; k < size; ++k) { delayedSignal[k] = signal[k] * std::polar(1.0, -2.0 * M_PI * m * k / size); } // Compute FFT of the delayed signal std::vector<std::complex<double>> fftResultDelayed = FFT(delayedSignal); // Element-wise multiplication std::vector<std::complex<double>> product(size); for (int i = 0; i < size; ++i) { product[i] = fftResultOriginal[i] * std::conj(fftResultDelayed[i]); } // Inverse FFT std::vector<std::complex<double>> ifftResult = IFFT(product); // Retrieve the real part and compute magnitude for (int n = 0; n < size; ++n) { ambiguity[m][n] = std::norm(ifftResult[n]); } } return ambiguity; }
预期输出应为典型LFM波形的模糊函数形态(斜脊状),但实际输出呈现平铺的非预期形态。已通过Python绘图验证,排除了绘图问题,怀疑延迟环节存在错误,尝试修改延迟代码后仍未解决。
以下是FFT和IFFT的实现代码:
// ---------------------------------------- IFFT METHOD -------------------------------------------------------------- std::vector<std::complex<double>> Waveform::IFFT(std::vector<std::complex<double>>& fftResultVector) { // Ensure input vector is not empty if (fftResultVector.empty()) { return {}; } // Perform IFFT using Eigen Eigen::FFT<double> fft; // Convert input vector to Eigen type using Eigen::Map Eigen::VectorXcd inputEigen = Eigen::Map<Eigen::VectorXcd>(fftResultVector.data(), fftResultVector.size()); // Perform IFFT Eigen::VectorXcd ifftResultEigen = fft.inv(inputEigen); // Convert Eigen result back to std::vector std::vector<std::complex<double>> ifftVec(ifftResultEigen.data(), ifftResultEigen.data() + ifftResultEigen.size()); return ifftVec; } // ---------------------------------------- FFT METHOD -------------------------------------------------------------- std::vector<std::complex<double>> Waveform::FFT(std::vector<std::complex<double>>& WfmVector) { // Ensure input vector is not empty if (WfmVector.empty()) { return {}; } // Perform FFT using Eigen Eigen::FFT<double> fft; // Convert input vector to Eigen type Eigen::VectorXcd inputEigen(WfmVector.size()); for (int i = 0; i < WfmVector.size(); ++i) { inputEigen(i) = WfmVector[i]; } // Perform FFT Eigen::VectorXcd fftResultEigen = fft.fwd(inputEigen); // Convert Eigen result back to std::vector std::vector<std::complex<double>> fftVec(fftResultEigen.data(), fftResultEigen.data() + fftResultEigen.size()); return fftVec; }
我已尝试修改延迟代码并在其他语言中绘图,但问题仍未解决。
内容的提问来源于stack exchange,提问作者João Santos
相关产品推荐
相关产品推荐

