一阶数字高通滤波器的设计与实现
创作时间:
作者:
@小白创作中心
一阶数字高通滤波器的设计与实现
引用
CSDN
1.
https://blog.csdn.net/weixin_38604759/article/details/139160079
本文主要介绍了数字一阶高通滤波器的计算公式推导、算法实现及仿真。文章通过Python和C语言两种编程语言实现了数字一阶高通滤波器,并通过仿真和实际硬件测试验证了其性能。文章内容完整,包含了理论推导、代码实现和实验验证等多个方面,具有较高的技术含量和实用价值。
1. 计算公式推导
一阶高通滤波器的差分方程为:
$$
y(n) = b_0 x(n) + b_1 x(n-1) + a_0 y(n-1)
$$
其中,$x(n)$为输入信号,$y(n)$为输出信号,$b_0$、$b_1$和$a_0$为滤波器系数。系数的计算公式如下:
$$
b_0 = \frac{1}{\tan(\frac{\omega_c}{2}T_s) + 1}
$$
$$
b_1 = -b_0
$$
$$
a_0 = \frac{1 - \tan(\frac{\omega_c}{2}T_s)}{\tan(\frac{\omega_c}{2}T_s) + 1}
$$
其中,$\omega_c$为截止频率,$T_s$为采样周期。
2. 算法实现及仿真
Python实现
import numpy as np
import matplotlib.pyplot as plt
# 参数设置
Wc = 2 * np.pi * 30
Tsw = 0.00314
halfdigiW = np.tan(Wc / 2 * Tsw)
b10 = 1 / (halfdigiW + 1)
b11 = -b10
a10 = (1 - halfdigiW) / (halfdigiW + 1)
# 信号生成
x = np.linspace(-np.pi, np.pi, 2000)
data = np.zeros_like(x)
data1 = np.zeros_like(x)
y1 = np.zeros_like(x)
for i in range(len(x)):
data[i] = np.sin(2 * np.pi * x[i]) + 0.5 * np.sin(30 * 2 * np.pi * x[i])
data1[i] = 0.5 * np.sin(130 * 2 * np.pi * x[i])
y1[i] = b10 * data[i] + b11 * data[i - 1] + a10 * y1[i - 1]
y1[0] = 0
y1[1] = 0
# 波形绘制
plt.subplot(2, 1, 1)
plt.plot(x, data, label='sig+noise')
plt.plot(x, y1, 'r', label='first order HP')
plt.subplot(2, 1, 2)
plt.plot(x, data1, label='sig')
plt.plot(x, y1, 'r', label='first order HP')
plt.grid()
plt.legend()
plt.show()
C语言实现
#ifndef _MHPF1W_F_H_
#define _MHPF1W_F_H_
#include <stdint.h>
struct MHpf1W_F {
struct {
void (*Set)(struct MHpf1W_F *self, float cutFreq, int samFreq);
void (*VaryCutFreq)(struct MHpf1W_F *self, float cutFreq);
float cutFreq;
float samFreq;
} Init;
struct {
int (*In)(struct MHpf1W_F *self, int Xn);
int out_y;
} Prd;
struct {
float Ts;
int a0, b0, b1;
int Xn_1, Yn_1;
} pri;
};
void MHpf1W_F_Create(struct MHpf1W_F *self);
#endif
#include "MHpf1W_F.h"
#include <string.h>
#include <math.h>
static const float PI = 3.1415926535897932384626f;
#define MID(a, min, max) (a = (a < min) ? min : (a < max) ? a : max)
#define Q15M(a, b) ((a * b) >> 15)
static void _Update(struct MHpf1W_F *self) {
float halfdigiW, tgAnaWT;
halfdigiW = PI * self->Init.cutFreq * self->pri.Ts;
tgAnaWT = tan(halfdigiW);
self->pri.b0 = 1 / (tgAnaWT + 1) * 32768;
self->pri.b1 = -self->pri.b0;
self->pri.a0 = ((1 - tgAnaWT) / (tgAnaWT + 1)) * 32768;
self->pri.Xn_1 = 0;
self->pri.Yn_1 = 0;
}
static void InitSet(struct MHpf1W_F *self, float cutFreq, int samFreq) {
self->Init.cutFreq = MID(cutFreq, 0.0f, samFreq * 0.5f);
self->Init.samFreq = samFreq;
self->pri.Ts = 1.0f / self->Init.samFreq;
_Update(self);
}
static void InitVaryCutF(struct MHpf1W_F *self, float cutFreq) {
self->Init.cutFreq = cutFreq;
_Update(self);
}
static int PrdIn(struct MHpf1W_F *self, int Xn) {
self->Prd.out_y =
Q15M(self->pri.b0, Xn) +
Q15M(self->pri.b1, self->pri.Xn_1) +
Q15M(self->pri.a0, self->pri.Yn_1);
self->pri.Yn_1 = self->Prd.out_y;
self->pri.Xn_1 = Xn;
return self->Prd.out_y;
}
void MHpf1W_F_Create(struct MHpf1W_F *self) {
memset(self, 0, sizeof(struct MHpf1W_F));
self->Init.Set = InitSet;
self->Init.VaryCutFreq = InitVaryCutF;
self->Prd.In = PrdIn;
}
3. 仿真结果分析
Python仿真结果
输入信号是幅值为1、频率为1Hz的低频信号加上幅值为0.5、频率为30Hz的高频信号,采样时间为0.003s。从仿真波形可以看出,当截止频率fc为0.5Hz时,滤波后的波形有微小的衰减作用,但几乎和原波形一致。随着截止频率的增加,对低频的滤除效果越来越强,高频信号逐渐接近其本身波形。当截止频率高于高频信号频率时,高频信号也会被滤掉。当截止频率大于等于采样频率的一半时,输出变为一条直线。
单片机仿真结果
单片机模拟输入信号是幅值为1000、频率为1Hz的低频信号加上幅值为500、频率为30Hz的高频信号,采样时间为0.001s。从仿真波形可以看出,输出变化的规律现象与Python仿真结果一致。同样地,当截止频率大于等于采样频率的一半时,输出变为一条直线。
热门推荐
mTORC1/S6K1通路:细胞生长调控的关键机制与疾病治疗新靶点
卧室选淡蓝,客厅配深灰:专业窗帘配色全攻略
从红到粉:中式与法式装修的窗帘配色方案
教唆杀人、虐待、精神控制:《猎罪图鉴2》法律知识点全解析
郑集&葛可佑辟谣:香蕉芋头相克?
《猎罪图鉴2》热播,主创揭秘:艺术视角剖析人性,理性感性碰撞升级
猎罪图鉴2:刑侦与犯罪心理学的创新融合
热播剧《猎罪图鉴2》:沈翊从“画皮”到“画心”的艺术探案之旅
香蕉和芋头一起吃,真能促进消化?
芋头配香蕉,当心消化不良!
香蕉芋头南瓜羹:创意料理新宠儿!
婆媳关系胜似姐妹?这9个相处秘诀请收好
济南天玑路特大桥,加速临空经济区腾飞
《道德经》教你如何在“无道”社会中找到心理平衡
老子教你知足常乐,远离战争
美国自然历史博物馆:45个展厅展现宇宙到人类文明
198万年前南方古猿源泉种:连接猿人与人类的关键发现
两项新研究揭示:唾液淀粉酶基因如何让人类适应高淀粉饮食
人类进化简史:四大阶段塑造现代人
五行音乐疗法:五种调式对应五脏,科学实证的养生新选择
张家界四天三夜深度游:阿凡达世界+凤凰古城免费夜游
济南天玑路特大桥即将合龙,交通迎来大变局
工程项目成本管理:4大措施+管理软件应用实践
企业合同管理:财务视角下的制定与监控要点
瑞士央行意外降息50个基点,零利率时代或将重现
初中物理热学实验详解:5个经典实验操作与评估
企业拖欠工资的法律风险与应对策略
中医情志理论解读双相情感障碍:从七情内伤到辨证施治
双相情感障碍患者的食疗神器:鲑鱼
职场电话沟通技巧:从礼仪到实战的完整指南