用matlab设计一个低通滤波器FIR,要求采样频率是20kHZ,通带截止频率为4khz,过渡带2kHZ,通带纹波系数小于3dB,阻带衰减大于40dB,求得滤波器系数并绘制频谱图
时间: 2023-07-30 08:05:03 浏览: 58
在MATLAB中设计一个低通滤波器FIR,可以使用fir1函数。首先需要计算出滤波器的阶数,这可以通过以下公式来计算:
$$ N = \frac{3.3}{2.285 \times 2\pi(\Delta f/f_s)} + 1 $$
其中,$\Delta f$ 是过渡带宽度,$f_s$ 是采样频率。根据题目中的要求,$\Delta f=2\text{kHz}$,$f_s=20\text{kHz}$,代入公式中得到:
$$ N = \frac{3.3}{2.285 \times 2\pi(2\text{kHz}/20\text{kHz})} + 1 \approx 58 $$
因为N必须为偶数,所以我们将其向上取整到60。接下来,可以使用fir1函数来计算滤波器系数:
```matlab
N = 60;
Wn = 4e3/(20e3/2);
b = fir1(N, Wn, 'low', kaiser(N+1, 3));
```
其中,N是滤波器的阶数,Wn是归一化的通带截止频率,'low'表示低通滤波器,kaiser(N+1, 3)是窗函数,3是窗函数的beta值,代表纹波系数。这里我们选取了3dB的纹波系数。
最后,我们可以利用freqz函数来绘制滤波器的频谱图:
```matlab
freqz(b, 1, 1024, 20e3);
```
其中,b是滤波器的系数,1表示滤波器是FIR滤波器,1024是频率响应的采样点数,20e3是采样频率。
相关问题
用matlab设计一个低通滤波器FIR,要求采样频率是20kHZ,通带截止频率为4khz,过渡带2kHZ,通带纹波系数小于3dB,阻带衰减大于40dB
以下是一种设计低通FIR滤波器的方法,对于所给的要求,我们可以采用 Parks-McClellan 算法进行设计。具体步骤如下:
1. 通过指定通带截止频率和过渡带宽度,计算出通带和阻带边界频率。
```matlab
fs = 20000; % 采样频率
Rp = 3; % 通带最大纹波
Rs = 40; % 阻带最小衰减
wp = 2*pi*4000/fs; % 通带截止频率
ws = 2*pi*6000/fs; % 阻带截止频率
delta_p = (10^(Rp/20)-1)/(10^(Rp/20)+1); % 通带纹波系数
delta_s = 10^(-Rs/20); % 阻带衰减系数
```
2. 通过 `firpmord` 函数计算出滤波器的阶数和截止频率。
```matlab
[n,fo,ao,w] = firpmord([wp ws]/pi,[1 0],[delta_p delta_s],fs);
```
3. 调用 `firpm` 函数进行滤波器设计。
```matlab
b = firpm(n,fo,ao,w);
```
4. 绘制滤波器的幅频响应和相频响应。
```matlab
freqz(b,1,1024,fs);
```
完整代码如下:
```matlab
fs = 20000; % 采样频率
Rp = 3; % 通带最大纹波
Rs = 40; % 阻带最小衰减
wp = 2*pi*4000/fs; % 通带截止频率
ws = 2*pi*6000/fs; % 阻带截止频率
delta_p = (10^(Rp/20)-1)/(10^(Rp/20)+1); % 通带纹波系数
delta_s = 10^(-Rs/20); % 阻带衰减系数
[n,fo,ao,w] = firpmord([wp ws]/pi,[1 0],[delta_p delta_s],fs);
b = firpm(n,fo,ao,w);
freqz(b,1,1024,fs);
```
基于Matalb设计一个FIR数字高通滤波器,要求通带截止频率为450hz,0.5db;阻带截止频率为300hz,20db,采样频率2000hz。
好的,根据你的要求,我们可以使用firpm函数来设计FIR数字高通滤波器。firpm函数是Matlab中用于设计 Parks-McClellan算法 的FIR滤波器的函数,其语法如下:
```matlab
b = firpm(n, f, a, w)
```
其中,n是滤波器的阶数,f是归一化的频率向量(即使用采样频率作为单位),a是希望滤波器在各个频带(包括过渡带)上的增益,w是希望各个频带的权重。
根据你的要求,我们可以将采样频率设置为单位,通带截止频率为0.225(450/2000),阻带截止频率为0.15(300/2000)。同时,我们需要设置通带增益为0.5dB,阻带增益为20dB。为了使得通带和阻带的过渡平稳,我们可以设置一个过渡带的宽度为0.05。
下面是具体的代码实现:
```matlab
fs = 2000; % 采样频率
wp = 0.225; % 通带归一化截止频率
ws = 0.15; % 阻带归一化截止频率
Rp = 0.5; % 通带最大衰减
Rs = 20; % 阻带最小衰减
width = 0.05; % 过渡带宽度
% 计算通带、阻带、过渡带的权重
w1 = 1;
w2 = Rs/Rp;
w3 = 1;
w = [w1 w2 w3];
% 计算通带、阻带、过渡带的增益
a1 = 10^(Rp/20);
a2 = 10^(-Rs/20);
a3 = a1;
a = [a1 a2 a3];
% 计算滤波器的阶数
n = firpmord([wp ws], [1 0], [Rp Rs], fs);
% 使用firpm函数设计滤波器
b = firpm(n, [0 wp ws 1], a, w);
% 绘制幅频响应曲线
freqz(b, 1, 1024, fs);
```
最后,我们使用freqz函数绘制滤波器的幅频响应曲线,如下图所示:
![FIR数字高通滤波器的幅频响应曲线](https://img-blog.csdn.net/20180724154118150?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Jvb3RfY29kZS5wbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/70 "FIR数字高通滤波器的幅频响应曲线")
希望对你有所帮助!