通信原理实验报告2

更新时间:2024-01-25 18:10:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

通信原理 实验报告

课程名称:通信原理

实验三:二进制数字信号调制仿真实验 实验四:模拟信号数字传输仿真实验 姓 名: 学 号: 班 级:

2012年 12 月

实验三 二进制数字信号调制仿真实验

一、实验目的

1. 2. 3. 4.

加深对数字调制的原理与实现方法;

掌握OOK、2FSK、2PSK功率谱密度函数的求法;

掌握OOK、2FSK、2PSK功率谱密度函数的特点及其比较;

进一步掌握MATLAB中M文件的调试、子函数的定义和调用方法。

二、实验内容

1. 复习二进制数字信号幅度调制的原理 2. 编写MATLAB程序实现OOK调制; 3. 编写MATLAB程序实现2FSK调制; 4. 编写MATLAB程序实现2PSK调制;

5. 编写MATLAB程序实现数字调制信号功率谱函数的求解。

三、实验原理

在数字通信系统中,需要将输入的数字序列映射为信号波形在信道中传输,此时信源输出数字序列,经过信号映射后成为适于信道传输的数字调制信号。数字序列中每个数字产生的时间间隔称为码元间隔,单位时间内产生的符号数称为符号速率,它反映了数字符号产生的快慢程度。由于数字符号是按码元间隔不断产生的,经过将数字符号一一映射为响应的信号波形后,就形成了数字调制信号。根据映射后信号的频谱特性,可以分为基带信号和频带信号。

通常基带信号指信号的频谱为低通型,而频带信号的频谱为带通型。 调制信号为二进制数字基带信号时,对应的调制称为二进制调制。在二进制数字调制中,载波的幅度、频率和相位只有两种变化状态。相应的调制方式有二进制振幅键控(OOK/2ASK)、二进制频移键控(2FSK)和二进制相移键控(2PSK)。

下面分别介绍以上三种调制方法的原理,及其MATLAB实现:

本实验研究的基带信号是二进制数字信号,所以应该首先设计MATLAB程序生成二进制数字序列。根据实验一的实践和第一部分的介绍,可以很容易的得到二进制数字序列生成的MATLAB程序。

假定要设计程序产生一组长度为500的二进制单极性不归零信号,以之作为后续调制的信源,并求出它的功率谱密度,以方便后面对已调信号频域特性和基带信号频域特性的比较。整个过程可用如下程序段实现:

%定义相关参数 clear all; close all; A=1

fc=2; %2Hz; N_sample=8;

N=500; %码元数 Ts=1; %1 Baud/s dt=Ts/fc/N_sample; %波形采样间隔 t=0:dt:N*Ts-dt; Lt=length(t);

%产生二进制信源 d=sign(randn(1,N));

Y=sigexpand((d+1)/2,fc*N_sample); N1=length((d+1)/2);

dd=zeros(fc*N_sample,N1); dd(1,:)=(d+1)/2;

dd=reshape(dd,1,fc*N_sample*N1); gt=ones(1,fc*N_sample);%NRZ波形 figure(1)

subplot(221);%输入NRZ信号波形(单极性) d_NRZ=conv(dd,gt);

plot(t,d_NRZ(1:length(t)));

axis([0 10 0 1.2]); ylabel ('输入信号'); subplot(222);%输入NRZ频谱 dt=t(2)-t(1); T=t(end); df=1/T;

N=length(d_NRZ(1:length(t))); f=-N/2*df:df:N/2*df-df;

d_NRZf=fft(d_NRZ(1:length(t))); d_NRZf=T/N*fftshift(d_NRZf);

plot(f,10*log10(abs(d_NRZf).^2/T));

axis([-2 2 -50 10]);ylabel('输入信号功率谱密度(dB/Hz)');

3.2 OOK调制

二进制振幅键控(OOK/2ASK)是利用载波的幅度变化来传递数字信息的,而其频率和初始相位保持不变。在2ASK中,载波的幅度只有两种变化状态,分别对应二进制信息“0”和“1”。2ASK信号的一般表达式为:

e2ASK(t)?s?t?cos?ct

n其中,。

所以,要进行OOK调制,定义完二进制数字序列和载波参量后,将之相乘即可。 相关的MATLAB指令如下:

ht=A*cos(2*pi*fc*t); s_2ask=d_NRZ(1:Lt).*ht; subplot(223) plot(t,s_2ask);

axis([0 10 -1.2 1.2]); ylabel('OOK');

要对OOK调制之前与之后信号的频域特性进行比较,可以通过比较两者的功率谱密度曲线来实现。也就是求出OOK调制信号s_2ask的功率谱密度函数,并将之与3.1中求得的基带信号的功率谱密度函数进行比较。

根据《通信原理》的学习,可以知道,求解某信号功率谱密度的过程就是先求出该信号

s(t)??ang(t?nTs)

的傅立叶变换,再求该傅立叶变换的幅值的绝对值的平方的过程。如何求功率谱密度函数在实验二中已经详细介绍过了,本处不再赘述。根据前面的介绍,我们已经知道要求得某信号的傅立叶变换,可以通过调用实验一附录中的T2F子函数实现,也可以直接编程实现。实验二中使用的都是子函数调用的方式,下面给出直接编程实现傅立叶变换的MATLAB程序:

dt=t(2)-t(1); T=t(end); df=1/T;

N=length(s_2ask);

f=-N/2*df:df:N/2*df-df; s_2askf=fft(s_2ask);

s_2askf=T/N*fftshift(s_2askf); subplot(224)

plot(f,10*log10(abs(s_2askf).^2/T)); axis([-fc-4 fc+4 -50 10]);

ylabel('OOK功率谱密度(dB/Hz)');

通过以上程序,我们将基带信号波形及其功率谱密度曲线,OOK调制信号及其功率谱密度曲线分别画在了同一个图的四个子图中,以方便对调制前后信号的频域特性进行比较。 3.3 2FSK调制

频移键控是利用载波的频率的变化来传递数字信息的。在2FSK中,载波的频率随二进制基带信号在f1和f2两个频率点间变化。故其表达式为:

《通信原理》中已经介绍过,2FSK信号的调制可通过两个方法实现,一是将2FSK信号理解为两路不同频率的ASK信号相加的结果;二是将2FSK信号表示成如下的形式:

?Acos(?1t??n),e2FSK(t)???Acos(?2t??n),发送“1”时发送“0”时s(t)?Acos(2?fCt?2?h?ang(t?nTS))

n????第一种方法实现起来相当简单,直接参照3.2中ASK信号的产生方法,产生两路不同频率的ASK信号,将之相加即可得到2FSK信号,这种方法留待同学们课后自己实现。

下面我们介绍用第二种方法产生2FSK信号的MATLAB程序设计过程。

首先,为了使2FSK信号不至覆盖了前面产生的信号,新建一个图,其指令为: figure(2)

然后,在这个图上画2FSK信号的波形,及其功率谱密度曲线波形。 /SK

%s_2fsk=A*cos(2*pi*fc*t+int(2*d_NRZ-1)); sd_2fsk=2*d_NRZ-1;

s_2fsk=A*cos(2*pi*fc*t+2*pi*sd_2fsk(1:length(t)).*t); subplot(223) plot(t,s_2fsk);

axis([0 10 -1.2 1.2 ]); xlabel('t'); ylabel('2FSK') subplot(224)

求出2FSK调制信号的功率谱密度函数:

%[f,s_2fsk]=T2F(t,s_2fsk); dt=t(2)-t(1); T=t(end); df=1/T;

N=length(s_2fsk);

f=-N/2*df:df:N/2*df-df; s_2fsk=fft(s_2fsk);

s_2fsk=T/N*fftshift(s_2fsk);

plot(f,10*log10(abs(s_2fsk).^2/T)); axis([-fc-4 fc+4 -50 10]);xlabel('f'); ylabel('2FSK功率谱密度(dB/Hz)');

3.4 2PSK调制

相移键控是利用载波的相位变化来传递数字信息,而振幅和频率保持不变。以载波的不同相位直接去表示相应二进制数字信号的调制方式,称为二进制绝对相移键控(2PSK)。其时域表达式为:

e2PSK(t)?Acos(?ct??n)

与2ASK信号的产生方法相比较,2PSK和2ASK只是对s(t)的要求不同,在2ASK中s(t)是单极性的,而在2PSK中s(t)是双极性的基带信号。除此之外,所有的设计流程都是相似的。参考程序如下:

%2PSK 信号

d_2psk=2*d_NRZ-1;

s_2psk=d_2psk(1:Lt).*ht; subplot(221) plot(t,s_2psk);

axis([0 10 -1.2 1.2]); ylabel('2PSK'); subplot(222)

求出2PSK调制信号的功率谱密度函数:

%[f,s_2pskf]=T2F(t,s_2psk); dt=t(2)-t(1); T=t(end); df=1/T;

N=length(s_2psk);

f=-N/2*df:df:N/2*df-df; s_2pskf=fft(s_2psk);

s_2pskf=T/N*fftshift(s_2pskf);

plot(f,10*log10(abs(s_2pskf).^2/T)); axis([-fc-4 fc+4 -50 10]);

ylabel('PSK功率谱密度(dB/Hz)'); 四、实验内容

(1)按照如上介绍的方法,分别产生一组长度为500的二进制单极性不归零信号和归零信号,存档名为Q3_1。并求分别求出它们的功率谱密度。请写出相应的MATLAB程序,将

不归零信号波形及功率谱和归零信号波形及功率谱分别画在同一图形的四个子图中,将结果图保存,贴在下面的空白处。 程序: clear all; close all; A=1

fc=2; %2Hz; N_sample=8;

N=500; %码元数 Ts=1; %1 Baud/s dt=Ts/fc/N_sample; %波形采样间隔 t=0:dt:N*Ts-dt; Lt=length(t);

%产生二进制信源 d=sign(randn(1,N));

Y=sigexpand((d+1)/2,fc*N_sample); N1=length((d+1)/2);

dd=zeros(fc*N_sample,N1); dd(1,:)=(d+1)/2;

dd=reshape(dd,1,fc*N_sample*N1); gt=ones(1,fc*N_sample);%NRZ 波形 gt2=ones(1,fc*N_sample/2)%RZboxing///// figure(1)

subplot(221);%输入 NRZ信号波形(单极性) d_NRZ=conv(dd,gt);

plot(t,d_NRZ(1:length(t)));

axis([0 10 0 1.2]); ylabel ('输入信号'); subplot(222);%输入NRZ频谱 dt=t(2)-t(1); T=t(end); df=1/T;

N=length(d_NRZ(1:length(t))); f=-N/2*df:df:N/2*df-df;

d_NRZf=fft(d_NRZ(1:length(t))); d_NRZf=T/N*fftshift(d_NRZf); plot(f,10*log10(abs(d_NRZf).^2/T));

axis([-2 2 -50 10]);ylabel('输入信号功率谱密度(dB/Hz)'); %/////////

subplot(223);%输入 NRZ信号波形(单极性) d_RZ=conv(dd,gt2); plot(t,d_RZ(1:length(t)));

axis([0 10 0 1.2]); ylabel ('输入信号'); subplot(224);%输入NRZ频谱 dt=t(2)-t(1);

T=t(end); df=1/T;

N=length(d_RZ(1:length(t))); f=-N/2*df:df:N/2*df-df;

d_RZf=fft(d_RZ(1:length(t))); d_RZf=T/N*fftshift(d_RZf);

plot(f,10*log10(abs(d_RZf).^2/T));

axis([-2 2 -50 10]);ylabel('输入信号功率谱密度(dB/Hz)'); 图形:

输入信号功率谱密度(dB/Hz)输入信号功率谱密度(dB/Hz)10输入信号0.5-20-40-2-10ZX AND LZ012005101输入信号0.5-20-40-2-101200510

(2)对刚才产生的长度为500的不归零波形对载波频率为2Hz,幅度为1的余弦信号进行OOK调制,并求出调制信号的功率谱密度。编写程序实现之,存档名为Q3_2。要求将不归零信号波形及功率谱和OOK调制信号波形及功率谱分别画在同一图形的四个子图中,图形名为图2,将结果图保存,贴在下面的空白处。 程序: clear all; close all; A=1

fc=2; %2Hz; N_sample=8;

N=500; %码元数 Ts=1; %1 Baud/s dt=Ts/fc/N_sample; %波形采样间隔 t=0:dt:N*Ts-dt; Lt=length(t);

%产生二进制信源 d=sign(randn(1,N));

Y=sigexpand((d+1)/2,fc*N_sample);

N1=length((d+1)/2);

dd=zeros(fc*N_sample,N1); dd(1,:)=(d+1)/2;

dd=reshape(dd,1,fc*N_sample*N1); gt=ones(1,fc*N_sample);%NRZ 波形 figure(1)

subplot(221);%输入 NRZ信号波形(单极性) d_NRZ=conv(dd,gt);

plot(t,d_NRZ(1:length(t)));

axis([0 10 0 1.2]); ylabel ('输入信号'); subplot(222);%输入NRZ频谱 dt=t(2)-t(1); T=t(end); df=1/T;

N=length(d_NRZ(1:length(t))); f=-N/2*df:df:N/2*df-df;

d_NRZf=fft(d_NRZ(1:length(t))); d_NRZf=T/N*fftshift(d_NRZf); plot(f,10*log10(abs(d_NRZf).^2/T));

axis([-2 2 -50 10]);ylabel('输入信号功率谱密度(dB/Hz)');

ht=A*cos(2*pi*fc*t); s_2ask=d_NRZ(1:Lt).*ht; subplot(223) plot(t,s_2ask);

axis([0 10 -1.2 1.2]); ylabel('OOK');

dt=t(2)-t(1); T=t(end); df=1/T;

N=length(s_2ask);

f=-N/2*df:df:N/2*df-df; s_2askf=fft(s_2ask);

s_2askf=T/N*fftshift(s_2askf); subplot(224)

plot(f,10*log10(abs(s_2askf).^2/T)); axis([-fc-4 fc+4 -50 10]);

ylabel('OOK功率谱密度(dB/Hz)');

D LZ输入信号功率谱密度(dB/Hz)NAzX/ HZX AND LZOOK功率谱密度(dZB)100-10-20-30-40-50-2100-10-20-30-40-50-505-1012ZX AND LZ输入信号10.80.60.40.2005101ZX AND LZOOK0.50-0.5-10510

(3)按照3.3所提供的2FSK调制的思路和范例程序,运用(1)产生的不归零码组对载波频率为2Hz,幅度为1的余弦信号进行2FSK调制,存档为Q3_3,并将所得的结果存盘,贴在下面空格处。 编写的程序为: clear all; close all; A=1

fc=2; %2Hz; N_sample=8;

N=500; %码元数 Ts=1; %1 Baud/s dt=Ts/fc/N_sample; %波形采样间隔 t=0:dt:N*Ts-dt; Lt=length(t);

%产生二进制信源 d=sign(randn(1,N));

Y=sigexpand((d+1)/2,fc*N_sample); N1=length((d+1)/2);

dd=zeros(fc*N_sample,N1); dd(1,:)=(d+1)/2;

dd=reshape(dd,1,fc*N_sample*N1); gt=ones(1,fc*N_sample);%NRZ 波形 figure(1)

subplot(221);%输入 NRZ信号波形(单极性) d_NRZ=conv(dd,gt);

plot(t,d_NRZ(1:length(t)));

axis([0 10 0 1.2]); ylabel ('输入信号'); subplot(222);%输入NRZ频谱 dt=t(2)-t(1);

) LZ输入信号功率谱密度(dB/Hz)zDNHB /AXdZX AND LZ2FSK 功率谱密度(ZT=t(end);

df=1/T;

N=length(d_NRZ(1:length(t))); f=-N/2*df:df:N/2*df-df;

d_NRZf=fft(d_NRZ(1:length(t))); d_NRZf=T/N*fftshift(d_NRZf); plot(f,10*log10(abs(d_NRZf).^2/T));

axis([-2 2 -50 10]);ylabel('输入信号功率谱密度(dB/Hz)');

/SK

%s_2fsk=A*cos(2*pi*fc*t+int(2*d_NRZ-1)); sd_2fsk=2*d_NRZ-1;

s_2fsk=A*cos(2*pi*fc*t+2*pi*sd_2fsk(1:length(t)).*t); subplot(223) plot(t,s_2fsk);

axis([0 10 -1.2 1.2 ]); xlabel('t'); ylabel('2FSK') subplot(224)

%[f,s_2fsk]=T2F(t,s_2fsk); dt=t(2)-t(1); T=t(end); df=1/T;

N=length(s_2fsk);

f=-N/2*df:df:N/2*df-df; s_2fsk=fft(s_2fsk);

s_2fsk=T/N*fftshift(s_2fsk);

plot(f,10*log10(abs(s_2fsk).^2/T)); axis([-fc-4 fc+4 -50 10]);xlabel('f'); ylabel('2FSK 功率谱密度(dB/Hz)');

100-10-20-30-40-50-2100-10-20-30-40-50-50f5-1012ZX AND LZ输入信号10.80.60.40.2005101ZX AND LZ2FSK0.50-0.5-10图形:

5ZX AND LZt10

fs=4; sdt=1/fs; t1=0:sdt:10;

st=0.1*cos(0.15*pi*t1)+1.5*sin(2.5*pi*t1)+0.5*cos(4*pi*t1); [f1,sf]=T2F(t1,st);

3. 从抽样信号中恢复出原信号

根据抽样信号为:

xS(t)?x(t)?T(t)?k????x(kT)p(t?kT)

SS?设计MATLAB程序实现上式,即可从抽样信号中无失真的恢复原信号。

t2=-50:dt:50; gt=sinc(fs*t2);

stt=sigexpand(st,sdt/dt); xt_t=conv(stt,gt);

用画图指令在同一图形中画出以上的三个信号波形,可明显的比较出原信号与抽样后恢复信号之间的差别。

figure(1) subplot(311); plot(t,xt);

axis([0 10 -4 4]); title('原始信号'); xlabel('t'); hold on;

plot(t1,st,'go'); axis([0 10 -4 4]); %hold on;

%t3=-50:dt:60+sdt-dt; %plot(t3,xt_t,'r--'); %title('抽样恢复信号'); %axis([0 10 -4 4]); subplot(312); plot(t1,st,'ro'); axis([0 10 -4 4]); title('抽样信号'); xlabel('t1'); subplot(313);

t3=-50:dt:60+sdt-dt; plot(t3,xt_t);

title('抽样恢复信号'); hold on;

plot(t,xt,'r--'); axis([0 10 -4 4]);

3.1.2 带通信号的抽样定理

一个频带为[fL,fH]的带通信号x(t),其信号带宽为B?fH?fL, fH?kB?mB,其中k?fHf,m?H?k分别表示信号最高频率除以带宽B的整数、小数部分,可以通BB过最低抽样速率为fS?2B(1?m)的抽样序列无失真恢复。

3.2 量化

为了能用数字的方式处理信源的输出,必须将抽样信号的取值离散化,将之规定在某一有限的数值上,这一过程称为量化。因此量化是一个信息有损的过程,将量化带来的信息损失,称为量化误差,也叫量化噪声。量化器如图所示:

x模拟入Q(x)量化器y量化值

设输入信号取值区间为x?[a,b],量化器函数Q(x)是一个分段函数,可以写成如下形式:

y?Q(x)?Q(xk?x?xk?1)?yk(k?1,2,?,L)

其中,xk称为分层电平,yk称为电平,?k?xk?1?xk称为量化间隔,L称为量化电平数。由上式可得到量化后输入与信号差的平均功率,即量化噪声的平均功率为:

??E[(x?Q(x))]???2q2k?1Lxk?1xk(x?yk)2p(x)dx

其中p(x)是输入信号的概率密度。由于量化误差的存在,量化器可以看成如下图所示模型:

xyk?x?nqnq

衡量量化器的性能指标为量化信噪比,量化理论研究的是在给定输入信号概率密度

p(x)及量化电平数L的条件下,如何使量化噪声的平均功率最小,量化信噪比最大。一般

来说,量化可分为标量量化和矢量量化。在标量量化中,对每个信号样值进行量化,而矢量量化是对一组信号样值量化。本节将重点讨论标量量化器中的均匀量化器和非均匀量化器。 3.2.1 均匀量化

均匀量化时,各量化间隔相同,量化电平取在量化间隔的中点,因此量化器输出为:

yk?Q(xk?x?xk?1)?

1(xk?xk?1) 2

此时量化噪声平均功率为:

??E[(x?Q(x))]???2q2k?1Lxk?1xk1(x?(xk?xk?1))2p(x)dx

2当L很大时,?x很小,

?x2?x2???p(xk)?xdx??p(xk)?x?

??x/21212k?1k?12qL?x/22L量化信噪比可以定义为:

E[x]SNRq??2E[nq]2?bax2p(x)dx?2q

当输入信号是均匀分布,且x?[?a,a]时,则量化间隔为?x?2a,量化信噪比为: LSNRq?L2

即量化信噪比只于量化电平数有关。 3.2.2 非均匀量化

均匀量化时,量化噪声平均功率只取决于量化间隔,对于均匀分布的输入信号而言,输出量化信噪比恒定;而对非均匀分布、非平稳的输入信号,如语音信号,采用均匀量化,当输入信号功率小时量化信噪比小,输入信号功率大时量化信噪比大,造成量化后输出信号的信噪比起伏,影响恢复信号质量。实际通信中,将满足量化信噪比要求的输入信号功率范围称为量化器的输入动态范围。相比非均匀量化,为了满足输入语音信号动态范围的要求,均匀量化往往需要更多的量化电平数。

非均匀量化时,量化器随输入信号的大小采用不同的量化间隔,大信号时采用大的量化间隔,小信号时采用小的量化间隔,可以以较小的量化电平数达到输入动态范围的要求。

目前,语音信号的数字化采用两种对数压缩特性,其中中国和欧洲采用A律压缩特性(A=87.6),北美和日本采用u律压缩特性(u=255)。其压缩特性分别如下:

?Ax??1?lnAf(x)???1?lnAx??1?lnA0?x?1A1?x?1A

f(x)?ln(1??x)ln(1??)0?x?1

用MATLAB指令实现这两种压缩特性曲线的程序如下:

A-U-law

% demo for u and a law for quantize, filename: a_u_law.m % u=255 y=ln(1+ux)/ln(1+u)

% A=87.6 y=Ax/(1+lnA) (0

x=-1:dx:1; u=255; A=87.6;

% u law

yu=sign(x).*log(1+u*abs(x))/log(1+u); % A law

for i=1:length(x) if abs(x)<1/A

ya(i)=A*x(i)/(1+log(A)); else

ya(i)=sign(x(i))*(1+log(A*abs(x(i))))/(1+log(A)); end end

实际应用中,采用折现来近似上述的压缩特性,其中A律压缩特性可以用13折线近似,u律压缩特性可以用15折线近似。

用13折线近似A律压缩特性曲线的方法如下,对于归一化输入x属于[-1,+1],归一化输出y属于[-1,+1],压缩特性曲线关于原点奇对称,以下仅提供第一象限情况。Y平均等分为8个区间,x的区间划分为:

[0,1/128], [1/128,1/64], [1/64, 1/32], [1/32, 1/16], [1/16, 1/8], [1/8, 1/4], [1/4, 1/2], [1/2,1]

分别对应的y区间为:

[0,1/8], [1/8,2/8], [2/8, 3/8], [3/8, 4/8], [4/8, 5/8], [5/8, 6/8], [6/8, 7/8], [7/8,1]。

将各区间端点相连,即构成A律13折线近似压缩曲线。

假定时间间隔为0.01,设定A律压缩曲线合适的时间范围x,以及13折线合适的时间范围xx,分别画出这两条曲线。

在同一图形上画出A律压缩特性和13折线近似曲线的程序如下: %program 4_1 figure(1)

plot(x,ya,'k.:'); title('A law'); xlabel('x'); ylabel('y'); grid on; hold on;

xx=[-1,-1/2,-1/4,-1/8,-1/16,-1/32,-1/64,-1/128,1/128,1/64,1/32,1/16,1/8,1/4,1/2,1];

yy=[-1,-7/8,-6/8,-5/8,-4/8,-3/8,-2/8,-1/8,1/8,2/8,3/8,4/8,5/8,6/8,7/8,1]; plot(xx,yy,'r'); stem(xx,yy,'b-.');

legend('A律压缩折线','折线近似A律'); %axis([0,1,0,1]);

类似的,用15折线近似u律压缩特性曲线的方法如下,当u=255时,对于归一化输入

x属于[-1,+1],归一化输出y属于[-1,+1],压缩特性曲线关于原点奇对称,以下仅提供第一象限情况。Y平均等分为8个区间,x的区间划分为:

[0,1/255], [1/255,3/255], [3/255, 7/255], [7/255, 15/255], [15/255, 31/255], [31/255, 63/255], [63/255, 127/255], [127/255,1]

分别对应的y区间为:

[0,1/8], [1/8,2/8], [2/8, 3/8], [3/8, 4/8], [4/8, 5/8], [5/8, 6/8], [6/8, 7/8], [7/8,1]。

将各区间端点相连,即构成u律15折线近似压缩曲线。

在同一图形上画出u律压缩特性和15折线近似曲线的程序如下: %program 4_2 figure(2)

plot(x,yu,'k.:'); title('u law'); xlabel('x'); ylabel('y'); grid on; hold on;

xx=[-1,-127/255,-63/255,-31/255,-15/255,-7/255,-3/255,-1/255,1/255,3/255,7/255,15/255,31/255,63/255,127/255,1];

yy=[-1,-7/8,-6/8,-5/8,-4/8,-3/8,-2/8,-1/8,1/8,2/8,3/8,4/8,5/8,6/8,7/8,1]; plot(xx,yy,'r'); stem(xx,yy,'b-.');

legend('u律压缩折线','折线近似u律'); axis([0,1,0,1]); 3.3 编码

对模拟信号进行抽样、量化,将量化后的信号电平值变换为二进制码组的过程称为编码,其逆过程称为译码。理论上,任何一种从量化电平值到二进制码组的一一映射都可以做为一种编码。目前常用的编码主要有:折叠码、自然码和格雷码等。

在语音信号的数字化国际标准G.711中,采用了折叠码编码。输入的语音信号经过抽样、量化后,每个抽样值编码成8个比特的二进制码组。

根据前面编写的抽样、量化的程序,参照其思路,设计MATLAB程序完成对输入信号x(t)=Acsin(2πt)的抽样和量化,并对量化信号的A律PCM编码,经过传输后,接收端进行PCM译码的全过程。

%program 4_3

% show the pcm encode and decode clear all; close all; t=0:0.01:10;

vm1=-70:1:0; %输入的信号幅值不同 vm=10.^(vm1/20); figure(1)

for k=1:length(vm) for m=1:2

x=vm(k)*sin(2*pi*t+2*pi*rand(1));

v=1;

xx=x/v; % mormalize sxx=floor(xx*4096); y=pcm_encode(sxx); yy=pcm_decode(y,v);

nq(m)=sum((x-yy).*(x-yy))/length(x); sq(m)=mean(yy.^2); snr=(sq(m)/nq(m)); drawnow

subplot(211) plot(t,x);

title('抽样序列'); subplot(212) plot(t,yy)

title('PCM译码序列'); end

snrq(k)=10*log10(mean(snr)); end

四、实验步骤

(1)按照3.1介绍的抽样原理,运行提供的范例程序,将得到的结果图贴在如下的空白处。

实验结果图为: clear all; close all; dt=0.01; t=0:dt:10;

xt=0.1*cos(0.15*pi*t)+1.5*sin(2.5*pi*t)+0.5*cos(4*pi*t); [f,xf]=T2F(t,xt);

%抽样信号,抽样速率为4Hz fs=4; sdt=1/fs; t1=0:sdt:10;

st=0.1*cos(0.15*pi*t1)+1.5*sin(2.5*pi*t1)+0.5*cos(4*pi*t1); [f1,sf]=T2F(t1,st); t2=-50:dt:50; gt=sinc(fs*t2);

stt=sigexpand(st,sdt/dt); xt_t=conv(stt,gt);

figure(1) subplot(311); plot(t,xt);

axis([0 10 -4 4]);

title('ZX AND LZ原始信号');

xlabel('t'); hold on;

plot(t1,st,'go'); axis([0 10 -4 4]);

subplot(312); plot(t1,st,'ro'); axis([0 10 -4 4]);

title('ZX AND LZ抽样信号'); xlabel('t1'); subplot(313);

t3=-50:dt:60+sdt-dt; plot(t3,xt_t);

title('ZX AND LZ抽样恢复信号'); hold on;

plot(t,xt,'r--'); axis([0 10 -4 4]);

ZX AND LZ原始信号420-2-4012356tZX AND LZ抽样信号478910420-2-40123567t1ZX AND LZ抽样恢复信号48910420-2-4012345678910

(2)修改3.1中的范例,将其抽样速率降低到4Hz以下,在同一图形的三个子图中分别画出原低通信号波形、抽样序列和从抽样序列中恢复出的信号。 修改后的程序为: clear all; close all; dt=0.01; t=0:dt:10;

xt=0.1*cos(0.15*pi*t)+1.5*sin(2.5*pi*t)+0.5*cos(4*pi*t); [f,xf]=T2F(t,xt);

%抽样信号,抽样速率为4Hz fs=2; sdt=1/fs; t1=0:sdt:10;

st=0.1*cos(0.15*pi*t1)+1.5*sin(2.5*pi*t1)+0.5*cos(4*pi*t1); [f1,sf]=T2F(t1,st); t2=-50:dt:50; gt=sinc(fs*t2);

stt=sigexpand(st,sdt/dt); xt_t=conv(stt,gt);

figure(1) subplot(311); plot(t,xt);

axis([0 10 -4 4]);

title('ZX AND LZ原始信号'); xlabel('t'); hold on;

plot(t1,st,'go'); axis([0 10 -4 4]);

subplot(312); plot(t1,st,'ro'); axis([0 10 -4 4]); title('抽样信号'); xlabel('t1'); subplot(313);

t3=-50:dt:60+sdt-dt; plot(t3,xt_t);

title('抽样恢复信号'); hold on;

plot(t,xt,'r--'); axis([0 10 -4 4]);

ZX AND LZ原始信号420-2-40123456t抽样信号78910420-2-4012356t1抽样恢复信号478910420-2-4012345678910

请问,此时的恢复信号与原信号是否一致?如果不一致,是什么原因造成的?

答:恢复信号与原来的信号是不一致的,原因在于抽样点太少了。所以在恢复信号时与原信号不一致。

(3)运行3.2中的程序program4_1,改实验结果图贴在下面。 clear all; close all; dx=0.01; x=-1:dx:1; u=255; A=87.6;

% u law

yu=sign(x).*log(1+u*abs(x))/log(1+u); % A law

for i=1:length(x) if abs(x)<1/A

ya(i)=A*x(i)/(1+log(A)); else

ya(i)=sign(x(i))*(1+log(A*abs(x(i))))/(1+log(A)); end end

%program 4_1 figure(1)

plot(x,ya,'k.:');

title('ZX AND LZA law'); xlabel('x'); ylabel('y'); grid on; hold on;

xx=[-1,-1/2,-1/4,-1/8,-1/16,-1/32,-1/64,-1/128,1/128,1/64,1/32,1/16,1/8,1/4,1/2,1];

yy=[-1,-7/8,-6/8,-5/8,-4/8,-3/8,-2/8,-1/8,1/8,2/8,3/8,4/8,5/8,6/8,7/8,1]; plot(xx,yy,'r'); stem(xx,yy,'b-.');

legend('A律压缩折线','折线近似A律');

ZX AND LZA law10.80.60.40.20-0.2-0.4-0.6-0.8-1 -1-0.8-0.6-0.4-0.20x0.20.40.60.81A律压缩折线折线近似A律

(4)修改3.2中的程序program4_2,使之画出第一、三象限内的u律压缩特性和15折线近似曲线。

修改后的程序为:

clear all; close all; dx=0.01; x=-1:dx:1; u=255; %A=87.6;

% u law

yu=sign(x).*log(1+u*abs(x))/log(1+u); %program 4_2 figure(2)

plot(x,yu,'k.:');

title('ZX AND LZu law'); xlabel('x'); ylabel('y'); grid on; hold on;

xx=[-1,-127/255,-63/255,-31/255,-15/255,-7/255,-3/255,-1/255,1/255,3/255,7/255 ,15/255,31/255,63/255,127/255,1];

yy=[-1,-7/8,-6/8,-5/8,-4/8,-3/8,-2/8,-1/8,1/8,2/8,3/8,4/8,5/8,6/8,7/8,1]; plot(xx,yy,'r'); stem(xx,yy,'b-.');

legend('u律压缩折线','折线近似u律'); axis([-1,1,-1,1]);

y

ZX AND LZu law10.80.60.40.20-0.2-0.4-0.6-0.8-1 -1-0.8-0.6-0.4-0.20x0.20.40.60.81y u律压缩折线折线近似u律

(5)运行program4_3,将结果图保存并粘贴在下面,要求分析量化信号的A律PCM编码,经过传输后,接收端进行PCM译码的全过程中信号变化的情况。

%program 4_3

% show the pcm encode and decode clear all; close all; t=0:0.01:10;

vm1=-70:1:0; %输入的信号幅值不同 vm=10.^(vm1/20); figure(1)

for k=1:length(vm) for m=1:2

x=vm(k)*sin(2*pi*t+2*pi*rand(1)); v=1;

xx=x/v; % mormalize sxx=floor(xx*4096); y=pcm_encode(sxx); yy=pcm_decode(y,v);

nq(m)=sum((x-yy).*(x-yy))/length(x); sq(m)=mean(yy.^2); snr=(sq(m)/nq(m)); drawnow subplot(211) plot(t,x);

title('ZX AND LZ抽样序列'); subplot(212) plot(t,yy)

title('ZX AND LZPCM译码序列');

end

snrq(k)=10*log10(mean(snr)); end

ZX AND LZ抽样序列10.50-0.5-1012345678910ZX AND LZPCM译码序列10.50-0.5-1012345678910

本文来源:https://www.bwwdw.com/article/2j9w.html

Top