matlab 实现cic仿真,基于python的多级CIC仿真控件.matlab

我想得到多级CIC滤波器的频率响应。在import numpy as np

from matplotlib import pyplot as plt

from control.matlab import *

def main():

mm=256

nn=5

dt=True

omega_range=np.linspace(0.00,np.pi,100000)

syscic=tf([1,],[1,],dt)

num=np.zeros(mm+1);num[0]=1;num[-1]=-1

den=np.zeros(mm+1);den[0]=1;den[1]=-1

# print(den)

for n in range(nn):

syscic=syscic*tf(num,den,dt)/mm

bode(syscic, omega_range,dB=True, deg=True)

plt.show()

if __name__=="__main__":

main()

在非常低的频率下可以看到意想不到的响应。

(直流时应为0dB)

如果nn小于3,我得到正确的结果。在

我想这是数值错误,因为num和den接近于零。在

另一方面,Scilab计算正确,即使有10个阶段。在

有没有使用python控件库的解决方案?在

我的环境是:

Windows 10,Python 3.6.1::Anaconda 4.4.0(64位),

控制(0.7.0)由pip安装,无slycot。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MATLAB CIC(Cascade Integrator-Comb)滤波器是一种数字滤波器,可用于降低信号的采样率并减小信号中的噪声。它的工作原理是将一个级联的积分器和组合器组合在一起,以实现信号的滤波。 具体来说,CIC滤波器首先通过级联的积分器对输入信号进行积分,然后将结果通过组合器进行组合。在这个过程中,由于积分器的特性,CIC滤波器可以在不使用乘法器的情况下有效地降低采样率,从而减小计算量并降低功耗。 在MATLAB中,可以使用`cicdecim`函数创建CIC降采样滤波器。该函数的语法如下: ``` Hd = cicdecim(R,M,N,OSR) ``` 其中,`R`是CIC滤波器的积分器阶数,`M`是组合器阶数,`N`是CIC滤波器的差分延迟线数,`OSR`是过采样比率。函数返回一个CIC滤波器对象`Hd`,可以将其作为参数传递给`filter`函数来对输入信号进行滤波和降采样。 例如,以下代码演示了如何使用MATLAB创建一个CIC滤波器对象,并将其应用于输入信号进行滤波和降采样: ``` % 创建CIC滤波器对象 R = 2; M = 1; N = 4; OSR = 16; Hd = cicdecim(R, M, N, OSR); % 生成输入信号 fs = 1000; % 采样率 t = 0:1/fs:1; x = cos(2*pi*100*t) + cos(2*pi*200*t); % 对输入信号进行滤波和降采样 y = filter(Hd, x); % 绘制输入和输出信号 figure; subplot(2, 1, 1); plot(t, x); xlabel('Time (s)'); ylabel('Amplitude'); title('Input Signal'); subplot(2, 1, 2); t2 = 0:OSR/fs:length(y)/fs-1/fs/OSR; plot(t2, y); xlabel('Time (s)'); ylabel('Amplitude'); title('Filtered and Decimated Signal'); ``` 希望这可以帮助您开始使用MATLAB中的CIC滤波器。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值