1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Hệ thống tuyến tính bất biến rời rạc Ứng dụng của xử lý tín hiệu trong tạo hiệu Ứng Âm thanh

24 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Hệ thống tuyến tính bất biến rời rạc ứng dụng của xử lý tín hiệu trong tạo hiệu ứng âm thanh
Tác giả Uông Gia Huy
Người hướng dẫn ThS. Lê Quốc Anh
Trường học Đại học Quốc gia Hà Nội, Trường Đại học Công nghệ
Chuyên ngành Kỹ thuật Điện – Xử lý Tín hiệu
Thể loại Báo cáo thực hành
Năm xuất bản 2025
Thành phố Hà Nội
Định dạng
Số trang 24
Dung lượng 1,28 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Nhận xét: các kết quả trên MATLAB đúng so với tính toánBài 2: Xác định tính ổn định của các hệ thống sau.. Hãy: • Vẽ đáp ứng xung hn so sánh với kết quả tính bằng tay • Xác định các vect

Trang 1

ĐẠI HỌC QUỐC GIA HÀ NỘI

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

Hà Nội, 2025

Trang 2

CHƯƠNG 4: HỆ THỐNG TUYẾN TÍNH BẤT BIẾN RỜI RẠCBài 1: Vẽ đáp ứng lối ra của hệ thống trong các trường hợp sau:

stem(n1, y1, 'filled');

title('Dap ung dau ra: x(n)={-1,-2,3,4,2,9}, h(n)={1,3,2,1}');

xlabel('n'); ylabel('y_1(n)'); grid on;

stem(n2, y2, 'filled');

title('Dap ung dau ra: x(n)={1,2,3,4,5}, h(n)={6,7,8,9}');

xlabel('n'); ylabel('y_2(n)'); grid on;

stem(ny3, y3, 'filled');

title('Dap ung dau ra: x(n)=(0.8)^n u(n), h(n)=(-0.9)^n u(n)');

xlabel('n'); ylabel('y_3(n)'); grid on;

stem(n_y4, y4, 'filled');

title('Dap ung dau ra: x(n)=4^n [u(n+1)-u(n-4)], h(n)=u(n)-u(n-5)');

xlabel('n'); ylabel('y_4(n)'); grid on;

Kết quả:

Trang 3

Nhận xét: các kết quả trên MATLAB đúng so với tính toán

Bài 2: Xác định tính ổn định của các hệ thống sau Vẽ đồ thị biểu diễn đáp ứng xung Có thể rút ra kết luận gì?

Trang 4

figure; stem(n3, h3, 'filled'); grid on;

title('h(n)=2 sin(0.01\pi n) cos(0.5\pi n)');

%% Truong hop 4: gia su causal

Bài 3: Xác định đáp ứng lối ra hệ thống TTBB trong các trường hợp sau:

• y(n) − 0.5y(n − 1) + 0.25y(n−2) = x(n) + 2x(n−1) + x(n−3) với x(n) = cos(n./3)u(n), y(−1) = 1 vày(−2) = 0.5

• y(n)−2y(n−1) + y(n−2) = x(n) + x(n−1) với x(n) = u(n), y(−1) = −1 và y(−2) = −2

Trang 5

% Điều kiện ban đầu: y(-1)=1, y(-2)=0.5

% Dùng mảng dịch: index i corresponds to y(n) with n = i-3

y1_full = zeros( , N + 3); % positions: 1->y(-2), 2->y(-1), 3->y(0),

y1_full(1) = 0.5; % y(-2)

y1_full(2) = 1 % y(-1)

for n_idx = 0:N

idx = n_idx + 3; % index in y1_full for y(n)

y_nm1 = y1_full(idx- 1); % y(n-1)

y_nm2 = y1_full(idx- 2); % y(n-2)

stem(n, y1, 'filled'); grid on;

title('Đáp ứng hệ: Trường hợp 1'); xlabel('n'); ylabel('y_1(n)');

subplot( , , );

stem(n, y2, 'filled'); grid on;

title('Đáp ứng hệ: Trường hợp 2'); xlabel('n'); ylabel('y_2(n)');

%% - So sánh nghiệm đóng cho trường hợp

2 -y2_closed = n.^2 + 3*n + 1; % nghiệm đóng

figure;

stem(n, y2, 'filled'); hold on;

plot(n, y2_closed, 'r ', 'LineWidth',1.5);

grid on;

legend('Từ đệ quy','Nghiệm đóng n^2+3n+1');

title('So sánh: Trường hợp 2');

xlabel('n'); ylabel('y_2(n)');

Kết quả:

Trang 6

Nhận xét: kết quả đầu ra giống với kết quả tính toán trực tiếp.

Bài 4: Cho hệ thống TTBB nhân quả có

H(z) = (z + 2)

(z − 0.5) Hãy:

• Vẽ đáp ứng xung h(n) (so sánh với kết quả tính bằng tay)

• Xác định các vector a, b

• Vẽ sơ đồ điểm cực, điểm không

• Hệ thống có ổn định không? Nếu có, xác định đáp ứng tần số và vẽ đáp ứng biên độ của hệ thống

• Vẽ đáp ứng lối ra nếu tín hiệu lối vào là x(n) = 2(0.9)nu(n)

imp = [1 zeros( , N)]; % delta[n]

h = filter(b, a, imp); % đáp ứng xung

Trang 7

stem(n, h, 'filled'); hold on;

plot(n, h_theory, 'r ','LineWidth',1.5);

grid on;

legend('Tính bằng filter','Công thức tay');

title('So sánh đáp ứng xung');

stem(n_x, y, 'filled'); grid on;

title('Đáp ứng lối ra y(n) với x(n)=2(0.9)^n u(n)');

xlabel('n'); ylabel('y(n)');

Kết quả:

Trang 8

Nhận xét: kết quả thu được giống với tính tay và hệ thống ổn định vì đồ thị cho thấy điểm cực nằm trong vòng

tròn đơn vị trong khi hệ thống là nhân quả

Bài 5: Cho hệ thống TTBB nhân quả có

y(n) − 4y(n − 1) + 3y(n − 2) = x(n) + x(n − 1)

Hãy:

• Vẽ đáp ứng xung h(n) (so sánh với kết quả tính bằng tay)

• Vẽ sơ đồ điểm cực, điểm không

• Hệ thống có ổn định không? Nếu có, xác định đáp ứng tần số và vẽ phổ biên độ của hệ thống

• Vẽ đáp ứng lối ra nếu tín hiệu lối vào là

x(n) = 2nu(n)

• Vẽ đáp ứng lối ra nếu tín hiệu lối vào là

x(n) = cos πn

3  u(n)

Trang 9

stem(n, h, 'filled'); hold on;

plot(n, h_theory, 'r ','LineWidth',1.5);

legend('Tính bằng filter','Công thức tay');

title('So sánh đáp ứng xung');

plot(w, abs(H)); grid on;

title('|H(e^{j\omega})| (đáp ứng biên độ)');

xlabel('\omega (rad/sample)'); ylabel('|H|');

stem(n1, x1, 'filled'); hold on;

stem(n1, y1, 'filled');

stem(n2, x2, 'filled'); hold on;

stem(n2, y2, 'filled');

legend('x(n)=cos(\pi n/3)','y(n)');

title('Đáp ứng ra với x(n)=cos(\pi n/3)u(n)');

xlabel('n'); grid on;

Kết quả:

Trang 10

Nhận xét: kết quả giống so với tính tay là hệ thống không ổn định vì có điểm cực nằm ngoài đường tròn đơn

vị như trên đồ thị trong khi hệ thống là nhân quả

Trang 11

stem(n, h, 'filled'); grid on;

title('Đáp ứng xung h(n) = 2n+1'); xlabel('n'); ylabel('h(n)');

% 3 Vẽ |H(e^{j�})|

[H, w] = freqz(b, a, 512);

figure;

plot(w, abs(H)); grid on;

title('|H(e^{j\omega})|'); xlabel('\omega'); ylabel('|H|');

% 4 Input step u(n)

title('Output với x(n)=u(n)');

% 5 Input sinusoid 2*sin(0.01*pi*n)

n2 =-200:200;

x2 = 2*sin(0.01*pi*n2);

% vì hệ causal, chỉ dùng n>=0: shift và zero-pad

x2_pos = zeros(size(n2));

Trang 12

Code MATLAB:

%% Tham số

N_h = 100;

N_y = 200;

Trang 13

stem(n_h, h, 'filled'); grid on;

title('Đáp ứng xung h(n)'); xlabel('n'); ylabel('h(n)');

%% 2 Kiểm tra ổn định (vẽ cực-zero)

figure;

zplane(b, a); grid on;

title('Sơ đồ cực-zero của H(z)');

%% 3 Đáp ứng tần số |H(e^{j�})|

[H, w] = freqz(b, a, 512);

figure;

plot(w, abs(H)); grid on;

title('|H(e^{j\omega})|'); xlabel('\omega (rad/sample)'); ylabel('|H|');

%% 4 Tạo tín hiệu vào x(n)

plot(n_y, x_vals); grid on;

title('Tín hiệu vào x(n)');

xlabel('n'); ylabel('x(n)');

subplot( , , );

plot(n_y, y); grid on;

title('Đáp ứng ra y(n) với x(n) = [5+3cos(0.2\pi n)+4 sin(0.6\pi n)]u(n)');

xlabel('n'); ylabel('y(n)');

%% 6 (Tùy chọn) Tách từng thành phần bằng cách xử lý riêng

% Thành phần hứng với từng phần

x_const = 5*(n_y>=0); % 5u(n)

x_cos = 3*cos(0.2*pi*n_y).*(n_y>=0);

x_sin = 4*sin(0.6*pi*n_y).*(n_y>=0);

y_const = filter(b,a,x_const);

y_cos = filter(b,a,x_cos);

y_sin = filter(b,a,x_sin);

figure;

plot(n_y, y_const, 'LineWidth', ); hold on;

plot(n_y, y_cos, ' ', 'LineWidth', );

plot(n_y, y_sin, ':', 'LineWidth', );

legend('5u(n)','3cos(0.2\pi n)u(n)','4sin(0.6\pi n)u(n)');

title('Các thành phần đầu ra riêng biệt');

xlabel('n'); grid on;

Kết quả:

Trang 14

Nhận xét: đáp ứng xung h(n) cho thấy hệ thống là nhân quả và đồ thị điểm cực-zero cho thấy các điểm cực

đều nằm trong đường tròn đơn vị nên hệ thống ổn định

Bài tập thêm: Cho hệ thống LTI nhân quả mô tả bởi phương trình sai phân:

y(n) = 0.3y(n − 1) − 0.2y(n − 5) + x(n) + 3x(n − 1) + x(n − 2) − 5x(n − 4)

1 Tính và vẽ đáp ứng xung của hệ thống với −100 ≤ n ≤ 100? Vẽ giản đồ điểm cực điểm không của hệthống? Có kết luận gì về tính chất của hệ thống?

2 Xác định đáp ứng đầu ra của hệ thống khi biết tín hiệu vào:

Trang 15

stem(n,h_full,'filled'); grid on;

title('Đáp ứng xung h(n)'); xlabel('n'); ylabel('h(n)');

poles = roots(a);

disp('Cực của hệ:'); disp(poles);

if all(abs(poles)<1)

Trang 16

Nhận xét: từ đồ thì h(n) cho thấy hệ thống là nhân quả , đồ thị cực- zero cho thấy tất cả các điểm cực đều

nằm trong đường tròn đơn vị nên hệ thống ổn định

CHƯƠNG 6: ỨNG DỤNG CỦA XỬ LÝ TÍN HIỆU TRONG TẠO HIỆU ỨNG ÂM THANH

Bài 1: Sử dụng Matlab/simulink thực hiện hiệu ứng tiếng vọng

1 Đọc file âm thanh bằnglệnh: Có thể lấy file âm thanh ở đây odonnellyougogirl.wav) [x, nellyougogirl.wav’) hoặc [x, fs]=audioread(’odonnellyougogirl.wav.wav’) [tuỳ theo versionMatlab] và kiểmtra giá trị tần số lấy mẫu fscủa nó bằng bao nhiêu?

fs]=wavread(’odon-2 Dùng lệnh sound để nghe file âm thanh trên

3 Cấu trúc trên dùng bộ trễ z−4000 Vậy tín hiệu phản xạ bị trễ so với tín hiệu gốc bao nhiêu?

4 Thực hiện trên code Matlab sử dụng mối quan hệ: y(n) = x(n) + alphax(n−D), tính lối ra tại thời điểm

n, alpha là hệ số suy hao, và D là độ trễ

Trang 17

5 Thực hiện lại trên Simulink và nghe thử âm thanh thu được.

6 Thay đổi giá trị của khối delay, nghe thử âm thanh lối ra

7 Hoàn thiện mô hình hiệu ứng echo với nhiều đường phản hồi hơn Dựa trên bảng tham số ở bên dưới, thiết

kế mô hình echo2 tương ứng Ghi lại kết quả và trình bày trong báo cáo kết quả như trên hình 6.3 Xác địnhhàm truyền H(z) của hệ thống Hệ thống có đáp ứng xung hữu hạn hay vô hạn Tính lại đáp ứng lối ra vớihàm truyền trên Nghe thử âm thanh thu được

8 Thử thu âm thanh lối vào dùng mic và hàm audio recorder và nghe thử âm thanh có echo tương ứng

Code MATLAB:

%% 1 Đọc file âm thanh

[x, fs] = audioread('audioclip1.wav');

% Kiểm tra tần số lấy mẫu

disp(['Tần số lấy mẫu của file âm thanh là: ',

disp(['Tín hiệu phản xạ bị trễ so với tín hiệu gốc ',

num2str(delay_time), ' giây']);

% Nghe tín hiệu phản xạ

sound(reflected_signal_delay, fs);

pause(length(x)/fs + 1);

%% 4 Công thức echo: y(n) = x(n) + alpha * x(n - D)

alpha = 0.6; % hệ số suy hao

y = x;

y(1+delay_samples:end) = x(1+delay_samples:end) + alpha * x(1 end-delay_samples);

% Nghe tín hiệu có echo

disp('Phát tín hiệu có echo với alpha=0.6 ');

sound(y, fs);

pause(length(y)/fs + 1);

%% 5 Thử nhiều giá trị delay và alpha

delays = [2000, 4000, 8000]; % số mẫu trễ

alphas = [0.3, 0.6, 0.9];

for d = 1 length(delays)

for a = 1 length(alphas)

delay_samples = delays(d);

alpha = alphas(a);

y = x;

y(1+delay_samples:end) = x(1+delay_samples:end) + alpha * x(1 end-delay_samples);

disp(['Echo với delay = ' num2str(delay_samples/fs) ' s, alpha = ' num2str(alpha)]);

Trang 18

for i = 1 size(echo_params,1

delay_samples = round(echo_params(i 1 * fs);

pause(length(y)/fs + 1);

%% 7 Thu âm từ micro và thêm echo

recObj = audiorecorder(fs, 16, 1); % fs Hz, 16-bit, mono

disp('Bắt đầu thu âm 5 giây ');

recordblocking(recObj, 5);

disp('Kết thúc thu âm.');

myRecording = getaudiodata(recObj);

% Thêm echo đơn giản vào thu âm

delay_samples = round(0.3 * fs); % 0.3s trễ

alpha = 0.6;

y_rec = myRecording;

y_rec(1+delay_samples:end) = myRecording(1+delay_samples:end) + alpha * myRecording(1 end-delay_samples);

disp('Nghe lại tín hiệu thu âm có echo ');

sound(y_rec, fs);

Đọc file và kiểm tra tần số lấy mẫu ta có kết quả:

Trang 19

Thực hiện chương trình cấu trúc trên dùng bộ trễ z−4000ta có kết quả thời gian trễ:

Trang 20

Thực hiện trên code Matlab sử dụng mối quan hệ: y(n) = x(n) + alphax(n−D)

1 Kết quả sau khi chạy chương trình ta có thể nghe được sau một khoảng thời gian đúng với thời gian trễ cótiếng vọng lại với biên độ thấp hơn

Thực hiện lại trên Simulink và nghe thử âm thanh thu được.

Trang 21

=> Kết quả: Khi nghe trong khoảng 10 giây ta có thể nghe được tiếng được vọng lại nhiều lần.

Thay đổi giá trị của khối delay, nghe thử âm thanh lối ra.

=> Kết quả: Khi ta tăng delay tiếng vọng sẽ đến muộn hơn, khi ta giảm giá trị delay tiếng vọng sẽ đến sớm hơn

Hoàn thiện mô hình hiệu ứng echo với nhiều đường phản hồi hơn Dựa trên bảng tham số ở bên dưới, thiết kế môhình echo2 tương ứng Ghi lại kết quả và trình bày trong báo cáo kết quả như trên hình 6.3 Xác định hàm truyềnH(z) của hệ thống Hệ thống có đáp ứng xung hữu hạn hay vô hạn Tính lại đáp ứng lối ra với hàm truyền trên

Nghe thử âm thanh thu được

SIGNAL DELAY GAIN Giá trị Dk (fs = 11025)

Delayed 1 1/6 5/6 16fs= 1837.5Delayed 2 1/3 2/3 13fs= 3675

Trang 22

Bài 2:

1 Sử dụng Simulink, thực hiện sơ đồ mô phỏng hiệu ứng tiếng ngân như trên Hình 6.6

2 Sử dụng file âm thanh ’guitar1.wav’ cho bài mô phỏng Nghe thử âm thanh thu được

3 Cấu trúc trên dùng bộ trễ z−4000 Thử tăng/giảm giá trị của bộ trễ và nhận xét Việc chọn độ trễ có cần lưu

ý gì không?

4 Chuyện gì xảy ra nếu thay đổi Gain lớn hơn/nhỏ hơn/bằng1?

5 Tham số nào trong cấu trúc trên xác định thời gian âm thanh sẽ ”duy trì” sau khi bạn dừng tín hiệu đầu vào

disp(['Tín hiệu phản xạ bị trễ so với tín hiệu gốc ',

num2str(delay_time), ' giây']);

% Nghe tín hiệu phản xạ với giá trị trễ mặc định

sound(reflected_signal_delay, fs);

% Thay đổi giá trị trễ

new_delay_samples = 2000; % Giá trị mới

new_reflected_signal_delay = circshift(x, new_delay_samples);

% Nghe tín hiệu phản xạ với giá trị trễ mới

sound(new_reflected_signal_delay, fs);

% Thay đổi Gain

gain = 0.5; % Gain nhỏ hơn 1

reflected_signal_delay_low_gain = gain * reflected_signal_delay;

sound(reflected_signal_delay_low_gain, fs); % Nghe âm thanh với gain nhỏ hơn 1

gain = 2 % Gain lớn hơn 1

reflected_signal_delay_high_gain = gain * reflected_signal_delay;

sound(reflected_signal_delay_high_gain, fs); % Nghe âm thanh với gain lớn hơn 1

Sơ đồ Simulink:

Trang 23

Sử dụng file âm thanh ’guitar1.wav’ cho bài mô phỏng Nghe thử âm thanh thu được:

1 Kết quả: Khi nghe ta nghe thấy tiếng đàn guitar gốc và một chuỗi tiếng lặp lại mờ dần

Nhận xét:

1 Thay đổi giá trị của bộ trễ sẽ ảnh hưởng đến thời điểm và cường độ của âm thanh phản xạ

2 Thay đổi gain sẽ ảnh hưởng đến cường độ của âm thanh phản xạ

3 Thời gian ”duy trì” của âm thanh sau khi dừng tín hiệu đầu vào hệ thống chủ yếu phụ thuộc vào độ dài của

bộ trễ Trong trường hợp này, tham số quan trọng là số lượng mẫu trong bộ trễ

Bài 3: Hoàn thiện mô hình hiệu ứng tiếng ngân với nhiều đường phản hồi hơn như hình 6.7 Thay đổi các âm thanh vào và nghe thử âm thanh có hiệu ứng tương ứng Sơ đồ kết nối:

Kết quả: Ta nghe được tiếng guitar mượt hơn so với bài 2 Nhận xét: Sự kết hợp của 3 chu kỳ trễ khác nhau

tạo ra một tiếng ngân có đuôi, phức tạp hơn, giống với âm thanh thực tế hơn

Trang 24

Bài 4: Sau khi chạy mã ta có GUI:

Hiểu cơ bản về cấu trúc của Schoroeder Reverb: Cấu trúc bao gồm 2 phần chính:

1 Các bộ lọc lược song song( Parallel Comb Filters): Mục đích tạo ra các phản xạ ban đầu và sự kéo dài của

âm thanh => giống với cấu trúc của bài 3

2 Các bộ lọc thông toàn phần nối tiếp(Series All-Pass Filters): Tăng cường sự khuếch tán của âm thanh Tạomột đuôi ngân nghe mượt hơn, tạo sự chân thật

Thử các hiệu ứng trong GUI:

1 Room size(0.2), stereo width(0.8), wet/dry mix(0.3): Khi nghe ta thấy tiếng âm ngắn, tạo cảm giác như trongmột phòng ngủ nhiều đồ

2 Room size(0.95), stereo width(0.1), wet/dry mix(0.4): Khi nghe ta thấy tiếng ngân dài, vang vọng, giốngnhư ở trong không gian rộng

3 Room size(1), stereo width(0), wet/dry mix(1.0): Khi nghe âm thanh dường như trở nên đóng băng, ngânmãi, khác biệt so với âm thanh gốc

Ngày đăng: 24/10/2025, 20:44

HÌNH ẢNH LIÊN QUAN

Sơ đồ Simulink: - Hệ thống tuyến tính bất biến rời rạc Ứng dụng của xử lý tín hiệu trong tạo hiệu Ứng Âm thanh
imulink (Trang 22)

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w