函数kaiord可根据指标估计线性相位低通FIR滤波器的阶数, 函数如下: function N = kaiord(Fp, Fs, dp, ds, FT) % 使用凯泽公式计算线性相位有限冲激响应多频带滤波器的阶数 % dp是通带波纹 % ds是阻带波纹 % Fp是单位为Hz的通带边界 % Fs是单位为Hz的阻带边界 % FT是单位为Hz的抽样频率 % N是估计出的有限冲激响应滤波器的阶数 if nargin == 4, FT = 2; end if length(Fp) > 1, TBW = min(abs(Fp(1) - Fs(1)), abs(Fp(2) - Fs(2))); else TBW = abs(Fp - Fs); end num = -20*log10(sqrt(dp*ds))-13; den = 14.6*TBW/FT; N = ceil(num/den); 题意:若线性相位低通FIR滤波器的指标为:通带边界为2kHz,阻带边界为2.5kHz,通带波纹δp=0.005,阻带波纹δs=0.005,抽样率为10kHz。回答以下问题:(1)编写matlab程序,使用函数kaiord,估计具有以上指标的线性相位低通FIR滤波器的阶数? (2)在函数kaiord中,命令ceil和nargin的作用是什么?
时间: 2024-03-24 12:36:45 浏览: 11
(1) 根据题意,可以将给定的参数代入函数kaiord中进行计算,得到估计出的有限冲激响应滤波器的阶数N,MATLAB代码如下:
```matlab
Fp = 2000; % 通带边界,单位为Hz
Fs = 2500; % 阻带边界,单位为Hz
dp = 0.005; % 通带波纹
ds = 0.005; % 阻带波纹
FT = 10000; % 抽样率,单位为Hz
N = kaiord(Fp, Fs, dp, ds, FT) % 调用kaiord函数估计滤波器阶数
```
计算结果为:N = 63,因此估计出的有限冲激响应滤波器的阶数为63。
(2) ceil函数是向上取整函数,用于将小数向上取整为最近的整数;nargin函数用于返回当前函数被调用时输入参数的个数。在函数kaiord中,ceil函数用于将计算得到的阶数向上取整为整数,nargin函数用于判断输入参数的个数是否为4个,如果不是4个,则默认抽样率FT为2。
相关问题
用窗函数法设计一个满足下列指标的线性相位低通FIR滤波器用matlab:Wp=0.2π,Ws=0.3π,Rp=0.25dB,Rp=50dB
好的,下面是用窗函数法设计一个满足下列指标的线性相位低通FIR滤波器的MATLAB代码:
```matlab
% 指定参数
Wp = 0.2*pi; % 通带截止频率
Ws = 0.3*pi; % 阻带截止频率
Rp = 0.25; % 通带最大衰减
Rs = 50; % 阻带最小衰减
% 计算滤波器阶数和截止频率
delta_p = (10^(Rp/20)-1)/(10^(Rp/20)+1);
delta_s = 10^(-Rs/20);
A = -20*log10(delta_s);
if A>50
N = ceil((A-8)/(2.285*(Ws-Wp)));
else
N = ceil((0.922*log(1/delta_s))/(Ws-Wp));
end
fc = (Ws+Wp)/2;
% 计算窗函数
w = hamming(N+1).';
% 计算理想低通滤波器的单位冲激响应
h_ideal = (fc/pi)*sinc(fc*(0:N)/pi);
% 计算窗函数法设计的滤波器的单位冲激响应
h = h_ideal.*w;
% 绘制滤波器幅频响应和相频响应
[H, w] = freqz(h,1,1024);
figure();
subplot(2,1,1);
plot(w/pi, 20*log10(abs(H)));
xlabel('\omega/\pi');
ylabel('幅度(dB)');
title('滤波器幅频响应');
grid on;
subplot(2,1,2);
plot(w/pi, unwrap(angle(H)));
xlabel('\omega/\pi');
ylabel('相位(rad)');
title('滤波器相频响应');
grid on;
```
其中,我们使用了汉明窗作为窗函数,使用sinc函数计算理想的低通滤波器单位冲激响应,最后绘制了滤波器的幅频响应和相频响应。您可以根据需要进行修改和调整。
用窗函数法设计一线性相位fir低通滤波器
线性相位FIR低通滤波器可以使用窗函数法设计,步骤如下:
1. 确定滤波器的阶数N和截止频率fc。
2. 根据式子h(n)=2fc * sinc(2fc(n-N/2))计算出理想低通滤波器的单位取样响应h_i(n)。
3. 选择一个窗函数w(n),如矩形窗、汉宁窗、汉明窗等。
4. 计算出窗函数w(n)和理想低通滤波器单位取样响应h_i(n)的乘积,即h_w(n)=h_i(n)w(n)。
5. 对h_w(n)进行DFT,得到其频域表示H_w(k)。
6. 将H_w(k)乘以exp(-j*k*N/2),得到线性相位FIR低通滤波器的频域表示H(k)。
7. 对H(k)进行IDFT,得到其时域表示h(n)。
下面给出MATLAB代码实现:
```matlab
N = 31; % 滤波器阶数
fc = 0.2; % 截止频率
h_i = 2*fc*sinc(2*fc*((0:N-1)-N/2)); % 计算理想低通滤波器
w = hamming(N); % 选择汉明窗
h_w = h_i.*w'; % 计算窗函数与理想滤波器的乘积
H_w = fft(h_w); % 计算DFT
H = H_w.*exp(-1j*pi*(0:N-1)*N/2); % 计算线性相位FIR低通滤波器的频域表示
h = real(ifft(H)); % 计算时域表示
```
其中,hamming(N)表示生成长度为N的汉明窗。通过修改窗函数和截止频率,可以得到不同的线性相位FIR低通滤波器。