【发布时间】:2022-01-10 07:27:22
【问题描述】:
我对我的signal 执行了快速傅立叶变换 (fft),将其转换为 signalComplex; signal 是一系列实数浮点数,signalComplex 代表一系列复数:
std::vector<std::complex<float>> signalComplex(numSamplesPerScan); // int numSamplesPerScan
fft.fwd(signalComplex, signal); // std::vector<float> signal
for (int n = 1; n < numSamplesPerScan / 2; n++) // simplified procedure to calculate HT
{
float real = signalComplex[n].real(); // positive frequency X 2
float imag = signalComplex[n].imag();
real *= 2;
imag *= 2;
signalComplex[n].real() = real; // compiler complains here
signalComplex[n].imag() = imag; // compiler complains here
signalComplex[n + numSamplesPerScan / 2].real() = 0; // compiler complains here
signalComplex[n + numSamplesPerScan / 2].imag() = 0; // compiler complains here
}
在上面的 for 循环中,我试图对 signalComplex 的实部和虚部进行一些简单的计算。但是,编译器会抱怨“error C2106: '=': left operand must be l-value”;在这种情况下,我不确定如何对实部虚部进行计算。
任何指针表示赞赏。一些代码非常感谢。
【问题讨论】:
-
real()和imag()按值返回浮点数,而不是对内部部分的引用。 -
@Brian 谢谢布赖恩。有用。你想发布我更喜欢的答案吗?或者我可以发布我所做的。
-
查看en.cppreference.com/w/cpp/numeric/complex 面向数组的访问。复数有一项特殊规定,允许直接访问,否则将是 UB。
-
简化!您是否需要矢量和所有背景信息才能获得编译错误?将你的复合表达式分解成更简单的部分,如
auto x = signalComplex[n]; x.real() = real;现在错误出现在x.real() =real;行上,推断x的类型并删除其余代码:int main() { std::complex<float> x; x.real() = real; }。更容易推理,不是吗?
标签: c++ vector stl complex-numbers