FIR 带通滤波器参数设计流程
假设有一段10kHz的语言,现需要对2~3kHz之间的语言信号进行提取,要求1.5kHz及3.5kHz以上的频率需要有40dB的衰减
1、求数字频率指标
通带下边频:
wpl=2∗π∗fpl/fs=0.4πw_{pl}=2*\pi *f_{pl}/f_s=0.4\piwpl=2∗π∗fpl/fs=0.4π
通带上边频:
wph=2∗π∗fph/fs=0.6πw_{ph}=2*\pi *f_{ph}/f_s=0.6\piwph=2∗π∗fph/fs=0.6π
下阻带上变频:
wsl=2∗π∗fsl/fs=0.3πw_{sl}=2*\pi *f_{sl}/f_s=0.3\piwsl=2∗π∗fsl/fs=0.3π
上阻带下变频:
wsh=2∗π∗fsh/fs=0.7πw_{sh}=2*\pi *f_{sh}/f_s=0.7\piwsh=2∗π∗fsh/fs=0.7π
2、选取窗函数
根据阻带衰减查表,可选汉宁窗,过度带宽Δw=wpl−wsl=0.1π\Delta_w=w_{pl}-w_{sl}=0.1\piΔw=wpl−wsl=0.1π
由汉宁窗过度带宽确定阶数N
N=6.2π/Δw=62N=6.2\pi/\Delta_w=62N=6.2π/Δw=62
取N为奇数N=63
a=(N−1)/2a = (N-1)/2a=(N−1)/2
因此窗函数:
w(n)=12[1−cos(2πna)]w(n)=\frac{1}{2}[1-cos(\frac{2\pi n}{a})]w(n)=21[1−cos(a2πn)]
3、求理想带通滤波器的单位脉冲响应
理想带通滤波器的截止频率:
wcl=(wpl+wsl)/2w_{cl}=(w_{pl}+w_{sl})/2wcl=(wpl+wsl)/2
wch=(wph+wsh)/2w_{ch}=(w_{ph}+w_{sh})/2wch=(wph+wsh)/2
理想带通滤波器的单位脉冲响应:
hd(n)=sin[wch∗(n−a)]−sin[wcl∗(n−a)]π∗(n−a)h_d(n)=\frac{sin[w_{ch}*(n-a)]-sin[w_{cl}*(n-a)]}{\pi*(n-a)}hd(n)=π∗(n−a)sin[wch∗(n−a)]−sin[wcl∗(n−a)]
4、求FIR滤波参数
h(n)=hd(n)w(n)h(n)=h_d(n)w(n)h(n)=hd(n)w(n)
5、算法仿真
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
from scipy.fftpack import fft,ifft
from decimal import Decimal
import matplotlib
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['font.family']='sans-serif'class filter:def __init__(self,h):self.order=len(h)self.h=hself.output=[]def FIR_Filter(self,vi):for i in range(len(vi)):sum=0if i < self.order:for j in range(i):sum=sum + self.h[j]*vi[i-j]else: for j in range(self.order):sum=sum + self.h[j]*vi[i-j]self.output.append(sum) return self.output#采样为10Khz
#1.5khz以下及3.5khz以上至少40db的衰减f_sl = 1500
f_sh = 3500
f_pl = 2000
f_ph = 3000
f_s = 10000
#通带下边频
W_pl = 2*np.pi*f_pl/f_sW_ph = 2*np.pi*f_ph/f_sW_sl = 2*np.pi*f_sl/f_s
W_sh = 2*np.pi*f_sh/f_sW_D = W_pl - W_slN = 6.2*np.pi/(W_D)
if N%2==0:N=N+1
print(N)
a = (N-1)/2
n=np.linspace(0,N-1,N)R_n = 1
#汉宁窗口函数
w_n = 0.5*(1-np.cos(2*np.pi*n/(N-1)))W_cl = (W_pl+W_sl)/2
W_ch = (W_ph+W_sh)/2
#用一个靠近a的小数将a值替换掉,避免出现除0的情况
a=30.9999999999
h_d = (np.sin(W_ch*(n-a))-np.sin(W_cl*(n-a)))/(2*np.pi*(n-a))
h_c = h_d*w_nnumtaps=63array= h_c
plt.figure(1)
yy_1=fft(array) #快速傅里叶变换
yf_1=abs(fft(array)) # 取模
yf1_1=abs(fft(array))/((len(array)/2)) #归一化处理
yf2_1 = yf1_1[range(int(len(array)/2))] #由于对称性,只取一半区间
#plt.plot(h_d,'b')
plt.subplot(221)
plt.title('滤波系数') # 定义标题
plt.plot(array,'g')
plt.plot(h_c,'K')
plt.subplot(222)
plt.title('滤波系数FFT') # 定义标题
plt.plot(yf2_1,'r')
plt.show()x=np.linspace(0,1,f_s)
signal_array = np.sin(2*np.pi*2000*x)
for i in range(10):if 1000*i != 2000:signal_array+=np.sin(2*np.pi*1000*x*i)#+np.sin(2*np.pi*175*x)+np.sin(2*np.pi*350*x)+np.sin(2*np.pi*500*x)
plt.figure(2)
Weight = array
FIR_filter=filter(Weight)
output = FIR_filter.FIR_Filter(signal_array)
y= signal_array
xf = np.arange(len(y))
yy=fft(y) #快速傅里叶变换
yf=abs(fft(y)) # 取模
yf1=abs(fft(y))/((len(x)/2)) #归一化处理
yf2 = yf1[range(int(len(x)/2))] #由于对称性,只取一半区间
plt.subplot(221)
plt.title('原始信号') # 定义标题
plt.plot(xf,signal_array,'b') #显示原始信号的FFT模值plt.subplot(222)
plt.title('原始信号FFT') # 定义标题
plt.plot(xf,yf1,'r') #显示原始信号的FFT模值yy_1=fft(output) #快速傅里叶变换
yf_1=abs(fft(output)) # 取模
yf1_1=abs(fft(output))/((len(x)/2)) #归一化处理
yf2_1 = yf1_1[range(int(len(x)/2))] #由于对称性,只取一半区间
plt.subplot(223)
plt.title('滤波后的信号') # 定义标题
plt.plot(xf,output,'b')
plt.subplot(224)
plt.title('滤波后的信号FFT') # 定义标题
plt.plot(xf,yf1_1,'r') #显示原始信号的FFT模值
6、算法结果
FIR 带通滤波器参数设计流程相关推荐
- 在matlab中实现累乘,如何利用matlab设计一个线性相位FIR带通滤波器,并在FPGA上实现...
设计要求 利用matlab设计一个线性相位FIR带通滤波器,并在FPGA上实现. 1.滤波器指标:过渡带带宽分别为100~300HZ,500~700HZ,阻带允许误差为0.02,通带允许误差为0.01 ...
- 计算机学院乔丽红,用巴特莱特窗函数法设计数字FIR带通滤波器dsp课程设计.doc...
课 程 设 计 课程设计名称:数字信号处理课程设计 专 业 班 级 : 电信 学 生 姓 名 : 学 号 : 指 导 教 师 : 乔丽红 课程设计时间: 6.16-6.20 电子信息工程 专业课程设计 ...
- Matlab中firpm函数设计具有非对称衰减的 FIR 带通滤波器
使用 Parks-McClellan 算法(firpm)创建一个 50 阶等波纹 FIR 带通滤波器,要求如下: 以 1 kHz 采样频率,通带为 200 Hz 和 300 Hz 之间的频率,并且通带 ...
- 如何用matlab绘制双调谐滤波器的阻抗频率特性曲线,一种双调谐无源滤波器的参数设计方法与流程...
本发明涉及电力滤波技术领域,具体涉及一种双调谐无源滤波器的参数设计方法. 背景技术: 理想的公用电网所提供的电压应该是单一固定的频率以及规定的电压幅值.高次谐波电流和谐波电压的出现,对公用电网是一种污 ...
- FIR数字滤波器的设计[Matlab][带源码]
本次为实验项目,在学习数字信号处理课程需要利用matlab来巩固所学知识 参考博主为整个项目实验,本次我们所需只需前三问即可. FIR数字滤波器的设计_A Master的博客-CSDN博客_fir数字 ...
- 基于Matlab App Designer的语音信号分析与处理(二):IIR和FIR滤波器的设计,语音信号的滤波
接上文:https://blog.csdn.net/weixin_53877178/article/details/122470759 目录 一.课题的任务 二.内容.步骤和要求 (1)语音信号的采集 ...
- matlab 滤波窗函数,FIR滤波器窗函数设计法详细步骤以及Matlab代码
采用窗函数法设计理想低通,高通滤波器,参考北京交通大学陈后金主编的[数字信号处理]5.2节 窗函数法设计线性相位FIR数字滤波器P164,和P188. 设计步骤如下: 1) 确定滤波器类型,不同的FI ...
- 基于matlab数字滤波器设计,基于MATLAB的FIR数字滤波器的设计
摘 要 传统的数字滤波器的设计过程复杂,计算工作量大,滤波特性调整困难,影响了它的应用.本文介绍了一种利用MATLAB信号处理工具箱(Signal Processing Toolbox)快速有效的设计 ...
- ASIC开发设计流程
ASIC开发设计流程 1. 使用语言:VHDL/verilog HDL 2. 各阶段典型软件介绍: a) 输入工具: Summit Summit 公司 b) 仿真工具: VCS, VSS Synops ...
- 三相逆变器双pi控制器参数如何调节_Boost 变换器 PI参数设计举例
欢迎加入技术交流QQ群(2000人):电力电子技术与新能源 905723370 高可靠新能源行业顶尖自媒体 在这里有电力电子.新能源干货.行业发展趋势分析.最新产品介绍.众多技术达人与您分享经验,欢迎 ...
最新文章
- 【总结整理】关于IE6的兼容性
- Elasticsearch 7.0中引入的新集群协调子系统如何使用?
- html 表格_【HTML】3 表格标签
- 直播预告 | 旷视科技李彦玮:动态网络及其在场景分割中的应用
- Java堆、栈、内存分析
- 51中断编程c语言,[新人求指教]51C语言编程可否用中断令循环结束提早结束
- C和指针之const、#define、volatile
- 09-一对多关系建表
- Android NDK: WARNING: Ignoring unknown import directory:错误解决方法
- TrustToken向Curve上tfTUSD贷款池新投入2400万美元资金
- Ali-tomcat之HSF框架Demo启动报错HSFServiceAddressNotFoundException
- idea全局查找字段
- 结构为王——确定分析思路(数据分析方法论)
- 双系统正确卸载Ubuntu系统
- 美团技术委员会前端通道主席洪磊:爱折腾的斜杠青年
- sparkStreaming常见问题
- jenkins svn publisher插件使用手册
- 如何使用OpenAI API和Python SDK构建自己的聊天机器人
- python模拟足球比赛_如何使用python从livescores获取足球比赛结果
- 几个Git仓库开源软件的比较
热门文章
- js 动态生成表格案例
- cad中计算机的快捷键,CAD常用快捷键汇总
- 电气专业标准规范大全html,电气专业规范大全
- c#练习——简单的文字编辑器
- python自带的库有哪些_吐血整理!140种Python标准库、第三方库和外部工具都有了...
- 手机号码检测开通微信查询方法
- 拼多多上架助手用哪个?拼多多商家必备工具
- html与php交互ajax菜鸟教程,PHP – AJAX 与 PHP | w3cschool菜鸟教程
- 位移密码算法挑战 个人答案
- 飞盘比赛(入门oj Problem 5961)