22207053_XLTHS_LAB1

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 13

THỰC HÀNH XỬ LÝ TÍN HIỆU SỐ

HỌ VÀ TÊN : PHẠM VĂN KÝ TH. XLTHS BÀI 01


MSSV : 22207053

Bài 1c : Viết chương trình tạo ra xung lực đơn vị có chiều dài 20 và delay 5
dn2 = signal.unit_impulse(20,5)
plt.stem(dn2)
plt.title("Xung lực đơn vị delay 2 mẫu")
plt.xlabel("Samples (Mẫu)")
plt.ylabel("Amplitude (Biên độ)")

May 31, 2024 1


THỰC HÀNH XỬ LÝ TÍN HIỆU SỐ

Bài 1f: Viết chương trình tạo ra bậc đơn vị có chiều dài là 20, delay 5 mẫu u(n-5)
n = np.arange (20)
x = np.concatenate([np.zeros(5), np.ones(15)])
plt.stem(n, x)

Bài 2b: Viết chương trình tạo sóng vuông tần số 10Hz, tần số lấy mẫu là 3KHz, duty
cycle 75%
t = np.linspace(0, 1, 3000, endpoint=False) #Tạo 1 dải tuyến tính từ 0 -> 1, số
mẫu là 3000, không lấy mẫu cuối cùng
s = signal.square(2 * np.pi * 10 * t, duty = 0.75) #Tạo sóng vuông tần số 10Hz,
duty cycle = 75%
plt.plot(t, s)

May 31, 2024 2


THỰC HÀNH XỬ LÝ TÍN HIỆU SỐ

Bài 3b: Viết chương trình tạo ra sóng sin biên độ 3V, tần số 1Hz, pha ban đầu 90 độ
fs = 100 # Tốc độ lấy mẫu (Hz)
f = 1 # Tần số của tín hiệu
N = 100 # Số mẫu
t = np.arange(N)/fs #Tạo ra 100 mẫu với chu kỳ lấy mẫu là Ts = 1/fs
y = 3*np.sin(2*np.pi*f * t + np.pi/2) #Tính biên độ của sóng sin

plt.stem(t,y, 'r' )
plt.title("Tín hiệu hình sin")
plt.xlabel("Time[Samples (Mẫu)]")
plt.ylabel("Amplitude (Biên độ)")

May 31, 2024 3


THỰC HÀNH XỬ LÝ TÍN HIỆU SỐ

Bài 3c: Thay thế câu lệnh vẽ bằng stem sang plot và step. Cho biết kết quả thu được
fs = 100 # Tốc độ lấy mẫu (Hz)
f = 1 # Tần số của tín hiệu
N = 100 # Số mẫu
t = np.arange(N)/fs #Tạo ra 100 mẫu với chu kỳ lấy mẫu là Ts = 1/fs
y = 3*np.sin(2*np.pi*f * t + np.pi/2) #Tính biên độ của sóng sin
plt.plot(t,y, 'r' )
plt.title("Tín hiệu hình sin vẽ bằng lệnh plot")
plt.xlabel("Time[Samples (Mẫu)]")
plt.ylabel("Amplitude (Biên độ)")

May 31, 2024 4


THỰC HÀNH XỬ LÝ TÍN HIỆU SỐ

Bài 4b: Thay đổi biên độ tín hiệu s1 ở câu 4a sang 0.5. Vẽ lại tín hiệu và nhận xét
t = 4 #Thời gian của tín hiệu
fs = 100
n = np.linspace(0, t, fs*t, endpoint=False)
f1 = 10
f2 = 1
a1 = 0.5 #nhận xét: do tín hiệu s1 có biên độ nhỏ hơn tín hiệu s2 nên giờ đây s1
được xem như nhiễu của tính hiệu sau khi tổng hợp
a2 = 3
s1 = a1*np.sin(2*np.pi*f1*n)
s2 = a2*np.sin(2*np.pi*f2*n)
s = s1+s2 # Cộng 2 tín hiệu
plt.plot(n, s)
plt.xlabel('Thời gian (s)')
plt.ylabel('Biên độ (V)')
#plt.xlim(0, 2)

May 31, 2024 5


THỰC HÀNH XỬ LÝ TÍN HIỆU SỐ

Bài 4c: Thay đổi biên độ tín hiệu s2 ở câu 4a sang 0.5, biên độ s1 = 3. Vẽ lại tín hiệu
và nhận xét
t = 4 #Thời gian của tín hiệu
fs = 100
n = np.linspace(0, t, fs*t, endpoint=False)
f1 = 10
f2 = 1
a1 = 3
a2 = 0.5 #nhận xét: do tín hiệu s2 có biên độ nhỏ hơn tín hiệu s1 nên giờ đây s2
được xem như nhiễu của tính hiệu sau khi tổng hợp
s1 = a1*np.sin(2*np.pi*f1*n)
s2 = a2*np.sin(2*np.pi*f2*n)
s = s1+s2 # Cộng 2 tín hiệu
plt.plot(n, s)
plt.xlabel('Thời gian (s)')
plt.ylabel('Biên độ (V)')
#plt.xlim(0, 2)

May 31, 2024 6


THỰC HÀNH XỬ LÝ TÍN HIỆU SỐ

Bài 4d: Thực hiện tạo và vẽ tín hiệu tổng hợp sA = s1 + s2 từ 2 tín hiệu hình sin s1
và s2 với các thông số như sau:
 s1: a1 = 5, f1 = 1KHz
 s2: a2 = 1, f2 = 50Hz
 Số mẫu: n = 1000
 Tần số lấy mẫu: fs = 8000
t = 1/8 #Thời gian của tín hiệu
fs = 8000
n = np.linspace(0, t, int (fs*t), endpoint=False)
f1 = 1000
f2 = 50
a1 = 5
a2 = 1
s1 = a1*np.sin(2*np.pi*f1*n)
s2 = a2*np.sin(2*np.pi*f2*n)
sA = s1+s2 # Cộng 2 tín hiệu
plt.plot(n, sA)
plt.xlabel('Thời gian (s)')
plt.ylabel('Biên độ (V)')

May 31, 2024 7


THỰC HÀNH XỬ LÝ TÍN HIỆU SỐ

#plt.xlim(0, 2)

Bài 4e:Thực hiện vẽ tín hiệu sB = s1*s2 với s1, s2 là các tín hiệu hình sin các thông
số sau:
 s1: a1 = 5, f1 = 1KHz
 s2: a2 = 1, f2 = 50Hz
 Số mẫu: n = 1000
 Tần số lấy mẫu: fs = 8000
t = np.arange(1000)/8000
s1 = 5*np.sin(2*np.pi*1000*t)
s2 = np.sin(2*np.pi*50*t)
sB = s1*s2
plt.plot(t, sB)
plt.xlabel('Thời gian (s)')
plt.ylabel('Biên độ (V)')

May 31, 2024 8


THỰC HÀNH XỬ LÝ TÍN HIỆU SỐ

Bài 4f: Vẽ lại tín hiệu s1, s2, sA và sB trên cùng hình vẽ sử dụng plt.subplot()
plt.subplot(4, 1, 1)
plt.plot(t, s1)
plt.subplot(4, 1, 2)
plt.plot(t, s2)
plt.subplot(4, 1, 3)
plt.plot(t, sA)
plt.subplot(4, 1, 4)
plt.plot(t, sB)

May 31, 2024 9


THỰC HÀNH XỬ LÝ TÍN HIỆU SỐ

Bài 5a: Vẽ tín 𝑠(𝑡) = cos(2𝜋𝑡) + cos(8𝜋𝑡) + cos(12𝜋𝑡) 𝑣à 𝑡í𝑛 ℎ𝑖ệ𝑢 𝑠𝑎(𝑡) = 3 ∗
cos(2𝜋𝑡) trên cùng 1 hình với tần số fs = 5 Hz, số mẫu N = 100. So sánh tần số của
s và sa?
fs = 10
N = 100
t = np.arange(N)/fs
#t = np.linspace(0, 20, 100, endpoint=Flase)
s = np.cos(2*np.pi*t) + np.cos(8*np.pi*t) + np.cos(12*np.pi*t)
sA = 3*np.cos(2*np.pi*t)
plt.subplot(2, 1, 1)
plt.plot(t, s)
plt.subplot(2, 1, 2)
plt.plot(t, sA)

May 31, 2024 10


THỰC HÀNH XỬ LÝ TÍN HIỆU SỐ

Bài 5b: Thay đổi fs từ 5Hz lần lượt sang 10Hz và 50Hz. Vẽ lại tín hiệu s và sa. Nhận
xét?
fs_list = [5, 10, 50] #tạo danh sách các tần số fs cần thử
N = 100

plt.figure(figsize=(12, 9)) #tạo hình với độ rộng 12inch và cao 9inch

for i, fs in enumerate(fs_list, 1): #vòng lặp for để lặp qua mỗi giá trị fs tương
ứng
t = np.arange(N) / fs
s = np.cos(2 * np.pi * t) + np.cos(8 * np.pi * t) + np.cos(12 * np.pi * t)
sA = 3 * np.cos(2 * np.pi * t)

plt.subplot(len(fs_list), 2, 2*i-1)
plt.plot(t, s, label=f's, fs={fs} Hz')
plt.xlabel('Thời gian (s)')
plt.ylabel('Biên độ')
plt.legend()
plt.grid(True)

plt.subplot(len(fs_list), 2, 2*i)
plt.plot(t, sA, label=f'sA, fs={fs} Hz', color='r')

May 31, 2024 11


THỰC HÀNH XỬ LÝ TÍN HIỆU SỐ

plt.xlabel('Thời gian (s)')


plt.ylabel('Biên độ')
plt.legend()
plt.grid(True)

plt.tight_layout() #tự động điều chỉnh khoảng cách giữa các đồ thị để chúng không
chồng lên nhau
plt.show() #hiển thị tất cả các đồ thị
#nhận xét: khi tăng tần số lấy mẫu fs, độ phân giải của tín hiệu theo thời gian
tăng lên, cho phép ta quan sát chi tiết hơn các thành phần tần số cao.
#fs quá thấp có thể gây ra hiện tượng aliasing, làm cho các thành phần
tần số cao giả mạo thành các tần số thấp hơn, làm biến dạng tín hiệu.
#điều kiện: fs>2fmax (nguyên tắc Nyquist) để tránh hiện tượng
aliasing(giả mạo tín hiệu) và thu được tín hiệu chính xác.
#do fmax= 6 nên fs đề cử sẽ >12, khi đó ta sẽ thấy được sự khác nhau rõ
rệt giữa các tín hiệu

May 31, 2024 12


THỰC HÀNH XỬ LÝ TÍN HIỆU SỐ

Bài 6b: Thay đổi tần số của tín hiệu bài 4a sang 392Hz (Note G4) và 523.25Hz
(Note C5). Nhận xét
import IPython.display as ipd #Thêm thư viện để play Audio
fs = 44100 # tần số lấy mẫu
t = 1.5 # thời gian của âm thanh
f = 392 # Tần số của tín hiệu
n = np.linspace(0, t, int(t*fs), endpoint=False) # tạo biến thời gian rời rạc
x = np.sin(2*np.pi*f*n) # tạo sóng sin 392 Hz
ipd.Audio(x, rate=fs) #Phát Audio
#nhận xét: dải âm thanh thấp (có cảm giác trầm) hơn so với của tần số 440hz và
392hz

May 31, 2024 13

You might also like