Tải bản đầy đủ (.pdf) (41 trang)

Triển khai hệ thống FFT 128 radix 22 trên FPGA

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.21 MB, 41 trang )

Trường Đại Học Bách Khoa Hà Nội
Viện Điện Tử - Viễn Thông
======o0o======

BÁO CÁO KẾT QUẢ THỰC TẬP KỸ THUẬT
Đề tài:

Triển khai hệ thống
FFT 128 radix 22 trên FPGA

Sinh viên thực hiện: Vương Đăng Huy
Mã số sinh viên: 20131809
Lớp: Kỹ sư tài năng
Khóa: 58

Hà Nội, 8/2016


Báo cáo thực tập kỹ thuật

Lời nói đầu
Trong đợt thực tập ở trung tâm thí nghiệm thiết kế vi mạch và tích hợp hệ thống
EDA-BK thuộc phòng nghiên cứu BKIC, Viện điện tử - viễn thông, đại học Bách
Khoa Hà Nội, nhờ có sự quan tâm giúp đỡ nhiệt tình của thầy, các anh, các bạn đang
làm việc trên phòng nghiên cứu đã tạo điều kiện thuận lợi nhất giúp em hoàn thành
tốt nhiệm vụ thực tập của mình. Trước khi bước vào đợt thực tập, em đã xác định rõ
mục đích của đợt thực tập này: làm quen với môi trường làm việc, cải thiện và nâng
cao các kĩ năng mềm cần thiết cho công việc sau này như viết báo cáo, trình bày một
vấn đề, đọc tài liệu tiếng anh, và được củng cố nâng cao các kĩ năng chuyên ngành.
Đợt thực tập kéo dài một tháng (từ ngày 11/7/2016 đến ngày 19/8/2016) đã giúp
em học được rất nhiều điều, không chỉ các kĩ năng chuyên ngành mà còn cả về thái


độ, cách giải quyết khi gặp một vấn đề khó khăn, giúp em quen với môi trường làm
việc của kỹ sư, đòi hỏi sự tập trung, nghiêm túc giúp hoàn thành công việc và nhiệm
vụ được giao. Được làm việc với các bạn và các anh, các chị cùng các thầy, cô cũng
đã giúp em cải thiện được các kĩ năng làm việc nhóm.
Trung tâm thí nghiệm thiết kế vi mạch và tích hợp hệ thống là phòng nghiên cứu
được trang bị các trang thiết bị hiện đại phục vụ cho việc hợp tác và nghiên cứu vi
mạch, rất thuận lợi giúp cho sinh viên được tiếp cận và tìm hiểu các công nghệ thiết
kế vi mạch thực tế, củng cố cho kiến thức học được ở sách vở trên trường lớp. Bước
vào thực tập với rất nhiều bỡ ngỡ, lạ lẫm nhưng sự nhiệt tình, thân thiện và cởi mở
của các anh và các bạn đang làm việc trong phòng nghiên cứu đã giúp em bớt bỡ ngỡ
và làm quen nhanh chóng với môi trường và bắt tay vào làm các công việc được giao.
Em xin chân thành cảm ơn Tiến Sĩ Nguyễn Đức Minh, Tiến Sĩ Đặng Quang Hiếu,
Thạc Sĩ Dương Tấn Nghĩa đã tận tình hướng dẫn và hỗ trợ em trong quá trình thực
tập. Em cũng xin gửi lời cảm ơn đến bạn bè, cùng tập thế thầy cô và các bạn trong
phòng thí nghiệm BKIC đã luôn ủng hộ, giúp đỡ và tạo điều kiện cho em hoàn thành
tốt đợt thực tập này.

1


Báo cáo thực tập kỹ thuật
1. Nội dung
1.1 Giới thiệu chức năng, nhiệm vụ, cơ cấu tổ chức của đơn vị tiếp nhận
1.1.1 Cơ cấu tổ chức của đơn vị tiếp nhận
Trung tâm thí nghiệm thiết kế vi mạch và tích hợp hệ thống (gọi tắt là EDABK)
được thành lập ngày 28/4/2011, là một trong những phòng nghiên cứu thuộc Viện
điện tử - viễn thông đại học Bách Khoa Hà Nội. EDA-BK hiện có rất nhiều nhà
khoa học là tiến sĩ, thạc sĩ và hơn 30 sinh viên, nghiên cứu sinh có đam mê nghiên
cứu trong lĩnh vực Điện tử - Viễn thông.
Hiện tại, trung tâm được hoạt động, quản lý dưới sự điều hành của các thầy, cô:

TS. Nguyễn Đức Minh
Thiết kế và kiểm tra tự động các hệ thống số và các hệ nhúng.
TS. Nguyễn Đức Minh tốt nghiệp tiến sĩ tại Đại học Kaiserslautern, CHLB Đức
vào tháng 2 năm 2009. Hiện nay, TS. Minh nghiên cứu và giảng dạy tại Viện Điện
tử – Viễn thông, trường Đại học Bách Khoa Hà Nội. TS. Minh đã từng là nghiên
cứu viên tham gia các dự án nghiên cứu trong công nghiệp với các công ty Onespin
Solutions, Acatel-Lucent, Infineon Technologies. TS. Minh quan tâm nghiên cứu về
thiết kế vi mạch số, đặc biệt là các vi mạch xử lý băng gốc trong thông tin di động
như: WCDMA, OFDM, UWB, MIMO,... Ngoài ra TS.Minh còn tập trung vào các
thuật toán mô hình hóa và kiểm chứng toán học các hệ thống trên chip cũng như hệ
thống nhúng.
TS. Đặng Quang Hiếu
Phát triển các thuật toán xử lý tín hiệu trong thông tin
Tốt nghiệp PhD từ trường TU Delft (Hà Lan) vào 2/2008. Hướng chuyên môn
chính về xử lý tín hiệu trong thông tin vô tuyến. Chuyên gia về công nghệ mới trong
truyền tin như: WCDMA, OFDM, UWB, MIMO,... Thiết kế và mô phỏng các hệ
thống thông tin vô tuyến thế hệ mới bằng công cụ Matlab/Simulink. Ngoài ra, TS.
Hiếu còn đang nghiên cứu về các kỹ thuật giấu tin trong thông tin quảng bá,
cognitive radio, cooperative communications, các thuật toán triển khai mã kênh

2


Báo cáo thực tập kỹ thuật
(LDPC) với tốc độ cao, tổn hao ít năng lương, các hệ thống thông tin phục vụ y tế
(body area wireless sensor networks) và đặc biệt là các kỹ thuật thông tin ứng dụng
trong điện thoại di động (NFC, Bluetooth LE, v.v.)
TS. Hoàng Phương Chi
Quản lý dự án
ThS. Trần Mạnh Hoàng

Quản lý nhân sự, đối tác và học bổng
ThS. Dương Tấn Nghĩa
Xử lý tín hiệu trong thông tin vô tuyến, truyền thông băng siêu rộng, nhận diện
dấu vân tay.
TS. Phạm Nguyễn Thanh Loan
Chuyên về thiết kế vi mạch tương tự.
Phòng nghiên cứu được đặt tại phòng 611 và 618 tại thư viện điện tử Tạ Quang
Bửu, đại học Bách Khoa Hà Nội, số 1, Đại Cồ Việt, Hai Bà Trưng, Hà Nội.
1.1.2 Hướng nghiên cứu
Mục tiêu nghiên cứu chính của EDA-BK là phát triển các bộ xử lý băng cơ sở
(baseband processor) cho thông tin vô tuyến / di động thế hệ mới. Các nội dung
nghiên cứu bao gồm:


Phát triển các thuật toán xử lý tín hiệu cho các hệ thông tin vô tuyến thế hệ

mới (UWB, OFDM, WCDMA, v.v.) và ứng dụng.


Phát triển các thuật toán và thiết kế bộ thu phát tín hiệu số tổn hao ít năng

lượng phục vụ cho các mạng viễn thông thế hệ mới (WSN, RFID, cognitive radio,
relay networks, v.v.)


Thiết kế phần mềm chuyên dụng cho điện thoại di động (trên nền Android,

iOS).

3



Báo cáo thực tập kỹ thuật


Phát triển các ứng dụng hỗ trợ tương tác với người sử dụng trong thông tin

quảng bá (phát thanh, truyền hình).


Thiết kế IC và hệ thống nhúng xử lý video và audio dùng trong mạng di động

thế hệ mới.


Kiểm tra tự động hệ thống số, IC và hệ thống nhúng



Xây dựng hệ thống tự động thu thập dữ liệu từ xa; lưu trữ, tổng hợp và phân

tích dữ liệu.


Phát triển các thuật toán hỗ trợ định vị với độ chính xác cao (GPS, localization).

1.1.3 Hướng đào tạo
Ngoài những khóa học chính qui theo các chương trình đại học / sau đại học do
trường ĐH BK qui định, EDA-BK còn cung cấp các khóa học ngắn hạn về DSP,
Embedded Systems, Digital Communications, v.v. cũng như các khóa học chuyên

sâu khác theo yêu cầu của doanh nghiệp.
Các khóa học ngắn hạn gồm có :


Thiết kế vi mạch số cơ bản sử dụng Verilog/VHDL, thực hiện trên FPGA



Thiết kế vi mạch số nâng cao bằng phần mềm Synopsys



Thực hiện các thuật toán xử lý tín hiệu số trên Matlab



Thiết kế, mô phỏng bộ thu phát số (WCDMA, MIMO-OFDM, UWB) dùng

Matlab / Simulink


Thiết kế vi mạch hệ thống thông tin số dùng DSP Builder kết hợp

Matlab/Simulink thực hiện trên FPGA


Thiết kế hệ thống nhúng




Lập trình nhúng trên điện thoại di động Android / iOS

4


Báo cáo thực tập kỹ thuật
1.1.4 Học bổng
Những sinh viên xuất sắc trong EDA-BK sẽ được cấp học bổng với nhiều mức
khác nhau, được tài trợ từ nhiều nguồn khác nhau. Ngoài ra, EDABK cũng hỗ trợ cơ
sở vật chất giúp sinh viên thực hiện tốt các đề tài của mình.
1.1.5 Tuyển dụng
EDA-BK liên tục tuyển chọn các sinh viên (bắt đầu từ năm thứ 2, hệ đại học chính
qui), các học viên cao học và các nghiên cứu sinh chuyên ngành Điện tử – Viễn thông,
Điện, CNTT. Tại EDA-BK, các học viên và sinh viên có thể tham gia làm đồ án tốt
nghiệp (đại học, cao học, tiến sỹ), đồ án môn học, và đề tài các cấp. Ngoài ra, tùy
theo định hướng của từng cá nhân, người theo học còn được trực tiếp đào tạo chuyên
sâu theo nhiều lĩnh vực, tham gia các khóa học ngắn hạn và đi thực tập ở các doanh
nghiệp bên ngoài.

5


Báo cáo thực tập kỹ thuật
1.2 Nội dung thực tập
1.2.1 Đặt vấn đề
Trong ngành điện tử viễn thông chúng ta, việc phân tích phổ như phổ năng lượng,
phổ biên độ, phổ pha của tín hiệu nói chung và phổ của tín hiệu số nói riêng trong
miền tần số đóng một vai trò hết sức quan trọng. Nó cho ta biết vai trò đóng góp của
các thành phần tần số trong tín hiệu như thế nào, năng lượng của chúng ra làm sao,…
từ đó chúng ta có phương hướng xử lý tín hiệu đó một cách thích hợp. Vấn đề đặt ra

là làm thế nào để thực hiện biến đổi tín hiệu số từ miền thời gian sang miền tần số để
quan sát phổ của nó. Câu trả lời đơn giản nhất chính là sử dụng biến đổi Fourier rời
rạc – DFT (Discrete Fourier Transform).
Biến đổi Fourier rời rạc được sử dụng trong rất nhiều các lĩnh vực, nó được sử
dụng trong việc xử lý tiếng nói, xử lý ảnh,…. Sẽ không phải là phóng đại nếu như nói
là bất cứ việc gì liên quan đến xử lý tín hiệu số đều phải dùng đến biến đổi Fourier.
Tuy nhiên việc sử dụng biến đổi Fourier rời rạc có một vấn đề, đó là việc tính toán
tương đối phức tạp khi chiều dài dữ liệu cần tính toán tăng lên. Mà như ta biết một
file ảnh, hay một tín hiệu bất kỳ thường có độ dài khá là lớn, do đó nếu chỉ tính DFT
thông thường thì thời gian thực hiện sẽ rất là lâu và phức tạp, do đó sẽ không đáp ứng
được yêu cầu về mặt thời gian của người thực hiện. Thử tưởng tượng DFT như là 1
cỗ máy sản xuất sản phẩm, nhà sản xuất thì muốn máy làm việc càng năng suất, cho
ra càng nhiều sản phẩm trong thời gian ngắn nhất để thu lại lượng giá trị thặng dư lớn
hơn so với các đối thủ khác, thế nhưng cỗ máy DFT tuy có làm ra sản phẩm tốt nhưng
tốc độ quá chậm thì chắc chắn nhà sản xuất sẽ không hài lòng một chút nào. Khi đó
nhà sản xuất phải thay đổi, phải sử dụng khoa học kỹ thuật để nâng cấp cho cỗ máy
này để sao cho cũng cho ra kết quả tốt y như cũ mà tốc độ phải được cải thiện nên
nhiều lần. Chính vì vậy mà thuật toán biến đổi Fourier nhanh – FFT (Fast Fourier
Transform) đã ra đời.
Ý tưởng của thuật toán FFT đó là kỹ thuật chia – trị. Thay vì việc tính DFT cho cả
1 tín hiệu có độ dài lớn chúng ta sẽ thực hiện tính DFT cho từng đoạn tín hiệu nhỏ
hơn trong tín hiệu đó rồi từ kết quả thu được chúng ta tính ngược lại DFT của tín hiệu
cần tính ban đầu.

6


Báo cáo thực tập kỹ thuật
Một trong những cách tính rất FFT phổ biến là khi độ dài dãy là lũy thừa của 2 do
Cooley và Tukey đưa ra vào năm 1965 (thường gọi là FFT cơ số 2). Yêu cầu của

phương pháp này đó là dãy tín hiệu cần tính phải có độ dài N phải là lũy thừa của 2.
Cách tính của phương pháp này là thực hiện chia dãy tín hiệu cần tính thành 2 nửa có
độ dài N/2 rồi tính DFT của 2 dãy nhỏ này. Mỗi dãy nhỏ lại có thể được tính bằng
cách tiếp tục chia nhỏ chúng ra thành 2 dãy con nhỏ hơn…Công việc trên được lặp
lại đến khi nào việc tính DFT của dãy con trở nên đơn giản rồi, không cần chia nữa
(thường là khi độ dài dãy con chỉ còn là 2), khi đó từ kết quả DFT của dãy con chúng
ta tính ngược lại DFT của dãy to.
Dưới đây là sơ đồ giải thuật của thuật toán FFT cơ số 2:

Start
N = 2^k

False

Chia thành 2 dãy con
độ dài N/2

Chiều dài dãy con = 2

True

Tính DFT

End

Figure 1.1 Sơ đồ giải thuật của thuật toán FFT cơ số 2

7



Báo cáo thực tập kỹ thuật
FFT có vai trò rất quan trọng:
-

FFT đã nâng cao tốc độ, độ chính xác của xử lý số tín hiệu.

-

FFT mở ra một lĩnh vực rất rộng của phân tích phổ: viễn thông, thiên văn, địa
lý, chẩn đoán y khoa,…

-

FFT đã khơi lại lợi ích của nhiều ngành toán học mà trước đây người ta chưa
khai thác hết.

-

FFT đã đặt nền móng cho việc tính toán các biến đổi khác như biến đổi Walsh,
biến đổi Hamadard, biến đổi Haar,…

Từ FFT cơ số 2, giờ đây chúng ta còn có các cơ số khác như cơ số 4, cơ số 8, cơ
số 2^2, cơ số 2^3 cùng với nhiều kiểu cấu trúc tính FFT khác nhau như song song,
SDF(single delay feedback), MDC (multipath delay commutator), tại chỗ (in – place),
thác lũ,…ngày càng khẳng định được vai trò quan trọng của FFT.
Chính vì tầm quan trọng của việc tính toán FFT, phòng nghiên cứu EDA – BK đã
và đang phát triển việc triển khai thuật toán tính FFT 128 điểm theo kiến trúc SDF sử
dụng cơ số 2^2 trên bo mạch FPGA để phục vụ cho các mục tiêu về sau. Bộ công cụ
được sử dụng là phần mềm MATLAB cùng công cụ mô phỏng Simulink, phần mềm
mô phỏng ModelSim, công cụ tổng hợp phần cứng là phần mềm ISE Design Suit của

Xilinx và sử dụng trên kit Atlys.
1.2.2 Mô tả đề tài
Các yêu cầu cần phải thực hiện:
-

Triển khai thuật toán tính FFT 128 điểm với cơ số 2^2 theo kiến trúc SDF.

-

Sử dụng phần mềm MatLab, Simulink để xây dựng mô hình và kiểm tra kết
quả.

-

Viết code Verilog mô tả phần cứng của khối FFT để triển khai trên FPGA, tổng
hợp code Verilog bằng công cụ trên MatLab hoặc dùng phần mềm ISE Design
Suit.

-

Thực hiện mô phỏng đồng thời (Co – Simulation) kiến trúc xây dựng trên
Simulink và khối phần cứng xây dựng từ code Verilog, kiểm tra kết quả.

8


Báo cáo thực tập kỹ thuật
-

Triển khai thuật toán trên kit Atlys của Xilinx bằng phần mềm tổng hợp ISE

Design Suit.

-

Thực hiện FPGA – in – loop, kiểm tra kết quả.

Từ những yêu cầu mà đề tài đưa ra, để thực hiện được nó, yêu cầu người thực hiện
đầu tiên phải có những kiến thức cơ bản về FFT, tiếp đó là kiến thức về lập trình trên
MatLab, biết thực hiện mô phỏng trên Simulink, Co – Simulation với ModeSim và
FPGA – in – loop và có những kiến thức cơ bản về FPGA và ngôn ngữ lập trình phần
cứng Verilog.
1.2.3 Báo cáo công việc được giao
1.2.3.1 Những kiến thức cơ bản về FFT
Ở đây chúng ta chỉ nghiên cứu về FFT phân theo tần số DIF.
Cho x[n] là 1 dãy có chiều dài N. Biến đổi Fourier rời rạc DFT của x[n] được tính
theo công thức sau đây:
N 1

X  k    x  n  .e

j

2
kn
N

, k  0, N  1

1.2.3.1


n 0

Nếu đặt W

kn
N

e

j

2
kn
N

, hệ số này gọi là twiddle factor thì công thức (1) có thể được

viết lại như sau:
N 1

X  k    x  n  .WNkn , k  0, N  1

1.2.3.2 

n 0

Từ công thức (1.2.3.1) ta thấy, với mỗi giá trị của k ta phải tính N phép nhân phức
và N – 1 phép cộng phức. Mà k lấy N giá trị từ 0 đến N – 1 nên tổng số phép nhân
phức cần thực hiện là N 2 phép tính, tổng số phép cộng phức cần thực hiện là


N  N  1  N 2 phép tính. Từ đó số phép nhân thực cần thực hiện là 4N 2 phép tính,
còn số phép cộng thực cần thực hiện là N  4 N  1  4 N 2 phép tính. Như vậy khi độ
dài N của dãy tín hiệu cần thực hiện DFT x[n] tăng lên, số lượng phép nhân và phép
cộng thực sẽ vô cùng lớn, làm tốn thời gian tính toán và dung lượng bộ nhớ máy.
Thế còn khi sử dụng FFT thì sao?

9


Báo cáo thực tập kỹ thuật
Trước tiên ta sẽ xem xét FFT với cơ số 2.
Từ công thức (1.2.3.2) ta có:
N 1

X  k    x  n  .WNkn
n 0

N /2 1

N /2 1

n 0

n 0

=  x  n  .WNkn 



N /2 1


k
=   x  n    1
n 0 

N  k ( n N )

x  n   .WN 2
2


N 

x  n   .WNkn
2 


Do đó ta có thể tách dãy X(k) ra thành 2 dãy như sau:

X 1  2k1  

N /2 1

N 



n 0

X 2  2k1  1 

k  0,



  x  n   x  n  2  .W
N /2 1





kn
N /2

N 

  x  n   x  n  2  .W

n
N

n 0

.WNkn/2

N
1
2

Ta thấy X1 và X2 chính là biến đổi DFT N/2 điểm, vậy ta có thể đặt:


x1  n  
x2  n  
n  0,

N /2 1





N 





N 

  x  n   x  n  2 
n 0

N /2 1

  x  n   x  n  2  .W
n 0

n
N


N
1
2

Như vậy ta đã tách việc tính DFT của dãy x[n] có độ dài N ra thành việc tính DFT
của 2 dãy con x1  n  , x2  n  với độ dài N/2. Sơ đồ tính toán được minh họa như sau:

Figure 1.2 Mô hình cánh bướm của FFT cơ số 2

10


Báo cáo thực tập kỹ thuật
Kiến trúc trên được gọi là kiến trúc cánh bướm, đây là 1 phần tử cơ bản trong mọi
kỹ thuật tính toán FFT.
2

N
Như vậy số phép nhân thực cần thực hiện là 4    N 2 , số phép tính thực cần
2
thực hiện cũng là N 2 . Như vậy số phép tính cần thực hiện đã giảm đi đáng kể so với
việc thực hiện tính trực tiếp DFT của dãy x[n]. Để đạt được hiệu quả hơn nữa ta lại
có thể thực hiện chia dãy x1(n) và x2(n) ra thành 2 dãy con. Sơ đồ thực hiện có thể
xem lại tại Figure 1 trong phần 1.2.1. Dưới đây là 1 sơ đồ tính toán cho thuật toán
FFT cơ số 2 khi đầu vào x(n) có độ dài N = 8.
Radix 2 8-points FFT
x(0)

X(0)


x(1)

X(4)

x(2)

X(2)
W(0,8)

x(3)

X(6)
W(2,8)

x(4)

X(1)
W(0,8)

x(5)

X(5)
W(1,8)

x(6)

X(3)
W(2,8)

W(0,8)


x(7)

X(7)
W(2,8)

W(3,8)

Figure 1.3 Sơ đồ thuật toán FFT cơ số 2 cho 8 điểm
Đây là bảng so sánh số lượng các phép tính phức cần thực hiện giữa việc tính DFT
trực tiếp và việc sử dụng FFT cơ số 2:

11


Báo cáo thực tập kỹ thuật
Table 1.1 Bảng so sánh số lượng phép tính phức cần thực hiện giữa tính DFT trực
tiếp và dùng FFT cơ số 2.
Dùng FFT cơ số 2

Tính DFT trực tiếp
Số điểm

Số phép nhân

Số phép cộng

Số phép nhân

Số phép cộng


phức

phức

phức

phức

N

N2

N2  N

N
log 2 N
2

N log 2 N

4

16

12

4

8


16

256

240

32

64

64

4096

4032

192

384

256

65536

65280

1024

2048


1024

1048576

1047552

5120

10240

Như ta thấy trong bảng 1, số lượng phép tính phức cần thực hiện giảm đi một cách
đáng kể khi độ dài N tăng lên.
1.2.3.2 FFT cơ số 2^2
Từ công thức (1.2.3.2):
N 1

X  k    x  n  .WNkn , k  0, N  1

1.2.3.2 

n 0

Đặt:
N
N
n1  n2  n3
2
4
k  k1  2k 2  4k3

n

Với n1  0,1, n2  0,1, n3  0,

N
N
 1, k1  0,1, k2  0,1, k3  0,  1 thì (1.2.3.2) có
4
4

thể viết lại như sau:

12


Báo cáo thực tập kỹ thuật

N /4 1 1



X  k1  2k2  4k3  

n3  0

N /4 1 1

=

N


N

1

N

   x  2 n  4 n
1

n3  0 n2  0 n1  0

 N

N /4 1 1

=

N



N
N
  k1  2 k2  4 k3  2 n1  4 n2  n3 
x  n1  n2  n3  .WN


4


n2  0 n1  0  2
1

  x  4 n

2

n3  0 n2  0

2

n k n k
nk

 n3  .  1 1 1 2 2 .   j  2 1 .WNn3 ( k1  2 k2 ) .WNn3/4k3


N 
k
nk
nk

N
 n3    1 1 x  n2  n3   .  1 2 2 .   j  2 1
2 

4

.WNn3 ( k1  2 k2 ) .WNn3/4k3
Từ đây ta có thể tách X(k) ra thành 2 dãy con có chiều dài N/2 như sau:


X  0, k2 , k3  
X 1, k2 , k3  

 N

N /4 1 1

   x  4 n

2

n3  0 n2  0
N /4 1 1

 N

   x  4 n

2

n3  0 n2  0

N 
nk

N
 n3   x  n2  n 3    .  1 2 2 .WN2 k2n3 .WNn3/4k3
2 


4
N 
nk
n
 N
1 2 k n
 n3   x  n2  n 3    .  1 2 2 .   j  2 .WN 2  3 .WNn3/4k3
2 
 4

Đặt:

N
N

N
x1  n2 , n3   x  n2  n3   x  n2  n3  
2
4

4
N
N
 N
x2  n2 , n3   x  n2  n3   x  n2  n3  
2
4
 4
Khi đó ta lại có thể tiếp tục khai triển tiếp X  0, k2 , k3  , X 1, k2 , k3  giống


X  k1 , k2 , k3  như sau:
X  0, k1 , k2  

N /4 1 1

  x  n , n  . 1

n3  0 n2  0

N /4 1

=

1

2

3



  x  n    1

n3  0

1

3

k2


n2 k2

.WN2 k2n3 .WNn3/4k3

N 

x1  n3   .WN2 k 2n3 .WNn3/4k3
4 


Tiếp tục tách X  0, k2 , k3  thành 2 dãy có độ dài N/4:

13


Báo cáo thực tập kỹ thuật
X  0,0, k3  
X  0,1, k3  

N /4 1





  x  n   x  n
1

n3  0


N /4 1

3

1



3



  x  n   x  n
1

n3  0

3

1

3



N   0 n3 n3k3
 .WN .WN /4
4  




N   2 n3 n3k3
 .WN .WN /4
4  

Tương tự với X 1, k2 , k3  ta có:

X 1, k1 , k2  

N /4 1 1

  x  n , n  . 1

n3  0 n2  0

2

2

3

n2 k2

.   j  2 .WN
n

1 2 k2  n3

.WNn3/4k3



N   1 2 k n
k

=   x2  n3   j.  1 2 x2  n3   .WN 2  3 .WNn3/4k3
4 

n3  0 
N /4 1

X 1,1, k3  


  x  n   j.x

N   n3 n3k3

 n3    .WN .WN /4
4 



  x  n   j.x

N   3n3 n3k3

 n3   .WN .WN /4
4 



N /4 1

X 1,0, k3  

2

n3  0

3

2

N /4 1

2

n3  0

3

2

Như vậy ta đã tách X(k) ra được thành 4 dãy con có độ dài = N/4, mỗi dãy con này
chính là biến đổi DFT độ dài N/4 của các dãy con có độ dài N/4 được chia ra từ x(n).
x1(n)

W(0n,N)

x(n)

W(2n,N)
x(n)+N/4
W(n,N)
x(n)+N/2
W(3n,N)
x(n)+3N/4
x2(n)

-j

FFT N/4
điểm

FFT N/4
điểm

X(4k)

X(4k+2)

FFT N/4
điểm

X(4k+1)

FFT N/4
điểm

X(4k+3)


Figure 1.4 Kiến trúc của thuật toán FFT cơ số 2^2
Trên hình 1.3 là kiến trúc của thuật toán FFT với cơ số 2^2. Thực chất của thuật
toán này là ghép 2 tầng cơ số 2 thành 1 tầng cơ số 2^2. Tuy nhiên thuật toán cơ số
2^2 có 1 ưu điểm so với thuật toán cơ số 2. Nếu chúng ta nhìn vào hình 1.2 thì ta thấy,
cứ sau mỗi một tầng cơ số 2 chúng ta phải nhân thêm hệ số twiddle factor, còn ở trong
cơ số 2^2 chúng ta chỉ nhân twiddle factor ở sau tầng thứ 2 còn ở tầng trước chỉ nhân

14


Báo cáo thực tập kỹ thuật
với hệ số -j – hệ số tầm thường, do đó khi thực hiện bằng máy tính sẽ bớt được số
lượng phép tính toán phức và cải thiện được độ phức tạp.
Dưới đây là 1 ví dụ về sơ đồ tính FFT cơ số 2^2 cho dãy đầu vào độ dài 8 điểm:
X[0]

X[0]

X[1]

X[4]

X[2]

X[2]

X[3]

W(2,8)


X[4]

X[1]

X[5]

X[6]

X[7]

X[6]

W(1,8)

-j

X[5]

X[3]

-j

W(3,8)

X[7]

Figure 1.5 Sơ đồ tính FFT cơ số 2^2 cho cho dãy đầu vào độ dài = 8.
1.2.3.3 Kiến trúc SDF
Trong các ví dụ ở trên hình 1.3 và 1.4, kiến trúc mà chúng ta sử dụng là kiến trúc
song song, tức là chúng ta trải hết tất cả các đầu vào (FFT bao nhiêu điểm thì dùng

ngần đấy đầu vào) và thực hiện tính toán. Ưu điểm của kiến trúc này đó là tốc độ xử
lý cao, không có delay, chỉ cần có đủ N đầu vào là lập tức tính toán ra được kết quả
đầu ra. Tuy nhiên trong thực tế, các bộ FFT thường được sử dụng trong các thiết bị
chạy thời gian thực real – time, đầu vào của chúng ta không phải là 1 mảng có sẵn N
phần tử mà chỉ là từng phần tử 1, do đó kiến trúc song song như thế này không phù
hợp.
Để khắc phục nhược điểm này, người ta sẽ sử dụng 1 kiến trúc khác. Một trong
những kiến trúc đơn giản, hay được sử dụng là kiến trúc SDF (single delay feedback).
Dưới đây là 1 ví dụ về FFT cơ số 2 dùng kiến trúc SDF với độ dài N = 4.

15


Báo cáo thực tập kỹ thuật

Figure 1.6 FFT 8 điểm dùng cơ số 2 SDF
Như ta đã biết, ở trong FFT cơ số 2, tại tầng đầu tiên, sẽ là tính toán với các cặp
x(n) và x(n+N/2). Nhìn vào trong hình 1.5 tại tầng đầu tiên ta thấy bên trên khối tính
toán Butterfly có 1 khối delay độ dài = 4, một cách tổng quát, ở tầng thứ k thì độ dài
delay sẽ là

N
. Sở dĩ phải có khối delay này là vì đầu vào của chúng ta không phải
2k

là một mảng có sẵn N phần tử mà là lần lượt từng số vào 1. Do đầu vào 1 sẽ phải tính
toán với đầu vào thứ 1 + 8/2 = 5, do đó phải cần delay 4 nhịp. Do đầu ra sau khi qua
khối Butterfly gồm 2 đầu ra bao gồm tổng và hiệu của 2 phần tử, do đó đầu ra cộng
sẽ được đưa ra khỏi khối để làm đầu vào của tầng tiếp theo, còn đầu ra trừ sẽ lại được
đưa vào khối delay. Sau 8 nhịp (4 nhịp lưu các đầu vào từ 1 đến 4, 4 nhịp tính toán

với các đầu vào từ 5 đến 8), các đầu vào từ 1 đến 4 đã được tính toán với hết và các
đầu ra tổng đã được đưa ra, trong khối delay chỉ còn các đầu ra hiệu, lúc này, khi có
đầu vào mới, các đầu vào này sẽ được đưa vào khối delay chứ không thực hiện tính
toán, đồng thời khối delay sẽ đẩy các đầu ra hiệu lúc trước ra. Cứ như vậy chúng ta
sẽ có được kết quả giống như trong hình 1.3.

16


Báo cáo thực tập kỹ thuật
1.2.3.4 Triển khai FFT 128 điểm cơ số 2^2 theo kiến trúc SDF

Figure 1.7 FFT 128 điểm cơ số 2^2 kiến trúc SDF

17


Báo cáo thực tập kỹ thuật
Trên hình 1.7 là sơ đồ thuật toán tính FFT 128 điểm cơ số 2^2 theo kiến trúc SDF
được thực hiện trên phần mềm Simulink của MatLab. Như ta thấy nó có gồm 7 Stage
vả 1 khối Revorder. Ngoài ra còn có 1 bộ đếm 7 bit.
Chức năng các khối:
-

Trong 7 Stage thì Stage 1 là cơ số 2 còn lại là cơ số 2^2, cứ 2 tầng liên tiếp tạo
thành 1 tầng cơ số 2^2. Các Stage được kết nối theo kiến trúc SDF và có chức
năng thực hiện việc tính toán FFT. Ví dụ ở hình 1.8 bên dưới là kiến trúc của
Stage 2. Ta thấy nó có 1 bộ cánh bướm cơ số 2 theo kiểu SDF, đầu vào data_i
sẽ được đưa vào bộ này để thực hiện tính toán. Sau khối tính toán cánh bướm
có 1 bộ nhân dùng để nhân kết quả đầu ra với các giá trị twiddle factor hoặc là

–j.

Figure 1.8 Kiến trúc của khối Stage 2
-

Khối đếm 7 bit có chức năng đếm từ 0 đến 127, khối này có nhiệm vụ tạo ra
giá trị đầu vào Address (từ 0 đến 127) để cho các Stage thực hiện điều khiển
việc tính FFT và để khối Revorder thực hiện việc sắp xếp.

-

Khối Revorder có chức năng sắp xếp lại các giá trị đầu ra. Nhìn vào các ví dụ
trong hình 1.3 và 1.4 chúng ta thấy thứ tự của các giá trị đầu ra không theo
đúng trật tự tự nhiên, do đó cần phải có 1 khối có nhiệm vụ sắp xếp lại các giá

18


Báo cáo thực tập kỹ thuật
trị này trước khi cho ra đầu ra. Ở hình 1.9 bên dưới là kiến trúc của khối
Revorder. Nó gồm có 2 thanh RAM có chức năng lưu trữ giá trị đầu ra của bộ
FFT để sắp xếp lại trước khi cho ra đầu ra. Tại 1 thời điểm, sẽ chỉ đọc ở 1 thanh
RAM và ghi vào thanh RAM khác, khối SelectMem có chức năng lựa chọn
việc đọc và ghi vào 2 thanh RAM này. Ngoài ra còn có khối Bitrevorder có
chức năng đảo bit giá trị Address đầu vào để tạo địa chỉ đúng cho việc đọc và
ghi vào RAM.

Figure 1.9 Kiến trúc của khối Revorder
Sau khi xây dựng kiến trúc xong, chúng ta tiến hành mô phỏng. Đầu tiên là mô
phỏng rồi so sánh với kết quả thu được khi sử dụng hàm fft của MatLab.


19


Báo cáo thực tập kỹ thuật

Figure 1.10 Sai số giữa Simulink và hàm fft của MatLab
Như ta thấy trên hình 1.10, giá trị sai số chỉ khoảng 10 13 , nghĩa là khối FFT của
chúng ta đã xây dựng khá là chính xác.
1.2.3.5 Chuyển đổi sang kiểu dữ liệu dấy phẩy tĩnh (Fixed point)
Kiễu dữ liệu dấu phẩy tĩnh là 1 cách biểu diễn số thực nhưng sử dụng số nguyên
để biểu diễn trong đó số bit để biểu diễn phần nguyên và phần thập phân của số thực
được lựa chọn cố định. Điều này khác với dấu phẩy động khi mà trong số thực dấu
phẩy động, dấu phẩy thập phân có thể thay đổi vị trí bằng cách thay đổi giá trị trường
mũ.

Figure 1.11 Biểu diễn số thực dấu phẩy tĩnh 32 bit với 16 bit thập phân ở dạng nhị
phân

20


Báo cáo thực tập kỹ thuật
Trên hình 1.11 là cách biểu diễn 1 số thực có dấu dưới dạng dấu phẩy tĩnh 32 bit
với 16 bit phần thập phân. Cách tính giá trị của số được biểu diễn được tính bình
thường giống như khi chuyển giá trị của 1 số nhị phân sang hệ 10.
Dưới đây là bảng so sánh giữa kiểu dữ liệu dấu phẩy động độ chính xác đơn với
kiểu dữ liệu dấu phẩy tĩnh 32 bit, 16 bit thập phân.
Table 1.2 Bảng so sánh giữa kiểu dữ liệu dấu phẩy động độ chính xác đơn với kiểu
dữ liệu dấu phẩy tĩnh 32 bit, 16 bit thập phân.

Giá trị
Giá trị dương lớn
nhất
Giá trị dương nhỏ

Dấu phẩy động độ chính

Dấu phẩy tĩnh 32 bit, 16

xác đơn

bit thập phân

 2  2 .2
23

127

 3.403 .1038

2.9527900159  4.5056 .10 4

2126  1.175 .1038

216  1.5259 .105

Giá trị âm nhỏ nhất

3.4028 .1038


215  3.0518 .105

Độ chính xác

232  1.192 .10 7

216  1.5259 .105

nhất

Từ bảng 1.2 có thể thấy với cùng chiều dài bit biểu diễn, thì dải biểu diễn cũng như
độ chính xác của dấu phẩy động lớn hơn của dấu phẩy tĩnh rất nhiều. Tuy nhiên kiểu
dữ liệu dấu phẩy tĩnh có 1 ưu điểm là tốc độ tính toán cao, phần cứng đơn giản hơn
nhiều và có thể triển khai trên FPGA một cách dễ dàng.
Để thực hiện chuyển đổi mô hình của chúng ta từ kiểu dữ liệu dấu phẩy động sang
kiểu dữ liệu dấu phẩy tĩnh chúng ta dùng mô phỏng Monte – Carlo, bằng cách sử
dụng 1 biến param_var làm độ dài bit biểu diễn và cho biến này chạy trong 1 khoảng
nào đó. Với mỗi giá trị của param_var, chúng ta thực hiện mô phỏng n_sims lần, so
sánh kết quả của mỗi lần với giá trị tính toán FFT theo floating point, tìm sai số lớn
nhất của nó và lưu lại. Sau khi chạy song, chúng ta sẽ so sánh sai số với 1 giá trị
epxilon đặt trước, giá trị này chính là giá trị sai số tối đa còn chấp nhận được, để lựa
chọn độ dài bit biểu diễn cho thích hợp.
Code mô phỏng và lựa chọn có thể xem tại phần phụ lục.

21


Báo cáo thực tập kỹ thuật
1.2.3.6 Triển khai trên FPGA
Sau khi thực hiện biến đổi mô hình FFT sang kiểu dữ liệu fixed point, chúng ta sử

dụng công cụ HDL Coder của MatLab để thực hiện gen code Verilog. Để mở công
cụ này, ở trên cửa sổ của Simulink chúng ta chọn Code/HDL Code/HDL Workflow
Advisor…
Đây là giao diện của cửa sổ HDL Workflow Advisor

Figure 1.12 Giao diện của cửa sổ HDL Workflow Advisor
Tại cửa sổ này chúng ta cần lựa chọn các thiết lập thích hợp cho việc gen code
HDL, nếu muốn thực hiện FPGA – in – loop thì tại mục 1. Set Target, phần 1.1 tại ô
Target Flow chúng ta chọn FPGA – in – loop, sau đó chọn Target platform cũng như
công cụ tổng hợp Synthesis Tool thích hợp. Do có thực hiện FPGA – in – loop nên ở
đây chúng ta chọn Target platform là XUP Atlys Xilinx Spartan – 6 development
board, còn Synthesis Tool là Xilinx ISE. Ở mục 2 cho phép chúng ta kiểm tra các
thông số khác của mô hình xem có thích hợp với việc gen code HDL hay không, còn
ở mục 3 cho phép chúng ta lựa chọn các thiết lập như ngôn ngữ gen ra là VHDL hay
là Verilog, các thông số của Clock, Reset, Testbench. Lưu ý là có 1 lựa chọn ở đây là
có thực hiện Co – simulation với ModelSim hay không, ở đây chúng ta chọn có.

22


Báo cáo thực tập kỹ thuật
Sau khi thực hiện tất cả các bước trên thì phần mềm sẽ tiến hành gen code Verilog
cho chúng ta.
Dưới đây là kết quả sau khi gen để mô phỏng với ModelSim.

Figure 1.13 Co - Simulation model với ModelSim
Phần mềm ModelSim ở đây mà em dùng là ModelSim SE 10.1c cùng với phần
mềm MatLab R2014a.
Ở bên dưới là kết quả Co – Simulation với ModelSim. Việc mô phỏng được thực
hiện 10 lần, với đầu vào là các số nguyên 8 bit từ -128 đến 127 và được thực hiện

theo mô phỏng Monte – Carlo.

23


Báo cáo thực tập kỹ thuật

Figure 1.14 Kết quả thực hiện Co - Simulation với ModelSim
Từ trên hình 1.14 ta thấy khối phần cứng tổng hợp bằng ngôn ngữ Verilog cho kết
quả giống với mô hình Simulink, vậy là khối đã hoạt động đúng.

24


×