% 参数设置 fp = 4000; % 通带截止频率 (Hz) fst = 4500; % 阻带截止频率 (Hz) As = 60; % 阻带衰减 (dB) fs = 20000; % 抽样频率 (Hz) % 计算窗口长度 delta_f = (fst - fp) / fs; % 归一化阻带宽度 Delta = 10^(-As / 20); % 阻带衰减系数 M = ceil((6.6 * pi) / (2 * pi * delta_f)); % 使用布莱克曼窗计算滤波器长度 N = M + 1; % 滤波器阶数 % 设计低通滤波器 Wc = (fp + fst) / (2 * fs); % 归一化截止频率 window = blackman(N)'; % 布莱克曼窗 [n, ~] = meshgrid(0:M-1); % 网格生成 hd = 2 * Wc * sinc(2 * Wc * (n-M/2)); % 理想低通滤波器的单位冲激响应 h = hd .* window; %应用布莱克曼窗 % 画出幅度响应曲线和相位响应曲线 [H, freq] = freqz(h, 1, 1024); H_dB = 20 * log10(abs(H)); % 转换为 dB 值 % 幅度响应 figure; plot(freq / pi * fs / 2, H_dB); xlabel('Frequency (Hz)'); ylabel('Gain (dB)'); title('Amplitude Response'); grid on; % 相位响应 figure; unwrap_phase = unwrap(angle(H)); % 解包相位以避免跳变 plot(freq / pi * fs / 2, unwrap_phase); xlabel('Frequency (Hz)'); ylabel('Phase (radians)'); title('Phase Response'); grid on;
时间: 2024-03-11 21:44:42 浏览: 106
根据您提供的代码,第18行为:
hd = 2 * Wc * sinc(2 * Wc * (n-M/2)); % 理想低通滤波器的单位冲激响应
可能会出现“矩阵维度不一致”的错误,这是因为在进行 sinc 函数运算时,(n-M/2) 的维度与 2*Wc 不匹配。解决该问题的方法是使用点除运算符 ./ 代替乘法运算符 *,即将该行代码修改为:
hd = 2 * Wc * sinc(2 * Wc * (n-M/2) ./ fs); % 理想低通滤波器的单位冲激响应
这样就可以避免“矩阵维度不一致”的错误了。
相关问题
fp=2000hz,fst=5000hz,rp=5db,as=40db用matlab设计切比雪夫一型滤波器
在 MATLAB 中设计切比雪夫一型滤波器可以使用 `cheby1` 函数。
首先,需要计算出归一化的通带截止频率 `wp` 和归一化的阻带截止频率 `ws`。由于 `fp=2000hz`,`fst=5000hz`,因此:
```
wp = 2 * pi * fp / fs = 0.4 * pi
ws = 2 * pi * fst / fs = 1 * pi
```
其中,`fs` 是采样频率,这里假设为 `10000hz`。
接下来,需要计算出滤波器的阶数 `n` 和通带最大衰减 `Rp`,由于 `rp=5db`,因此:
```
Rp = 10^(rp/20) - 1 = 0.1151
```
为了满足要求,选择 `n=4`。
最后,调用 `cheby1` 函数进行滤波器设计:
```
[b, a] = cheby1(n, Rp, wp, 's');
```
其中,`n` 是滤波器的阶数,`Rp` 是通带最大衰减,`wp` 是归一化的通带截止频率,`'s'` 表示设计的是模拟滤波器。
设计好的滤波器系数保存在 `b` 和 `a` 中,可以用于滤波器的实现。
fp=2000Hz,fst=5000Hz,Rp=5dB,Rs=10dB,设计切比雪夫滤波器 写出matlab代码
设计一个低通切比雪夫滤波器(Chebyshev Type I)需要使用`cheby1`函数,它在MATLAB的信号处理工具箱中。给定的参数是频率fp(通带边缘频率)、fst(阻带截止频率),以及通带Rp(最大衰减)和阻带Rs(最小衰减)。下面是一个简单的示例代码,假设你是想要设计一个二阶滤波器:
```matlab
% 定义滤波器参数
fc = [fp; fst]; % 频率范围
rp = Rp / 20; % 转换为线性分贝,因为MATLAB要求rp作为百分比值
rs = Rs; % 阻带衰减直接输入
% 设计二阶切比雪夫滤波器
[b, a] = cheby1(2, [rp rs], fc, 'low'); % low表示低通滤波器
% 打印滤波器系数
disp(['Filter coefficients: b = ', mat2str(b), ', a = ', mat2str(a)]);
% 绘制滤波器的幅频特性
freqz(b, a);
title('Chebyshev Type I Lowpass Filter');
xlabel('Frequency (Hz)');
ylabel('Gain (dB)');
% 查看滤波器详细信息
[~, ~, w, h] = freqz(b, a);
figure;
plot(w/pi, 20*log10(abs(h)));
grid on;
xlabel('\omega (radians/sample)');
ylabel('Magnitude (dB)');
阅读全文