Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 计算正弦信号的频率,c++;_C++_Signals - Fatal编程技术网

C++ 计算正弦信号的频率,c++;

C++ 计算正弦信号的频率,c++;,c++,signals,C++,Signals,我有一个正弦形状的信号,我想计算频率。 我试图实现一些东西,但看起来很难,有什么想法吗? 到目前为止,我有一个带有timestep和value的向量,如何从中得到频率? 谢谢如果输入信号是一个完美的正弦波,您可以使用正0交叉之间的时间来计算频率。找到信号从负变为正的两个连续实例,测量两者之间的时间,然后将该数字反转,从周期转换为频率。请注意,这仅与采样间隔一样精确,不考虑任何潜在的混叠。您可以尝试自动关联信号。可通过以下步骤快速计算自相关: 执行音频的FFT 将每个复数值与其复数共轭相乘 执行音

我有一个正弦形状的信号,我想计算频率。 我试图实现一些东西,但看起来很难,有什么想法吗? 到目前为止,我有一个带有timestep和value的向量,如何从中得到频率?
谢谢

如果输入信号是一个完美的正弦波,您可以使用正0交叉之间的时间来计算频率。找到信号从负变为正的两个连续实例,测量两者之间的时间,然后将该数字反转,从周期转换为频率。请注意,这仅与采样间隔一样精确,不考虑任何潜在的混叠。

您可以尝试自动关联信号。可通过以下步骤快速计算自相关:

  • 执行音频的FFT
  • 将每个复数值与其复数共轭相乘
  • 执行音频的反向FFT
  • 最左边的峰值总是最高的(因为信号总是与其自身相关性最好)。然而,第二个最高峰值可用于计算正弦频率


    例如,如果第二个峰值出现在50点的偏移(滞后)处,采样率为16kHz,窗口为1秒,则结束频率为16000/50或320Hz。您甚至可以使用插值来获得更精确的峰值位置估计,从而获得更精确的正弦频率。此方法非常密集,但在添加大量噪声后,非常适合估计频率

    我建议读一些关于正弦波频率的文章。我很想收集所有值过零的时间,然后从那里开始计算。使用傅里叶变换。为了得到更准确的结果,请使用多个过零,并将过零的次数乘以采样数,乘以采样频率。