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

Thí nghiệm xử lý tín hiệu số

27 1 0

Đ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 đề Thí Nghiệm Xử Lý Tín Hiệu Số
Tác giả Ts. Phạm Hồng Thịnh
Trường học Trường Đại Học Quy Nhơn
Chuyên ngành Điện Tử - Viễn Thông
Thể loại bài giảng
Định dạng
Số trang 27
Dung lượng 0,98 MB

Nội dung

Giới thiệu matlab Matlab Matrix Laboratory là mơi trường tính tốn đa ứng dụng, được tính tốn để thực hiện nhanh các phép toán ma trận.. Matlab cho phép thực hiện dễ dàng các tính toán số

Trang 1

TRƯỜNG ĐẠI HỌC QUY NHƠN

KHOA KỸ THUẬT VÀ CÔNG NGHỆ

-  -

BÀI GIẢNG

THÍ NGHIỆM XỬ LÝ TÍN HIỆU SỐ

Biên soạn: TS Phạm Hồng Thịnh

Bộ môn: Điện tử - Viễn thông

Tài liệu lưu hành nội bộ

Trang 2

BÀI 1 MÔ PHỎNG HỆ THỐNG VÀ TÍN HIỆU RỜI

RẠC BẰNG MATLAB

1 Giới thiệu matlab

Matlab (Matrix Laboratory) là môi trường tính toán đa ứng dụng, được tính toán để thực hiện nhanh các phép toán ma trận Matlab hỗ trợ nhiều hàm phục vụ cho nhiều lĩnh vực khác nhau Matlab cho phép thực hiện dễ dàng các tính toán số và đồ họa.

Khi khởi động Matlab, giao diên làm việc (command window) sẽ xuất hiện như hình:,

- Cửa sổ lệnh (command window): thực thi các lệnh.

- Không gian biến (workspace): hiển thị các biến được định nghĩa.

- Các lệnh đã thực hiện (command history): hiển thị các lệnh đã sử dụng

Để hiểu rõ cách sử dụng một hàm, có thể sử dụng lệnh >>help và hàm tương ứng Matlab có thể thực thi các lệnh ở cửa sổ lệnh từ dấu nhắc của cửa sổ lệnh

Ví dụ1: Các lệnh vẽ đồ thị tín hiệu sin

>> t = 0:0.01:2; % cho t thay giá trị từ 0 đến 2, mỗi giá trị cach nhau 0.01

>> x = sin(2*pi*t); % tính giá trị hàm (2 pi t) cho từng giá trị t

>> plot(t,x,’b’); % Vẽ đồ thị đường màu xanh

>> xlabel(’t in sec’); ylabel(’x(t)’); % Đặt tên trục x và trục y

>> title(’Plot of sin(2\pi t)’); % Tiêu đề đồ thị

Ví dụ 2: Tạo hàm m cộng hai tín hiệu sin có tần số và biên độ khác nhau

function y=sumsin(A1, f1, A2, f2, Time, fs)

% Cong 2 tin hieu sin co bien do va tan so khac nhau

% Input

% A1, f1: bien do va tan so tin hieu sin 1

% A2, f2: bien do va tan so tin hieu sin 2

% Time (giay) khoang thoi gian can tinh

% fs (Hz): tan so lay mau

2 Thiết kế bộ lọc số bằng công cụ SPTool

Trang 3

SPTool là một công cụ có giao diện tương tác dùng cho xử lý số tín hiệu Công

cụ này có thể được sử dụng để phân tích tín hiệu, thiết kế các bộ lọc, phân tích các

bộ lọc, lọc tín hiệu và phân tích phổ của tín hiệu

Để khởi động SPTool, từ dấu nhắc lệnh của MATLAB, nhập lệnh >> sptool Khi đó, giao diện của SPTool sẽ xuất hiện

Khi mới mở SPTool, nó chứa một tập hợp các tín hiệu, bộ lọc và phổ mặc định

Trên giao diện của SPTool, có 3 cột: Signals, Filters và Spectra Dưới mỗi cột có các nút sử dụng cho cột đó Cột Signals hiển thị các tín hiệu, cột Filters hiển thị các bộ lọc và cột Spectra hiển thị các phổ trong workspace (vùng làm việc) của

SPTool

Các tín hiệu, bộ lọc hoặc phổ trong workspace của MATLAB có thể được đưa

vào SPTool bằng lệnh Import trong menu File của SPTool Các tín hiệu, bộ lọc

hoặc phổ được tạo ra hoặc được import vào SPTool tồn tại dưới dạng các cấu trúc của MATLAB Để lưu lại các tín hiệu, bộ lọc và phổ đã tạo ra hoặc chỉnh sửa

trong SPTool, sử dụng lệnh Export trong menu File, chúng cũng sẽ được lưu lại

dưới dạng các cấu trúc MATLAB

Để bắt đầu thiết kế một bộ lọc mới, các bạn hãy nhấn vào nút New ngay dưới cột Filter Khi đó, giao diện Filter Designer dùng để thiết kế bộ lọc như sau sẽ

xuất hiện Filter Designer cung cấp một môi trường đồ họa tương tác để thiết kế các bộ lọc số IIR hoặc FIR dựa trên các tiêu chuẩn do người dùng xác định

- Các loại bộ lọc có thể thiết kế: Thông thấp, thông cao, thông dải, chắn dải

- Các phương pháp thiết kế bộ lọc FIR: Equiripple, Least squares, Window

- Các phương pháp thiết kế bộ lọc IIR: Butterworth, Chebyshev loại I,

Chebyshev loại II, Elliptic

3 Tiến hành thí nghiệm

Thí nghiệm 1 Viết chương trình con tạo một dãy thực ngẫu nhiên xuất phát từ n1

đến n2 và có giá trị của biên độ theo phân bố GAUSS với trung bình bằng 0,

phương sai bằng 1 Yêu cầu chương trình con có các tham số đầu vào và đầu ra được nhập theo lệnh với cú pháp :[x,n] = randnseq(n1,n2);

Thí nghiệm 2 Cho dãy x(n) = {1,2,3,4,5,6,7,6,5,4,3,2,1} Viết chương trình con

thể hiện trên đồ thị các dãy :

Trang 4

Thí nghiệm 3 Cho hệ thống được mô tả bởi phương trình sai phân tuyến tính hệ

số hằng như sau : y(n) – y(n – 1) + 0.9y(n – 2) = x(n)

Sử dụng hàm filter của Matlap, viết chương trình thực hiện các công việc sau:

title('Step Response'); xlabel('n'); ylabel('s(n)');

Thí nghiệm 4 Thiết kế một bộ lọc FIR chắn dải bằng SPTool

Bộ lọc, được thiết kế bằng phương pháp cửa sổ Kaiser, với các thông số sau:

Chiều dài của đáp ứng xung: N = 89 (MATLAB hiển thị bậc bộ lọc bằng 88) Tần số trung tâm: 2700 Hz

Tần số cắt: 2500 Hz và 2900 Hz

Giá trị của  = 4

Tần số lấy mẫu 8000 Hz

Các bước thiết kế như sau:

1 Khởi động SPTool Dưới cột Filters, nhấn nút New để mở cửa sổ Filter

Designer

2 Trong giao diện của Filter Designer:

a Trong text box Filter: Tên bộ lọc được tự đặt (ở đây là filt1) Tên này có

thể thay đổi sau này

b Nhập các thông số thiết kế vào:

i Sampling Frequency = 8000

ii Algorithm: Kaiser Window FIR

iii Bỏ chọn ở check box Minimum Order (nếu chọn thì sẽ thiết kế bộ lọc

có bậc tối thiểu)

iv Filter Order = 88, Type = Bandstop, Fc1 = 2500, Fc2 = 2900, Beta =4

c Nhấn Apply Khi đó đáp ứng tần số của bộ lọc thiết kế sẽ được hiển thị

3 Trở về cửa sổ SPTool, trong cột Filters sẽ xuất hiện thêm một dòng filt1

[design] Đây chính là bộ lọc vừa thiết kế Sau này, nếu muốn sửa đổi thiết

kế, chọn lại tên bộ lọc và nhấn nút Edit ở phía dưới Để dễ nhớ, ta sẽ thay đổi

tên bộ lọc trên thành bs2700 bằng cách chọn Edit Name…filt1 [design] Trong cửa sổ mới xuất hiện, nhập tên mới

4 Báo cáo thí nghiệm

Trang 5

BÀI 2 THIẾT KẾ BỘ LỌC FIR THÔNG THẤP BẰNG PHƯƠNG

PHÁP XẤP XỈ TỐI ƯU

1 Bài toán thiết kế

Thiết kế bộ chuyển đổi Hilbert theo cấu trúc FIR bằng phương pháp xấp xỉ tối

ưu cân bằng gợn sóng trên dải tần cho trước (0.1    0.9  )

2 Các bước tiến hành thiết kế

* Bước 1: Nhập các chỉ tiêu kỹ thuật của bộ lọc f, m, N Dựa vào dải tần đã cho

xác định bậc N và đáp ứng biên độ mong muốn m tại mỗi cạnh dải thích hợp

Chọn N = 30

Đối với bộ biến đổi Hilbert giá trị m được chọn là [1 1]

* Bước 2: Chọn kiểu bộ lọc FIR thích hợp để thiết kế

Đối với bộ biến đổi Hilbert lý tưởng đáp ứng tần số có dạng:

j

j j

d

je

je e

n n

 Sử dụng bộ lọc FIR pha tuyến tính loại 3 để thiết kế bộ biến đổi là thích

hợp nhất Bởi vì hệ thống FIR loại 3 có đáp ứng xung đơn vị phản đối xứng, M lẻ

Đáp ứng tần số có giá trị bằng 0 tại  = 0 và  =  Ngoài ra, đáp ứng biên độ của

nó có giá trị bằng 1 trong một vùng tần số xác định giống với đáp ứng biên độ của

bộ Hilbert lý tưởng

*Bước 3: Tìm đáp ứng xung của bộ biến đổi Hilbert lý tưởng

Đáp ứng xung lý tưởng được tính theo công thức (*)

*Bước 4: Dùng thuật toán Parks-McClellan để xác định đáp ứng xung h(n) của bộ

biến đổi cần thiết kế Thuật toán này được tích hợp trong hàm Remez

*Bước 5: Tìm đáp ứng biên độ - tần số của bộ biến đổi Hilbert thực tế h(n), hd(n)

Hr(), Hr()

3 Chương trình thiết kế bộ lọc số

Chương trình được viết và chạy trên nền Matlab 7.0 Trong chương trình sử

dụng một số hàm hỗ trợ có sẵn của Matlab cho xử lý tín hiệu số và một số hàm

thêm vào được tham khảo từ tài liệu

Các hàm liên quan:

[h]=remez(N,f,n,ftype): tìm đáp ứng xung của bộ lọc thực tế theo thuật toán

Parks-McClellan

h : là các hệ số bộ lọc có chiều dài M=N+1

Trang 6

N : ký hiệu bậc của bộ lọc

f : một mảng ký hiệu các cạnh dải tính theo đơn vị của π, 0  f  1 Đối với

bộ biến đổi Hilbert tần số thấp nhất không được = 0 và tần số cao nhất không được

bằng 1

m : đáp ứng biên độ mong muốn ở mỗi f Chiều dài của mảng f và m là giống nhau và phải có số phần tử là chẵn

- ftype: loại bộ lọc cần thiết kế

- function [db,mag,pha,grd,w] = freqz_m(h, [1]): tính đáp ứng tần số của bộ

lọc có đáp ứng xung h

- function [Hr,w,c,L]=Hr_Type3(h): hàm này sẽ tính đáp ứng biên độ Hr(w)

theo đáp ứng xung h(n) của bộ lọc FIR loại 3

function [db,mag,pha,grd,w] = freqz_m(b,a);

% Modified version of freqz subroutine

%

% [db,mag,pha,grd,w]=freqz_m(b,a);

% db=Relative magnitude in dB computed over 0 to pi radians

% mag=absolute magnitude computed over 0 to pi radians

% grd= Group delay over 0 to pi radians

% w=501 frequency samples between 0 to pi radians

% b=numerator polynomial of H(z) (for FIR: a=h)

% a=demonitor polynomial of H(z) (for FIR: a=[1])

% w=frequencies between [0 pi] over which Hr is computed

% c= Type-3 LP filter coefficients

% L=Order of Hr

% h=Type-3 LP impulse response

M=length(h);

L=(M-1)/2;

Trang 7

fprintf('\n\t\t\t\t QUY NHON 05/2021');

subplot(2,2,1); stem(n,hd); title('Ideal Impulse Response');

xlabel('n'); ylabel('hd(n)'); axis([0 N -0.8 0.8])

set(gca,'XTickMode','manual','XTick',[0,N])

set(gca,'YTickMode','manual','YTick',[-0.8:0.2:0.8])

subplot(2,2,3); stem(n,h); title('Actual Impulse Response');

xlabel('n'); ylabel('h(n)'); axis([0 N -0.8 0.8])

set(gca,'XTickMode','manual','XTick',[0,N])

set(gca,'YTickMode','manual','YTick',[-0.8:0.2:0.8])

subplot(2,2,2); plot(w/pi,mag); title('Magnitude Response');

xlabel('frequency in pi units'); ylabel('|Hr|')

Trang 8

set(gca,'XTickMode','manual','XTick',[0,f,1])

set(gca,'YTickMode','manual','YTick',[-1,1]);grid

4 Kết quả chạy chương trình và nhận xét đánh giá

BÀI 3 THIẾT KẾ BỘ LỌC FIR THÔNG CAO BẰNG PHƯƠNG

PHÁP LẤY MẪU TẦN SỐ

1 Bài toán thiết kế

Hãy thiết kế bộ lọc FIR thông cao pha tuyến tính theo phương pháp lấy mẫu tần

số, với các chỉ tiêu bộ lọc cần thiết kế được cho như sau:

Cạnh dải chắn: ws

Cạnh dải thông: wp

Độ gợn sóng trong dải thông: Rp

Suy hao trong dải chắn: As

Các đại lượng này có thể được mô tả trên hình 1 như sau:

Điều kiện: ws< wp<1

Hoặc bài toán cho các chỉ tiêu 1 và 2 ta cũng có thể tính được As và Rp dựa vào quan hệ giữa chúng theo công thức (1.1) và (1.2)

2 Các bước tiến hành thiết kế

Bước 1 Chọn số mẫu để lấy mẫu tần số của bộ lọc lý tưởng

Hình 1 Các chỉ tiêu của bộ lọc thông cao HPF (high pass filter)

Trang 9

Trong phương pháp lấy mẫu tần số, việc chọn số mẫu để lấy mẫu bộ lọc lý tưởng là rất quan trọng Ở đây, chọn số mẫu M để có 02 mẫu rơi vào dải chuyển tiếp

M = [round(1/(ws1-wp1))]*6+1;

Bước 2 Thực hiện lấy M mẫu tần số bộ lọc lý tưởng

Lúc này ta có M điểm lấy mẫu, trong đó đáp ứng tần số biên độ của các điểm trong dải thông là 1, trong dải chắn là 0 Việc xác định đáp ứng tần số biên độ của

02 mẫu trong dải chuyển tiếp được thực hiện lặp để xác đinh được bộ lọc có Rp

As là tốt nhất

Bước 3 Tìm đáp ứng xung của bộ lọc thông cao cần thiết kế

Đáp ứng xung của bộ lọc thông cao có thể tìm được bằng phép biển đổi DFT ngược các mẫu hd(n) :

1 ) (

M

k

M nk j

e k H M n

3 Chương trình thiết kế bộ lọc số

Trong phần này sẽ thực hiện chương trình thiết kế bộ lọc thông cao bằng phương pháp lấy mẫu tần số Chương trình sẽ nhận các chỉ tiêu yêu cầu của bộ lọc cần thiết kế, sau đó thực hiện các bước thiết kế để tìm được đáp ứng xung h(n)

Để khảo sát bộ lọc vừa thiết kế, chương trình cũng sẽ thực hiện tính toán và vẽ đáp ứng biên độ - tần số của bộ lọc theo dB, cũng như vẽ các đáp ứng xung lý tưởng hd(n), hàm cửa sổ w(n) và đáp ứng xung bộ lọc thực tế h(n)

Chương trình được viết và chạy trên nền Matlab, với việc sử dụng một số hàm

hỗ trợ có sẵn của Matlab cho xử lý tín hiệu số, và một số hàm viết thêm được tham khảo từ tài liệu [1] (các hàm dưới dạng các file m)

Trang 10

As1=input('Nhap sai, nhap lai As>21, As = ');

axis([0,1,-0.1,1.1]); title('Frequency Samples at M=%2.4f',M);

xlabel('Frequency in pi units'); ylabel('Hr(k)')

set(gca,'XTickMode','manual','XTick',[0;ws;wp;1])

set(gca,'XTickLabelMode','manual','XTickLabels',[0;ws;wp; 1])

set(gca,'YTickMode','manual','YTick',[0,T1op,T2op,1]); grid

subplot(2,2,2); stem(l,h); axis([-1,M,-0.4,0.4])

title('Impulse Response'); xlabel('n');ylabel('h(n)');text(M+1,-0.4,'n')

subplot(2,2,3); plot(ww/pi,Hr,wl(1:alpha+1)/pi,Hrs(1:alpha+1),'o');

axis([0,1,-0.1,1.1]); title('Amplitude Response')

xlabel('Frequency in pi units'); ylabel('Hr(w)')

set(gca,'XTickMode','manual','XTick',[0;ws;wp;1])

set(gca,'XTickLabelMode','manual','XTickLabels',[ 0;ws;wp;1])

Trang 11

set(gca,'YTickMode','manual','YTick',[T1op,T2op]); grid

subplot(2,2,4);plot(w/pi,db); axis([0,1,-100,10]); grid

title('Magnitude Response');xlabel('Frequency in pi units'); ylabel('Decibels');

set(gca,'XTickMode','manual','XTick',[0;ws;wp;1])

set(gca,'XTickLabelMode','manual','XTickLabels',[ 0;ws;wp; 1])

set(gca,'YTickMode','Manual','YTick',[-As;0]);

set(gca,'YTickLabelMode','manual','YTickLabels',[As; 0])

4 Kết quả chạy chương trình và nhận xét đánh giá

Kết quả chương trình được thực hiện với ws=0.4pi, wp=0.65pi, Rp=0.4, As=45

BÀI 4 THIẾT KẾ BỘ LỌC THÔNG DẢI IIR SỬ DỤNG BỘ LỌC CHEBYSHEV-1 BẰNG PHƯƠNG PHÁP BIẾN ĐỔI SONG TUYẾN

1 Bài toán thiết kế :

Thiết kế bộ lọc thông dải theo cấu trúc IIR sử dụng bộ lọc Chebyshev-1 bằng phương pháp biến đổi song tuyến tính

2 Các bước tiến hành thí nghiệm :

Các bước được thực hiện như sau:

Bước 1: Nhập các chỉ tiêu kỹ thuật của bộ lọc số :

- Tần số ở mép dải thông wp

- Tần số ở mép dải chắn ws

- Độ mấp mô dải thông Rp

- Độ suy giảm dải chắn As và tham số T

Bước 2: Chiếu các tần số cắt wp và ws từ miền tần số số lên miền tần số tương

tự theo công thức sau:

s

T

Bước 3: Xác định đặc tuyến bộ lọc có hàm truyền Ha(s) thỏa mãn các chỉ tiêu

tương tự trên các điểm Ωp, Ωs.

Bước 4: Chiếu hàm Ha(s) theo phép biến đổi song tuyến

(

z

z T H Z

Bước 5: Chuyển đổi tần số để đạt được bộ lọc số thông dải:

H(z) = HLP(Z )

2 1

1 2

1

2 1

2 1

1

1 )

z z

z G Z

k k

Bước 6: Biến đổi dải tần đạt được bộ lọc số thông dải

Bước 7: Vẽ đáp ứng biên độ - pha tần số và trễ nhóm của các bộ lọc

3 Chương trình thiết kế bộ lọc số

function MANHHUNG_OpeningFcn(hObject, eventdata, handles, varargin) set(handles.mess,'Visible','off');

Trang 12

[ws1,wp1,wp2,ws2,Rp,As,wplp,wslp,T,OmegaP,OmegaS,ep,Ripple,Attn]=pushbutton1_Callback(hObject, eventdata, handles)

% nhan data chi dinh wplp

wplp = 0.2*pi; % Digital Passband Freq in Hz

Trang 13

% tinh wslp

%wslp = 0.4*pi; % Digital Stopband Freq in Hz

beta = (cos((wp2 + wp1)/2))/(cos((wp2 - wp1)/2));

% Analog prototype specifications: Inverse mapping for frequency %T = 1; % Set T=1

OmegaP = (2/T)*tan(wplp/2); % Prewarp Prototype Passband freq

OmegaS = (2/T)*tan(wslp/2); % Prewarp Prototype Stopband freq

% eventdata reserved - to be defined in MANHHUNG future version of MATLAB

% Analog Chebyshev-I Prototype Filter Calculation

Trang 14

set(gca,'XTickMode','manual','XTick',[0,OmegaP/pi,OmegaS/pi,0.5,1],'FontSize',10);

set(gca,'YTickmode','manual','YTick',[0,Attn,Ripple,1],'FontSize',10); grid

% hObject handle to pushbutton6 (see GCBO)

% eventdata reserved - to be defined in MANHHUNG future version of MATLAB

%[N,wn] =

cheb1ord(wplp/pi,wslp/pi,Rp,As);%++++++++++++++++++++++++++++++++++

Trang 15

% Impulse invariance transformation to obtain MANHHUNG digital Chebyshev-I lowpass filter

% Plotting Magnitude response :

set(gcf,'CurrentAxes',handles.axes1); cla; % Magnitude response :

set(gca,'YTickmode','manual','YTick',[0,Attn,Ripple,1],'FontSize',10); grid

% Phase response :

set(gcf,'CurrentAxes',handles.axes2); cla;

plot(w2/pi,pha2/pi); title('Phase Response','FontSize',10) xlabel('frequency in pi units','FontSize',10); ylabel('pi units','FontSize',10); axis([0,1,-1,1.1]);

set(gca,'XTickMode','manual','XTick',[0,wplp/pi,wslp/pi,1],'FontSize',10);

set(gca,'YTickmode','manual','YTick',[-As,-Rp,0]); grid %set(gca,'YTickLabelMode','manual','YTickLabel',['-

% hObject handle to pushbutton7 (see GCBO)

Ngày đăng: 19/02/2024, 12:57

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

TÀI LIỆU LIÊN QUAN

w