实验五:信号的取样与取样定理

分为信号采样与采样定理:首先是采样

1.代码如下:

import numpy as np
import matplotlib.pyplot as plt

def uCT(t):
    return (t >= 0).astype(float)

Ts = 1
dt = 0.01
t1 = np.arange(-4, 4 + dt, dt)
ft = 1/2 * (1 + np.cos(t1)) * (uCT(t1 + np.pi) - uCT(t1 - np.pi))

plt.subplot(2, 2, 1)
plt.plot(t1, ft, linewidth=2)
plt.grid(True)
plt.axis([-4, 4, -0.1, 1.1])
plt.xlabel('t(sec)')
plt.title('f(t)')

w = np.arange(-3*np.pi, 3*np.pi, 0.01)
F1 = dt * ft @ np.exp(-1j * np.outer(t1, w))

plt.subplot(2, 2, 2)
plt.plot(w, np.abs(F1), linewidth=2)
plt.grid(True)
plt.axis([-10, 10, -0.2, 1.1*np.pi])
plt.xlabel('w')
plt.title('|F(jw)|')

t2 = np.arange(-4, 4 + Ts, Ts)
fst = 1/2 * (1 + np.cos(t2)) * (uCT(t2 + np.pi) - uCT(t2 - np.pi))

plt.subplot(2, 2, 3)
plt.plot(t1, ft, ':')
plt.stem(t2, fst)
plt.grid(True)
plt.axis([-4, 4, -0.1, 1.1])
plt.xlabel('t(sec)')
plt.title('f_s(t)')

Fsw = Ts * fst @ np.exp(-1j * np.outer(t2, w))

plt.subplot(2, 2, 4)
plt.plot(w, np.abs(Fsw), linewidth=2)
plt.grid(True)
plt.axis([-10, 10, -0.2, 1.1*np.pi])
plt.xlabel('w')
plt.title('|F_s(jw)|')

plt.tight_layout()
plt.show()

运行的结果如下:

信号重建:

代码如下:

import numpy as np
import matplotlib.pyplot as plt


def uCT(t):
    return (t >= 0).astype(float)


wm = 2
wc = 1.2 * wm
Ts = 1
N = 100
nTs = np.arange(-N, N + 1) * Ts
fs = 1 / 2 * (1 + np.cos(nTs)) * (uCT(nTs + np.pi) - uCT(nTs - np.pi))

t = np.arange(-4, 4, 0.01)
ftr = np.zeros_like(t)

for n in range(len(nTs)):
    m = n - ((len(nTs) - 1) / 2 + 1)
    xt = fs[n] * np.sinc((wc / np.pi) * (t - m * Ts))
    ftr += Ts * wc / np.pi * xt

t1 = np.arange(-4, 4, 0.01)
f1 = 1 / 2 * (1 + np.cos(t1)) * (uCT(t1 + np.pi) - uCT(t1 - np.pi))

plt.subplot(3, 1, 1)
plt.plot(t1, f1, ':')
plt.stem(nTs, fs)
plt.grid(True)
plt.axis([-4, 4, -0.1, 1.3])
plt.xlabel('nTs')
plt.title('f(nTs)')

plt.subplot(3, 1, 2)
plt.plot(t, ftr, linewidth=2)
plt.grid(True)
plt.axis([-4, 4, -0.1, 1.3])
plt.xlabel('t')
plt.title('Reconstructed signal fr(t)')

error = np.abs(ftr - f1)

plt.subplot(3, 1, 3)
plt.plot(t, error, linewidth=2)
plt.grid(True)
plt.xlabel('t')
plt.title('error(t)')

plt.tight_layout()
plt.show()

运行结果如下:

思考题:

代码如下:

import numpy as np
import matplotlib.pyplot as plt

fs = 3800
N = 38
n = np.arange(0, N)
t = n / fs

x1 = np.sin(2 * np.pi * 100 * t)
x2 = np.sin(2 * np.pi * 200 * t)
x3 = np.sin(2 * np.pi * 3800 * t)

y1 = np.fft.fft(x1, N)
mag1 = np.abs(y1)

y2 = np.fft.fft(x2, N)
mag2 = np.abs(y2)

y3 = np.fft.fft(x3, N)
mag3 = np.abs(y3)

f = n * fs / N

plt.subplot(3, 1, 1)
plt.plot(f[:N//2], mag1[:N//2])
plt.xlabel('频率/Hz')
plt.ylabel('振幅')
plt.title('f=100Hz')
plt.grid(True)

plt.subplot(3, 1, 2)
plt.plot(f[:N//2], mag2[:N//2])
plt.xlabel('频率/Hz')
plt.ylabel('振幅')
plt.title('f=200Hz')
plt.grid(True)

plt.subplot(3, 1, 3)
plt.plot(f[:N//2], mag3[:N//2])
plt.xlabel('频率/Hz')
plt.ylabel('振幅')
plt.title('f=3800Hz')
plt.grid(True)

plt.tight_layout()
plt.show()

运行结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值