Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用Matlab制作一个简单的FIR滤波器?_Matlab_Filter_Matrix_Signal Processing - Fatal编程技术网

如何用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滤波器的系数

如何使用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滤波器的系数。但是如果我只有截止频率,如何计算这些系数?

最简单的是“加窗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)
then
coefs=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);