Canmv k230 案例4.1——FIR 滤波器(一)

Canmv k230 案例4.1——FIR 滤波器(一)

1 生成一个信号

import array
import math
from ulab import numpy as np
import time
PI = 3.14159265358979323846264338327950288419716939937510

rx = []   # 空列表,用于储存生成的输入数据
def input_data():    # 输入列表,5种频率 10Hz 100Hz 400Hz 合成信号
    for i in range(1000):
        data0 = 10 * math.cos(1 * 2 * PI * i / 100)
        data1  =10 * math.cos(10 * 2 * PI * i / 100)
        data2  =0 * math.cos(20 * 2 * PI * i / 100)
        data3  =0 * math.cos(30 * 2 * PI * i / 100)
        data4  =1 * math.cos(40 * 2 * PI * i / 100)
        rx.append(data0 + data1 + data2 + data3 + data4)  
input_data()                                                            
data = np.array(rx,dtype=np.float)  
print('输入   :',rx)

1)绘制信号
谐波信号
假定采样率为1kHz,1000点的数据FFT的分辨率为fs/N=1000/1000=1Hz/点

2)并分析频谱
信号频谱FFT
除了FFT一个序列的直流分量外,三种谐波成分均已理论一致

2 设计FIR滤波器

在这里插入图片描述
采用MATLAB中设置如上图所示,导出FIR滤波器系数,长度为阶数+1

0.00213234868716711	0.0318386063424590	0.127481167764050	0.264264449913397	0.332658925764871	0.264264449913397	0.127481167764050	0.0318386063424590	0.00213234868716711

也可以采用MWORKS.Syslab工具箱需教育邮箱
Nworks界面
生成的FIR系数相差很小

0.002132348687167138
0.03183860634245905
0.12748116776405022
0.26426444991339704
0.33265892576487105
0.26426444991339704
0.12748116776405022
0.03183860634245905
0.002132348687167138

3 FIR原理及测试结果

FIR公式
其中h(k)为滤波器系数,x(n-k),代表离散信号沿时间轴移动
也是卷积
可以看到这是实时的信号处理过程,对于生成的数据集,反转FIR的系数较为简单,而本次设计的FIR滤波器参数的系数对称,因此直接乘积即可,后面实时处理时会说明

# 滤波后信号
yy=[]
# 滤波器系数h
h=[0.00213234868716711,0.0318386063424590,0.127481167764050,0.264264449913397,0.332658925764871,0.264264449913397,0.127481167764050,0.0318386063424590,0.00213234868716711]
x=[0,0,0,0,0,0,0,0,0]      # 循环的FIR处理数据 初始化
y=[0,0,0,0,0,0,0,0,0]      # 输出的每项乘积,需要sum(y)计算滤波器的输出
# FIR 
for i in range(1000-len(h)):
    x=rx[0+i:8+i]
    for i in range(8):
        y[i]=h[i]*x[i]

    yy.append((sum(y)))

print('FIR输出:',yy)

Canmv k230运行输出后信号及频谱(输出信号补0后做FFT)
FIR后
高频信号消除,但低频信号幅值收到滤波器的幅度响应影响发生了变化,再次设计高通滤波器保留400Hz谐波,结果如下:
在这里插入图片描述
Canmv k230运行结果符合预期

至此,暂时告一段路,后续补充

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值