数字信号处理及python实现(一)

这是参考知乎的数字信号处理及matlab实现的python实现版本,参考连接

项目文件结构
在这里插入图片描述
test为测试文件,window为项目文件

冲激信号

δ ( n − n 0 ) = { 1 n = n 0 0 n ≠ n 0 \delta(n-n_0)=\begin{cases} 1 & n = n_0 \\ 0 & n \neq n_0 \end{cases} δ(nn0)={10n=n0n=n0

test\signal.py中impseq函数

    def impseq(self, n0, n1, n2):
        """返回冲激位移脉冲,[n1,n2]的信号

        :param n0: 判断数值
        :param n1: 下界
        :param n2: 上界
        :return:
        """
        if n0 < n1 or n0 > n2 or n1 > n2:
            raise ZeroDivisionError("参数必须满足n1<=n0<=n2")

        n = np.array(list(range(n1, n2 + 1)))
        x = []
        for ni in n:
            if ni == n0:
                x.append(1)
            else:
                x.append(0)
        return x, n

单元测试函数

    def test_impseq(self):
        n = list(range(-5, 6))
        signal = Signal()
        s1 = signal.impseq(-2, -5, 5)[0]
        s1 = list(map(lambda x: x * 2, s1))
        s2 = np.array(signal.impseq(4, -5, 5)[0])
        x = np.array(s1) - np.array(s2)
        plt.stem(n, x.tolist())
        plt.title('$x(n)=2\delta(n+2)-\delta(n-4)$')
        plt.ylabel('$x(n)$')

        plt.savefig('data/images/1.png')

在这里插入图片描述

正弦序列

a. x 1 ( n ) = sin ⁡ ( π n 17 ) , 0 ≤ n ≤ 25 x_1(n)=\sin(\pi\frac{ n}{17}),0\leq n\leq 25 x1(n)=sin(π17n),0n25
b. x 2 ( n ) = sin ⁡ ( π n 17 ) , − 15 ≤ n ≤ 25 x_2(n)=\sin(\pi\frac{n}{17}),-15\leq n\leq 25 x2(n)=sin(π17n),15n25
c. x 3 ( n ) = sin ⁡ ( 3 π n + π 2 ) , − 10 ≤ n ≤ 10 x_3(n)=\sin(3\pi n+\frac{\pi}{2}),-10\leq n\leq 10 x3(n)=sin(3πn+2π),10n10
d. x 4 ( n ) = cos ⁡ ( π 23 n ) , 0 ≤ n ≤ 50 x_4(n)=\cos(\frac{\pi}{\sqrt{23}}n),0\leq n\leq 50 x4(n)=cos(23 πn),0n50

python代码a
test\signal.py中a函数

    def a(self):
        n = np.array(list(range(0, 26)))
        x = np.sin(np.pi / 17 * n)
        return x, n

单元测试函数

    def test_a(self):
        signal = Signal()
        x,n = signal.a()
        plt.stem(n, x.tolist())
        plt.title(r'$x_1(n)=\sin(\frac{\pi n}{17})$')
        plt.xlabel('n')
        plt.ylabel('$x_1(n)$')

        plt.savefig('data/images/a.png')

在这里插入图片描述

python代码b
test\signal.py中b函数

    def b(self):
        n = np.array(list(range(0, 41))) - 15
        x = np.sin(np.pi / 17 * n)
        return x, n

单元测试函数

    def test_b(self):
        signal = Signal()
        x, n = signal.b()
        plt.stem(n, x.tolist())
        plt.title(r'$x_2(n)=sin(\frac{\pi n}{17})$')
        plt.xlabel('n')
        plt.ylabel('$x_2(n)$')

        plt.savefig('data/images/b.png')

在这里插入图片描述

python代码c
test\signal.py中c函数

    def c(self):
        n = np.array(list(range(0, 21))) - 10
        x = np.sin(np.pi * 3 * n + np.pi / 2)
        return x, n

单元测试函数

    def test_c(self):
        signal = Signal()
        x, n = signal.c()
        plt.stem(n, x.tolist())
        plt.title(r'$x_3(n)=\sin(3\pi n+\frac{\pi}{2})$')
        plt.xlabel('n')
        plt.ylabel('$x_3(n)$')

        plt.savefig('data/images/c.png')

在这里插入图片描述

python代码d
test\signal.py中d函数

    def d(self):
        n = np.array(list(range(0, 51)))
        x = np.sin(np.pi / np.sqrt(23) * n)
        return x, n

单元测试函数

    def test_d(self):
        signal = Signal()
        x, n = signal.d()
        plt.stem(n, x.tolist())
        plt.title(r'$x_4(n)=\cos(\frac{\pi}{23}n)$')
        plt.xlabel('n')
        plt.ylabel('$x_4(n)$')

        plt.savefig('data/images/d.png')

在这里插入图片描述

指数序列

在区间 n = [ 0 , 20 ] n=[0,20] n=[0,20]上绘制指数信号 x [ n ] = 0. 9 n x[n]=0.9^n x[n]=0.9n
test\signal.py中genexp函数

    def genexp(self, b, n0, L):
        if L <= 0:
            raise ZeroDivisionError("GENEXP:长度不是正数")

        nn = n0 + np.array(list(range(0, L + 1)))
        y = [b ** i for i in nn]
        return y

单元测试函数

    def test_genexp(self):
        signal = Signal()
        L = 20
        nn = np.array(list(range(0,21)))
        x1 = signal.genexp(0.9, 0, L);
        plt.stem(nn, x1)
        plt.xlabel('n')
        plt.ylabel('x1')
        plt.title('r$x[n]=0.9^n$')
        plt.savefig('data/images/genexp.png')

在这里插入图片描述

复值信号

单元测试函数

    def test_comp(self):
        nn = np.array(list(range(0,26)))
        f = np.exp((complex(0, 1))*nn/3)

        plt.subplot(211)
        plt.stem(nn,np.real(f))
        plt.title('REAL PART')
        plt.xlabel('INDEX(n)')
        #plt.plot(nn, np.real(f))

        plt.subplot(212)
        plt.stem(nn,np.imag(f))
        plt.title('IMAG PART')
        plt.xlabel('INDEX(n)')

        plt.tight_layout()

        plt.savefig('data/images/comp.png')

在这里插入图片描述

复指数信号

单元测试函数

    def test_comp_genexp(self):
        n = np.array(list(range(0,21)))
        A = 0.9
        a = 0
        b = np.pi / 4
        x = A*np.exp((complex(a, b)) * n)
        plt.subplot(211)
        plt.stem(n, np.real(x))
        plt.title('REAL PART')
        plt.xlabel('INDEX(n)')
        # plt.plot(nn, np.real(f))

        plt.subplot(212)
        plt.stem(n, np.imag(x))
        plt.title('IMAG PART')
        plt.xlabel('INDEX(n)')

        plt.tight_layout()

        plt.savefig('data/images/comp_genexp.png')

在这里插入图片描述
下一篇:数字信号处理及python实现(二)

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞华1993

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值