VAI TRÒ CỦA DFT VÀ CÁC HÀM FFT, IFFT CỦA MATLAB



MỤC LỤC
Phần I :SỰ ĐẶC TẢ TRONG MIỀN TẦN SỐ VÀ TÍNH ĐỐI NGẪU (DUALITIES) GIỮA THỜI GIAN VÀ TẦN SỐ
Phần II :VAI TRÒ CỦA DFT VÀ CÁC HÀM FFT, IFFT CỦA MATLAB
Phần III :MỘT SỐ CHƯƠNG TRÌNH MẪU DÙNG NGÔN NGỮ MATLAB  TRONG XỬ LÝ TÍN HIỆU SỐ

Phần I :SỰ ĐẶC TẢ TRONG MIỀN TẦN SỐ VÀ TÍNH ĐỐI NGẪU (DUALITIES) GIỮA THỜI GIAN VÀ TẦN SỐ

            Phân tích tần số là những công cụ được sử dụng rộng rãi trong nhiều bài toán thực tế. Các tín hiệu trong tự nhiên, như tín hiệu địa chất, sinh học, điện từ ... có thể được đặc tả bởi tần số của chúng. Nội dung tần số của một tín hiệu cung cấp cho chúng ta các thông tin quan trọng mà ta muốn trích ra từ tín hiệu.
Ví dụ như đối với tín hiệu sinh học, phân tích tần số thường được dùng cho mục đích chẩn đoán bệnh, phân tích tần số của tín hiệu địa chấn có thể được sử dụng trong việc khám phá cấu trúc của đất và tìm quặng mõ; phân tích tần số của tín hiệu điện từ như tín hiệu rada chẳng hạn, có thể cung cấp thông tin về khoảng cách và tốc độ chuyển động của một máy bay ...
Trong phần này, ta sẽ khảo sát các đặc tính trong miền tần số của một số tín hiệu vật lý phổ biến. Ta cũng thảo luận về tính đối ngẫu giữa các tính chất của tín hiệu trong miền tần số và trong miền thời gian.
PL.1.1. TÍNH ĐỐI NGẪU
Trong các phần trước, ta đã trình bày phân tích tần số của các loại tín hiệu, ta có thể tổng kết như sau :
1. Chuỗi Fourier dùng cho tín hiệu liên tục tuần hoàn.
2. Biến đổi Fourier dùng cho tín hiệu liên tục không tuần hoàn.
3. Chuỗi Fourier dùng cho tín hiệu rời rạc tuần hoàn.
4. Biến đổi Fourier dùng cho tín hiệu rời rạc không tuần hoàn.
Như ta thấy, có hai thuộc tính trong miền thời gian mà nó xác định phổ của tín hiệu trong miền tần số, đó là biến thời gian là liên tục hay rời rạc; tín hiệu là tuần hoàn hay không tuần hoàn theo thời gian. Ta có thể rút ra được các đặc tính đối ngẫu giữa miền tần số và miền thời gian như sau :
1. Tín hiệu liên tục theo thời gian có phổ không tuần hoàn
Từ các công thức biến đổi Fourier và chuỗi Fourier của tín hiệu liên tục theo thời gian, ta thấy phổ của tín hiệu liên tục không tuần hoàn. Bởi vì hàm mũ phức ej2(Ft là một hàm của biến thời gian liên tục nên nó không tuần hoàn với chu kỳ F. Do đó, dải tần số của tín hiệu liên tục mở rộng từ F=0 đến F = ∞.
 2. Tín hiệu rời rạc theo thời gian có phổ tuần hoàn theo tần số
Thực vậy, cả hai chuỗi Fourier và biến đổi Fourier của tín hiệu rời rạc theo thời gian đều tuần hoàn với chu kỳ ω = 2π, và kết quả là dải tần của tín hiệu rời rạc bị giới hạn trong dải từ  ω = 0 tới ω = π (radian), ở đây ω = π tương ứng với tốc độ dao động cao nhất.
3. Tín hiệu tuần hoàn có phổ rời rạc
Như ta thấy, tín hiệu tuần hoàn được phân tích bằng chuỗi Fourier. Các hệ số của chuỗi Fourier tạo thành một phổ rời rạc, phổ vạch, khoảng cách giữa các vạch phổ là ΔF hay Δf lần lượt là nghịch đảo của chu kỳ Tp hay N trong miền thời gian. Đó là :
              ĉ : Đối với tín hiệu liên tục tuần hoàn
              ĉ : Đối với tín hiệu rời rạc tuần hoàn
4. Tín hiệu năng lượng hữu hạn không tuần hoàn có phổ liên tục
Vì X(F) và X(ω) lần lượt là các hàm của các hàm mũ phức ej2pFt và ejwn mà chúng lại là các hàm của các biến liên tục F và ω.
Kết luận :
Sự tuần hoàn với “chu kỳ” ( trong miền thời gian hoặc tần số nó bao hàm một sự rời rạc hóa với khoảng cách giữa các mẫu làĠ trong miền khác (tần số hoặc thời gian) và ngược lại.
Ta cần làm rõ rằng khái niệm “chu kỳ” trong kết luận trên.
- Trong miền thời gian là một khoảng thời gian Tp hoặc N.
- Trong miền tần số là một khoảng tần số F hoặc N.
- Chu kỳ lấy mẫu trong miền thời gian là khoảng cách giữa các thời điểm lấy mẫu TS
- Chu kỳ lấy mẫu trong miền tần số là khoảng cách giữa 2 vạch phổ (F.
Như vậy :   α = Ts hàm ý rằngĠ =Ġ = ΔF.
              và  α = N hàm ý rằng Δf =Ġ
              và  α = Fs hàm ý rằng Ts =Ġ

PL.1.2. SỰ PHÂN LOẠI TÍN HIỆU TRONG MIỀN TẦN SỐ
Ta đã phân loại tín hiệu theo các tính chất trong miền thời gian của nó, trong chương 1. Người ta còn phân loại tín hiệu dựa vào các tính chất của nó trong miền tần số. Cách phân loại này cũng được sử dụng phổ biến trong thực tế.
1.      Phân loại dựa trên phổ mật độ công suất (với tín hiệu công suất) hoặc dựa trên phổ mật độ năng lượng (với tín hiệu năng lượng)
Với cách phân loại này ta có các loại tín hiệu như sau:
- Tín hiệu tần số thấp: là tín hiệu có phổ mật độ công suất (hay phổ mật độ năng lượng) tập trung ở vùng tần số bằng 0
- Tín hiệu tần số cao: là tín hiệu có phổ mật độ công suất (hay phổ mật độ năng lượng) tập trung ở vùng tần số cao.
- Tín hiệu tần số trung bình hay tín hiệu băng thông (bandpass signal)  khi phổ mật độ công suất (hay phổ mật độ năng lượng) tập trung ở một nơi nào đó trong dải  băng tần giữa tần số thấp và tần số cao.
2. Phân loại theo độ rộng băng tần (Bandwith) của tín hiệu
Độ rộng bằng tần là dải tần số mà phổ mật độ công suất hay mật độ năng lượng tập trung trong đó và sự phận bố năng lượng ở bên ngoài dải tần này coi như không đáng kể. Ví dụ : Giả sử tín hiệu tương tự có 95% phổ mật độ công suất (hay năng lượng) trong dải tần số F1 ≤ F ≤ F2  thì băng tần 95% của tín hiệu là (F2 - F1). Tương tự ta có thể định nghĩa băng tần 75%. 90% ...
Theo cách phân loại này ta có các loại tín hiệu như : tín hiệu băng tần hẹp [độ rộng nhỏ hơn 10% công suất của tần số trung tâmĠ], tín hiệu băng tần rộng (ngược lại).
Ngoài ra người ta còn định nghĩa tín hiệu có băng tần hữu hạn (bandlimited) nếu phổ bằng 0 khi |F|≤ B, với B là một số thực dương nào đó.
3. Dải tần của vài tín hiệu trong tự nhiên
Nói chung, Việc phân tích tần số được thực hiện với mục đích trích lấy thông tin từ tín hiệu được khảo sát. Muốn thực hiện tốt mục đích này, ta cần biết dải tần của tín hiệu (một cách gần đúng). Dải tần của các loại tín hiệu : sinh học, địa chấn, điện từ lần lượt được trình bày trong các bảng 3.3, 3.4 và 3.5
Bảng PL1.1 : Dải tần của tín hiệu sinh học.
Loại tín hiệu
Dải tần (Hz)
Electroretinogram (Đồ thị ghi lại đặc tính của võng mạc mắt)
0 - 20
Electronystagmogram (Đồ thị ghi lại sự vận động không chú ý của mắt)
0 - 20
Pneumogram (Đồ thị ghi lại hoạt động hô hấp)
0 - 40
Electrocardiogram (ECG)
0 - 100
Electroencephalogram (EEG)
0 - 100
Electronyogram (Đồ thị ghi lại hoạt động của cơ bắp)
10 - 200
Sphygmomanogram (Đồ thị ghi lại áp huyết )
0 - 200
Speech (tín hiệu thoại)
100 - 4000

Bảng PL.1.2: Dải tần của tín hiệu địa chấn.

Loại tín hiệu

Dải tần (Hz)
  Ồn gió (Wind noise)
100 - 1000
  Tín hiệu khám phá địa chấn (Seismic exploration signals)
10 - 100
  Tín hiệu động đất
0.01 - 10
  Ồn địa chấn (Seismic noise)

0.1 - 1

Bảng 3.5 : Dải tần của các tín hiệu điện từ
Loại tín hiệu
Bước sóng (m)
Dải tần (Hz)
Dải tần sóng vô tuyến điện (radio)
104 - 102
3.104 - 3.106
Tín hiệu radio sóng ngắn
102 - 10-2
3.106 - 3.1010
Radar, viễn thông vệ tinh
10-3 - 10-6
3.1011 - 3.1014
Bức xạ hồng ngoại (Infared)
10-3 - 10-6
3.1011 - 3.1014
Ánh sáng thấy được
3,9.10-7 - 8,1.10-7
3,7.1014 - 7,7.1014
Tia cực tím
10-7 - 10-8
3.1015 - 3.1016
Tia Gamma và tia X
10-9 - 10-10
3.1017 - 3.1018

 Phần  II VAI TRÒ CỦA DFT VÀ CÁC HÀM FFT, IFFT CỦA MATLAB


Trong lĩnh vực xử lý số tín hiệu biến đổi Fourier chiếm vị trí hàng đầu nhờ sự tồn tại các thuật toán hiệu quả tính DFT. Để tính DFT N điểm của một dãy có chiều dài hữu hạn ta có thể viết chương trình tính trực tiếp theo định nghĩa của DFT. Tuy nhiên, cách tính trực tiếp làm mất nhiều thời gian và bộ nhớ máy tính, vì phải thực hiện quá nhiều phép toán nhân và cộng (2N2 phép tính hàm lượng giác, 4N2 phép nhân thực, 4N(N-1) phép cộng thực) và phải lưu nhiều dữ liệu trung gian. Các thuật toán biến đổi Fourier nh../Anh (FFT: Fast Fourier Transform) nhằm cố gắng làm giảm số lượng phép tính và sử dụng ít bộ nhớ hơn trong cách tính trực tiếp. Từ khi Cooley phát hiện ra thuật toán tính nh../Anh biến đổi Fourier rời rạc vào năm 1965, các thuật toán FFT ngày càng khẳng định vai trò của nó.
Vai trò của FFT rất quan trọng vì các lý do sau đây:
-         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 ứng dụng rất rộng của phân tích phổ: viễn thông, thiên văn, vật 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ư 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 Hadamard, biến đổi Haar, biến đổi Wavelet,…
Có nhiều thuật toán FFT được đề xuất, chẳng hạn thuật toán FFT cơ số 2 (Radix-2 FFT algorithms) phân thời gian, thuật toán FFT cơ số 2 (Radix-2 FFT algorithms) phân tần số,…  
MATLAB đã sử dụng thuật toán FFT để phát triển các hàm FFT, IFFT, FFT2, IFFT2, FFTSHIFT. Ở đây ta sẽ giới thiệu 2 hàm FFT và IFFT.
·        Hàm fft:
-  Chức năng: tính biến đổi Fuorier rời rạc.
-  Cú pháp:
  X=fft(x) tính DFTvới số điểm bằng chiều dài của x, x là vector cột có các phần tử là các mẫu của dãy x . Nếu chiều dài của x là lũy thừa của 2 thì thuật toán cơ số 2 được sử dụng, ngược lại một thuật toán khác được sử dụng, thời gian tính sẽ lâu hơn.
X=fft(x,N), tính DFT N điểm của x, các mẫu 0 sẽ được thêm vào nếu chiều dài của x nhỏ hơn N, ngược lại sẽ cắt bỏ các mẫu ở thời điểm n>N-1 nếu chiều dài của x lớn hơn N.
·        Hàm ifft
-         Chức năng:  tính biến Fuorier rời rạc ngược.
-         Cú pháp: x=ifft(X) hoặc x=ifft(X,N).

 Phần  III : MỘT SỐ CHƯƠNG TRÌNH MẪU DÙNG NGÔN NGỮ MATLAB  TRONG XỬ LÝ TÍN HIỆU SỐ



Các chương trình được viết trong phụ lục này nhằm mục đích minh họa và giúp sinh viên làm quen với ngôn ngữ MATLAB cũng như các tiện ích của nó dành cho xử lý tín hiệu số. Để chương trình đơn giản và dễ dàng thấy được thuật toán của nó, ta sẽ không thực hiện giao diện cho người dùng và chương trình được viết theo cách đối thoại trực tiếp trên cửa sổ lệnh (Command Window) của MATLAB, bằng cách dùng các lệnh disp và input. Hầu hết các chương trình sau đây được viết dưới dạng Script và lưu vào các M-file cùng tên của chương trình. Sau khi nhập vào một thư mục nào đó của MATLAB và tạo đường dẫn (nếu thư mục này chưa có sẳn đường dẫn), để chạy chương trình, ta chỉ cần nhập tên chương trình vào, trên Command Window, và gõ Enter. Nếu chương trình được viết dưới dạng Function, người sử dụng cần nắm được các thông số vào, ra, để nhập lệnh đúng cú pháp.

1. dsp13

% Nhập vào vector biến thời gian và biểu thức của tín hiệu, vẽ các loại tín hiệu: tương tự, rời rạc, số.
% Doan hoa Minh 3/6/2000.
%---------------------------------------------------
t=input('Nhap khoang thoi gian, VD:0:0.1:40, t= ');
y=input('Nhap ham so muon ve co bien t, VD:sin(t/4+1), y= ');
loai=input('(analog,type=1;discrete,type=2;digital,type=3)Type =  ');
duong=input('(___,style=1;...,style=2;-.,style=3) stype = ');
if loai==1
   DS1=figure('Name','Type of signal','Color','w',...
   'NumberTitle','off','Position',[50 50 400 300]);
      if duong = =1
      plot(t,y,'r-');
   elseif duong = =2
      plot(t,y,'r:');
   elseif duong = =3
      plot(t,y,'r-.');
   end;
elseif loai= =2
   cham=input('(cham den,cham=1;cham trang,cham=2;...
   khong,cham=3) cham=  ');
   DS1=figure('Name','Type of signal',  'Color','w',...
   'NumberTitle','off','Position',[50 50 400 300]);
      if cham= =1
      stem(t,y,'fulled');
   elseif cham= =2
      stem(t,y);
      elseif cham= =3
      stem1(t,y);
   end;
elseif loai= =3
   [x,z]=stairs(t,y);
   xt(1)=x(1);zt(1)=z(1);
   for n=1:length(x)/2-1
      ni=2*n+1;
      xt(n)=x(ni);zt(n)=z(ni);
   end;
  cham=input('(cham den,cham=1;cham trang,cham=2;...
  khong,cham=3) cham=  ');
      plot(x,z,'g:');hold on;
      if cham= =1
      stem(xt,zt,'fulled');
   elseif cham= =2
      stem(xt,zt);
      elseif cham= =3
      stem1(xt,zt);
   end;
end
axis off;

2. function dsphinh3_26(N,L)

%Ve bien do va pha cua DFT n diem cua day co do dai L.
% Doan hoa minh 2001
%--------------------------------------------------------

function dsphinh3_26(N,L)
xn=ones(1,L);
X=fft(xn,N);
X1=abs(X);
theta1=angle(X);
DS2=figure('Name','DFT N diem’,'Color','w',...
          'NumberTitle','off','Position',[50 50 580 300]);
stem(X1,'filled')
DS2=figure('Name','Type of signal','Color','w',...
          'NumberTitle','off','Position',[50 50 580 300]);
stem(theta1,'filled')

3. dsphinh5_16

% Ve dac tuyen cua mach loc thiet ke bang cua so co chieu dai bang 9 va bang 61.
% Doan Hoa Minh

syms w v;
y=sin((w-v)*9/2)/sin((w-v)/2);
z=int(y,v,-pi/4,pi/4);
z=simple(z)
w=0:0.01:pi;
for n=1:length(w)
Ht(n)=subs(z,'w',w(n));
end
H=exp(-j*4.*w)./(2*pi).*Ht;
tHt=abs(H);

Hdb=20*log10(tHt);
DS1=figure('Name','Type of signal','Color','w',...
          'NumberTitle','off','Position',[50 50 500 200]);
plot(w,tHt)
grid on
DS1=figure('Name','Type of signal','Color','w',...
          'NumberTitle','off','Position',[50 50 500 200]);
plot(w,Hdb,'k')
grid on
syms w v;
y1=sin((w-v)*61/2)/sin((w-v)/2);
z1=int(y1,v,-pi/4,pi/4);
z1=simple(z1)
w=0:0.01:pi;
for n=1:length(w)
Ht1(n)=subs(z1,'w',w(n));
end
H1=exp(-j*4.*w)./(2*pi).*Ht1;
tHt1=abs(H1);

Hdb1=20*log10(tHt1);
DS3=figure('Name','Type of signal',...
   'Color','w','NumberTitle','off','Position',[50 50 500 200]);
plot(w,tHt1)
grid on
DS4=figure('Name','Type of signal',...
   'Color','w','NumberTitle','off','Position',[50 50 500 200]);
plot(w,Hdb1,'k')
grid on

4.firequiripple
% Thiet ke bo loc FIR thong thap pha tuyen tinh dung thuat toan Remez exchange.
% Doan Hoa Minh

M=input('Nhap chieu dai cua dap ung xung, M = ');
dx=11; pdx=12;
disp('Chon dieu kien doi xung, neu doi xung thi nhap: dx')
disp('                  , neu phan doi xung thi nhap: pdx')
dk=input('Dieu kien doi xung :   ');
W=input('Nhap vector trong so,so phan tu bang so dai bang,...
         Vd: W=[1.2 1],W=  ');
disp('Nhap vector cac tan so c../Anh bang tan,...
     mot cap tan so cho moi ')
disp('bang tan, cac tan so nay nam giua 0 va 1,...
     Vd F=[0 .1 .15 1]')
F=input('F = ');
disp('Nhap vector gia tri dap ung tan so mong muon A (gia tri thuc),')
disp('tai cac diem tan so bang c../Anh, A co kich thuoc bang F')
disp ('Vi du: A=[1 1 0 0]')
A=input('A =  ');
N=M-1;
if dk= =11
   [hn,err]=remez(N,F,A,W)
elseif dk= =12
   [hn,err]=remez(N,F,A,W,'Hilbert')
end

w=0:0.001:pi;
f=w./pi;
H= freqz(hn,1,w);  
H1=20*log10(abs(H));

  DS1=figure('Name','Impulse Response','Color','w',...
            'NumberTitle','off','Position',[50 50 500 300]);
   n=0:1:M-1;
   stem(n,hn,'filled','k')
   axis off
  
   DS1=figure('Name','Frequency Response', 'Color','w',...
             'NumberTitle','off','Position',[50 50 500 300]);
   plot(f,abs(H),'k')
   grid on
  
   DS1=figure('Name','Frequency Response (dB)','Color','w',...
  'NumberTitle','off','Position',[50 50 500 300]);
   plot(f,H1,'k')
   ylim([-100 10])
   grid on

5. firsample
% Thiet ke bo loc FIR thong thap pha tuyen tinh bang phuong phap lay may tan so.
% Doan hoa minh 2001.
%---------------------------------------------------------
M=input('Nhap chieu dai cua dap ung xung, M = ');
dx=11; pdx=12;
disp('Chon dieu kien doi xung, neu doi xung thi nhap: dx')
disp('                  , neu phan doi xung thi nhap: pdx')
dk=input('Dieu kien doi xung :   ');
alpha=input('Chon he so alpha, alpha=  ');
disp('Voi h(n) dx k=[0:(M-1)/2] neu M le,...
     k=[0:(M/2)-1] neu M chan')
disp('Voi h(n) pdx k=[0:(M-3)/2] neu M le,...
     k=[1:(M/2)] neu M chan')
disp('Nhap dac tuyen tan so mong muon,...
     tai cac diem tan so wk=2*pi*k/M')
if mod(M,2)= =0
   U=M/2-1;
else
   U=(M-1)/2;
end
for ii=1:U+1
   %kk=int2str(ii);
   %disp('k = 'kk);
   Hrk(ii)=input('Hr(k) = ');
end
G=zeros(U+1,1);
hn=zeros(M,1);
for k=1:U+1
    G(k)=((-1)^(k-1))*Hrk(k);
end
if alpha= =0
   if dk= =11
      for n=1:M
         for k=2:U+1
            hn(n)=hn(n)+G(k)*cos(pi*(k-1)*(2*(n-1)+1)/M);
         end
         hn(n)=(2*hn(n)+G(1))/M;
      end
   elseif dk = =12
      if mod(M,2)= =1
         for n=1:M
            for k=1:U+1
               hn(n)=hn(n)-2*G(k)*sin(2*pi*(k-1)*((n-1)+0.5)/M)/M;
            end
         end
      else
         for n=1:M
            for k=1:U
               hn(n)=hn(n)-2*G(k)*sin(2*pi*k*((n-1)+0.5)/M)/M;
            end
            hn(n)=hn(n)+((-1)^(n))*G(U+1)/M;
         end
      end
   end
elseif alpha= = 0.5
   if dk= =11
      for n=1:M
         for k=1:U+1
            hn(n)=hn(n)+2*G(k)*sin(2*pi*(k-1+1/2)*((n-1)+0.5)/M)/M;
         end
      end
   elseif dk= =12
      for n=1:M
         for k=1:U+1
            hn(n)=hn(n)+2*G(k)*cos(2*pi*(k-1+1/2)*((n-1)+0.5)/M)/M;
         end
      end
   end
end
hn

om=0:0.01:pi;
if mod(M,2)= =0
   Hr=hn(1).*cos(om.*((M-1)/2));
   n=1;
   while n<=U
      n=n+1;
      Hr=Hr+hn(n).*cos(om.*((M-1)/2-n+1));
   end
   Hr=2.*Hr;
else
   Hr=hn(1).*cos(om.*((M-1)/2));
   n=1;
   while n<=(M-3)/2
      n=n+1;
      Hr=Hr+hn(n).*cos(om.*((M-1)/2-n+1));
   end
   Hr=2.*Hr;
   Hr=Hr+hn(U+1);
end
modunH=abs(Hr);
DS1=figure('Name', 'Dap ung bien do',   'Color','w',...
           'NumberTitle','off','Position',[50 50 400 300]);
plot(om,modunH,'k');
grid on

modunHdb=20.*log10(modunH);
DS2=figure('Name','Type of signal',  'Color','w',...
           'NumberTitle','off','Position',[50 50 400 300]);
plot(om,modunHdb,'k');
grid on

teta=-om.*(M-1)/2+angle(Hr);
DS3=figure('Name','Dap ung pha','Color','w',...
          'NumberTitle','off','Position',[50 50 400 300]);
plot(om,teta,'k');
grid on

DS4=figure('Name','Dap ung xung',   'Color','w',...
          'NumberTitle','off','Position',[50 50 400 300]);
stem(hn,'filled','k');
grid on

6. dsphinh 5_15

% Ve dap ung tan so cua cua so chu nhat co chieu dai bang M=9,
% M=51 va m=101.
% Doan hoa minh 2001

om=0:0.001:pi;
M=9;
W1=20*log10(abs(sin(om.*M/2)./sin(om./2)));
DS1=figure('Name','Dap ung tan so cua cua so chu nhat M=9',
   'Color','w','NumberTitle','off','Position',[50 50 500 200]);
plot(om,W1,'k')
title('M = 9');
xlabel('w (rad)');
ylabel('|W(w)|(dB)');

axis on
grid on
M=51;
W2=20*log10(abs(sin(om.*M/2)./sin(om./2)));
DS2=figure('Name',' Dap ung tan so cua cua so chu nhat M=51',
   'Color','w','NumberTitle','off','Position',[50 50 500 200]);
plot(om,W2,'k')
title('M = 51');
xlabel('w (rad)');
ylabel('|W(w)|(dB)');
axis on
grid on
M=101;
W3=20*log10(abs(sin(om.*M/2)./sin(om./2)));
DS2=figure('Name','Dap ung tan so cua cua so chu nhat M=101',
   'Color','w','NumberTitle','off','Position',[50 50 500 200]);
plot(om,W3,'k')
title('M = 101');
xlabel('w (rad)');
ylabel('|W(w)|(dB)');
axis on
grid on


function hh = stem1(varargin)
% Hàm này được cải biên từ hàm stem của MATLAB, vẽ dãy rời rạc không có chấm trêm đầu.
%STEM1   Discrete sequence or "stem" plot.
%   STEM1(Y) plots the data sequence Y as stems from the x axis
%
%   STEM1(X,Y) plots the data sequence Y at the values specfied
%   in X.
%   STEM1(...,'LINESPEC') uses the linetype specifed for the stems and
%   markers.  See PLOT for possibilities.
%
%   H = STEM(...) returns a vector of line handles.
%
%   See also PLOT, BAR, STAIRS.

%   Copyright (c)  by Doan Hoa Minh.
%   Date: 2000/6/4.

nin = nargin;

fill = 0;
ls = '-';
ms = 'o';
col = '';

% Parse the string inputs
while isstr(varargin{nin}),
  v = varargin{nin};
  if ~isempty(v) & strcmp(lower(v(1)),'f')
    fill = 1;
    nin = nin-1;
  else
    [l,c,m,msg] = colstyle(v);
    if ~isempty(msg),
      error(sprintf('Unknown option "%s".',v));
    end
    if ~isempty(l), ls = l; end
    if ~isempty(c), col = c; end
    if ~isempty(m), ms = m; end
    nin = nin-1;
  end
end

error(nargchk(1,2,nin));

[msg,x,y] = xychk(varargin{1:nin},'plot');
if ~isempty(msg), error(msg); end

if min(size(x))= =1, x = x(:); end
if min(size(y))= =1, y = y(:); end

% Set up data using fancing ../indexing
[m,n] = size(x);
xx = zeros(3*m,n);
xx(1:3:3*m,:) = x;
xx(2:3:3*m,:) = x;
xx(3:3:3*m,:) = NaN;

[m,n] = size(y);
yy = zeros(3*m,n);
yy(2:3:3*m,:) = y;
yy(3:3:3*m,:) = NaN;

cax = newplot;
next = lower(get(cax,'NextPlot'));
hold_state = ishold;

h2 = plot(xx,yy,[col,ls],'parent',cax);

if nargout>0, hh = h2; end

Post a Comment

Mới hơn Cũ hơn