Kĩ thuật giảm tính toán trung gian

Một phần của tài liệu Nghiên cứu cải thiện tốc độ trích rút đặc trưng vân tay (Trang 38)

Để giảm thời gian tính toán đối vơi hai bộ lọc, kỹ thuật giảm tính toán trung gian được áp dụng qua việc thực hiện tính toán tất cả các giá trị có thể tính được của sin/cos của các góc từ 0 đến 3600

được tính trước và lưu trữ trong hai mảng tĩnh sinT, cosT. Hơn nữa các giá trị Sin(x), Cos(x) trong thư viện toán học là kết quả của việc tính giá trị của biểu thức Talor, có độ phức tạp tính toán cao, mỗi hàm khi cần tính giá trị sin/cos cần đưa lời gọi hàm để xác định giá trị các biểu thức Talor này. Do đó, thời gian thực hiện theo phương pháp cũ là không tối ưu. Thay vào đó, tôi đưa ra giải pháp lưu các giá trị trị sin/cos vào hai mảng tĩnh sinT/ cosT, mỗi lần cần tính giá trị chỉ cần truyền tham số tới mảng tĩnh này. Đối với bộ lọc STFT, do trong Matlab chỉ số mảng được bắt đầu từ 1, nên khi cần xác định giá trị của góc i, thì giá trị của nó nằm ở cột thứ i+1, nghĩa là ta phải gọi sinT[i+1], cosT[i+1].

Các góc được tính trước nằm trong phạm vi từ 0 đến 3600. sinT[i]=(float)sin((double)i*PI/180.0);

cosT[i]=(float)cos((double)i*PI/180.0).

Đối với giá trị của bộ lọc Gabor, tính trước giá trị có thể của mảng 4 chiều Exp[x][y][o][f], các tham số được cải tiến tối ưu nhất có thể, các giá trị này

được tính toán và lưu hết vào mảng gabor

Exp[15][15][(180/GABOR_STEP_ANGLE)+1][25].

Vẫn tư tưởng đó, đối với bộ lọc STFT, việc thực hiện trên Matlab cũng dễ dàng hơn. Tôi tạo một mảng a có giá trị từ [0..360], việc tính trước các giá trị của mảng sinT/cosT được thực hiện như sau:

sinT=sin(a*pi/180); cosT=cos(a*pi/180);

Khi cần tính giá trị của bộ lọc ứng với từng tham số có được, chỉ cần truyền vào mảng để xác định giá trị đó, do đó thời gian truy xuất sẽ nhanh hơn.

Một phần của tài liệu Nghiên cứu cải thiện tốc độ trích rút đặc trưng vân tay (Trang 38)