Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 12 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
12
Dung lượng
353,2 KB
Nội dung
369 thành N miền và gán cho mỗi miền một giá trị nhị phân nh trong hình 13.14. Sự biểu diễn này không có ý nghĩa gì về mặt vật lý, và chức năng của sự biểu diễn này, nh chúng ta muốn, chỉ dùng trong lĩnh vực xử lý tín hiệu số. Tất cả các tín hiệu số này gọi là điều mã xung (Pulse Code Modulated - PCM). Để có thể thực sự thấy giá trị các mức xám chúng ta cần lợng tử hoá ngợc. Trong bớc này, các giá trị nhị phân biểu diễn một độ chói cụ thể. Các bớc thực sự của quá trình này biểu diễn trong hình 13.15. Trong lĩnh vực tơng tự và lĩnh vực số quá trình này gọi là chuyển đổi từ tơng tự sang số (A/D) và chuyển đổi từ số sang tơng tự (D/A). Trong các ứng dụng nh trờng hợp biến đổi cosin 2-D thì có một chút khác biệt. Cái mà chúng ta cần làm trong trờng hợp này là biến đổi từ một tập hợp các dấu phẩy động sang một tập hợp các bít nhị phân và ngợc lại. Biểu vì biến đổi ngợc của lợng tử hoá là biến đổi từ nhiều vào một, nên quá trình này không thể tiến hành một cách thông thờng đợc. May mắn thay, có một số phơng pháp để lợng tử hoá và lợng tử hoá ngợc. Chúng ta sẽ nghiên cứu các phơng pháp này ở phần dới đây. d N d N-1 d 5 d 4 d 3 d 2 d 1 d 0 N - 1 N-2 . . . . . . . . . . . . . . 4 3 2 1 0 11111111 11111110 . . . . . . . . . . . . . . 00000100 00000011 00000010 00000001 00000000 Y U Y L Khoảng tín hiệu. Dạng thập phân. Dạng nhị phân. d i { i= 0, ,1} là các mức chia. 370 Hình 13.14 Lợng tử hoá. 13.5.1 Lợng tử hoá đồng đều Đây là dạng đơn giản nhất của lợng tử hoá. Trong dạng lợng tử hoá này, khoảng (y u - y L ) đợc chia thành N khoảng cách đều nhau (xem trong hình 13.14). Các giá trị từ d 0 đến d N đợc gọi là các mức chia. Các mức lợng tử biểu diễn giá trị thực của các mức chia trong khoảng từ d i đến d i+1 dới dạng số nhị phân bằng i. Vì vậy, nếu nh d i+1 < y d i thì giá trị của lợng tử đầu ra = i. Mức lợng tử đầu ra có thể biểu diễn theo công thức: )1(N yy yy i Lv L ở đây dấu có nghĩa là làm tròn thành số nguyên gần nhất. Lợng tử hoá ngợc dùng một bảng biến đổi ngợc giữa giá trị lợng tử i và biến đổi ngợc của nó r i 2 1 ii i dd r Tuy nhiên lợng tử hoá đồng đều không quan tâm đến khả năng xảy ra của sự kiện với các giá trị đợc đa ra. Tổng quát, quá trình lợng tử hoá này áp dụng cho trờng hợp tất cả các mức có khả năng xuất hiện bằng nhau. Điều này, trong hầu hết các trờng hợp là không đúng. Dễ nhận thấy là các mức lợng tử hoá tập trung nhiều nhất vào miền mà khả năng xuất hiện của các mức xám nhiều nhất. Điều này dẫn chúng ta đến phơng pháp thiết kế lợng tử hoá dới đây. Hình 13.15 Lợng tử hoá ngợc. Tín hiệu ánh sáng. Tín hiệu tơng tự. t t Lợng tử hoá ngợc hay biến đổi số sang Bộ lọc thông thấp. Tín hiệu dạng nhị phân. Mức đợc tái thiết. 371 13.5.2 Lợng tử hoá không đồng đều Trong phần này chúng ta sẽ xem xét phơng pháp lợng tử hoá không đồng đều tối u nhất trong hệ thống PCM. Các nghiên cứu cho phơng pháp này đã đợc Panter và Dite đa ra trong một cuốn sách xuất bản vào năm 1949. Trong cuốn sách này họ đã đa giải thuật cho lợng tử hoá không đồng đều. Họ đa ra một phơng pháp xấp xỉ tối u cho lợng tử hoá không đồng đều. Giải thuật này sẽ không đúng cho các trờng hợp quá trình lợng tử hoá có quá ít mức chia. Tuy nhiên các giải thuật này đợc phát triển một các trọn vẹn trong một báo cáo cha đợc xuất bản của Lloyd vào năm 1957 và đợc Max kiểm nghiệm vào năm 1960. Một phơng pháp lợng tử hoá kết hợp cả hai phơng pháp của Lloyd và Max thờng đợc gọi là phơng pháp lợng tử hoá Lloyd-Max. Trong phần báo cáo xuất bản sau đó của Lloyd xuất bản vào năm 1982 đã cho thấy có rất nhiều ứng dụng rất thú vị của phơng pháp này. Bản báo cáo này có hai phơng pháp thiết kế, một phơng pháp trong đó giống phơng pháp của Max. Phơng pháp này gọi là phơng pháp II. Phơng pháp I tỏ ra có nhiều ứng dụng và dễ tính toán hơn phơng pháp II. Cả hai phơng pháp thiết kế này đều đợc trình bày ở phần dới đây. Nếu chúng ta coi rằng các mức lợng tử hoá đợc cho bởi d i , i = 0 N (xem hình 13.16) và các mức khôi phục cho bởi r i , i = 0 N và giá trị đo của tất cả các mức này cho bởi: N k d d k k k dyypryE 0 2 1 )()( (13.49) ở đây y là tín hiệu đầu vào còn p(y) là khả năng xuất hiện của y. 372 Hình 13.16 Các mức lấy mẫu và khôi phục. Hình 13.17 Các xử lý lấy mẫu và khôi phục. Hình 13.17 cung cấp sơ đồ khối của quá trình lợng tử hoá và lợng tử hoá ngợc. Tín hiệu vào y(t) phải đợc coi là đã biết khả năng xuất hiện. Vấn đề đặt ra là phải xác định các mức lấy mẫu và các mức khôi phục sao cho méo tín hiệu là nhỏ nhất. Viết lại biểu thức (13.49 ): i i d d i d d dyyprydyypryE 1 1 0 )()( )()( 2 1 2 0 d N d N-1 d 5 d 4 d 3 d 2 d 1 d 0 Các mức chia. y L y u y mẫu i Lợng tử hoá. Lợng tử hoá ngợc. y(t) r i N-1 3 2 1 0 Mẫu i r i r 0 . . . . LUT cho lợng tử hoá ngợc. 373 11 )()( )()( 22 n N i i d d N d d i dyyprydyypry (13.50) Vi phân (13.50) theo d I và cho biểu thức này bằng không chúng ta đợc d r r i i i 1 2 (13.51) i = 1,2,3, ,N Lấy vi phân (13.50) theo r i chúng ta đợc. 1 )()(2 i i d d i i dyypry r E 1 1 )( )( i i i i d d d d i dyyp dyyyp r (13.52) i = 0, 1, , N - 1. Hình 13.18 Phơng pháp Newton-Raphson cho tính các biểu thức trong ngoặc. Biểu thức (13.50) và biểu thức (13.51) đa ra phơng pháp xác định các mức lấy mẫu và các mức khôi phục dùng cho cả phơng pháp của Lloyd-Max hoặc là phơng pháp Lloyd. Phơng pháp Lloyd-Max Lloyd và Max đã phát triển độc lập thuật toán để giải quyết biểu thức (13.50) và (13.51). Các chi tiết của thuật toán này vẫn cha đợc cung cấp. Trong phần này tôi sẽ cung cấp cho bạn một thuật toán dựa trên thuật toán Lloyd-Max nhng có các chi tiết 374 cụ thể hơn. Tôi cũng sẽ cung cấp cho bạn phần mềm thiết kế N mức lấy mẫu và khôi phục. Thuật toán này gồm các bớc sau: 1. Chọn một giá trị cho r 0 . d 0 và d N đợc coi là đã biết. 2. Cho i = 1,2, ,N - 1. a. Tính d i từ i i i ii d d d d i dyyp dyyyp r 1 1 )( )( 1 b. Tính r i từ r d r i i i 2 1 3. Tính N N N N d d d d dyyp dyyyp r 1 1 )( )( / 4. Nếu r N-1 r / , thay đổi lại r 0 và lặp lại các bớc từ bớc 2 cho đến bớc 4. Bây giờ tôi sẽ cung cấp cho bạn các chi tiết cần thiết để tạo ra thuật toán trên. Chi tiết cho việc tính d i trong bớc 2a của thuật toán Lloyd-Max. d i có thể tính theo hàm sau đây: i i i i d d d d ii dyyp dyyyp rdf 1 1 )( )( )( 1 (13.53) Có thể rút ra biểu thức gốc theo công thức lặp Newton-Raphon đợc cho bởi: 375 )( )( / 1 l i l i l i l i df df dd (13.54) ở đây l là số lần lặp và f / (d i ) là đạo hàm của f(d i ) theo d i cho theo công thức: i i i i i i d d d d i d d i i dyyp dyyyp d dyyp dp df 1 1 1 )( )( )( )( )( / (13.50) d 0 i là giá trị ban đầu. Phép lặp diễn ra cho đến khi f d i ( ) Giá trị ban đầu cho d 1 là d 0 + , cho d 2 là d 1 + , , ở đây là một giá trị nhỏ. Giá trị gốc của f(d i ) có thể tính theo dùng phơng pháp nửa lặp (bisection). Ưu điểm của phơng pháp Newton-Raphson là khả năng hội tụ nhanh. Nhợc điểm là đạo hàm của một hàm thờng có giá trị rất nhỏ và dễ dẫn đến giá trị zero gây nên sự không ổn định của các số. Các chi tiết cho việc thay đổi r 0 . Giá trị r 0 có thể thay đổi lại nếu chúng ta nhận thấy rằng giá trị gốc của hàm: g r r r N ( ) / 0 1 (13.56) Giá trị gốc này có thể rút ra dùng các giả thiết của Newton-Raphson theo: r r g r g r l l l l0 1 0 0 0 ( ) ( ) / (13.57) Đạo hàm của g(r 0 ) có thể rất khó khăn cho việc phân tích. Trong trờng hợp này cần có một công cụ tính toán khác. Chúng ta có thể thay thế đạo hàm bằng một giá trị hằng số có cùng dấu nh biểu thức trong dấu ngoặc (xem hình 13.8). Trong trờng hợp này thì tích phân lâu hội tụ hơn. Tiếp theo là một chơng trình cho tính các mức lợng tử hoá theo phơng pháp Lloyd-Max. Tích phân đợc đa ra dùng phơng pháp tích phân Romberg bởi vì nó chính xác hơn phơng pháp tích phân Simpson. Chơng trình cho phép bạn thiết kế lợng tử hoá đồng đều, Gauss hoặc là Laplace. Gauss )2/( 2 22 2 1 )( y eyp 376 Laplace p y e y ( ) 2 2 Đồng dạng: 0 1|<=y| 1 )( lại còn hợp trờng các yp Chơng trình này có thể thay kiểm tra trên cả ba loại phân bố (với = 1) với 6 bit cụ thể là 64 mức lợng tử hoá. Bạn cần chú ý khi bạn chạy chơng trình này bạn cần cho số của lựa chọn. Lựa chọn đầu tiên là số bit bạn muốn xây dựng cho mức lợng tử, lựa chọn thứ hai là lựa chọn về các mức phân bố (phân bố Gauss, phân bố đồng đều, hoặc phân bố Laplace), và thứ ba cũng là lựa chọn cuối cùng là lựa chon trong khi tính biểu thức trong ngoặc của g(r 0 ). Lựa chọn của g(r 0 ) có thể là lựa chọn cho một số, một giá trị hoặc là một giá trị tăng dần. Lý do của sự lựa chọn này là kết quả của phơng pháp tính toán có thể là một số không thể tính đợc, ví dụ khi ta chia cho một số quá nhỏ. Qua kinh nghiệm tôi nhận thấy rằng phân bố Gauss và phân bố đồng đều thờng cho kết quả tính toán rất tốt. Còn cho phân bố Laplace, khi dùng tăng giá trị của biểu thức trong ngoặc sẽ không gặp một khó khăn nào việc tạo mã 6 bit. Chơng trình 13.9 MAXQ1.C Chơng trình cho tính các mức lợng tử Lloyd-Max. /*Program 13.9 "MAXQI.C". Program for the Lloyd- Max quantizer.*/ /* Program for designing the Lloyd-Max quantizer for Gauss, uniform or Laplace distribution.*/ #include <stdio.h> #include <stdlib.h> #include <math.h> #include <alloc.h> #include <conio.h> double decision_level(double , double); double f1(double); double f2(double); double p(double); 377 double Romberg(double, double, double (*)(double)); char ch; void main() { double *r,*d,r1,delta,alpha; int i,m,N,k,xt,yt; double der,rt,deltal, delta2; char ch1,file_name[16]; FILE *fptr; clrscr(); printf("Enter number of bits >"); scanf("%d",&m); N=1<<m; r=(double *)malloc((N+1)*sizeof(double)); d=(double *)malloc((N+1)*sizeof(double)); printf("Enter choice of distribution:"); printf("\n 1. Gauss."); printf("\n 2. Uniform."); printf("\n 3. Laplace. >(1,2 or 3): "); while(((ch=getch())!='1')&&(ch!='2')&&(ch!='3')); putch(ch); switch(ch) { case '1': r[0]=-5.0; d[0]=-20.0; break; case '2': r[0]=-0.98; d[0]=-1.0; break; case '3': r[0]=-6.0; d[0]=-100.0; if(m==6) r[0]=-8.0; } printf("\n\n The program uses Newton-Raphson's method"); printf("\n to compute the proper value of r[01. You have"); 378 printf("\n a choice between using calculated values, a"); printf("\n fixed value or decreasing values for the "); printf("\n derivatives at every update or calculated "); printf("\n values. Always pick the first choice unless "); printf("\n you encounter numerical problems."); xt=wherex(); yt=wherey(); gotoxy(1,21); printf("Recommendations: Guassian or Uniform select I or 2.\n"); printf(" Laplace select 3."); gotoxy(xt,yt); printf("\n Enter choice:"); printf("\n 1. Calculated derivative of the error function."); printf("\n 2. Fixed value."); printf("\n 3. Decreasing derivative >"); while(((ch1=getch())!='1')&&(ch1!='2')&&(ch1!='3' )); putch(ch1); gotoxy(1,21); delline(); delline(); delta=20.0; k=0; xt=wherex(); yt=wherey(); gotoxy(70,25); textattr(WHITE+(GREEN<<4)+BLINK); cputs("WAIT"); while(fabs(delta)>=1.e-7) { k++; if(k>=1000) break; /* Computing the derivative of the function: f(r[0])=r[N-1]-r1, numerically. */ switch(ch1) { [...]... textattr(WHITE+(BLACK . printf("
-%c %9.6f ",(char)2 36, r[0]); break; case '2': printf("
%9.6f %9.6f ",d[0],r[0]); } for(i=1;i<N;i++) printf("
%9.6f %9.6f ",d[i],r[i]);. case '2': r[0]=-0.98; d[0]=-1.0; break; case '3': r[0]= -6. 0; d[0]=-100.0; if(m= =6) r[0]=-8.0; } printf("
The program uses Newton-Raphson's method");. )2/( 2 22 2 1 )( y eyp 3 76 Laplace p y e y ( ) 2 2 Đồng dạng: 0 1|<=y| 1 )( lại còn hợp trờng các yp Chơng trình này có thể thay kiểm tra trên cả ba loại phân bố (với = 1) với 6 bit