MATLAB 中的下采样 - 为什么缩放滤波器系数?
Downsampling in MATLAB - why scaling filter coefficients?
试图了解 MATLAB 如何进行重采样,查看 toolbox/signal/resample.m
。
这是计算低通FIR滤波器系数的部分:
fc = 1/2/pqmax;
L = 2*N*pqmax + 1;
h = firls( L-1, [0 2*fc 2*fc 1], [1 1 0 0]).*kaiser(L,bta)' ;
h = p*h/sum(h);
(这里pqmax
和p
都代表降采样率。)
不确定最后一行的目的是什么,其中所有滤波器系数都按 系数总和 、p/sum(h)
的下采样率缩放?有谁知道背后的理论?
MATLAB firls
MATLAB kaiser
firls
理论:Least Squared Error Design of FIR Filters
在大多数过滤器中,您希望输出幅度在过滤后保持相等,而不是放大或缩小。
从数学上讲,这通常在滤波器方程中正确完成,但在离散数字中这通常不适用。
如果将滤波器除以其总和,则确保对于任何输入数据 p,滤波器将始终具有 1
的通用比例因子,作为其标准化。对于p=ones(1:1000,1)
,如果sum(h)
不是1
,过滤后的结果会被缩放,即p_filtered
的值不会是1
。
试图了解 MATLAB 如何进行重采样,查看 toolbox/signal/resample.m
。
这是计算低通FIR滤波器系数的部分:
fc = 1/2/pqmax;
L = 2*N*pqmax + 1;
h = firls( L-1, [0 2*fc 2*fc 1], [1 1 0 0]).*kaiser(L,bta)' ;
h = p*h/sum(h);
(这里pqmax
和p
都代表降采样率。)
不确定最后一行的目的是什么,其中所有滤波器系数都按 系数总和 、p/sum(h)
的下采样率缩放?有谁知道背后的理论?
MATLAB firls
MATLAB kaiser
firls
理论:Least Squared Error Design of FIR Filters
在大多数过滤器中,您希望输出幅度在过滤后保持相等,而不是放大或缩小。
从数学上讲,这通常在滤波器方程中正确完成,但在离散数字中这通常不适用。
如果将滤波器除以其总和,则确保对于任何输入数据 p,滤波器将始终具有 1
的通用比例因子,作为其标准化。对于p=ones(1:1000,1)
,如果sum(h)
不是1
,过滤后的结果会被缩放,即p_filtered
的值不会是1
。