为何R语言与Matlab中的hamming函数输出结果不同?
R的gsignal包hamming函数与Matlab同名函数输出差异的原因
两者输出不一致的核心原因有两个:
汉明窗的系数标准不同
Matlab的hamming默认使用修正后的系数:α=0.54,β=0.46,计算逻辑为:w = 0.54 - 0.46 * cos(2*pi*(0:N-1)/(N-1)); % 对称窗,N为输入长度而R的
gsignal::hamming默认采用汉明窗最初定义的经典系数:α=0.53836,β=0.46164,公式为:w = 0.53836 - 0.46164 * cos(2*pi*(0:(n-1))/(n-1)); % n为输入长度这组系数差异直接导致数值偏移——比如你给出的N=76的例子,Matlab第一个值是
0.08(0.54-0.46),而经典系数计算的第一个值为0.07672。窗的生成模式差异
Matlab默认生成对称窗(多用于滤波设计),计算时以N-1作为余弦项的分母;部分实现(包括特定版本的gsignal)可能默认采用周期窗(多用于频谱分析),以N作为分母,这也会带来细微数值差异。
让两者输出一致的方法
- 在R中手动指定Matlab的系数:
library(gsignal) hamming(76, alpha = 0.54, beta = 0.46) - 在Matlab中实现经典汉明窗(Matlab默认不支持该参数):
N = 76; w = 0.53836 - 0.46164 * cos(2*pi*(0:N-1)/(N-1));
内容的提问来源于stack exchange,提问作者Tpellirn
相关产品推荐
相关产品推荐

