zoukankan      html  css  js  c++  java
  • 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()

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



    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()





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



    3.以下是董老师指导我的,尽管非常easy。

    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()
    


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


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

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


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

    。。

    近期我这样的傻事怎么。。

    。!

    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    27数据结构与算法分析之---二叉排序树
    26数据结构与算法分析之---线索二叉树
    25数据结构与算法分析之---树与森林
    24数据结构与算法分析之---二叉树的概念
    23数据结构与算法分析之---树的基本概念
    22数据结构与算法分析之---特殊矩阵
    21数据结构与算法分析之---多维数组
    20数据结构与算法分析之---串的模式匹配
    17数据结构与算法分析之---串的类型
    16数据结构与算法分析之---链式队列
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4907136.html
Copyright © 2011-2022 走看看