小编dsp*_*ser的帖子

FFT归一化

我知道这个问题被问到令人作呕,但不知何故我无法使其正常工作。我创建了一个具有单位幅度的 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 程序很好。

任何帮助深表感谢。

signal-processing fft normalization

6
推荐指数
2
解决办法
2万
查看次数

通用成员函数指针

我想知道标准 C++ 中是否有一种方法(似乎不支持这种方法,但也许我没有仔细看)来声明指向具有相同签名的任何类成员函数的指针。例如,X 和 Y 具有具有相同签名的 echoX 和 echoY 方法

\n\n
class 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};\n
Run Code Online (Sandbox Code Playgroud)\n\n

一些 C++ 实现通过扩展允许此功能(例如,VCL 使用关键字__closure)。

\n\n
typedef int (__closure *IntFunPtr)(int);\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在,编写一个能够调用 或 的函数很X::echoX简单Y::echoY

\n\n
void CallObjectMethod(IntFunPtr fPtr, int val){\n\n    fPtr(val);//this can call any member …
Run Code Online (Sandbox Code Playgroud)

c++ function-pointers

3
推荐指数
1
解决办法
2913
查看次数