You are on page 1of 19

ĐẠI HỌC QUỐC GIA TP.

HCM
TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA ĐIỆN – ĐIỆN TỬ
________________

P. F. I. E. V

BÁO CÁO
XỬ LÝ CÁC TÍN HIỆU
TƯƠNG TỰ VÀ SỐ
Đề tài: Viết chương trình thực hiện các biến đổi
DTFT, DFT/FFT dùng TMS320C5515
GVBM: PGS.TS Lê Tiến Thường
Lớp : VP2008
Thực hiện:
Hoàng Gia Minh
20801248
Vũ Hải Quân
50801722
Trần Hà Minh Quyên
90801746

Tp.Hồ Chí Minh, 6/2012

Thực hiện phép biến đổi DTFT, DFT/FFT trên bộ kit TMS320C5515

MỤC LỤC
MỤC ĐÍCH BÀI THÍ NGHIỆM .................................................................................. 2

I.

II. GIỚI THIỆU ................................................................................................................. 2
III.

CÔNG CỤ YÊU CẦU CHO BÀI THÍ NGHIỆM .................................................... 2

A. Phần mềm và phần cứng ........................................................................................... 2
B. Giới thiệu bộ KIT TMS320C5515 eZdsp™ USB Stick Development Tool ............ 3
IV.

TIẾN HÀNH THÍ NGHIỆM..................................................................................... 4

A. Phần DTFT ................................................................................................................ 5
1. Thực hiện biến đổi DTFT trên MATLAB ............................................................. 5
2. Chương trình viết bằng ngôn ngữ C cho KIT TMS320C5515 .............................. 7
B. Phần FFT ................................................................................................................... 8
1. Mô hình lý thuyết ................................................................................................... 8
2. Mô hình thí nghiệm ................................................................................................ 8
3. Phần thực hành ....................................................................................................... 9
V.

KẾT LUẬN ............................................................................................................... 18

VI. TÀI LIỆU THAM KHẢO ......................................................................................... 18

1

Nhóm 8 – VP2008 | Xử lý tín hiệu tương tự và số

Thực hiện phép biến đổi DTFT, DFT/FFT trên bộ kit TMS320C5515

I.

MỤC ĐÍCH BÀI THÍ NGHIỆM
 Ôn tập các kiến thức về các phép biến đổi DTFT, DFT và FFT
 Cung cấp cái nhìn thực tế về khảo sát tín hiệu trên miền tần số qua việc hiện thực
các phép biến đổi trên phần cứng và kiểm nghiệm so với lý thuyết

II.

GIỚI THIỆU
Việc phân tích phổ tín hiệu là một trong những lĩnh vực quan trọng của xử lý số tín
hiệu. Do đó, bài thí nghiệm này đề cập đến các phép biến đổi tín hiệu rời rạc để
khảo sát trên miền tần số gồm Discrete − Time Fourier Transform (DTFT), Discrete
Fourier Transform (DFT) và Fast Fourier Transform (FFT) thực hiện trên phần
cứng TMS320C5515 của Texas Instrument (TI). Mặc dù, DTFT là cơ sở lý thuyết
toán học và DFT ít được sử dụng trong thực tế, chúng ta cũng xem xét chúng nhằm
2 mục đích chính. Thứ nhất, DTFT và DFT là cơ sở cho FFT. Thứ hai, trong khi
hiện thực FFT chúng ta có thể dễ dàng theo dõi các quá trình tính toán trên mạch.

III. CÔNG CỤ YÊU CẦU CHO BÀI THÍ NGHIỆM
A.

Phần mềm và phần cứng
Các phần cứng và phần mềm cần thiết cho bài thí nghiệm bao gồm
 Bộ TMS320C5515 eZdsp™ USB Stick Development Tool do TI sản xuất.
 Phần mềm giao tiếp giữa PC với bộ KIT Code Composer Studio™ version
4.0
 Phần mềm tính toán MATLAB
 Máy PC cấu hình Intel® Pentium® hay tương đương trở lên

2

Nhóm 8 – VP2008 | Xử lý tín hiệu tương tự và số

Thực hiện phép biến đổi DTFT, DFT/FFT trên bộ kit TMS320C5515

B.

Giới thiệu bộ KIT TMS320C5515 eZdsp™ USB Stick Development
Tool

Hình 1 Bộ Kit TMs320C5515

Các thành phần chính của bộ KIT
 C55x CPU và các bộ nhớ liên quan
 Phần cứng tăng tốc FFT
 Bốn bộ điều khiển DMA và giao diện bộ nhớ bên ngoài
 Module quản lý điện
 Các thiết bị ngoại vi I/O bao gồm I2S, I2C, SPI, UART, Timers, EMIF, 10bit SAR ADC, điều khiển LCD, USB 2.0

3

Nhóm 8 – VP2008 | Xử lý tín hiệu tương tự và số

Thực hiện phép biến đổi DTFT, DFT/FFT trên bộ kit TMS320C5515

Hình 2 Sơ đồ khối chức năng bộ kit

IV. TIẾN HÀNH THÍ NGHIỆM
Tạo 2 tín hiệu ngõ vào, 2 tín hiệu này sẽ được dùng để thực hiện trong suốt bài thí
nghiệm.

(

(

)

(

)

)

(

)

(

)

Thực hiện lấy mẫu tín hiệu x1, x2 trên với tần số lấy mẫu fS = 1000 Hz và lấy 128
mẫu đầu tiên, trong MATLAB chúng ta có thể có được điều này bằng các dòng lệnh
sau:
(Chúng ta mô hình hóa nhiễu tín hiệu trong thực tế bằng hàm rand trong MATLAB
cộng vào tín hiệu gốc)
fs=1000;
t=0:1/fs:(128-1)/fs;
x1 = 3*sin(300*pi*t)+5*sin(600*pi*t)+1*rand(size(t));
x2 = 2*sin(600*pi*t)+5*sin(400*pi*t)+4*sin(200*pi*t)+1*rand(size(t));
subplot(1,2,1);
stem(x1);
ylabel('x1(k)');

Nhóm 8 – VP2008 | Xử lý tín hiệu tương tự và số

4

Thực hiện phép biến đổi DTFT, DFT/FFT trên bộ kit TMS320C5515
xlabel('k');
subplot(1,2,2);
stem(x1);
ylabel('x2(k)');
xlabel('k');

Hình 3 Mô hình hoá tín hiệu x1 và x2

A.

Phần DTFT
1.

Thực hiện biến đổi DTFT trên MATLAB

clear all;
fs=1000;
n = 0:127;
x1 = 3*sin(300*pi*n/fs)+5*sin(600*pi*n/fs)+1*rand(size(n));
x2 = ...
2*sin(600*pi*n/fs)+5*sin(400*pi*n/fs)+4*sin(200*pi*n/fs)+1*rand(size(n));
k = -127:127; w = (pi/127)*k;
% frequency between -pi and +pi
X1 = x1*(exp(-1i*pi/127)).^(n'*k);
% DTFT of x1
%
X2 = x2*(exp(-1i*pi/127)).^(n'*k);
% DTFT of x2
% Graphical verification
subplot(2,2,1); plot(w/pi,abs(X1)); grid;
xlabel('frequency in pi unit'); ylabel('|X1|');
title('Magnitude of X1');
subplot(2,2,2); plot(w/pi,angle(X1)); grid;
xlabel('frequency in pi unit'); ylabel('radiants/pi');
title('Angle of X1');
subplot(2,2,3); plot(w/pi,abs(X2)); grid;
xlabel('frequency in pi unit'); ylabel('|X1|');
title('Magnitude of X2');

Nhóm 8 – VP2008 | Xử lý tín hiệu tương tự và số

5

Thực hiện phép biến đổi DTFT, DFT/FFT trên bộ kit TMS320C5515
subplot(2,2,4); plot(w/pi,angle(X2)); grid;
xlabel('frequency in pi unit'); ylabel('radiants/pi');
title('Angle of X2');

Hình 4 Biên độ và góc pha tín hiệu (có xét nhiễu)

Nhận thấy khi chúng ta mô hình hóa nhiễu tín hiệu trong thực tế bằng
làm rand trong MATLAB cộng vào tín hiệu gốc, phổ thu được sẽ xuất
hiện búp ở tần số DC. Đây là điều không mong muốn nhưng về tổng
quát, chúng ta nên xét tới sự xuất hiện của nhiễu mà cụ thể là thông qua
sự xuất hiện của hàm rand.
Đối với trường hợp lí tưởng là tín hiệu hoàn toàn không bị nhiễu cộng
vào, chúng ta được kết quả sau. Tuy nhiên, đây là điều khó có thể tồn tại
trong thực tế.

6

Nhóm 8 – VP2008 | Xử lý tín hiệu tương tự và số

Thực hiện phép biến đổi DTFT, DFT/FFT trên bộ kit TMS320C5515

Hình 5 Biên độ và góc pha tín hiệu (không nhiễu)

2.

Chương trình viết bằng ngôn ngữ C cho KIT TMS320C5515

/* dtft.c - DTFT of length-L signal at a single frequency w */
#include <cmplx.h>

/* complex arithmetic */

complex dtft(L, x, w)
w); */
double *x, w;
dimensional */
int L;
{
complex z, X;
int n;

/* usage: X=dtft(L, x,
/* \(x\) is \(L\)-

z = cexp(cmplx(0, -w));

/* set \(z=e\sp{-j\om}\)

X = cmplx(0,0);

/* initialize \(X=0\) */

*/

for (n=L-1; n>=0; n--)
X = cadd(cmplx(x[n], 0), cmul(z, X));
return X;
}

7
/* dtftr.c - N DTFT values over frequency range [wa, wb) */
#include <cmplx.h>

/* complex arithmetic */

Nhóm 8 – VP2008 | Xử lý tín hiệu tương tự và số

Thực hiện phép biến đổi DTFT, DFT/FFT trên bộ kit TMS320C5515
complex dtft();
*/

/* DTFT at one frequency

void dtftr(L, x, N, X, wa, wb)
X, wa, wb); */
double *x, wa, wb;
dimensional real */
complex *X;
dimensional complex */
int L, N;
{
int k;
double dw = (wb-wa)/N;

/* usage: dtftr(L, x, N,
/* \(x\) is \(L\)/* \(X\) is \(N\)-

/* frequency bin width */

for (k=0; k<N; k++)
X[k] = dtft(L, x, wa + k*dw);
\(X(\om\sb{k})\) */
}

B.

/* \(k\)th DTFT value

Phần FFT
1.

MÔ HÌNH LÝ THUYẾT
Giới thiệu giải thuật thực hiện trong thí nghiệm
Trong phần thí nghiệm thực hiện giải thuật FFT trên phần cứng là bộ
KIT TMS320C5515, chúng ta sử dụng giải thuật tính FFT “chia để trị
loại cơ số 2” (FFT Algorithm with Radix-2). Giải thuật này là một loại
biến đổi DFT nhưng có ưu điểm là giảm độ phức tạp tính toán cho N
điểm từ
xuống
.
Đây là loại giải thuật rất cơ bản và phổ biến nên trong khuôn khổ bài báo
cáo thí nghiệm hạn hẹp này, chúng tôi xin được không trình bày. Nội
dung thuật toán này có thể được tìm thấy dễ dàng trong các tài liệu tham
khảo được liệt kê ở cuối bài cũng như các tài liệu khác về xử lý số tín
hiệu.

2.

MÔ HÌNH THÍ NGHIỆM

Tạo tín hiệu
bằng
MATLAB

Thực hiện
FFT trên
MATLAB

Vẽ đồ thị
trên miền
tần số

Thực hiện
FFT trên
bộ KIT

Vẽ đồ thị
trên miền
tần số

So sánh và
nhận xét

8

Hình 6 Mô hình thực hiện thí nghiệm

Nhóm 8 – VP2008 | Xử lý tín hiệu tương tự và số

Thực hiện phép biến đổi DTFT, DFT/FFT trên bộ kit TMS320C5515

3.

PHẦN THỰC HÀNH
a)

Tạo tín hiệu đầu vào và thực hiện giải thuật FFT bằng MATLAB

fs = 1000;
t = 0:1/fs:(128-1)/fs;
x1 = 3*sin(2*pi*150.*t)+5*sin(2*pi*300.*t)+1*rand(size(t));
figure
stem(x1);
ylabel('Bien do cua tin hieu');
xlabel('Mau cua tin hieu');
title('Tin hieu x1 sau khi lay mau voi tan so fs = 1000');
m = length(x1) ;
n = pow2(nextpow2(m)) ;
X1 = fft(x1,n);
magX1 = abs(X1);
f = (-n/2:n/2-1)*(fs/n);
figure
stem(f,magX1);
xlabel('Tan so (Hz)');
ylabel('Bien do cua tin hieu');
title('FFT su dung MATLAB');

Kết quả hiển thị trên MATLAB sau khi chạy chương trình trên.

Hình 7 Tín hiệu sau khi lấy mẫu với tần số fs = 1000 Hz

9

Nhóm 8 – VP2008 | Xử lý tín hiệu tương tự và số

Thực hiện phép biến đổi DTFT, DFT/FFT trên bộ kit TMS320C5515

Hình 9 Phổ tần số tín hiệu sau phép biến đổi FFT trên MATLAB

Chúng ta cũng có thể vẽ lại phổ tần số của tín hiệu dưới dạng đồ thị
nối điểm như hình sau

10

Hình 8 Đồ thị nối điểm của phổ tần số tín hiệu

Nhóm 8 – VP2008 | Xử lý tín hiệu tương tự và số

Thực hiện phép biến đổi DTFT, DFT/FFT trên bộ kit TMS320C5515

Đến bước này, chúng ta đã thực hiện xong nhánh trên của sơ đồ thí
nghiệm ở hình 6.
b)

Tạo file ngõ vào cho bộ KIT
Đoạn chương trình sau dùng để tạo file ngõ vào cho bộ KIT do các
mẫu của tín hiệu khảo sát được tạo ra bằng chương trình MATLAB
nên các mẫu này sẽ được lưu dưới dạng biến ma trận 1x128. Để
KIT vốn giao tiếp với máy tính qua phần mềm CCS làm việc với
ngôn ngữ C có thể đọc được các giá trị này, chúng ta cần chuyển
các giá trị trên lưu thành file đuôi .bin

samples1 = round(x1);
var = zeros(1,256);
% Re != 0, Im = 0
for i = 0:127
var(1+2*i) = samples1(1+i);
end
samples1 = var;
id = fopen('D:\Project_TMS320C5515\workspace\FFT\samples1.bin','wb');
fwrite(id, samples1,'int16');
% important: int16
fclose(id);

c)

2.3 Chạy chương trình trên CCS và kết nối với KIT TMS320C5515
để cho kết quả
Thư viện DSPLib đã cung cấp hàm toán để tính FFT. Chúng ta sẽ
sử dụng chúng để tính toán phổ tín hiệu.
Đầu tiên, chúng ta phải thêm thư viện bao gồm các thư viện có sẵn
trong CCS, các thư viện ngoài thêm vào và các file assembly hỗ trợ
thêm cho chương trình như sau.
Lưu ý phải tạo tất cả đường dẫn đến các thư viện này bằng cách
nhấp phải chuột vào "Active Project → Properties → C/C++ Build
→ Tool Settings → C5500 Compiler → Include Options → Add
dir to #include Search Path (--include_path, -I)"

11

Hình 10 Giao diện thẻ C/C++ Project sau khi thêm thư viện

Nhóm 8 – VP2008 | Xử lý tín hiệu tương tự và số

Thực hiện phép biến đổi DTFT, DFT/FFT trên bộ kit TMS320C5515

Thư mục chương trình viết bằng ngôn ngữ C gồm các file thư viện
và file main.c và transceiver_file.c
File main.c
#include
#include
#include
#include
#include
#include

<stdio.h>
<math.h>
<tms320.h>
<dsplib.h>
"usbstk5515.h"
"transceiver_file.h"

//#include "t6_SCALE.h"
#define
NX
128
int main()
{
DATA x[2*NX], *px = x ;
// Uint16 i ;
printf(" Import samples1.bin \n ") ;
ImportFile( 2*NX , (Uint16*)px ) ;
// compute
printf(" Processing \n ") ;
cfft(x,NX, NOSCALE);
cbrev(x,x,NX);
printf(" Export FFT1.bin \n ") ;
ExportFile( 2*NX, (Uint16*)px ) ;
printf(" Done \n ") ;
return 0 ;
}

Chương trình chính main.c thực hiện việc gọi hàm cfft để thực hiện
giải thuật FFT từ chương trình con CFFT.C.
Việc đọc dữ liệu đưa vào KIT, lấy dữ liệu từ KIT và ghi kết quả
tính toán từ KIT vào file FFT1.bin được thực hiện nhờ vào chương
trình transceiver_file.c.
File transceiver_file.c
#include <stdio.h>
#include "usbstk5515.h"
#include "transceiver_file.h"
Uint16 ImportFile( Uint32 pixel, Uint16 *p_buffer_data )
{
FILE *fp ;
Uint16 data , pdata[2] ;
Uint32 i ;
fp = fopen ( "D:\\Project_TMS320C5515\\workspace\\FFT\\samples1.bin",
"rb" ) ;
if ( fp == (FILE*)NULL )
{
printf(" Error : can't open file_in \n" ) ;
return 1 ;
// check error
}
for ( i = 0 ; i < pixel; i++ )
{

Nhóm 8 – VP2008 | Xử lý tín hiệu tương tự và số

12

Thực hiện phép biến đổi DTFT, DFT/FFT trên bộ kit TMS320C5515
fread(pdata, 1, 2, fp);
data = *(pdata) | ((*(pdata+1) ) << 8);
p_buffer_data[i] = data ;
}
fclose ( fp ) ;
return 0 ;
}
Uint16 ExportFile( Uint32 pixel, Uint16 *p_buffer_data )
{
FILE *fp ;
Uint32 i ;
fp = fopen ( "D:\\Project_TMS320C5515\\workspace\\FFT\\FFT1.bin", "wb"
) ;
if ( fp == (FILE*)NULL )
{
printf(" Error : can't open file_in \n" ) ;
return 1 ;
// check error
}
for (i = 0; i < pixel; i++ )
{
fputc(p_buffer_data[i] & 0xFF, fp);
fputc(p_buffer_data[i] >> 8, fp);
// fwrite(p_buffer_data, 1, pixel, fp);
}
fclose(fp) ;
return 0 ;
}

Kết quả thực hiện khi build và debug thành công trên phần mềm
Code Composer Studio kết nối với phần cứng KIT TMS320C5515.
Giao diện phần mềm CCS được ghi lại như hình sau.

13

Nhóm 8 – VP2008 | Xử lý tín hiệu tương tự và số

Thực hiện phép biến đổi DTFT, DFT/FFT trên bộ kit TMS320C5515

Hình 11 Giao diện chính chương trình CCS

Hình 12 Giao diện thẻ Debug

Hình 13 Kết quả tính toán FFT trên KIT được ghi lại trong file FFT1.bin

d)

Hiển thị kết quả sau khi chạy trên KIT trên MATLAB
Đoạn chương trình sau giúp đọc file FFT1.bin sau khi chạy thuật
toán FFT trên KIT và hiển thị phổ tần số trên MATLAB

id = fopen('D:\Project_TMS320C5515\workspace\FFT\FFT1.bin','rb');
fft_board = fread(id,256,'int16');
fclose(id);
fft_board = fft_board';

Nhóm 8 – VP2008 | Xử lý tín hiệu tương tự và số

14

Thực hiện phép biến đổi DTFT, DFT/FFT trên bộ kit TMS320C5515
for k = 0:127
new(1+k) = fft_board(1+2*k)+1i*fft_board(2+2*k);
end
abs_new = abs(new) ;
stem(f,abs_new)
xlabel('Tan so (Hz)');
ylabel('Bien do cua tin hieu');
title('FFT su dung KIT TMS320C5515');

Hình 14 Phổ tần số tín hiệu sau phép biến đổi FFT trên KIT TMS320C5515

Phổ tín hiệu được vẽ lại dưới dạng đồ thị nối điểm

15

Nhóm 8 – VP2008 | Xử lý tín hiệu tương tự và số

Thực hiện phép biến đổi DTFT, DFT/FFT trên bộ kit TMS320C5515

Hình 15 Đồ thị nối điểm của phổ tần số tín hiệu

Đến bước này, chúng ta đã thực hiện xong nhánh dưới của sơ đồ thí
nghiệm
Tiếp theo sẽ là so sánh kết quả và nhận xét.
e)

So sánh và nhận xét 2 kết quả

16

Nhóm 8 – VP2008 | Xử lý tín hiệu tương tự và số

Thực hiện phép biến đổi DTFT, DFT/FFT trên bộ kit TMS320C5515

Hình 16 So sánh phổ tần số

Hình 17 So sánh đồ thị nối điểm

Từ đồ thị, chúng ta có thể dễ dàng nhận thấy giải thuật FFT thực
hiện bằng MATLAB và bằng bộ KIT TMS320C5515 cho kết quả
gần như nhau.
Các tần số cực đại, biên độ, độ suy hao, hình dạng của các búp phổ
chính như nhau, ngay cả các búp phổ phụ cũng khác biệt rất ít trong
2 thí nghiệm tính toán trên MATLAB và trên bộ KIT.
→ Bộ KIT TMS320C5515 do TI sản xuất hoạt động tin cậy cho kết
quả với độ chính xác cao.
Nhóm 8 – VP2008 | Xử lý tín hiệu tương tự và số

17

Thực hiện phép biến đổi DTFT, DFT/FFT trên bộ kit TMS320C5515

f)

Kiểm chứng lại thí nghiệm với tín hiệu x2

fs = 1000;
t = 0:1/fs:(128-1)/fs;
x2 = 2*sin(600*pi*t)+4*sin(200*pi*t)+5*sin(400*pi*t)+1*rand(size(t));

Thực hiện tương tự các bước như trên, chúng ta thu được kết quả
sau

Hình 18 Phép biến đổi FFT của x2 trên MATLAB và trên KIT TMS320C5515

g)

V.

Nhận xét kết quả thu được
Một lần nữa chúng ta lại thu được kết quả từ bộ KIT tương tự như
kết quả tính toán lí thuyết từ MATLAB.

KẾT LUẬN
Các phép biến đổi DTFT, DFT/FFT là những kiến thức căn bản trong lĩnh vực xử lý
tín hiệu. Thông qua bài thí nghiệm, sinh viên được tiếp cận với phép biến đổi trên
phần cứng và kiểm nghiệm lại các kết quả của phép biến đổi bằng bộ KIT
TMS320C5515. Từ đó, sinh viên có cái nhìn thực tế hơn về các phương pháp này.

VI. TÀI LIỆU THAM KHẢO
[1] Sophocles J. Orfanidis, Introduction to Signal Processing, 2010.
[2] Vinay K. Ingle and John G. Proakis, Digital Signal Processing using MATLAB
v4, 1997, PWS Publishing Company.
[3] TMS320C55x DSP Library Programmer’s Reference, Texas Instrument.
[4] Sen M Kuo and Bob H Lee, Real-Time Digital Signal Processing –
Implementation, Applications, and Experiments with the TMS320C55X, John
Wiley & Son Ltd, 2001.
[5] J. G. Proakis and D. G. Manolakis, Digital Signal Processing − Principles,
Algorithms, and Apllications, 3rd Ed., Englewood Cliffs, NJ: Prentice-Hall, 1996.
Nhóm 8 – VP2008 | Xử lý tín hiệu tương tự và số

18