大學dsp實驗心得體會

大學dsp實驗心得體會 篇1

實驗報告

一、實驗室名稱:數位訊號處理實驗室

二、實驗項目名稱:多種離散時間信號的產生

三、實驗原理:

1、基本離散時間信號

利用MATLAB強大的數值處理工具來實現信號的分析和處理,首先就是要學會套用MATLAB函式來構成信號。常見的基本信號可以簡要歸納如下:

(1).單位採樣序列

⎧1n=0δ(n)=⎨ 0⎩n≠0

在MATLAB中可以利用zeros函式實現。

x=zeros(1,N);

x(1)=1;

如果δ(n)在時間軸上延遲了k個單位,得到δ(n-k)即:

δ(n-k)=⎨

(2).單位階躍序列 ⎧1n=k ⎩0n≠0

⎧1n≥0u(n)=⎨ 0n<0⎩

在MATLAB中可以利用ones函式實現。

x=ones(1,N);

(3).正弦序列

x(n)=Asin(2πfn+ϕ)

採用MATLAB的實現方法,如:

n=0:N-1

x=A*sin(2*pi*f*n+ϕ)

(4).實指數序列

x(n)=A⋅an

其中,A、a為實數。採用MATLAB的實現方法,如:

n=0:N-1

x=a.^n

(5).復指數序列

x(n)=A⋅e n=0:N-1 採用MATLAB的實現方法,如: x=A*exp((σ+j*ω0)*n)

為了畫出複數信號x[n],必須要分別畫出實部和虛部,或者幅值和相角。MATLAB函式real、imag、abs和angle可以逐次計算出一個複數向量的這些函式。

2、基本數字調製信號

(1).二進制振幅鍵控(2ASK)

最簡單的數字調製技術是振幅鍵控(ASK),即二進制信息信號直接調製模擬載波的振幅。二進制幅度鍵控信號的時域表達式:SASK(t)=[∑ang(t-nTs)]cosωct

其中,an為要調製的二進制信號,gn(t)是單極性脈衝信號的時間波形,Ts表示調製的信號間隔。 (σ+jω0)n 典型波形如下:

圖1 – 1二進制振幅鍵控信號時間波形

(2).二進制頻移鍵控(2FSK)

在二進制數字調製中,若正弦載波的頻率隨二進制基帶信號在f1和f2兩個頻率點間變化,則產生

二進制移頻鍵控信號(2FSK信號)。二進制頻域鍵控已調信號的時域表達式為: ⎡⎤⎡⎤S2FSK(t)=⎢∑ang(t-nTS)⎥cosω1t+⎢∑ng(t-nTS)⎥cosω2t ⎣n⎦⎣n⎦這裡,ω1=2πf1,ω2=2πf2,an是an的反碼。

an

載波信號1 t 載波信號2 t

2FSK信號 t

(3).二進制相移鍵控(2PSK或BPSK)

在二進制數字調製中,當正弦載波的相位隨二進制數字基帶信號離散變化時,則產生二進制移相鍵控(2PSK)信號。通常用已調信號載波的0°和 180°分別表示二進制數字基帶信號的 1 和 0。二進制移相鍵控信號的時域表達式為:

⎡⎤

S2PSK(t)=⎢∑ang(t-nTS)⎥cos(ωct+φi),φi=0或π

⎣n⎦

(3).二進制相移鍵控(2PSK或BPSK)

在二進制數字調製中,當正弦載波的相位隨二進制數字基帶信號離散變化時,則產生二進制移相鍵控(2PSK)信號。通常用已調信號載波的0°和 180°分別表示二進制數字基帶信號的 1 和 0。二進制移相鍵控信號的時域表達式為:

⎡⎤

S2PSK(t)=⎢∑ang(t-nTS)⎥cos(ωct+φi),φi=0或π

⎣n⎦

因此,DTMF信號可以看作兩個有限長度的正弦序列相加,正弦信號的頻率由按鍵數字或字母符號對應的頻率決定。如,數字“8”由行頻852Hz和列頻1336Hz決定。

四、實驗目的:

1、 掌握幾種基本的離散時間信號(包括單位採樣序列,單位階躍序列,單頻正弦序列,單頻復指

數序列,實指數序列等)。

2、 能夠熟練利用MATLAB產生這些基本的離散時間信號。

3、 理解雙音多頻DTMF信號、ASK、FSK、BPSK等信號的產生原理。

4、 學習並運用MATLAB產生各種通信中的調製信號及雙音多頻信號。

五、實驗內容:

1、對幾種基本離散時間信號(包括單位採樣序列,單位階躍序列,正弦序列,復指數序列,實指數序列等)在MATLAB中編程產生。

2、(拓展要求)利用MATLAB編程產生2ASK,2FSK,2PSK等數字調製信號。

3、(拓展要求)利用MATLAB編程產生理解雙音多頻DTFM信號。

4、(拓展要求)利用MATLAB編程產生高斯白噪聲序列。

5、(拓展要求)利用MATLAB中的譜分析函式對正弦信號的頻譜進行分析。

6、通過硬體(DSP)實驗箱演示上述信號的時域(示波器)波形與頻域波形(計算結果)。

六、實驗器材(設備、元器件):

安裝MATLAB軟體的PC機一台,DSP實驗演示系統一套。

七、實驗步驟:

1、在-20≤n≤20內,畫出單位下列信號:

(a).單位採樣序列x1[n]=δ[n]和單位階躍序列x2[n]=u[n]的時域波形圖。

(b).y1[n]=x1[n+5]、y2[n]=x2[n-8]的波形。說明x1[n]與y1[n]、x2[n]與y2[n]之間的關係。

2、畫出下列信號在0≤n≤100內的波形。 ⎛πn⎫x3[n]=sin ⎪⎝16⎭

⎛n⎫x4[n]=sin ⎪⎝2⎭

⎛πn⎫⎛3πn⎫x5[n]=cos ⎪+cos ⎪⎝12⎭⎝8⎭

觀察x3[n]、x4[n]、x5[n]是否周期信號。如果是周期信號,信號的基波周期是什麼?如果不是

周期信號,說明原因。

3、在0≤n≤30內,畫出下列信號: nx6[n]=0.2(0.8) (-1/12+jπ/6)nx7[n]=e對於複數序列,要求分別畫出實部和虛部;幅值和相角。若把x6[n]中的底數0.8分別改為1.2、

-0.8,討論產生的時域波形有何變化。總結指數序列的底數對序列變化的影響。

4、(拓展要求)設計產生數字二進制序列:1 0 1 0 1 0 的2ASK、2FSK、2PSK調製信號。已

知符號速率Fd=10Hz(即時間間隔Ts為0.1),輸出信號的採樣頻率為20Hz。

(a).2ASK信號的載波頻率Fc=5Hz,

(b).2FSK信號載波1頻率F1=5Hz,載波2頻率F2=1Hz。

(c).2PSK載波頻率Fc=1Hz。

分別畫出以上信號調製前後的時域波形圖。

5、(拓展要求)利用MATLAB產生DTMF雙音多頻信號。畫出數字“0”的時域波形圖。

6、(拓展要求)MATLAB函式randn(1,N)可以產生均值為0,方差為1的高斯隨機序列,也就是

白噪聲序列。試利用randn函式產生均值為0.15,方差為0.1的高斯白噪聲序列x8[n],要求序列時域範圍為0≤n≤100。畫出時域波形圖。同時將實驗步驟2中產生的信號x2[n]與x8[n]相加,將得到的波形與x2[n]的波形做比較。

7、(拓展要求)利用MATLAB中的譜分析函式畫出x3[n]、x4[n]、x5[n]的頻譜。與理論上根據傅

立葉變換的定義計算出的x3[n]、x4[n]、x5[n]的頻譜進行比較。

8、通過硬體(DSP)實驗箱演示上述信號的時域(示波器)波形與頻域波形(計算結果)。

八、實驗數據及結果分析:

程式:

(1)產生x1[n]、x2[n]、y1[n]、y2[n]、x3[n]、x4[n]、x5[n]、x6[n]、x7[n]序列的程式

(2)產生2ASK、2FSK、2PSK調製信號的程式(拓展要求)

(3)產生DTMF信號的程式(拓展要求)

(4)高斯白噪聲序列的產生程式(擴展要求)

(4)正弦信號頻譜分析的程式(擴展要求)

clear all;

clc;

n=101;

%單位採樣序列

x1=zeros(1,n);

x1(1)=1;

x1=[zeros(1,100),x1];

%單位階躍序列

x2=ones(1,n);

x2=[zeros(1,100),x2];

%

n1=0:n-1;

yn1=n1-5;

yn2=n1+8;

%100;

Fs=1000;

n2=0:100;

%正弦序列

x3=sin(2*pi*n2/32);

x4=sin(n2/2);

x5=sin(pi*n2/12)+cos(3*pi*n2/8);

%指數序列

n3=0:30;

x61=0.2*(0.8.^n3);%實指數序列

x62=0.2*(1.2.^n3);

x63=0.2*((-0.8).^n3);

x7=exp((-1/12+1i*pi/6)*n3);%復指數序列

%畫出圖形

figure(1)

subplot(2,2,1),stem(n1,x1),title('x1'),axis([-20,20,0,1]);

subplot(2,2,2),stem(n1,x2),title('x2'),axis([-20,20,0,1]);

subplot(2,2,3),stem(yn1,x1),title('y1'),axis([-20,20,0,1]);

subplot(2,2,4),stem(yn2,x2),title('y2'),axis([-20,20,0,1]);

figure(2)

subplot(3,1,1),stem(n2,x3),title('x3'),axis([0,100,-1,1]);

subplot(3,1,2),stem(n2,x4),title('x4'),axis([0,100,-1,1]);

subplot(3,1,3),stem(n2,x5),title('x5'),axis([0,100,min(x5),max(x5)]);

figure(3)

subplot(3,1,1),stem(n3,x61),title('x6 a=0.8'),axis([0,30,min(x61),max(x61)]);

subplot(3,1,2),stem(n3,x62),title('x6 a=1.2'),axis([0,30,min(x62),max(x62)]);

subplot(3,1,3),stem(n3,x63),title('x6 a=-0.8'),axis([0,30,min(x63),max(x63)]);

figure(4)

subplot(4,1,1),stem(n3,abs(x7)),title('x7幅值'),axis([0,30,min(abs(x7)),max(abs(x7))]);

subplot(4,1,2),stem(n3,angle(x7)),title('x7相角'),axis([0,30,min(angle(x7)),max(angle(x7))]); subplot(4,1,3),stem(n3,imag(x7)),title('x7虛部'),axis([0,30,min(imag(x7)),max(imag(x7))]); subplot(4,1,4),stem(n3,real(x7)),title('x7實部'),axis([0,30,min(real(x7)),max(real(x7))]); %調製

x_base=[1,0,1,0,1,0];

Fd=10000;

t=linspace(0,0.6,6*Fd);

if(x_base(1)==1)

m=ones(1,Fd);

elseif(x_base(1)==0)

m=zeros(1,Fd);

end

for i=2:6

if(x_base(i)==1)

m=[m,ones(1,Fd)];

elseif(x_base(i)==0)

m=[m,zeros(1,Fd)];

end

end

%2ASK

Fc_A=5;

S_ask=m.*cos(2*pi*Fc_A*t);

%

figure(5)

subplot(4,1,1),stem(0:0.1:0.5,x_base),title('序列An'),axis([0,0.6,0,1]),xlabel('s');

subplot(4,1,2),plot(t,m),title('mt'),axis([0,0.6,0,1.5]),title('mt'),xlabel('s');

subplot(4,1,3),plot(t,cos(2*pi*Fc_A*t)),title('mt'),axis([0,0.6,-1.2,1.2]),title('載波信號'),xlabel('s'); subplot(4,1,4),plot(t,S_ask),title('mt'),axis([0,0.6,-1.2,1.2]),title('2ASK調製信號'),xlabel('s'); %2FSK

F1=5;F2=1;

s1=m.*cos(2*pi*F1*t);

s2=(1-m).*cos(2*pi*F2*t);

S_fsk=s1+s2;

figure(6)

subplot(4,1,1),plot(t,m),axis([0,0.6,0,1.5]),title('mt'),xlabel('s');

subplot(4,1,2),plot(t,s1),axis([0,0.6,-1.2,1.2]),title('載波信號1 F=5Hz)'),xlabel('s');

subplot(4,1,3),plot(t,s2),axis([0,0.6,-1.2,1.2]),title('載波信號2 F=1Hz'),xlabel('s');

subplot(4,1,4),plot(t,S_fsk),axis([0,0.6,-1.2,1.2]),title('2FSK調製信號'),xlabel('s');

%2PSK

Fc_P=1;

S_psk=(2*m-1).*cos(2*pi*Fc_P*t+pi);

figure(7)

subplot(4,1,1),plot(t,2*m-1),axis([0,0.6,-1.5,1.5]),title('mt'),xlabel('s');

subplot(4,1,2),plot(t,cos(2*pi*Fc_P*t+pi)),axis([0,0.6,-1.2,1.2]),title('正相載波信號'),xlabel('s'); subplot(4,1,3),plot(t,-cos(2*pi*Fc_P*t+pi)),axis([0,0.6,-1.2,1.2]),title('反相載波信號'),xlabel('s'); subplot(4,1,4),plot(t,S_psk),axis([0,0.6,-1.2,1.2]),title('2PSK調製信號'),xlabel('s');

%DTFM

t_dt=linspace(0,0.02,10000);

x_dtfm=cos(2*pi*941*t_dt)+cos(2*pi*1366*t_dt);

plot(t_dt,x_dtfm);

%rand

N=201;

x8=sqrt(0.1)*randn(1,N)+0.15;

x_rnd=x2+x8;

figure(8)

subplot(3,1,1),stem(n1,x2),title('X2');

subplot(3,1,2),stem(n1,x8),title('高斯信號');

subplot(3,1,3),stem(n1,x_rnd),title('加噪聲後X2');

%FFT

N_smp=length(n2);

fre=linspace(-1,1,N_smp)*Fs/2;

y3=abs(fftshift(fft(x3)));

y4=abs(fftshift(fft(x4)));

y5=abs(fftshift(fft(x5)));

figure(9)

subplot(3,1,1),plot(fre,y3),xlabel('Hz'),title('X3頻譜'),xlabel('頻率Hz'),axis([-100,100,1.2*min(y3),1.2*max(y3)]);

subplot(3,1,2),plot(fre,y4),xlabel('Hz'),title('X4頻譜'),xlabel('頻率Hz'),axis([-200,200,1.2*min(y4),1.2*max(y4)]);

subplot(3,1,3),plot(fre,y5),xlabel('Hz'),title('X5頻譜'),xlabel('頻率Hz'),axis([-300,300,1.2*min(y5),1.2*max(y5)]);

結果:

(1)x1[n]、x2[n]、y1[n]、y2[n]、x3[n]、x4[n]、x5[n]、x6[n]、x7[n]的時域波形

(2)信號的時移:x1[n]與y1[n]、x2[n]與y2[n]之間的關係。 答:y1[n]相當於x1[n]向左平移5個單位,y2[n]相當於將x2[n]向右平移8個單位

大學dsp實驗心得體會 篇2

//EnablePWMpins;GpioMuxRegs.GPAMUX.all=0;GpioMuxRegs.GPBMUX.all=0;EDIS;;//Step3.Clearallinterrup;//DisableCPUinterrupts;DINT;;//InitializethePIEcontro;//ThedefaultstateisallPI;//ar

// Enable PWM pins

GpioMuxRegs.GPAMUX.all = 0x00FF; // EVA PWM 1-6 pins

GpioMuxRegs.GPBMUX.all = 0x00FF; // EVB PWM 7-12 pins

EDIS;

// Step 3. Clear all interrupts and initialize PIE vector table:

// Disable CPU interrupts

DINT;

// Initialize the PIE control registers to their default state.

// The default state is all PIE interrupts disabled and flags

// are cleared.

// This function is found in the DSP281x_PieCtrl.c file.

InitPieCtrl;

// Disable CPU interrupts and clear all CPU interrupt flags:

IER = 0x0000;

IFR = 0x0000;

// Initialize the PIE vector table with pointers to the shell Interrupt

// Service Routines (ISR).

// This will populate the entire table, even if the interrupt

// is not used in this example. This is useful for debug purposes.

// The shell ISR routines are found in DSP281x_DefaultIsr.c.

// This function is found in DSP281x_PieVect.c.

InitPieVectTable;

// Step 4. Initialize all the Device Peripherals:

// This function is found in DSP281x_InitPeripherals.c

// InitPeripherals; // Not required for this example

InitXintf; // For this example, init the Xintf

// Step 5. User specific code, enable interrupts:

init_eva;

//init_evb;

while(1)

{

for(i=0;i<65535;i+=1000)

{

Reg06=0;

EvbRegs.CMPR6 = i;

delay_loop;

}

}

}

void delay_loop

{ short i,j;

for (i = 0; i < 1000; i++)

{for (j = 0; j < 10; j++);}

}

void init_eva

{

// EVA Configure T1PWM, T2PWM, PWM1-PWM6

// Initalize the timers

// Initalize EVA Timer1

EvaRegs.T1PR = 0xFFFF; // Timer1 period

EvaRegs.T1CMPR = 0x3C00; // Timer1 compare

EvaRegs.T1CNT = 0x0000; // Timer1 counter

// TMODE = continuous up/down

// Timer enable

// Timer compare enable

EvaRegs.T1CON.all = 0x1042;

// Initalize EVA Timer2

EvaRegs.T2PR = 0x0FFF; // Timer2 period

EvaRegs.T2CMPR = 0x03C0; // Timer2 compare

EvaRegs.T2CNT = 0x0000; // Timer2 counter

// TMODE = continuous up/down

// Timer enable

// Timer compare enable

EvaRegs.T2CON.all = 0x1042;

// Setup T1PWM and T2PWM

// Drive T1/T2 PWM by compare logic

EvaRegs.GPTCONA.bit.TCMPOE = 1;

// Polarity of GP Timer 1 Compare = Active low

EvaRegs.GPTCONA.bit.T1PIN = 1;

// Polarity of GP Timer 2 Compare = Active high

EvaRegs.GPTCONA.bit.T2PIN = 2;

// Enable compare for PWM1-PWM6

//EvaRegs.CMPR1 = 0x0C00;

//EvaRegs.CMPR2 = 0x3C00;

EvaRegs.CMPR3 = 0xFC00;

// Compare action control. Action that takes place

// on a cmpare event

// output pin 1 CMPR1 - active high

// output pin 2 CMPR1 - active low

// output pin 3 CMPR2 - active high

// output pin 4 CMPR2 - active low

// output pin 5 CMPR3 - active high

// output pin 6 CMPR3 - active low

EvaRegs.ACTRA.all = 0x0666;

EvaRegs.DBTCONA.all = 0x0000; // Disable deadband

EvaRegs.COMCONA.all = 0xA600;

}

void init_evb

{

// EVB Configure T3PWM, T4PWM and PWM7-PWM12

// Step 1 - Initialize the Timers

// Initialize EVB Timer3

// Timer3 controls T3PWM and PWM7-12

EvbRegs.T3PR = 0xFFFF; // Timer3 period

EvbRegs.T3CMPR = 0x3C00; // Timer3 compare

EvbRegs.T3CNT = 0x0000; // Timer3 counter

// TMODE = continuous up/down

// Timer enable

// Timer compare enable

EvbRegs.T3CON.all = 0x1042;

// Initialize EVB Timer4

// Timer4 controls T4PWM

EvbRegs.T4PR = 0x00FF; // Timer4 period

EvbRegs.T4CMPR = 0x0030; // Timer4 compare

EvbRegs.T4CNT = 0x0000; // Timer4 counter

// TMODE = continuous up/down

// Timer enable

// Timer compare enable

EvbRegs.T4CON.all = 0x1042;

// Setup T3PWM and T4PWM

// Drive T3/T4 PWM by compare logic

EvbRegs.GPTCONB.bit.TCMPOE = 1;

// Polarity of GP Timer 3 Compare = Active low

EvbRegs.GPTCONB.bit.T3PIN = 1;

// Polarity of GP Timer 4 Compare = Active high

EvbRegs.GPTCONB.bit.T4PIN = 2;

// Enable compare for PWM7-PWM12

EvbRegs.CMPR4 = 0x0C00;

EvbRegs.CMPR5 = 0x3C00;

EvbRegs.CMPR6 = 0xFC00;

// Compare action control. Action that takes place

// on a cmpare event

// output pin 1 CMPR4 - active high

// output pin 2 CMPR4 - active low

// output pin 3 CMPR5 - active high

// output pin 4 CMPR5 - active low

// output pin 5 CMPR6 - active high

// output pin 6 CMPR6 - active low

EvbRegs.ACTRB.all = 0x0666;

EvbRegs.DBTCONB.all = 0x0000; // Disable deadband

EvbRegs.COMCONB.all = 0xA600;

}

龍 岩 學 院

實 驗 報 告

班 級 07電本(1)班 學號 20xx050344 姓 名 楊寶輝 同組人 獨立 實驗日期 20xx-6-3 室溫 大氣壓 成 績

高速A/D轉換實驗

一、實驗目的

1.了解高速 AD工作的基本原理。

2.了解如果通過軟體正確的控制高速AD。

3.掌握對高速 AD正確操作的過程

二、實驗設備

1. 一台裝有CCS軟體的計算機;

2. DSP實驗箱;

3. DSP硬體仿真器;

三、實驗原理

實驗箱用的高速 AD 為 TLC5510,它是一個 CMOS 結構的、具有高達20MSPS 的8位模數轉換器。TLC5510 採用單5V 供電,功耗僅為 130mW。TLC5510 內部包含有一個採樣保持電路、具有高阻輸出的並行接口以及內部參考電壓等。

TLC5510 採用半 FlASh 結構,與 FlASh 結構相比,它不僅減少了功耗,而且提高了晶片的集成度。TLC5510 採用兩步轉換實現一次完整的轉換,這樣就大大減少了內部比較器的個數,其輸出數據的延遲為2.5個時鐘周期。TLC5510 採用 3 個內部參考電阻產生一個標準2V的參考電壓,要實現內部參考電壓僅需要通過外部的簡單連線即可。

大學dsp實驗心得體會 篇3

基礎實驗

一、實驗目的

二、實驗設備

三、實驗原理

浮點數的表達和計算是進行數位訊號處理的基本知識;產生正弦信號是數位訊號處理1. 一台裝有CCS軟體的計算機; 2. DSP實驗箱的TMS320F2812主控板; 3. DSP硬體仿真器。 1. 掌握CCS實驗環境的使用; 2. 掌握用C語言編寫DSP程式的方法。 中經常用到的運算;C語言是現代數位訊號處理表達的基礎語言和通用語言。寫實現程式時需要注意兩點:(1)浮點數的範圍及存儲格式;(2)DSP的C語言與ANSI C語言的區別。

四、實驗步驟

1. 打開CCS 並熟悉其界面;

2. 在CCS環境中打開本實驗的工程(Example_base.pjt),編譯並重建 .out 輸出檔案,然後通過仿真器把執行代碼下載到DSP晶片中;

3. 把X0 , Y0 和Z0添加到Watch視窗中作為觀察對象(選中變數名,單擊滑鼠右鍵,在彈出選單中選擇“Add Watch Window”命令);

4. 選擇view->graph->time/frequency… 。 設定對話框中的參數: 其中“Start Address”

設為“sin_value”,“Acquisition buffer size”和“Display Data size”都設為“100”,並且把“DSP Data Type”設為“32-bit floating point”,

設定好後觀察信號序列的波形(sin函式,如圖);

5. 單擊運行;

6. 觀察三個變數從初始化到運算結束整個過程中的變化;觀察正弦波形從初始化到運算結束整個過程中的變化;

7. 修改輸入序列的長度或初始值,重複上述過程。

五、實驗心得體會

通過本次實驗,加深了我對DSP的認識,使我對DSP實驗的操作有了更進一步的理解。基本掌握了CCS實驗環境的使用,並能夠使用C語言進行簡單的DSP程式設計。

從軟體的安裝到使用軟體進行程式設計與仿真,鍛鍊了自己的動手能力,也遇到了不少的坎坷,例如晶片的選擇,不能因為麻煩而省略該步驟,否則將會運行出錯。