Báo cáo bài tập lớn Xử lý tín hiệu tương tự và số
Trang 1Phần Trang
Lời mở đầu 2
Lời cảm ơn 3
I Yêu cầu bộ lọc và lý thuyết tổng quát 4
1 Yêu cầu về bộ lọc FIR 4
2 Lý thuyết bộ lọc FIR 4
II Mô phỏng MATLAB và viết chương trình CCS 10
1 Mô phỏng Matlab bài toán bộ lọc FIR 10
2 Yêu cầu phần mềm và phần cứng 14
3 Viết chương trình trên CCS 6.1 16
III Kết quả 23
IV Tài liệu tham khảo 24
Trang 2LỜI MỞ ĐẦU
Xử lý tín hiệu số (Digital Signal Processing – DSP) đã trở thành môn học cơ sở cho nhiều
ngành khoa học, kĩ thuật: Điện- Điện tử, Viễn thông,…Trong đó, phép xử lí cơ bản nhất của DSP là lọc, và các hệ thống được đề cập đến nhiều nhất trong xử lý tín hiệu số là các
bộ lọc số (Digital Filter) Nếu xét về đáp ứng xung có thể chia các bộ lọc số thành 2 loại chính là bộ lọc có đáp ứng xung hữu hạn FIR (Finite Impulse Response) còn gọi là lọc không đệ quy, và bộ lọc có đáp ứng cung vô hạn IIR (Infinite Impulse Response) còn gọi
là lọc đệ quy Xét về đáp ứng tần số biên độ có thể chia các bộ lọc, FIR hay IIR, thành 4 loại cơ bản: thông thấp, thông cao, thông dải và chắn dải Các bộ lọc này có thể được thiết
kế bằng những phương pháp sau đây: phương pháp cửa sổ ( Window Design Techniques), phương pháp lấy mẫu tần số (Frequency Sampling Design Techniques) và phương pháp xấp xỉ tối ưu cân bằng gợn sóng (Optimal Equiripple Design Techniques)
Trong báo cáo bài tập lớn này, nhóm xin phép được trình bày việc thiết kế bộ lọc thông thấp FIR bậc 3 thực hiện trên phần cứng TMS320C5515 của Texas Instrument (TI) để nắm vững lí thuyết về bộ lọc FIR cũng như làm quen với KIT TMS320C5515 và các phần mềm hỗ trợ Code Composer Studio (CCS), MATLAB…
Trang 3LỜI CẢM ƠN
Trên thực tế không có sự thành công nào mà không gắn liền với những sự hỗ trợ, giúp đỡ
ít hay nhiều, dừ trực tiếp hay gián tiếp của người khác Trong suốt thời gian thực hiện báo cáo này, nhóm em đã nhận được sự quan tâm, giúp đỡ của quý Thầy cô và bạn bè
Với lòng biết ơn sâu sắc nhất, nhóm xin chân thành cảm ơn PGS.TS Lê Tiến Thường đã hướng dẫn nhóm trong việc tiếp cận đến các vấn đề Xử lý số tín hiệu để hoàn thành báo cáo này
Project được thực hiện trong gần suốt học kì 2, bước đầu đã giúp nhóm tìm hiểu thêm về một số kiến thức còn hạn chế và còn nhiễu bỡ ngỡ Do vậy, không tránh khỏi những thiếu sót là điều chắc chắn, nhóm rất mong nhận được những ý kiến đóng góp quý báu của quý Thầy cô và các bạn học cùng lớp để những kiến thức của nhóm trong lĩnh vực này được
hoàn thiện hơn
Trang 4I Yêu cầu bộ lọc và lý thuyết tổng quát
1 Yêu cầu về bộ lọc FIR
Trong project này, yêu cầu thiết kế bộ lọc thông thấp FIR bậc 3, có tần số cắt 𝑓𝑐 =
3000𝐻𝑧
Thiết kế trên KIT TMS 320C5515
2 Lý thuyết bộ lọc FIR
Các hệ thống LTI rời rạc có thể phân loại thành hệ thống FIR ( Finite Impulse Response)
và IRR ( Infinite Impulse Response), đó là nó có đáp ứng xung h(n) hữu hạn hay vô hạn Trong bài báo cáo này, ta chỉ đề cập đến bộ lọc FIR
Đây là dạng bộ lọc có đáp ứng xung h(n) có giá trị trên khoảng thời gian hữu hạn 0 ≤ 𝑛 ≤
𝑀 và bằng 0 ở các giá trị khác:
ℎ = {ℎ0, ℎ1, ℎ2, … , ℎ𝑀, 0,0,0, … } trong đó M được xem như là bậc của bộ lọc Tương ứng với nó, chiều dài của vector đáp ứng xung của bộ lọc FIR ℎ = {ℎ0, ℎ1, ℎ2, … , ℎ𝑀} là 𝐿ℎ = 𝑀 + 1
Các hệ số của đáp ứng xung {ℎ0, ℎ1, ℎ2, … , ℎ𝑀} được gọi theo nhiều cách khác nhau hệ số lọc ( filter coeficients, filter weights, hay filter taps)
Ta đã biết y(n) là tích chập (convolution) của chuỗi đầu vào x(n) với chuỗi bộ lọc h(n), được viết dưới dạng:
𝑦(𝑛) = 𝑥(0)ℎ(𝑛) + 𝑥(1)ℎ(𝑛 − 1) + 𝑥(2)ℎ(𝑛 − 2) … Hay viết rút gọn lại là:
𝑦(𝑛) = ℎ0𝑥(𝑛) + ℎ1𝑥(𝑛 − 1) + ⋯ + ℎ𝑀𝑥(𝑛 − 𝑀) Như vậy, phương trình I/O nhận được từ tổng có trọng số của các mẫu đầu vào hiện tạo và
M mẫu trước đó 𝑥(𝑛 − 1), 𝑥(𝑛 − 2), … , 𝑥(𝑛 − 𝑀)
Trang 5Về mặt lý thuyết, dựa trên đặc điểm của đáp ứng tần số, xử lý tín hiệu số quan tâm đến 4 loại bộ lọc lý tưởng sau đây:
a Bộ lọc thông thấp lý tưởng
Đáp ứng biên độ - tần số : |𝐻𝑑(𝑒𝑗𝜔)| = {1, |𝜔| ≤ 𝜔𝑐
0, 𝑛 𝑐ò𝑛 𝑙ạ𝑖Khi đó đáp ứng xung của bộ lọc thông thấp lý tưởng với trễ nhóm là:
ℎ𝑑(𝑛) = 𝛿(𝑛 − 𝛼) − 𝜔𝑐2
𝜋 sin 𝜔𝑐2(𝑛 − 𝛼) +𝜔𝑐1
𝜋 sin 𝜔𝑐1(𝑛 − 𝛼) Chúng ta có nhận xát là đáp ứng cung của các bộ lọc lý tưởng nói trên có chiều dài vô hạn, xuất phát từ chỉ số −∞ đến +∞, và không nhân quả, dẫn đến không thể thực hiện được về mặt vật lý Khi tổng hợp bộ lọc thực tế, ta phải chấp nhận đáp ứng xung phải xuất pát từ chỉ số 0 để đáp ứng điều kiện nhân quả Khi đó, đáp ứng tần số của bộ lọc thực tế có phần quá độ từ dải thông đến dải chắn, hoặc ngược lại, và được gọi là dải chuyển tiếp (transition
Trang 6band) đồng thời phải có sự gợn sóng (ripple) ở cả dải thông và dải chắn hoặc ít nhất tại một trong hai, dải thông hoặc dải chắn
Việc thiết kế bộ lọc là quá trình tìm ra các tham số, hay dãy đáp ứng xung của bộ lọc, thỏa mãn các yêu cầu chỉ tiêu kỹ thuật cho trước, cụ thể là một số hoặc tất cả các tham số tuyệt đối (absolute specification) sau:
- Tương đối dễ thiết kế và luôn luôn là hê thống ổn định
- Thực hiện được với hiệu quả cao
- Có thể thực hiện được trên cơ sở áp dụng biến đỗi Fourier rời rạc
Hàm đáp ứng pha - tần số của bộ lọc FIR có dạng sau:
𝜃(𝜔) = 𝛽 − 𝛼𝜔, 𝑣ớ𝑖 𝛼, 𝛽 𝑙à 𝑐á𝑐 ℎằ𝑛𝑔 𝑠ố
Và hàm đáp ứng tần số của bộ lọc FIR được cho dưới dạng độ lớn và pha như sau:
𝐻(𝑒𝑗𝜔) = 𝐴(𝑒𝑗𝜔)𝑒𝑗𝜔, 𝑣ớ𝑖𝐴(𝑒𝑗𝜔) 𝑙à ℎà𝑚 𝑡ℎự𝑐 Dựa trên tính chất đối xứng hay phản đối xứng của dãy đáp ứng xung và chiều dài N của dãy đáp ứng xung, người ta phân loại bộ lọc FIR làm 4 loại sau đây:
a Bộ lọc FIR loại 1:
h(n) đối xứng, N lẻ, 𝛽 = 0, 𝛼 = 𝑁−1
2
Trang 7𝐻(𝑒𝑗𝜔) =
[
∑ 𝑎(𝑛)𝑐𝑜𝑠𝑛𝜔
𝑁−1 2
dẫn đến: 𝐴(𝑒𝑗𝜔) = ∑ 𝑐(𝑛)𝑠𝑖𝑛𝑛𝜔
𝑁−1 2
2−𝑁−1
2 𝜔
Trang 8Trong phần này ta xét phương pháp thiết kế dựa trên phương pháp cửa số
Tư tưởng cơ bản của phương pháp cửa sổ là tìm ra đáp ứng xung của bộ lọc lý tưởng rồisau đó cắt xén ở hai đầu ( hay nhân với một hàm của sổ) dãy đáp ứng xung đó sao cho
ta thu được một bộ lọc FIR pha tuyến tính, đồng thời là nhân quả Điểm nhấn mạnh ở phương pháp này là tìm ra đáp ứng xung thích hợp của bộ lọc lý tưởng và lựa chọn hàm của sổ thích hợp Về mặt lý tưởng, bộ lọc thông thấp lý tưởng pha tuyến tính có độ lợi dải thông bằng 1 và đáp ứng tần số bằng 0 trên toàn dải chắn, tức là:
𝐻𝑑(𝑒𝑗𝜔) = {𝑒𝑗𝜔, |𝜔| ≤ 𝜔𝑐
0 , 𝑛 𝑐ò𝑛 𝑙ạ𝑖 , với 𝜔𝑐 𝑙à 𝑡ầ𝑛 𝑠ố 𝑐ắ𝑡 𝑣à 𝛼 𝑙à 𝑡𝑟ễ 𝑛ℎó𝑚 Thì ta sẽ thu được dãy đáp ứng xung
Để thu được đáp ứng xung của bộ loc FIR về mặt thực tế, phương pháp cửa số dùng kỹ thuật nhân hàm đáp ứng xung của bộ lọc lý tưởng ℎ𝑑(𝑛) với một hàm cửa sổ w(n), với
Trang 9w(n) là một hàm đối xứng với trong khoảng từ 0 đến N-1 và bằng 0 trong khoảng còn lại Kết quả là hàm đáp ứng xung của bộ lọc thực tế h(n) là đối xứng hoặc phản đối xứng với 𝛼 = 𝑁−1
Trang 10II Mô phỏng MATLAB và lập trình trên CCS
1 Mô phỏng Matlab bài toán bộ lọc FIR
Trước khi thiết kế bộ lọc FIR dựa trên yêu cầu đặt ra, nhóm thực hiện thiết kế bộ lọc FIR trên Matlab bằng công cụ fdatool của nó Sau đó tiến hành mô phỏng trên Simulink dựa vào bộ lọc FIR đã được thiết kế với một số mẫu tín hiệu
Tổng quan về công cụ thiết kế bộ lọc số FDATool
Công cụ thiết kế bộ lọc số (FDATool) cung cấp cho ta những kĩ thuật iên tiến để thiết kế, phân tích, mô phỏng các bộ lọc số Nó cho phép nâng cao khả năng xử lý hệ thống trong thời gian thực như với bộ lọc thích nghi, bộ lọc đa nhiệm và sự chuyển đổi giữa chúng
Ở hộp công cụ hỗ trợ thiết kế bộ lọc FIR gồm:
+ Tramg bị cho thiết kế bộ lọc FIR bao gồm các chức năng giảm thiểu về thứ tự, về gợn song, về pha, về bang kề bên, về điểm đơn bang, lỗi xấp xỉ, song hài và độ gợn song lớn nhất của thiết kế
+ Thiết kế với bộ lọc FIR gọn nhẹ, tối ưu với những thiết kế pha phi tuyến và giảm thiểu được lỗi
+ Thiết kế bộ lọc FIR nửa băng tần được trang bị bao gồm: phương pháp cửa sổ, phương pháp hình vuông…
Tiến hành thiết kế bộ lọc FIR với fdatool
+ Gõ lệnh >>fdatool trên command window, hiện ra cửa sổ làm việc Filter Design & Analysis Tool
+ Trong cửa sổ làm việc, thiết kế bộ lọc FIR theo yêu cầu, sử dụng phương pháp cửa sổ (Design/Window)
Trang 11Hình 1 Bộ lọc thông thấp FIR dùng phương pháp cửa sổ trong Design và Response
Hình 2 Chọn bậc bộ lọc trong Filter và sử dụng cửa sổ hình chữ nhật bằng cách chọn
Rectangular Window trong Options
Trang 12Hình 3 Trong Frequency chọn Fc- tần số cắt của bộ lọc FIR và tần số lấy mẫu- Fs
Cuối cùng, nhấn Design Filter để hoàn thành việc thiết kế bộ lọc
Ta thấy đáp ứng tần số của bộ lọc hiển thị trên của sổ Filter
Hình 4 Đáp ứng tần số của bộ lọc hiển thị trên cửa sổ Filter
Và đáp ứng xung của FIR được xuất ra bằng cách chọn File/ Export…
Trong Command Window sẽ hiện ra bảng Num chứa các giá trị của h(n)
Trang 13Hình 5 Các giá trị của h(n)
Do vậy, ta được ℎ(𝑛) = {0.2406, 0.2594, 0.2594, 0.2406}
Dựa vào thiết kế bộ lọc FIR ở trên, mô phỏng bằng code Matlab như sau
Tín hiệu đầu vào x t( ) 5sin(1000t) 3 os(4000 c t) 6sin(20000 t) 8cos(32000 t)
title( 'Output signal Y(t) after X(t) pass throw Lowpass FIlter 3kHz' );
xlabel( 'f[Hz]' ); ylabel( 'Magnitude of Y(t)' );
Trang 14Phổ biên độ của tín hiệu đầu ra và đầu vào như sau
Hình 6 Phổ biên độ của tín hiệu vào và ra
Cho thấy với bộ lọc thông thấp FIR tần số cắt 3kHz, tại các tần số cao 10kHz và 16kHz đều bị triệt tiêu gần như hoàn toàn Vì vậy có thể sử dụng bộ lọc FIR h = {0.2406, 0.2694, 0.2594, 0.2406}
2 Yêu cầu phần mềm và phần cứng
Phần mềm và phần cứng
Các phần mềm và phần cứng cần thiết cho bài tập lớn 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 StudioTM (CCS)
Phần mềm tính toán MATLAB ( thực hiện việc mô phỏng)
Máy tính Laptop, USB, phần mềm hỗ trợ phát song…
Giới thiệu về KIT TMS320C5515 eZdsp™ USB Stick Development Tool
Hình 7 KIT TMS320C5515 eZdsp™ USB Stick Development Tool
Trang 15Cá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, 10 bit SAR ADC, điều khiển LCD, USB 2.0
Hình 8 Sơ đồ khối chức năng bộ KIT
Phần mềm giao tiếp giữa PC với bộ KIT Code Composer StudioTM (CCS)
Trang 16Hình 9 Phần mềm giao tiếp giữa PC với bộ KIT Code Composer Studio TM (CCS)
Code Composer Studio là môi trường phát triển tích hợp được TI xây dựng nhằm hỗ trợ khách hàng trong việc tiếp cận và phát triển ứng dụng với các sản phẩm của TI IDE này
có môi trường làm việc khá thân thiện, có kết hợp với Programer và Debugger
3 Lập trình trên CCS 6.1
Trong project này, nhóm sử dụng tín hiệu đầu vào như trên
( ) 5sin(1000 ) 3 os(4000 ) 6sin(20000 ) 8cos(32000 )
Trang 17Sau khi chạy trong matlab, nhóm được file x.bin để làm ngõ vào của KIT TMS320C5515 Trong CCS 6.1, tạo Project mới để lập trình cho KIT với các thông số bộ FIR tần số cắt 3kHZ như trên:
x = ( float* ) malloc( Lx * sizeof ( float* ) ) ;
y = ( float* ) malloc( ( M + Lx )* sizeof ( float* ) ) ;
ytemp = ( float*) malloc( M * sizeof ( float* ) ) ;
if( ( x == NULL ) || ( y == NULL ) || ( ytemp == NULL ) )
Trang 18void overlap( unsigned short M, float *h ,
unsigned short Lx, float *x ,
float *y , float *ytemp )
{
FILE *pfile_in, *pfile_out ; // open files input and output
Uint8 *pdata_in, *pdata_out ; // buffer_data
Uint32 i, k ; // count var
Uint32 *p_y_Uint32 = ( Uint32* )y ,tempt ; // tranmitter
Uint32 *p_x_Uint32 = ( Uint32* )x, data[4] ; // receiver
float sizefile ;//Int32 sizefile ; // sizefile of input (byte)
Uint32 number_block ; // How many blocks have input file got ?
-//
// -// Open file input and output
-//
// -pfile_in = fopen("D:\\CCS\\workspace\\LowpassFilter\\x.bin","rb"); pfile_out = fopen("D:\\CCS\\workspace\\LowpassFilter\\y.bin","wb");
if ( ( pfile_in == NULL ) || ( pfile_out == NULL ) )
{
Trang 1919
printf(" Error : can't open files \n");
exit(1) ; }
-//
// -// Buffer Data
-//
// -pdata_in = ( Uint8* ) malloc( 4 * Lx * sizeof( Uint8 ) ) ;
pdata_out = ( Uint8* ) malloc( 4 * Lx * sizeof( Uint8 ) );
if ( ( pdata_in == NULL )|| ( pdata_out == NULL ) )
// -// xem file x.bin co bao nhieu byte
-//
// -fseek( pfile_in, 0L , SEEK_END ) ;
sizefile = (float)ftell ( pfile_in ) ; // sizefile dang byte
fseek( pfile_in, 0L, SEEK_SET ) ;
-//
// -// Processing
-//
// -for ( i = 0 ; i < M ; i++ )
ytemp[i] = 0 ; for ( number_block = 0 ; number_block < sizefile /( 4*Lx ) ;
number_block++ )
{
fread( pdata_in, sizeof(Uint8), 4 * Lx, pfile_in ) ;
Trang 20if ( number_block % 50 == 0 ) printf(" %ld \n ", number_block ) ;
-//
// -fread( pdata_in, sizeof(Uint8), 4 * Lx, pfile_in ) ; for ( i = 0 ; i < Lx ; i++ )
{
data[0] = (Uint32)( *( pdata_in + 4*i ) ) ; data[1] = (Uint32)( *( pdata_in + 4*i + 1 ) ) << 8 ; data[2] = (Uint32)( *( pdata_in + 4*i + 2 ) ) << 16 ; data[3] = (Uint32)( *( pdata_in + 4*i + 3 ) ) << 24 ;
*( p_x_Uint32 + i ) = (Uint32)( data[0] | data[1] | data[2] | data[3] ) ;
} // - -//
conv( M, h, Lx, x, y ) ; for ( k = 0 ; k < M ; k++ ) {
y[ k ] += ytemp[ k ] ; ytemp[ k ] = y[ k + Lx ] ; }
-//
// -for (i = 0; i < Lx ; i++ ) {
Trang 21*( pdata_out + 4*i + 3 ) = (Uint8) ( ( tempt & 0xFF000000 ) >> 24 ) ;
} fwrite( pdata_out, sizeof(Uint8), 4 * Lx, pfile_out) ; }
// -//
// -//
fread( pdata_in, sizeof(Uint8), (sizefile - number_block * Lx * 4 ) , pfile_in ) ; for ( i = 0 ; i < Lx ; i++ ) { if ( i < (sizefile/4 - number_block * Lx ) ) { data[0] = (Uint32)( *( pdata_in + 4*i ) ) ;
data[1] = (Uint32)( *( pdata_in + 4*i + 1 ) ) << 8 ;
data[2] = (Uint32)( *( pdata_in + 4*i + 2 ) ) << 16 ; data[3] = (Uint32)( *( pdata_in + 4*i + 3 ) ) << 24 ; *( p_x_Uint32 + i ) = (Uint32)( data[0] | data[1] | data[2] | data[3] ) ; } else *( p_x_Uint32 + i ) = 0 ; }
// -//
conv( M, h, Lx, x, y ) ;
Trang 22for ( k = 0 ; k < M ; k++ )
{
y[ k ] += ytemp[ k ] ; ytemp[ k ] = y[ k + Lx ] ; }
-//
Trang 23III Kết quả
Kết quả thực hiện được
Nhóm đã tìm hiều lý thuyết bộ FIR và một số lý thuyết liên quan trong bài tập lớn này
Tìm được bộ lọc có đáp ứng phù hợp với yêu cầu của project
Thực hiện code trong CCS và build thành công
Mô phỏng MATLAB có kết quả phù hợp với yêu cầu
fwrite( pdata_out, sizeof(Uint8), 4 * M , pfile_out) ;
-//
// -// Close
-//
// -free(pdata_in);
free(pdata_out) ;
fclose(pfile_in) ;
fclose(pfile_out) ;
Trang 24IV Tài liệu tham khảo
Giáo trình “ Xử lý số tín hiệu và wavelet” – Lê Tiến Thường
Giáo trình: “Digital Design of Signal Processing Systems” - Shoab Ahmed Khan
Giáo trình: “Digital Signal Processing Using MATLAB, 3rd Edition” – Vinay K.Ingle và John G.Proakis
Các tài liệu, ebook được thu thập trên mạng Internet