III.Lọc tuyến tính A.Giải thuật Goertzel - Dựa vào tính chu kỳ của WNk và biểu diễn việc tính toán DFT như lọc tuyến tính : - Kết hợp các bộ cộng hưởng có pole liên hợp phức - Thực hiện
Trang 1BIẾN ĐỔI FOURIER NHANH
Nội dung của biến đổi Fourier nhanh được biểu diễn bằng sơ đồ sau:
*Tính DFT & IDFT
Tính DFT:xác định chuỗi N giá trị phức {X(k) khi biết trước chuỗi } {x(n) chiều }
dài N
DFT X(k) = i = N-1
i = 0
x(n)Wn
kn
0 k N-1
IDFT x(n) = 1
N i = N-1
i = 0
X(k)Wn
-kn
0 n N-1
WN = e-j2/N
Giải thuật DFT cũng được áp dụng vào tính IDFT
I.Tính trực tiếp
- N2 phép nhân phức
- N(N-1) phép cộng phức
Đối với biến đổi WN :
- 2N2 phép tính lượng giác
- 4N2 phép nhân số thực
- 4N(N-1) phép cộng số thực
Trang 2- Một số phép toán chỉ số và địa chỉ để nạp x(n)
II.Phương pháp chia - trị
-Nguyên tắc:phân rã nhỏ việc tính DFT N điểm thành việc tính các DFT kích thước nhỏ hơn các giải thuật FFT
-Phương pháp:
+ Giả sử N=L.M
+ Lưu trữ x(n) và mảng 2 chiều LxM (l:chỉ số hàng, m: chỉ số cột)
x(1,0) x(1,1) x(1,2) x(1,M-1) x(2,0) x(2,1) x(2,2) x(2,M-1)
x(L-1,0) x(L-1,1) x(L-1,2) x(L-1,N-1)
m
l
0
1
2
L-1
+ Cách lưu trữ:
Theo dòng n=Ml+m Theo cột n=l+mL + Tương tự các giá trị DFT x(k) tính được cũng sẽ được lưu trong ma trận LxM (p:chỉ số hàng, q:chỉ số cột)
Theo dòng k=Mp+q Theo cột k=p+qL
Trang 3+ Phương pháp chia - trị rất hiệu quả khi N=r1r2r3…rv phân rã nhỏ hơn đến (v-1) lần
A.FFT cơ số 2
- Tiếp tục phân f1(n) và f2(n) thành các chuỗi N/4 điểm:
Trang 4- Ví dụ tính DFT 8 điểm
x(0) x(1) x(2) x(3) x(4) x(5) x(6) x(7)
x(0) x(2) x(4) x(6)
x(1) x(3) x(5) x(7)
x(0) x(4)
x(1) x(5) x(2) x(6)
x(3) x(7)
[0,1,2,3,4,5,6,7]
- Khối tính toán cho DFT 2 điểm (hình con bướm)
+ N=2v :
log2N :tầng tính toán N/2 :khối tính toán cơ bản cho mỗi lớp + Bộ nhớ : vào : (a,b) - số phức
ra : (A,B) - số phức + Có thể lưu đè (A,B) lên (a,b) chỉ cần N ô nhớ phức (2N ô nhớ thực), tính toán tại chỗ
- Thứ tự chuỗi dữ liệu vào sau khi phân (v-1) lần
+ Biểu diễn các chỉ số ở dạng nhị phân
+ Chuỗi sau khi phân chia sẽ lấy theo thứ tự đảo các bit
- Phân chia theo tần số
+ Phương pháp chia - trị + M=2, L=N/2
+ Chuỗi dữ liệu nhập được xếp theo cột
+ Phân chia X(k) thành X(2k) và X(2k+1)
+ Sau đó có thể phân chia tiếp mỗi X(k chẵn) và X(k lẻ)
Trang 5B.FFT cơ số 4
x(0) x(2) x(4) x(N-1) N=4v
L=4 ,M=N/4 l,p=0,1,2,3
m,q=0,1, ,N/4 - 1
n=4m+1 k=(N/4)p+q
x(0) x(4) x(N-4)
l=0
x(1) x(5) x(N-3)
l=1
x(2) x(6) x(N-2)
l=2
x(3) x(7) x(N-1)
l=3
x(4n) x(4n+1) x(4n+2) x(4n+3)
n=0,1, N/4-1
- Độ phức tạp :1 khối tính toán cần : 3 nhân phức và 12 cộng phức
- N=4v : Tầng tính toán v=log4N
Mỗi tâng có N/4 khối tính toán
- Biểu diễn lại ma trận :
Trang 6III.Lọc tuyến tính
A.Giải thuật Goertzel
- Dựa vào tính chu kỳ của WNk và biểu diễn việc tính toán DFT như lọc tuyến tính :
- Kết hợp các bộ cộng hưởng có pole liên hợp phức
- Thực hiện bằng dạng chuẩn tắc
- vk(n) được lặp lại cho n=0,1,2….,N ,ỗi vòng cần một phép nhân thực
- yk(n) được tính một lần duy nhất cho n=N
- Nếu x(n) là tín hiệu thực cần N+1 phép nhân thực để tính X(k) và X(N-k) do tính đối xứng
- Giải thuật Goertzel chỉ thích hợp khi số giá trị DFT cần tính khá nhỏ
(log2(N))
A.Giải thuật Chirp-z
- DFT N điểm X(zk) với zk=ej2 kn/N ,k=0,1,2….N-1 (các điểm cách đều trên vòng tròn đơn vị)
Trang 7- Nếu zk=rej2 kn/N (z là N điểm cách đều trên vòng tròn bán kính r):
- Tổng quát zk nằm trên cung xoắn ốc bắt đầu từ điểm z0=r0ej0 đi vào hoặc đi
ra gốc tọa độ:
zk=r0ej0(R0r0ej0)k k=0,1,K,L-1
- Xác định tổng chập vòng của chuỗi g(n) N điểm và chuỗi h(n) M điểm (M>N)
N-1 điểm đầu là điểm lặp lại M-(N-1) điểm còn lại chứa kết quả
- Giả sử M=L+(N-1)
- M điểm của chuỗi h(n) được xác định -(N-1) n (L-1)
- Định nghĩa chuỗi M điểm h1(n)=h(n-N+1) n=0,1,2…M-1
- H1(k)=DFTM{h1(n)}
- G(k)=DFTM{g(n)} sau khi đã đệm thêm và g(n) L-1 số 0
- Y1(k)=G(k)H(k) y1(n)=IDFT{Y1(k)} n=0,1,2…M-1
- N-1 điểm đầu tiên của y1(n) là các điểm lặp cho nên loại bỏ chúng
- Các điểm kết quả là giá trị của y1(n) khi N-1 n M-1
y(n)=y1(n+N-1) n=0,1,2…L-1 Xz(k)= y(k)
h(k) k=0,1,2…L-1
Trang 8TÌM HIỂU MATLAB
Một số lệnh và hàm của MATLAB :
zeros: tạo một ma trận với toàn bộ các phần tử có giá trị bằng 0
ones: tạo một ma trận với toàn bộ các phần tử có giá trị bằng 1
rand: tạo một ma trận với các phần tử nhận các giá trị ngẫu nhiên được phân bố
đều trong khoảng từ 0 đến 1
randn: tạo một ma trận với các phần tử nhận các giá trị ngẫu nhiên theo phân bố
Gauss có giá trị trung bình bằng 0, phương sai bằng 1
min: trả về giá trị nhỏ nhất trong một ma trận
max: trả về giá trị lớn nhất trong một ma trận
fliplr: lộn ngược lại thứ tự các phần tử trong một ma trận theo hướng xuất phát từ
phải qua trái trở thành từ trái qua phải
plot và stem: vẽ đồ thị của một dãy số, plot để thể hiện dạng liên tục, stem để thể hiện dạng rời rạc, thường sử dụng hàm stem để vẽ tín hiệu ở miền n
conv: trả về tích chập của 2 vector
filter: trả về đáp ứng theo thời gian của hệ thống được mô tả bởi một phương trình
sai phân tuyến tính hệ số hằng
Bài tập ví dụ về matlab
Bài 1 :Vẽ đồ thị hàm số y=sinx.cos2x trong [0-2]
Giải x=linspace(0,2,30) %chia doan tu 0-2 thanh 30 phan bang nhau
y=sin(x).*cos(2*x)
plot(x,y) %ve do thi
Trang 10Bài 2 :
x=linspace(-10,10,10)
y=linspace(-10,10,10)
z=sin(sqrt(x.*x+y.*y))./sqrt(x.*x+y.*y)
plot3(x,y,z)