大学dsp实验心得体会
大学dsp实验心得体会
通过本次大学dsp实验,加深了我对DSP的认识,使我对DSP实验的操作有了更进一步的理解。基本掌握了CCS实验环境的使用,并能够使用C语言进行简单的DSP程序设计。下面是学习啦小编为大家收集整理的大学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
基础实验
一、实验目的
二、实验设备
三、实验原理
浮点数的表达和计算是进行数字信号处理的基本知识;产生正弦信号是数字信号处理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程序设计。
从软件的安装到使用软件进行程序设计与仿真,锻炼了自己的动手能力,也遇到了不少的坎坷,例如芯片的选择,不能因为麻烦而省略该步骤,否则将会运行出错。
大学dsp实验心得体会篇3
//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)班 学号 2007050344 姓 名 杨宝辉 同组人 独立 实验日期 2010-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实验心得体会相关文章: