如何用Matlab制作一个简单的FIR滤波器?
如何使用Matlab制作一个简单的低通FIR滤波器(不使用内置函数) 问题示例:如何用Matlab制作一个简单的FIR滤波器?,matlab,filter,matrix,signal-processing,Matlab,Filter,Matrix,Signal Processing,如何使用Matlab制作一个简单的低通FIR滤波器(不使用内置函数) 问题示例: Implement a FIR LPF with cut-off frequency 250Hz 可能还需要给出采样频率 解决方案尝试或我已经知道的: x = [...] -> input signal A = 1; -> Since this is FIR B = [?????] y = filter(B, A, x) -> Output signal Afaik,B应包含FIR滤波器的系数
Implement a FIR LPF with cut-off frequency 250Hz
可能还需要给出采样频率
解决方案尝试或我已经知道的:
x = [...] -> input signal
A = 1; -> Since this is FIR
B = [?????]
y = filter(B, A, x) -> Output signal
Afaik,B应包含FIR滤波器的系数。但是如果我只有截止频率,如何计算这些系数?最简单的是“加窗sinc”滤波器:
过滤器的长度(请参见
t=…
)控制过渡带的宽度<代码>截止在本例中为-6 dB点blackman
是一个流行窗口的名称。您可以查看Wikipedia页面,了解有关窗口功能的更多信息。它们在过渡带宽度和阻带抑制之间基本上有不同的权衡。如果你不想得到不同形状的振幅谱,完全按照sellibitze的建议,只用所需振幅响应的逆傅里叶变换的实部替换sinc函数(延迟以获得因果对称脉冲响应)。由于LTI滤波器的系数是时域脉冲响应,您可以通过指定振幅向量和相位向量在matlab中创建频率响应,然后对其进行FFT逆变换以获得系数,例如,类似于a=[1.9.8.5.2.1 0]
,theta=[0 0 0 0]
,然后H=A.*exp(j*theta)
thencoefs=ifft(H)
我不能使用内置的fir函数,正如我在问题中已经说过的那样……很抱歉。我更改了答案。
fs = 44100;
cutoff = 250;
t = -256:256; % This will be a 513-tap filter
r = 2*cutoff/fs;
B = sinc(r*t).*r .* blackman(length(t))';
freqz(B);