【发布时间】:2011-06-09 02:50:58
【问题描述】:
我想使用窗口函数制作 FIR 滤波器。我有一些样本数据,size 变量是样本数。 windowSize 变量是窗口函数的大小。 一开始我创建了窗口函数(blackman window):变量window 然后我需要将它乘以 sin(x) / x 函数并与真实数据(变量 data)进行卷积:
for (int i = 0; i < size; ++i) {
for (j = 0; j < windowSize; ++j) {
double arg = 2.0 * PI * ((double)j - (double)windowSize / 2.0) / (double)windowSize;
if (i + j - windowSize / 2 < 0)
continue;
if (arg == 0) {
filteredData[i] += data[i + j - windowSize / 2] * window[j] * 1.0 / (double)windowSize;
} else
filteredData[i] += data[i + j - windowSize / 2] * window[j] * (sin(arg) / arg) / (double)windowSize;
}
}
问题:
因此,我得到一个过滤后的数据,其平均值与原始数据的平均值大不相同。哪里出错了?
-
在 DSP 书中写道,为了制作 FIR 滤波器,我们应该将函数 sin(x) / x 乘以窗口函数,然后执行卷积,但没有写任何关于 x em> 在 sin(x) / x,所以我使用了:
double arg = 2.0 * PI * ((double)j - (double)windowSize / 2.0) / (double)windowSize;
对于x的值,sine的说法,对吗?
【问题讨论】:
标签: c++ implementation signal-processing