声音样本的数学分析(作为数字数组)
我需要找到一个样本的频率,存储(在vb中)作为一个字节数组。样本是一个正弦波,已知频率,所以我可以检查),但数字有点奇怪,我的数学foo很弱。
全系列值0-255。 99%的数字在235到245之间,但有一些异常值降至0和1,其余1%则高达255。
如何对此进行归一化以去除异常值(计算235-245间隔,因为它可能随着不同的样本而变化),以及如何计算过零点以获得频率?
如果这个描述是垃圾,请道歉!
没有找到相关结果
已邀请:
7 个回复
去纪海财
现在正常化
抛弃-128..127范围之外的结果。 现在你可以计算过零点。为了确保您不会受到噪音的愚弄,您可能希望跟踪最后几个点的斜率,并且仅在平均斜率正确的情况下计算交叉点。
抹持奠糙驰
矾醒忻
程琶
其中N [n]是你要摆脱的“小故障”噪音。 如果毛刺是单样本长,则可以使用中值滤波器去除它们,中值滤波器必须大于毛刺长度。在故障的两边。长度为1的毛刺意味着你将有足够的中位数为3个长度的样本。
计算中位数是这样的:取你想要过滤的x的样本(x [n-1],x [n],x [n + 1]),对它们进行排序,输出是中间的。 现在噪声信号消失了,摆脱了恒定信号。我知道缓冲区的长度有限且已知,因此您只需计算整个缓冲区的平均值即可。减去它。 现在你有了单个窦信号。您现在可以通过计算过零点来计算基频。计算前一个样本低于0的样本数量。该时间段是缓冲区样本的总量除以此值,频率是该时间段的对数(1 / x)。
臂哦
,其中
将为您提供拟合后的频率。 Fityk可以从gui,脚本命令行使用,也可以使用C ++ API,因此可以直接包含在程序中。
凰葱崎济邯
杭难插