BW型、CB I型、CB II型和椭圆模拟低通滤波器设计的Matlab仿真

[题目要求]

设计满足下列指标的模拟低通滤波器.

fp=1kHz, fs=3kHz, Ap<=1dB, As>=50dB.

[分析]Matlab信号处理工具提供了常用的设计模拟低通滤波器的函数. 无论是BW型、CB型还是椭圆模拟低通滤波器, Matlab提供了两个函数来实现其设计. 首先根据设计指标确定出相应模方函数中的参数, 然后由确定好的参数获得模拟低通滤波器的系统函数H(s). 在实际应用中, 可方便地调用这些函数完成模拟滤波器的设计.


[解法1(使用BW型模拟低通滤波器模板)]

[设计代码]

% 设计Butterworth模拟低通滤波器
% fp=1kHz, fs=3kHz, Ap<=1dB, As>=50dB
% 滤波器指标
% 低通滤波器的通带截频
wp = 2 * pi * 1000;
% 低通滤波器的阻带截频
ws = 2 * pi * 3000; 
% 滤波器的通带衰减(dB)
Ap = 1; 
% 滤波器的阻带衰减(dB)
As = 50;
% 设计butterworth型滤波器
[N, wc] = buttord(wp, ws, Ap, As, 's');
% butter()函数返回BW型滤波器系统函数H(s)的分子多项式系数(num)和分母多项式系数(den)
[num, den] = butter(N, wc, 's');
% 滤波器的增益响应
% y = linspace(x1, x2, n);
% 生成n个点, 这些点的间距为(x2-x1)/(n-1)
w = linspace(0, 5000 * pi * 2, 5000);
% freqs()返回一个模拟滤波器H(jw)的复频域响应(Laplace格式)
% freqs(num, den, w) -> 根据系数向量num, den计算并返回模拟滤波器的复频域响应H(s)
% 角频率w确定了输入的实向量, 因此必须包含至少一个频率点
h = freqs(num, den, w);     
% 角频率w/(2*pi)即为频率f
% 绘制BW型模拟低通滤波器的增益响应曲线
% 横轴单位为Hz
% abs(x)函数对括号内的元素x求绝对值: 当x为复数时, 返回该复数的幅值
plot(w / (2 * pi), 20 * log10(abs(h)));
% plot(w/ (2 * pi), abs(h));
% 计算Ap和As
% 改变角频率w的样点值
w = [wp, ws];
h = freqs(num, den, w);
% 计算设计完成后的滤波器的通带截频
fprintf('Ap=%.4f\n', -20 * log10(abs(h(1))));
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
好的,我可以为您提供实现重音加强的Matlab代码。具体实现步骤如下: 1. 设计一个椭圆滤波器,用于去除高频噪声。 ```matlab % 设计椭圆滤波器 wp = 0.2*pi; % 带截止频率 ws = 0.3*pi; % 阻带截止频率 Rp = 1; % 带最大衰减量 Rs = 40; % 阻带最小衰减量 [n, Wn] = ellipord(wp, ws, Rp, Rs); % 计算滤波器阶数和截止频率 [b, a] = ellip(n, Rp, Rs, Wn); % 计算滤波器系数 ``` 2. 读取音频文件,并使用椭圆滤波器滤波。 ```matlab % 读取音频文件 [y, Fs] = audioread('audio.wav'); % 滤波 y_filtered = filter(b, a, y); ``` 3. 对滤波后的信号进行重音处理。 ```matlab % 设置重音参数 f0 = 100; % 基频 Q = 10; % 品质因数 gain = 12; % 增益 % 计算滤波器系数 w0 = 2*pi*f0/Fs; % 角频率 bw = w0/Q; % 带宽 [b_low, a_low] = peakingEQ(w0, bw, gain, Fs); % 对滤波后的信号进行重音处理 y_low = filter(b_low, a_low, y_filtered); ``` 4. 将处理后的信号写入新的音频文件。 ```matlab % 写入新的音频文件 audiowrite('audio_low.wav', y_low, Fs); ``` 这样就可以实现重音加强了。其中,peakingEQ函数用于计算峰值均衡器的系数,代码如下: ```matlab function [b, a] = peakingEQ(w0, bw, gain, Fs) % 计算峰值均衡器系数 A = sqrt(10^(gain/20)); alpha = sin(w0)*sinh(log(2)/2*bw*w0/sin(w0)); beta = sqrt(A)/alpha; b0 = A*(1+beta); b1 = -2*A*cos(w0); b2 = A*(1-beta); a0 = 1+alpha; a1 = -2*cos(w0); a2 = 1-alpha; b = [b0/a0, b1/a0, b2/a0]; a = [1, a1/a0, a2/a0]; end ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好梦成真Kevin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值