我知道这个问题被问到令人作呕,但不知何故我无法使其正常工作。我创建了一个具有单位幅度的 440 Hz 的单个正弦波。现在,在 FFT 之后,440 Hz 的 bin 具有明显的峰值,但该值不正确。我希望看到 0 dB,因为我正在处理单位幅度正弦波。相反,计算出的功率远高于 0 dB。我使用的公式很简单
for (int i = 0; i < N/2; i++)
{
mag = sqrt((Real[i]*Real[i] + Img[i]*Img[i])/(N*0.54)); //0.54 correction for a Hamming Window
Mag[i] = 10 * log(mag) ;
}
Run Code Online (Sandbox Code Playgroud)
我可能应该指出时域中的总能量等于频域中的能量(Parseval 定理),所以我知道我的 FFT 程序很好。
任何帮助深表感谢。
我想知道标准 C++ 中是否有一种方法(似乎不支持这种方法,但也许我没有仔细看)来声明指向具有相同签名的任何类成员函数的指针。例如,X 和 Y 具有具有相同签名的 echoX 和 echoY 方法
\n\nclass X{\n\xc2\xa0 int val;\npublic:\n\xc2\xa0int echoX(int v)\xc2\xa0 {\n\xc2\xa0val = v;\n\xc2\xa0return v; }\n\xc2\xa0 \xc2\xa0int getValue() const { return val; }\n};\n\nclass Y{\n\n\xc2\xa0 \xc2\xa0int val;\n\xc2\xa0 \xc2\xa0public:\n\xc2\xa0 \xc2\xa0int echoY(int v)\xc2\xa0 {\n\xc2\xa0 \xc2\xa0val = v;\n\xc2\xa0 \xc2\xa0return v;\n\xc2\xa0 \xc2\xa0}\n\xc2\xa0 \xc2\xa0int getValue() const { return val; }\n};\nRun Code Online (Sandbox Code Playgroud)\n\n一些 C++ 实现通过扩展允许此功能(例如,VCL 使用关键字__closure)。
typedef int (__closure *IntFunPtr)(int);\nRun Code Online (Sandbox Code Playgroud)\n\n现在,编写一个能够调用 或 的函数很X::echoX简单Y::echoY
void CallObjectMethod(IntFunPtr fPtr, int val){\n\n fPtr(val);//this can call any member …Run Code Online (Sandbox Code Playgroud)