python低通滤波函数_Python在信号与系统中的应用(1)——Hilbert变换,Hilbert在单边带包络检波的应用,FIR_LPF滤波器设计,还有逼格高高的FM(PM)调制...

多谢董老师,董老师是个好老师!

心情久久不能平静,主要是高频这门课的分析方法实在是让我难以理解,公式也背不过,还是放放吧。

最近厌恶了Matlab臃肿的体积和频繁的读写对我的Mac的损害,所以学习了一下Python这一轻量级的脚本,发现“Python自诞生那天就跟科学计算分不开”这个事实。无聊,写写心得。

配置环境什么的还是弄了几个晚上的。在Mac下用PyCharm还是很好滴,装上NumPy,SciPy等等一众免费的,很不错的Python包,就可以灰了!

1.Hilbert变换及其在单边带(SSB)包络检波的应用

定义神马的,性质神马的自己百度去。我也懒得写公式了,大家将就着看。

先定义个东西,H(t)为Hilbert变换后的时域信号,f(t)为原始时域信号。那么其包络为:

Envelop = sqrt(H^2(t)+f^2(t))。

好了,写代码什么的都简单了。

import numpy as np

import pylab as pl

import scipy.signal as signal

from scipy import fftpack

t = np.arange(0, 0.3, 1/20000.0)

x = np.sin(2*np.pi*1000*t) * (np.sin(2*np.pi*20*t) + np.sin(2*np.pi*8*t) + 3.0)

hx = fftpack.hilbert(x)

pl.subplot(221)

pl.plot(x, label=u"Carrier")

pl.plot(np.sqrt(x**2 + hx**2), "r", linewidth=2, label=u"Envelop")

pl.title(u"Hilbert Transform")

pl.legend()

然后是它的结果,看,是不是逼格高高的不可一世!~~

d2F0ZXJtYXJrLzIvdGV4dC9hSFIwY0RvdkwySnNiMmN1WTNOa2JpNXVaWFF2ZW1obGJtZHVZVzVzWldVPS9mb250LzVhNkw1TDJUL2ZvbnRzaXplLzQwMC9maWxsL0kwSkJRa0ZDTUE9PS9kaXNzb2x2ZS83MC9ncmF2aXR5L0NlbnRlcg==.jpg

2.FIR_LPF设计

用Python这种动态语言写几百个参数的有限冲激响应数字低通滤波器(Finite Impulse Response-Low Pass Digital Filter),实在是太难为人家了,还是用内置的函数或者内嵌C吧。看那一长串,我还想再打一遍,有限冲激响应数字低通滤波器,逼格高高的!!

下面是代码,FIR滤波器在这里我估计参数不下100,所以内嵌吧,否则慢死。。

import numpy as np

import pylab as pl

import scipy.signal as signal

from scipy import fftpack

def h_ideal(n, fc):

return 2*fc*np.sinc(2*fc*np.arange(-n, n, 1.0))

b = h_ideal(30, 0.25)

b2 = signal.firwin(len(b), 0.6)

w, h = signal.freqz(b)

w2, h2 = signal.freqz(b2)

#pl.figure(figsize=(8,6))

pl.subplot(222)

pl.plot(w/2/np.pi, 20*np.log10(np.abs(h)), label=u"h_ideal")

pl.plot(w2/2/np.pi, 20*np.log10(np.abs(h2)), label=u"firwin")

pl.xlabel(u"Normalized Frequency Rad/Sample")

pl.ylabel(u"Magnitude (dB)")

pl.title(u"FIR Low Pass Filter")

pl.legend()

pl.subplot(224)

pl.plot(b, label=u"h_ideal")

pl.plot(b2, label=u"firwin")

pl.legend()

pl.show()

d2F0ZXJtYXJrLzIvdGV4dC9hSFIwY0RvdkwySnNiMmN1WTNOa2JpNXVaWFF2ZW1obGJtZHVZVzVzWldVPS9mb250LzVhNkw1TDJUL2ZvbnRzaXplLzQwMC9maWxsL0kwSkJRa0ZDTUE9PS9kaXNzb2x2ZS83MC9ncmF2aXR5L0NlbnRlcg==.jpg

看这逼格高高的,都不说了。。

3.下面是董老师指导我的,虽然很简单。。FM调制

董老师说mf的参数调小了,我看果然是。课本不可信,给的参数都mv毫伏级,坑爹!

码代码这种小事就简单多了

import numpy as np

import pylab as pl

import scipy as sp

from scipy import integrate

from scipy import fftpack

sample_rate = 10000

t = np.arange(0, 1.0, 1.0 / sample_rate) # generate time sampling

omega_base = 40

omega_carrier = 800

mf = 1

v0 = 5

v_omega = 10

base = np.cos(omega_base * t)

pm = v0 * np.cos(omega_carrier * t + v_omega * base)

pl.plot(base)

pl.plot(pm)

pl.show()

d2F0ZXJtYXJrLzIvdGV4dC9hSFIwY0RvdkwySnNiMmN1WTNOa2JpNXVaWFF2ZW1obGJtZHVZVzVzWldVPS9mb250LzVhNkw1TDJUL2ZvbnRzaXplLzQwMC9maWxsL0kwSkJRa0ZDTUE9PS9kaXNzb2x2ZS83MC9ncmF2aXR5L0NlbnRlcg==.jpg

绿的是最后的信号,蓝的是原始信号。

好了,说完了第一部分,第二部分写啥还没有想好,到时再说,嗯。

今天好娘快,晚上继续学高频。

董老师是个好人,好人一生平安。。。。。。

最近我怎么这么婆妈了。。。!!

Python在信号与系统中的应用(1)——Hilbert变换,Hilbert在单边带包络检波的应用,FIR_LPF滤波器设计,还有逼格高高的FM(PM)调制

时间: 06-01

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值