我有一组信号S1,S2,......,SN,我用数字计算傅里叶变换F1,F2 ,,,,, FN。其中Si和Fi是C ++向量(我的计算是用C ++编写的)。
我的计算目标如下:
计算产品:F = F1 * F2 * ... * FN
逆傅里叶变换F得到一个S.
我在数字上观察到的是,当我尝试计算产品时,我遇到数字变得太小的情况。或者数字变得太大了。
我想过用a1来缩放F1,以避免溢出或下溢。
通过缩放,我上面的步骤1将变为
F' = (F1/a1)*(F2/a2)*...*(FN/aN) = F'1*F'2*...*F'N
当我逆变换时,我的最终S'将与比例因子的S不同。 S的结构形式不会改变。我的意思是只有S的归一化是不同的。
我的问题是:
我的理由是否正确。
如果我的理由是正确的,那么给定一个C ++向量“Fi”,我如何选择一个好的比例“ai”来扩大或缩小Fi。
非常感谢提前。
答案 0 :(得分:0)
您可以在新域中更改Fi矢量的范围,让我们说[a,b]。因此,从您的矢量Fi,最小数量将变为a,最大数量将变为b。您可以使用以下等式缩放矢量:
Fnew [i] =(b-a)/(max-min)*(F [i] - min)+ a,
其中:min = F的最小值 max = F
的最大值现在唯一的问题是选择a和b。我会选择[1,2],因为值很小(所以你不会轻易地溢出),但不小于0.