天天看點

基于MATLAB的數字信号處理(2) 時域采樣和頻域采樣

文章目錄

  • 一、實驗目的
  • 二、實驗原理與方法
    • 1. 時域采樣定理的要點
    • 2. 頻域采樣定理的要點
  • 三、實驗内容及步驟
    • 1. 時域采樣理論的驗證
    • 2. 頻域采樣理論的驗證
  • 四、實驗總結

時域采樣理論與頻域采樣理論是數字信号進行中的重要理論。 要求掌握模拟信号采樣前後頻譜的變化, 以及如何選擇采樣頻率才能使采樣後的信号不丢失資訊;要求掌握頻域采樣會引起時域周期化的概念,以及頻率域采樣定理及其對頻域采樣點數選擇的指導作用。

基于MATLAB的數字信号處理(2) 時域采樣和頻域采樣

基于MATLAB的數字信号處理(2) 時域采樣和頻域采樣
基于MATLAB的數字信号處理(2) 時域采樣和頻域采樣
基于MATLAB的數字信号處理(2) 時域采樣和頻域采樣
基于MATLAB的數字信号處理(2) 時域采樣和頻域采樣
基于MATLAB的數字信号處理(2) 時域采樣和頻域采樣

基于MATLAB的數字信号處理(2) 時域采樣和頻域采樣
基于MATLAB的數字信号處理(2) 時域采樣和頻域采樣

基于MATLAB的數字信号處理(2) 時域采樣和頻域采樣
基于MATLAB的數字信号處理(2) 時域采樣和頻域采樣
基于MATLAB的數字信号處理(2) 時域采樣和頻域采樣

MATLAB程式如下:

%時域采樣驗證程式 用矩陣法計算DFT test_03.m
clear;

A=444.128;a=50*sqrt(2)*pi;omega=50*sqrt(2)*pi;
Fs1=1000;Fs2=300;Fs3=200;Tp=50*0.001;   %觀測時間:50ms
%采樣間隔
T1=1/Fs1;T2=1/Fs2;T3=1/Fs3;

%時域等間隔理想采樣
n1=0:1:Tp/T1;     %采樣點個數
x1=A*exp(-a*n1*T1).*sin(omega*n1*T1);
subplot(321);
stem(n1,x1,'.','g');
xlabel('n');ylabel('xa(nT)');
title('Fs=1000Hz');
axis([0 64 -20 170]);

n2=0:1:Tp/T2;     %采樣點個數
x2=A*exp(-a*n2*T2).*sin(omega*n2*T2);
subplot(323);
stem(n2,x2,'.','r');
xlabel('n');ylabel('xa(nT)');
title('Fs=300Hz');
axis([0 15 -20 170]);

n3=0:1:Tp/T3;     %采樣點個數
x3=A*exp(-a*n3*T3).*sin(omega*n3*T3);
subplot(325);
stem(n3,x3,'.','m');
xlabel('n');ylabel('xa(nT)');
title('Fs=200Hz');
axis([0 10 -20 170]);

%DFT矩陣
wN=dftmtx(64);
%補零到64點
x1=[x1,zeros(1,64-length(x1))];
x2=[x2,zeros(1,64-length(x2))];
x3=[x3,zeros(1,64-length(x3))];
%利用矩陣法求DFT
X1=(wN*x1')';
X2=(wN*x2')';
X3=(wN*x3')';
%求幅度
X_A1=abs(X1);
X_A2=abs(X2);
X_A3=abs(X3);
%間隔
n=1:Fs1/64:Fs1;
subplot(322);
plot(n,X_A1*T1,'g');
axis([0,1000,0,1.2]);
xlabel('f/Hz');ylabel('幅度')
title('T*FT[xa(nT), Fs=1000Hz');

n=1:Fs2/64:Fs2;
subplot(324);
plot(n,X_A2*T2,'r');
axis([0,300,0,1.2]);
xlabel('f/Hz');ylabel('幅度')
title('T*FT[xa(nT), Fs=300Hz');

n=1:Fs3/64:Fs3;
subplot(326);
plot(n,X_A3*T3,'m');
axis([0,200,0,1.2]);
xlabel('f/Hz');ylabel('幅度');
title('T*FT[xa(nT), Fs=200Hz');
           
%時域采樣驗證程式 用FFT計算DFT test_04.m
clear;

%初始化參數
A=444.128;a=50*sqrt(2)*pi;omega=50*sqrt(2)*pi;
Fs1=1000;Fs2=300;Fs3=200;Tp=50*0.001;%50ms
%采樣間隔
T1=1/Fs1;T2=1/Fs2;T3=1/Fs3;

%時域等間隔理想采樣
n1=0:1:Tp/T1;     %采樣點個數  Fs=1000Hz
x1=A*exp(-a*n1*T1).*sin(omega*n1*T1);
subplot(321);
stem(n1,x1,'.','g');
xlabel('n');ylabel('xa(nT)');
title('(a) Fs=1000Hz');
axis([0 50 -20 170]);

n2=0:1:Tp/T2;     %采樣點個數  Fs=300Hz
x2=A*exp(-a*n2*T2).*sin(omega*n2*T2);
subplot(323);
stem(n2,x2,'.','r');
xlabel('n');ylabel('xa(nT)');
title('(b) Fs=300Hz');
axis([0 15 -20 170]);

n3=0:1:Tp/T3;     %采樣點個數  Fs=200Hz
x3=A*exp(-a*n3*T3).*sin(omega*n3*T3);
subplot(325);
stem(n3,x3,'.','m');
xlabel('n');ylabel('xa(nT)');
title('(c) Fs=200Hz');
axis([0 10 -20 170]);

%補零到64點
x1=[x1,zeros(1,64-length(x1))];
x2=[x2,zeros(1,64-length(x2))];
x3=[x3,zeros(1,64-length(x3))];
%利用FFT求DTF
X1=fft(x1,64);
X2=fft(x2,64);
X3=fft(x3,64);
%求幅度 取絕對值
X_A1=abs(X1);
X_A2=abs(X2);
X_A3=abs(X3);
%取合适間隔  plot繪圖
n=1:Fs1/64:Fs1;
subplot(322);
plot(n,X_A1*T1,'g');
axis([0,1000,0,1.2]);
xlabel('f/Hz');ylabel('幅度')
title('(a) T*FT[xa(nT), Fs=1000Hz');

n=1:Fs2/64:Fs2;
subplot(324);
plot(n,X_A2*T2,'r');
axis([0,300,0,1.2]);
xlabel('f/Hz');ylabel('幅度')
title('(b) T*FT[xa(nT), Fs=300Hz');

n=1:Fs3/64:Fs3;
subplot(326);
plot(n,X_A3*T3,'m');
axis([0,200,0,1.2]);
xlabel('f/Hz');ylabel('幅度');
title('(c) T*FT[xa(nT), Fs=200Hz');

           

運作效果如下:

基于MATLAB的數字信号處理(2) 時域采樣和頻域采樣

時域采樣定理的圖驗證了時域采樣理論和時域采樣定理,采樣序列的頻譜的确是以采樣頻率為周期對模拟信号頻譜的周期延拓。當采樣頻率為 1000Hz 時頻譜混疊很小;當采樣頻率為 300Hz 時,在折疊頻率 150Hz 附近頻譜混疊很嚴重;當采樣頻率為 200Hz 時,在折疊頻率100Hz附近頻譜混疊更嚴重。

基于MATLAB的數字信号處理(2) 時域采樣和頻域采樣

基于MATLAB的數字信号處理(2) 時域采樣和頻域采樣
基于MATLAB的數字信号處理(2) 時域采樣和頻域采樣
基于MATLAB的數字信号處理(2) 時域采樣和頻域采樣
基于MATLAB的數字信号處理(2) 時域采樣和頻域采樣
%頻域采樣驗證程式 test_05.m
clear;

%初始化參數
M=27;N=32;
n=0:M-1;   %根據表達式 0-26 共27個點

%生成三角波序列x(n)
xa=1:floor(M/2)+1;
xb=ceil(M/2)-1:-1:1;
xn=[xa,xb];

%做FFT變換
Xk=fft(xn,1024);    %1024點FFT用于近似序列FT[x(n)]
X32k=fft(xn,32);
x32n=ifft(X32k);
X16k=X32k(1:2:N);
x16n=ifft(X16k,N/2);
%X16k=fft(xn,16);
%x16n=ifft(X16k);

%作圖
subplot(3,2,1);
k=0:1023;kk=2*k/1024;
plot(kk,abs(Xk),'g');xlabel('w/\pi');ylabel('|X(e^j^\omega)|');
title('(a) FT[x(n)]');
axis([0 1 0 200]);

subplot(3,2,2);
stem(n,xn,'.','g'); %這樣會變成實心點
xlabel('n');ylabel('x(n)');
title('(b) 三角波序列x(n)');
axis([0 32 0 20]);

%16點頻域采樣
subplot(3,2,3);
k=0:15;
stem(k,abs(X16k),'.','r');xlabel('k');ylabel('|X_1_6(k)|');
title('(c) 16點頻域采樣');
axis([0,8,0,200]);

subplot(3,2,4);
stem(k,x16n,'.','r');xlabel('n');ylabel('x_1_6(n)');
axis([0,40,0,20]);%控制圖像坐标範圍
title('(d) 16點IDFT[X16(k)]');

%32點頻域采樣
subplot(3,2,5);
k=0:31;
stem(k,abs(X32k),'.','m');xlabel('k');ylabel('|X_3_2(k)|');
title('(e) 32點頻域采樣');
axis([0 16 0 200]);

subplot(3,2,6);
stem(k,x32n,'.','m');xlabel('n');ylabel('x_3_2(n)');
title('(f) 32點IDFT[X32(k)]');
axis([0 32 0 20]);



           
基于MATLAB的數字信号處理(2) 時域采樣和頻域采樣
  • 頻域采樣定理的圖驗證了頻域采樣理論和頻域采樣定理。對信号 x(n) 的頻譜函數 X(ejω) 在 [0,2π] 上等間隔采樣 N=16 時, N點IDFT[XNk]得到的序列正是原序列 x(n) 以 16 為周期進行周期延拓後的主值區序列,頻域采樣點數 N 必須大于等于時域離散信号的長度 M (即N≥M),才能使時域不産生混疊。
  • 對比上面叙述的時域采樣原理和頻域采樣原理, 得到一個有用的結論, 即兩個采樣理論具有對偶性: “時域采樣時頻譜周期延拓, 頻域采樣時域信号周期延拓”。

繼續閱讀