文档库 最新最全的文档下载
当前位置:文档库 › 简单短序列的算术编码的MATLAB实现

简单短序列的算术编码的MATLAB实现

简单短序列的算术编码的MATLAB实现
简单短序列的算术编码的MATLAB实现

简单短序列的算术编码的MATLAB实现

正确实现的算术编码算法压缩能力Shannond定理描述的理论极限,是目前已知的压缩能力最强的无损压缩算法。

不过,由于算术编码算法的实现比较复杂,使用它作为默认压缩算法的应用程序还相当少。在Unix平台上非常流行的bzip2(这个工具有命令行模式的Windows版本)使用的就是经过修改的算术编码算法。

目前为止还没有使用算术编码作为默认压缩算法的Windows应用程序,WinRAR和WinIMP能够支持bzip2的解压。除此之外,在最新的JPEG标准中也用到了经过修改的算术编码压缩算法,但JPEG所用的那种算法受专利保护,因此使用时必须获得授权。

在之后的文章会很好的研究这个算法的实现:

现在给出一个简单的实例:

运行过程如下:

%I=imread('001.bmp')

%imshow(I);

clear

I=[3 3 1 1 3 3 1 2;2 3 3 1 3 2 3 2;1 2 3 3 3 3 1 2];

%I=[1 1 1 1 0 0 1 0 1 1 1 0];

[m,n]=size(I);

% 第一列为灰度值,第二列为个数,第三列为概率百分数,应该也可以用imhist

table = tabulate(I(); % 注意的是,tabulate要求I的元素必须为非负整数

% 否则,以采用如下方法求解

% 如[1 2 3;1 2 2],则统计出结果1是2个,2是3个,3是1个

%

sortM=sort(M();

%

uniqueM=([diff(sortM);1]>0);

% count = [sortM(uniqueM) diff(find([1;uniqueM]))]

% 即color,p如下所示

color = table(:,1)';

p = table(:,3)'/100;

% 计算上下限

csump = cumsum(table(:,3)');

allLow =[0,csump(1:end-1)/100];

allHigh = csump/100;

numberlow = 0;

numberhigh = 1;

for k = 1:m

for kk = 1:n

data = I(k,kk);

low = allLow(data==color);

high = allHigh(data==color);

range = numberhigh-numberlow;

tmp = numberlow;

numberlow = tmp+range*low;

numberhigh = tmp+range*high;

end

end

% the result range

fprintf('算术编码范围下限为%16.15f\n\n',numberlow);

fprintf('算术编码范围上限为%16.15f\n\n',numberhigh);

% decoding

Mat = zeros(m,n);

for k = 1:m

for kk = 1:n

indx = numberlow

indx = [indx 1];

ind = diff(indx);

ind = logical(ind);

Mat(k,kk) = color(ind);

low = allLow(ind);

high = allHigh(ind);

range = high - low;

numberlow = numberlow-low;

numberlow = numberlow/range;

end

end

fprintf('原矩阵为:\n')

disp(I);

fprintf('\n');

fprintf('解码矩阵:\n');

disp(Mat);

算术编码与译码原理:

1、编码过程

算术编码方法是将被编码的一则消息或符号串(序列)表示成0和1之间的一个间隔(Interval),即对一串符号直接编码成[0,1]区间上的一个浮点小数。符号序列越长,编码表示它的间隔越小,表示这一间隔所需的位数就越多。信源中的符号序列仍然要根据某种模式生成概率的大小来减少间隔。可能出现的符号概率要比不太可能出现的符号减少范围小,因此,只正加较少的比特位。

在传输任何符号串之前,0符号串的完整范围设为[0,1]。当一个符号被处理时,

这一范围就依据分配给这一符号的那一范围变窄。算术编码的过程,实际上就是依据信源符号的发生概率对码区间分割的过程。

举例说明如下:

假设一则消息“static_tree”具有如下的概率分布:

字符概率

--------------------------------------------------------------- _(space) 0.1

a 0.1

e 0.3

r 0.1

s 0.1

t 0.3

下面用算术编码方法给该消息编码。

一旦字符的概率已知,就沿着“概率线”为每一个单独的符号设定一个范围,哪一个被设定到哪一段范围并不重要,只要编码和解码都以同样方式进行就可以,这里所用的6个字符被分配的范围(range)如下:

字符概率范围

_(space) 0.1 0≤r<0.1

a 0.1 0.1≤r<0.2

e 0.3 0.2≤r<0.5

r 0.1 0.5≤r<0.6

s 0.1 0.6≤r<0.7

t 0.3 0.7≤r<1.0

---------------------------------------------------------------- 对“state_tree”的算术编码过程为:

(1)初始化时,被分割的范围range=high-low=[0,1),下一个范围的低、高

端分别由下式计算:

Low=low+range×range low

High=low+range×range high

其中等号右边的low为上一个被编码字符的范围低;range low和range high

分别为被编码符号已给定的字符出现概率范围的low和high。

(2)对消息第一字符s编码:s的range low=0.6, s的range high=0.7因此,下一个区间的low和high为:

Low=low+range×range low=0+1×0.6=0.6

High=low+range×range high=0+1×0.7=0.7

Range=high-low=0.7-0.6=0.1

S将区间[0,1)=>[0.6,0.7)

(3)对第二个字符t编码,使用的新生范围为[0.6,0.7),因为t的range low=0.7,range high=1.0,因此下一个low,high分别为

Low=0.6+0.1×0.7=0.67

High=0.6+0.1×1.0=0.70

Range=0.7-0.67=0.03

t将[0.6,0.7)=>[0.67,0.70)

(4)对第三个字符a编码,在新生成的[0.67,0.70)中进行分割,因为a

的range low=0.10,range high=0.2,因此下一个low,high分别为

Low=0.67+0.03×0.1=0.673

High=0.67+0.03×0.2=0.676

Range=0.676-0.673=0.003

a将[0.67,0.70)=>[0.673,0.676)

(5)对第四个字符t编码,在新生成的[0.673,0.676)上进行分割。因为t的range low=0.70,range high=1.0,则下一个low,high分别为

Low=0.673+0.003×0.7=0.6751

High=0.673+0.003×1.0=0.676

Range=0.0009

t将[0.673,0.676)=>[0.6751,0.676)

同理得到下面各字符e,_,s,t,r,e,e编码所得到的范围分别为

[0.67528,0.67555),[0.67528,0.675307),[0.675 298 9,0.675 307),[0.675 302 95,0.675 303 76),[0.675 303 112,0.675 303 355),[0.675 303 160 6,0.675 303 233 5)

将编码后的区间范围综合如下:

上述编码过程可以用下面的区间分割过程表示:

2、解码过程

解码是编码的逆过程,了解了编码过程后,理解解码过程的操作就相对容易了。通过编码,最后的下界值0.675 303 160 6就是消息“state_tree”的唯一编码。然后解码时,通过判断哪一个符号能拥有我们已编码的消息落在的空间来找出消息中的第一个符号。由于0.675 303 160 6落在[0.6,0.7)之间,因此可解得第一个符号是s。

在解出s后,由于我们知道s的范围的上界和下界,利用编码的逆作用,首先去掉s的下界值0.6,得0.075 303 160 6,然后用s的范围range=0.1去除所得到的0.075 303 160 6,即得到0.753 031 606,接着找出它所在的区间,就是t的原来范围[0.7,1.0)。去掉t的下界值0.7,得0.053 031 606,然后用t 的range=0.3除该数得出0.176 772 02,该值所属范围就是字符a……如此操作下去便得到消息的准确译码。

综述,可以得到解码公式为:

(Number-range low)/range=>number

其中,number为字符串的编码。

MATLAB中产生高斯白噪声

MATLAB中产生高斯白噪声,涉及到awgn和wgn函数 MATLAB中产生高斯白噪声非常方便,可以直接应用两个函数,一个是WGN,另一个是AWGN。WGN用于产生高斯白噪声,AWGN则用于在某一信号中加入高斯白噪声。 1. WGN:产生高斯白噪声 y = wgn(m,n,p) 产生一个m行n列的高斯白噪声的矩阵,p以dBW为单位指定输出噪声的强度。 y = wgn(m,n,p,imp) 以欧姆(Ohm)为单位指定负载阻抗。 y = wgn(m,n,p,imp,state) 重置RANDN的状态。 在数值变量后还可附加一些标志性参数: y = wgn(…,POWERTYPE) 指定p的单位。POWERTYPE可以是'dBW', 'dBm'或 'linear'。线性强度(linear power)以瓦特(Watt)为单位。 y = wgn(…,OUTPUTTYPE) 指定输出类型。OUTPUTTYPE可以是'real'或 'complex'。 2. AWGN:在某一信号中加入高斯白噪声 y = awgn(x,SNR) 在信号x中加入高斯白噪声。信噪比SNR以dB为单位。x的强度假定为0dBW。如果x是复数,就加入复噪声。 y = awgn(x,SNR,SIGPOWER) 如果SIGPOWER是数值,则其代表以dBW为单位的信号强度;如果SIGPOWER为'measured',则函数将在加入噪声之前测定信号强度。y = awgn(x,SNR,SIGPOWER,STATE) 重置RANDN的状态。 y = awgn(…,POWERTYPE)指定SNR和SIGPOWER的单位。POWERTYPE可以是'dB'或'linear'。如果POWERTYPE是'dB',那么SNR以dB为单位,而SIGPOWER以dBW为单位。如果POWERTYPE是'linear',那么SNR作为比值来度量,而SIGPOWER 以瓦特为单位。 注释 1. 分贝(decibel,dB):分贝(dB)是表示相对功率或幅度电平的标准单位,换句话说,就是我们用来表示两个能量之间的差别的一种表示单位,它不是一个绝对单位。例如,电子系统中将电压、电流、功率等物理量的强弱通称为电平,电平的单位通常就以分贝表示,即事先取一个电压或电流作为参考值(0dB),用待表示的量与参考值之比取对数,再乘以20作为电平的分贝数(功率的电平值改乘10)。 2. 分贝瓦(dBW, dB Watt):指以1W的输出功率为基准时,用分贝来测量的功率放大器的功率值。 3. dBm (dB-milliWatt):即与1milliWatt(毫瓦)作比较得出的数字。 0 dBm = 1 mW 10 dBm = 10 mW 20 dBm = 100 mW 也可直接用randn函数产生高斯分布序列,例如: 程序代码 y=randn(1,2500); y=y/std(y);

matlab实现:常见的离散时间信号

1. 单位抽样序列,或称为离散时间冲激,单位冲激: ? ??=01)(n δ 00≠=n n 如果)(n δ在时间轴上延迟了k 个单位,得到)(k n -δ即: ???=-01)(k n δ 0≠=n k n 2.单位阶跃序列 ? ??01)(n u 00<≥n n 在MATLAB 中可以利用ones( )函数实现。 );,1(N ones x = 3.正弦序列 )(cos )(0φω+=n A n x 这里, ,,0ωA 和φ都是实数,它们分别称为本正弦信号)(n x 的振幅,角频率和初始相位。 πω200=f 为频率。 4.复正弦序列 n j e n x ω=)( 5.实指数序列 n A n x α=)( 6. 随机序列 长度为N 的随机序列 基本数学函数参考教材P69页以及随后的使用说明。 注意使用行向量,特别是冒号运算符。 举例,长度为N 的实指数序列在MATLAB 中实现: n a x N n .^1 :0=-= 1. 单位采样 长度为N 的单位采样序列u(n)可以通过下面的MATLAB 命令获得:

u=[1 )1,1(-N zeros ]; 延迟M 个采样点的长度为N 的单位采样序列ud(n)(M

常用信号的MATLAB表示

5 常用信号的MATLAB表示5.1单位冲激函数、单位冲激序列 示例7: t = -5:0.01:5; y = (t==0); subplot(121); plot(t, y, 'r'); n = -5:5; x = (n==0); subplot(122); stem(n, x); 图5 运行结果如图5所示。

程序说明: (1)由n = -5:5得到一个1×11数组n;而在x = (n==0)中,n==0是一个向量运算,即向量n中的每一个元素与0比较是否相等,其比较结果0或1放在x中。这样得到的向量x也是1×11数组,且正好就是单位冲激序列。 (2)在MATLAB中,任何向量x的下标是从1开始的,不能取零或负值,而x(n)中的时间变量n则不此受限制。因此向量x的下标与时间变量n是两个概念,如本例中向量x(n)的下标是从1到11,而时间变量n是从-5到5。所以必须用一个与向量x等长的定位时间变量n,以及向量x,才能完整地表示序列x(n)。在信号的表示和运算中,这一点请务必注意;只有当序列x(n)的时间变量正好是从1开始时,才能省去时间变量n,因为此时向量的下标与时间变量相同。 (3)单位冲激函数的实现方法实际上与单位冲激序列是完全相同的,都是用序列表示。只不过表示连续时间信号的序列中两相邻元素所对应的时间间隔更小,如本例中t的间隔为0.01,而表示离散时间信号的序列中两相邻元素所对应的时间间隔一般为1。 由于单位冲激序列在信号与系统中经常使用,我们专门编制一个函数文件delta.m,在后面的实验部分直接调用该函数即可产生需要的波形。 % delta.m function [x, n] = delta(n1,n2,k) % 产生冲激序列δ(n-k),其中n1<=n<=n 2, n1<=k<=n2

白噪声的测试MATLAB程序

白噪声的测试MATLAB程序 学术篇 2009-11-13 22:18:03 阅读232 评论0 字号:大中小订阅 clear; clc; %生成各种分布的随机数 x1=unifrnd(-1,1,1,1024);%生成长度为1024的均匀分布 x2=normrnd(0,1,1,1024);%生成长度为1024的正态分布 x3=exprnd(1,1,1024);%生成长度为1024的指数分布均值为零 x4=raylrnd(1,1,1024);%生成长度为1024的瑞利分布 x5=chi2rnd(1,1,1024);%生成长度为1024的kaifang分布%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %求各种分布的均值 m1=mean(x1),m2=mean(x2),m3=mean(x3),m4=mean(x4),m5=mean(x5) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %求各种分布的方差 v1=var(x1),v2=var(x2),v3=var(x3),v4=var(x4),v5=var(x5) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %求各种分布的自相关函数 figure(1);title('自相关函数图'); cor1=xcorr(x1);cor2=xcorr(x2);cor3=xcorr(x3);cor4=xcorr(x4);cor5=xcorr(x5); subplot(3,2,1),plot(1:2047,cor1);title('均匀分布自相关函数图'); subplot(3,2,2),plot(1:2047,cor2);title('正态分布'); subplot(3,2,3),plot(1:2047,cor3);title('指数分布'); subplot(3,2,4),plot(1:2047,cor4);title('瑞利分布'); subplot(3,2,5),plot(1:2047,cor5);title('K方分布'); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %求各种分布的概率密度函数 y1=unifpdf(x1,-1,1); y2=normpdf(x2,0,1); y3=exppdf(x3,1); y4=raylpdf(x4,1); y5=chi2pdf(x5,1); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %各种分布的频数直方图 figure(2); subplot(3,2,1),hist(x1);title('均匀分布频数直方图'); subplot(3,2,2),hist(x2,[-4:0.1:4]);title('正态分布'); subplot(3,2,3),hist(x3,[0:.1:20]);title('指数分布'); subplot(3,2,4),hist(x4,[0:0.1:4]);title('瑞利分布'); subplot(3,2,5),hist(x5,[0:0.1:10]);title('K方分布'); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %各种分布的概率密度估计 figure(3);

实验1 常见离散信号的MATLAB产生和图形显示

实验1 常见离散信号的MATLAB 产生和图形显示 一、实验目的:加深对常用离散信号的理解 二、实验原理: 1.单位抽样序列:???=01)(n δ 00 ≠=n n 在MATLAB 中可以利用zeros()函数实现。 ; 1)1();,1(==x N zeros x 如果)(n δ在时间轴上延迟了k 个单位,得到)(k n ?δ即:? ??=?01)(k n δ 0≠=n k n 2.单位阶越序列:???0 1 )(n u 00<≥n n 在MATLAB 中可以利用ones()函数实现。(1,)x ones N = 3.正弦序列:)/2sin()(?π+=Fs fn A n x 在MATLAB 中 ) /***2sin(*1 :0fai Fs n f pi A x N n +=?= 4.复正弦序列:n j e n x ?=)( 在MATLAB 中 ) **exp(1 :0n w j x N n =?= 5.指数序列:n a n x =)( 在MATLAB 中 n a x N n .^1:0=?= 三、实验内容: 1、编制程序产生上述5种信号(长度可输入确定),并绘出其图形。 2、讨论正弦序列、复指数序列的性质: (1)绘出信号()zn x n e =,当1126z j π=?+、1126z j π=+、112 z =、62πj z +=、6π j z =时 信号的实部和虚部图;当6 π j z =时信号的周期为多少?

(2)绘出信号() 1.5sin(2*0.1)x n n π=的频率是多少?周期是多少?产生一个数字频率为0.9的正弦序列,并显示该信号,说明其周期。 3、使用帮助功能学习square(方波),sawtooth(锯齿波)和sinc 函数,并绘图。 四、实验要求: 1、预先阅读MATLAB 基础; 2、讨论复指数序列的性质。

白噪声产生程序

第二章的白噪声产生程序 例2.2 用乘同余法产生(见光盘FLch2bzsheg2.m) ①编程如下: A=6; x0=1; M=255; f=2; N=100;%初始化; x0=1; M=255; for k=1: N %乘同余法递推100次; x2=A*x0; %分别用x2和x0表示x i+1和x i-1; x1=mod (x2,M); %取x2存储器的数除以M的余数放x1(x i)中; v1=x1/256; %将x1存储器中的数除以256得到小于1的随机数放v1中; )减去0.5再乘以存储器f中的系数,存放在v(:,k)=(v1-0.5 )*f; %将v1中的数( i 矩阵存储器v的第k列中,v(:,k)表示行不变、列随递推循环 次数变化; x0=x1; % x i-1= x i; v0=v1; end %递推100次结束; v2=v %该语句后无‘;’,实现矩阵存储器v中随机数放在v2中,且 可直接显示在MATLAB的window中; k1=k; %grapher %以下是绘图程序; k=1:k1; plot(k,v,k,v,'r'); xlabel('k'), ylabel('v');tktle(' (-1,+1)均匀分布的白噪声') ②程序运行结果如图2.6所示。 图2.6 采用MA TLAB产生的(-1,+1)均匀分布的白噪声序列 ③产生的(-1,1)均匀分布的白噪声序列 在程序运行结束后,产生的(-1,1)均匀分布的白噪声序列,直接从MATLAB的window 界面中copy出来如下(v2中每行存6个随机数):

v2 = -0.9531 -0.7188 0.6875 -0.8359 -0.0156 0.9219 0.5703 0.4531 -0.2500 -0.4844 0.1016 -0.3672 0.8047 -0.1328 0.2188 0.3359 -0.9531 -0.7188 0.6875 -0.8359 -0.0156 0.9219 0.5703 0.4531 -0.2500 -0.4844 0.1016 -0.3672 0.8047 -0.1328 0.2188 0.3359 -0.9531 -0.7188 0.6875 -0.8359 -0.0156 0.9219 0.5703 0.4531 -0.2500 -0.4844 0.1016 -0.3672 0.8047 -0.1328 0.2188 0.3359 -0.9531 -0.7188 0.6875 -0.8359 -0.0156 0.9219 0.5703 0.4531 -0.2500 -0.4844 0.1016 -0.3672 0.8047 -0.1328 0.2188 0.3359 -0.9531 -0.7188 0.6875 -0.8359 -0.0156 0.9219 0.5703 0.4531 -0.2500 -0.4844 0.1016 -0.3672 0.8047 -0.1328 0.2188 0.3359 -0.9531 -0.7188 0.6875 -0.8359 -0.0156 0.9219 0.5703 0.4531 -0.2500 -0.4844 0.1016 -0.3672 0.8047 -0.1328 0.2188 0.3359 -0.9531 -0.7188 0.6875 -0.8359 *另外,书中图2.3白噪声的产生如下: 显然,只要在例2.2程序的初始化部分中给N=300,f=6,运行程序就可以得到如图2.3所示的(-3,3)的白噪声过程. ①编程如下: A=6; x0=1; M=255; f=6; N=300;%初始化; x0=1; M=255; for k=1: N %乘同余法递推100次; x2=A*x0; %分别用x2和x0表示x i+1和x i-1; x1=mod (x2,M); %取x2存储器的数除以M的余数放x1(x i)中; v1=x1/256; %将x1存储器中的数除以256得到小于1的随机数放v1中; )减去0.5再乘以存储器f中的系数,存放在v(:,k)=(v1-0.5 )*f; %将v1中的数( i 矩阵存储器v的第k列中,v(:,k)表示行不变、列随递推循环 次数变化; x0=x1; % x i-1= x i; v0=v1; end %递推100次结束; v2=v %该语句后无‘;’,实现矩阵存储器v中随机数放在v2中,且 可直接显示在MATLAB的window中; k1=k; %grapher %以下是绘图程序; k=1:k1; plot(k,v,k,v,'r'); xlabel('k'), ylabel('v');tktle(' (-1,+1)均匀分布的白噪声')

matlab 正弦波 高斯白噪声 均匀白噪声 功率谱密度 自相关函数

现代通信原理作业一 姓名:张英伟学号:8036 班级:13级理工部3班 利用matlab完成: ●产生正弦波信号、均匀白噪声以及高斯白噪声并分别将两种噪声叠加到正弦 波信号上,绘出波形。 ●分别求取均匀白噪声序列和高斯白噪声序列的自相关及功率谱密度,绘出波 形。 一、白噪声区别及产生方法 1、定义: 均匀白噪声:噪声的幅度分布服从均匀分布,功率谱密度在整个频域内均匀分布的噪声。 高斯白噪声:噪声的幅度分布服从正态分布,功率谱密度在整个频域内均匀分布的噪声。 2、matlab仿真函数: rand函数默认产生是区间在[0,1]的随机数,这里需要利用公式: z2=a+(b-(a))*rand(m,n)............(公式1) randn函数默认产生均值是0、方差是1的随机序列,所以可以用其来产生均值为0、方差为1的正态分布白噪声,即N(0,12)。利用公式: z1=a+b*randn(1,n).................(公式2) 可以产生均值为a,方差为b2 高斯白噪声,即N(a,b2)。 二、自相关函数与功率谱密度之间的关系 1、功率谱密度:每单位频率波携带的功率,这被称为信号的功率谱密度。 2、自相关函数:描述随机信号X(t)在任意两个不同时刻t1,t2的取值之间的相关程度。 3、维纳-辛钦定理: 由于平均值不为零的信号不是平方可积的,所以在这种情况下就没有傅里叶变换。幸运的是维纳-辛钦定理提供了一个简单的替换方法,如果信号可以看作是平稳随机过程,那么功率谱密度就是信号自相关函数的傅里叶变换。 4、平稳随机过程:是在固定时间和位置的概率分布与所有时间和位置的概率分布相同的随机过程。(就是指得仅一个随机过程,中途没有变成另外一个统计特性的随机过程)

常见连续信号的MATLAB表示

实验名称:常见连续信号的MATLAB 表示 报告人: 姓名班级学号 一、实验目的 1、熟悉常见连续时间信号的意义、特性及波形; 2、学会使用MATLAB 表示连续时间信号的方法; 3、学会使用MATLAB 绘制连续时间信号的波形。 二、实验内容及运行结果 1、运行以上5个例题的程序,保存运行结果。 2、已知信号()t f 的波形如下图所示,试用MATLAB 绘出满足下列要求的信号波形。 <1)()t f -; <2)()2-t f ; <3)()at f <其中a 的值分别为 21= a 和2=a ); <4)? ?? ??+12 1t f 。 第一题 例题1

程序如下: >> t1=-10:0.5:10。 >> f1=sin(t1>./t1。 >> figure(1> >> plot(t1,f1> >> xlabel('取样间隔p=0.5'>。 >> title('f(t>=Sa(t>=sin(t>/t'>。>> t2=-10:0.1:10。 >> f2=sin(t2>./t2。 >> figure(2> >> plot(t2,f2> >> xlabel('取样间隔p=0.1'>。 >> title('f(t>=Sa(t>=sin(t>/t'>。运行结果如下:

f(t)=Sa(t)=sin(t)/t 取样间隔p=0.5 f(t)=Sa(t)=sin(t)/t 取样间隔p=0.1例题2 程序如下: >> syms t >> f=sin(t>/t。 >> ezplot(f,[-10,10]>运行结果如下:

sin(t)/t t 例题3: 程序如下: >> t=-1:0.01:4。 >> t0=0。 >> ut=stepfun(t,t0>。>> plot(t,ut> >> axis([-1,4,-0.5,1.5]>运行结果如下:

M序列的matlab产生方法

M序列是工程中常用的输入信号,它的性质类似于白噪声,而白噪声是理论上最好的输入信号,可见M序列的价值。下面介绍M序列的matlab产生方法。 idinput函数 产生系统辨识常用的典型信号。 格式 u = idinput(N,type,band,levels) [u,freqs] = idinput(N,'sine',band,levels,sinedata) N 产生的序列的长度,如果N=[N nu],则nu为输入的通道数,如果N=[P nu M],则nu 指定通道数,P为周期,M*P为信号长度。默认情况下,nu=1,M=1,即一个通道,一个周期。 Type 指定产生信号的类型,可选类型如下 Band 指定信号的频率成分。对于’rgs’、’rbs’、’sine’,band = [wlow, whigh]指定通带的范围,如果是白噪声信号,则band=[0, 1],这也是默认值。指定非默认值时,相当于有色噪声。 对于’prbs’,band=[0, B],B表示信号在一个间隔1/B(时钟周期)内为恒值,默认为[0, 1]。 Levels 指定输入的水平。Levels=[minu, maxu],在type=’rbs’、’prbs’、’sine’时,表示信号u的值总是在minu和maxu之间。对于type=’rgs’,minu指定信号的均值减标准差,maxu指定信号的均值加标准差,对于0均值、标准差为1的高斯白噪声信号,则levels=[-1, 1],这也是默认值。 说明 对于PRBS信号,如果M>1,则序列的长度和PRBS周期会做调整,使PRBS的周期为对应一定阶数的最大值(即2^n-1,n为阶数);如果M=1,PRBS的周期是大于N的相应阶数的值。在多输入的情形时,信号被最大平移,即P/nu为此信号能被估计的模型阶次的上界。 上面的意思可如下理解:对于M=1时, ms = idinput(12, 'prbs', [0 1], [0 1]); figure stairs(ms) title('M序列') ylim([-0.5 1.5])

基于matlab的直接序列扩频通信系统仿真

基于MATLAB的直接序列扩频通信系统仿真 1.实验原理:直接序列扩频(DSSS)是直接利用具有高码率的扩频码系列采用各种调 制方式在发端与扩展信号的频谱,而在收端,用相同的扩频码序去进行解扩,把扩展宽的扩频信号还原成原始的信息。它是一种数字调制方法,具体说,就是将信源与一定的PN码(伪噪声码)进行摸二加。例如说在发射端将"1"用11000100110,而将"0"用00110010110去代替,这个过程就实现了扩频,而在接收机处只要把收到的序列是11000100110就恢复成"1"是00110010110就恢复成"0",这就是解扩。这样信源速率就被提高了11倍,同时也使处理增益达到10DB以上,从而有效地提高了整机倍噪比。 1.1 直扩系统模型 直接序列扩频系统是将要发送的信息用伪随机码(PN码)扩展到一个很宽的频带上去,在接收端用与发送端相同的伪随机码对接收到的扩频信号进行相关处理,恢复出发送的信号。对干扰信号而言,与伪随机码不相关,在接收端被扩展,使落入信号通频带的干扰信号功率大大降低,从而提高了相关的输出信噪比,达到了抗干扰的目的。直扩系统一般采用频率调制或相位调制的方式来进行数据调制,在码分多址通信中,其调制多采用BPSK、DPSK、QPSK、MPSK等方式,本实验中采取BPSK方式。 直扩系统的组成如图1所示,与信源输出的信号a(t)是码元持续时间为Ta的信息流,伪随机码产生器产生伪随机码c(t),每个伪随机码的码元宽度为Tc (Tc<

实验一--常见离散信号的MATLAB产生和图形显示

实验一 常见离散信号的MATLAB 产生和图形显示 授课课时:2学时 一、实验目的: (1)熟悉MATLAB 应用环境,常用窗口的功能和使用方法。 (2)掌握MATLAB 在时域内产生常用离散时间信号的方法。 (3)掌握离散信号的基本运算。 (4)掌握简单的绘图命令。 二、实验原理: (一)信号的表示和产生 ① 单位抽样序列 ? ??=01)(n δ 00 ≠=n n 如果)(n δ在时间轴上延迟了k 个单位,得到)(k n -δ即: ???=-0 1)(k n δ ≠=n k n 参考程序: 例1-1:)2010(()(<<-=n n n x )δ clear all n1=-10;n2=20;n0=0;%在起点为n1,终点为n2的范围内,于n0处产生冲激。 n=n1:n2;%生成离散信号的时间序列 x=[n==n0];%生成离散信号x(n) stem(n,x);%绘制脉冲杆图

xlabel(' n');ylabel('x(n)');%横坐标和纵坐标的标注说明。 title('Unit Sample Sequence');%图形上方标注图名 axis([-10 20 0 1.2]);%确定横坐标和纵坐标的取值范围 ② 单位阶跃序列 ???=0 1 )(n u 00<≥n n 例1-2:)202((u )(<<-=n n n x ) clear all n1=-2;n2=20;n0=0; n=n1:n2;%生成离散信号的时间序列 x=[n>=n0];%生成离散信号x(n) stem(n,x,'filled'); xlabel('n');ylabel('x(n)'); title('Unit step Sequence'); axis([-2 20 0 1.2]); ③ 正弦序列 )sin()(?+=wn A n x 例1-3:一正弦信号的频率为1HZ ,振幅值幅度A 为1V ,在窗口显示2个周期的信号波形,并对该信号的一个周期进行32点采样获得离散信号并显示该连续信号和离散信号的波形。 参考程序: clear f=1; A=1;nt=2;

matlab 正弦波 高斯白噪声 均匀白噪声 功率谱密度 自相关函数

现代通信原理作业一 姓名:张英伟学号:133320085208036 班级:13级理工部3班 利用matlab完成: ●产生正弦波信号、均匀白噪声以及高斯白噪声并分别将两种噪声叠加到正弦 波信号上,绘出波形。 ●分别求取均匀白噪声序列和高斯白噪声序列的自相关及功率谱密度,绘出波 形。 一、白噪声区别及产生方法 1、定义: 均匀白噪声:噪声的幅度分布服从均匀分布,功率谱密度在整个频域内均匀分布的噪声。 高斯白噪声:噪声的幅度分布服从正态分布,功率谱密度在整个频域内均匀分布的噪声。 2、matlab仿真函数: rand函数默认产生是区间在[0,1]的随机数,这里需要利用公式: z2=a+(b-(a))*rand(m,n)............(公式1) randn函数默认产生均值是0、方差是1的随机序列,所以可以用其来产生均值为0、方差为1的正态分布白噪声,即N(0,12)。利用公式: z1=a+b*randn(1,n).................(公式2) 可以产生均值为a,方差为b2 高斯白噪声,即N(a,b2)。 二、自相关函数与功率谱密度之间的关系 1、功率谱密度:每单位频率波携带的功率,这被称为信号的功率谱密度。 2、自相关函数:描述随机信号X(t)在任意两个不同时刻t1,t2的取值之间的相关程度。 3、维纳-辛钦定理: 由于平均值不为零的信号不是平方可积的,所以在这种情况下就没有傅里叶变换。幸运的是维纳-辛钦定理提供了一个简单的替换方法,如果信号可以看作是平稳随机过程,那么功率谱密度就是信号自相关函数的傅里叶变换。 4、平稳随机过程:是在固定时间和位置的概率分布与所有时间和位置的概率分布相同的随机过程。(就是指得仅一个随机过程,中途没有变成另外一个统计特性的随机过程)

用MATLAB实现常用的离散时间信号及其时域运算

用M A T L A B实现常用的离散时间信号及其时域 运算 WTD standardization office【WTD 5AB- WTDK 08- WTD 2C】

实验四用M A T L A B实现常用的离散时间信号及其时域运算 —— 摘要:在MATLAB中,只能用向量来表示离散时间信号。与连续信号不同,离散时间信号无法用符号运算来表示。用适当的MATLAB语句表示出信号后,就可以利用MATLAB的绘图命令stem来绘出直观的信号波形图,stem是专门用于绘制离散时间信号的。在MATLAB中离散序列的时域运算和变换不能用符号运算来实现,而必须用向量表示的方法,即在MATLAB中离散序列的相加、相乘需表示成两个向量的相加、相乘,因而参加运算的两序列向量必须有相同的维数。 一、实验目的:(1)学习MATLAB语言及其常用指令; (2)学习和掌握用MATLAB语言产生离散时间信号的编程方法; (3)通过编程绘制出离散时间信号的波形,加深理解信号的时域运算。二、实验内容:(1)运用MATLAB的绘图指令绘制离散时间信号; (2)用MATLAB语言实现离散时间信号的时域运算。 三、实验原理:(1)单位阶跃序列和单位样值序列。 离散时间信号只在某些离散的瞬时给出信号的值,因此,它是时间上不连续的序列。单位阶跃序列和单位样值序列在离散时间信号与系统的分析中是两个非常典型的序列,分别记为u(n)和δ(n)。它们的定义分别如下: 1 n≥0 1 n≥0 u(n)= δ(n)= 0 n<0 0 n≠0 若单位阶跃序列的起始点为n0,单位样值序列出现在n0时刻,则表达式分别为:

MATLAB环境下的正弦信号及高斯白噪声仿真程序说明

姓名:朱奇峰 专业:电子与通信工程 方向:数字广播电视技术 学号:103320430109033 MATLAB 环境下的正弦信号及高斯白噪声仿真程序说明 一、信号的产生及时域观察 1、设定正选信号的频率为10HZ ,抽样频率为100HZ ; 2、设定N(0,0.25)高斯白噪声,及噪声功率为0.25W ; 3、最后将噪声叠加到正弦信号上,观察其三者时域波形。 二、信号频谱及白噪声功率谱的求解与观察 1、对原正弦信号直接进行FFT ,得出其频谱; 2、求白噪声的自相关函数,随机序列自相关函数的无偏估计公式为: 1 ^ 01()()()N m xx n r m x n x n m N m --==+-∑ 01m N ≤≤- ^^ ()()xx xx r m r m =- 01m N <<- 对所求自相关函数进行FFT 变换,求的白噪声的功率谱函数。 三、仿真结果:

附源程序代码: fs=100; fc=10; x=(0:1/fs:2); n=201; y1=sin(2*pi*fc*x); %原正弦信号,频率为10 a=0;b=0.5; %均值为a,方差为b^2 subplot(3,2,1); plot(x,y1,'r'); title('y=sin(20pi*x)'); ylabel('y'); xlabel('x/20pi'); grid; y2=a+b*randn(1,n); %高斯白噪声 subplot(3,2,2); plot(x,y2,'r'); title('N(0,0.25)的高斯白噪声'); ylabel('y'); xlabel('x/20pi'); grid; y=y1+y2; %加入噪声之后的信号 subplot(3,2,3); plot(x,y,'r'); title('叠加了高斯白噪声的sinx'); ylabel('y'); xlabel('x/20pi'); grid; FY=fft(y); %傅里叶变换得出频谱函数 FY1=fftshift(FY); %频谱校正 f=(0:200)*fs/n-fs/2; subplot(3,2,4); plot(f,abs(FY1),'r'); title('函数频谱图'); ylabel('F(jw)'); xlabel('w'); grid; %求高斯白噪声的自相关函数 m=50; i=-0.49:1/fs:0.49;

Matlab实现M序列的产生及其自相关序列学习资料

M a t l a b实现M序列的产生及其自相关序 列

电子信息工程专业课程设计任务书

1 需求分析 伪随机信号既有随机信号所具有的优良的相关性,又有随机信号所不具备的规律性. 因此,伪随机信号既易于从干扰信号中被识别和分离出来,又可以方便地产生和重复,其相关函数接近白噪声的相关函数, 有随机噪声的优点,又避免了随机噪声的缺点. 伪随机序列具有可确定性、可重复性,易于实现相关接受或匹配接受,故有很好的抗干扰性能. 因此伪随机序列在相关辩识、伪码测距、导航、遥控遥测、扩频通信、多址通信、分离多径、误码测试、线形系统测量、数据加扰、信号同步等方面均有广泛的应用. m序列是伪随机序列中最重要的一种,是最长线性移位寄存器序列,m序列易于实现,具有优良的自相关特性,在直扩通信系统中用于扩展要传递的信号。可以通过移位寄存器,利用MATLAB编程产生m序列。 2 概要设计 m 序列是最长线性反馈移位寄存器序列的简称,m 序列是由带线性反馈的移位寄存器产生的. 由n级串联的移位寄存器和和反馈逻辑线路可组成动态移位寄存器,如果反馈逻辑线路只由模2和构成,则称为线性反馈移位寄存器。 带线性反馈逻辑的移位寄存器设定初始状态后,在时钟触发下,每次移位后各级寄存器会发生变化。其中任何一级寄存器的输出,随着时钟节拍的推移都会产生一个序列,该序列称为移位寄存器序列。 n级线性移位寄存器的如图1所示: 图1 n级线性移位寄存器

图中i C 表示反馈线的两种可能连接方式,i C =1表示连线接通,第n-i 级输出加入反馈中;i C =0表示连接线断开,第n-i 级输出未参加反馈。 因此,一般形式的线性反馈逻辑表达式为 112201 (mod 2)n n n n n i n i i a C a C a C a C a ---==⊕⊕⊕=∑L 将等式左面的n a 移至右面,并将00(1)n n a C a C ==代入上式,则上式可改写为 10 0n i n i C a -==∑ 定义一个与上式相对应的多项式 ()n i i i F x C x ==∑ 其中x 的幂次表示元素的相应位置。式称为线性反馈移位寄存器的特征多项式,特征多项式与输出序列的周期有密切关系.当F(x)满足下列三个条件时,就一定能产生m 序列: (1) F(x)是不可约的,即不能再分解多项式; (2) F(x)可整除1p x +,这里21n p =-; (3) F(x)不能整除1q x +,这里q

M序列的matlab产生方法

M序列就是工程中常用的输入信号,它的性质类似于白噪声,而白噪声就是理论上最好的输入信号,可见M序列的价值。下面介绍M序列的matlab产生方法。 idinput函数 产生系统辨识常用的典型信号。 格式 u = idinput(N,type,band,levels) [u,freqs] = idinput(N,'sine',band,levels,sinedata) N 产生的序列的长度,如果N=[N nu],则nu为输入的通道数,如果N=[P nu M],则nu指定通道数,P为周期,M*P为信号长度。默认情况下,nu=1,M=1,即一个通道,一个周期。 Type 指定产生信号的类型,可选类型如下 Band 指定信号的频率成分。对于’rgs’、’rbs’、’sine’,band = [wlow, whigh]指定通带的范围,如果就是白噪声信号,则band=[0, 1],这也就是默认值。指定非默认值时,相当于有色噪声。 对于’prbs’,band=[0, B],B表示信号在一个间隔1/B(时钟周期)内为恒值,默认为[0, 1]。 Levels 指定输入的水平。Levels=[minu, maxu],在type=’rbs’、’prbs’、’sine’时,表示信号u的值总就是在minu与maxu之间。对于type=’rgs’,minu指定信号的均值减标准差,maxu指定信号的均值加标准差,对于0均值、标准差为1的高斯白噪声信号,则levels=[-1, 1],这也就是默认值。 说明 对于PRBS信号,如果M>1,则序列的长度与PRBS周期会做调整,使PRBS的周期为对应一定阶数的最大值(即2^n-1,n为阶数);如果M=1,PRBS的周期就是大于N的相应阶数的值。在多输入的情形时,信号被最大平移,即P/nu为此信号能被估计的模型阶次的上界。 上面的意思可如下理解:对于M=1时, ms = idinput(12, 'prbs', [0 1], [0 1]); figure stairs(ms) title('M序列') ylim([-0、5 1、5]) 结果如下

几种简单连续信号的matlab实现

连续信号及其MATLAB实现(原创) 连续信号又称为模拟信号,其信号存在于整个时间范围内,包括单位冲激信号,单位阶跃信号,斜坡信号,实指数信号,正弦信号,指数调制正弦信号,等等。以下我们将这几种常见的连续信号用MATLAB实现。 1、单位冲激信号 【例1】t=1/A=1/50时,单位脉冲δ(t)的MATLAB实现程序如下: clear all t1=-0.5:0.001:1; K=3; n1=length(t1); u=zeros(1,n1); t2=-0.5:0.001:0; n2=length(t2); u(n2)=K; plot(t1,u) 2、任意函数 【例2】脉冲序列: f(n)=0.4δ(n-2)+0.8δ(n-1)+1.2δ(n)+1.5δ(n+1)+1.0δ(n+2)+0.7δ(n+3),其MATLAB实现程序如下: clear all t=-2:1:3; N=length(t); x=zeros(1,N); x(1)=0.4; x(2)=0.8; x(3)=1.2; x(4)=1.5; x(5)=1.0; x(6)=0.7; stem(t,x) axis([-2.2 3.2 0 1.7]) 3、单位阶跃函数

【例3】单位阶跃函数的MATLAB实现程序: clear all t=-0.5:0.001:1; t0=0; u=stepfun(t,t0); plot(t,u) axis([-0.6 1 -0.2 1.2]) 4、斜坡函数 【例4】斜坡函数:g(t)=3(t-1),其MATLAB实现程序如下: clear all t=0:0.001:3; B=3; t0=1; u=stepfun(t,t0); n=length(t); for i=1:n u(i)=B*u(i)*(t(i)-t0); end plot(t,u) axis([-0.2 3.1 -0.2 6.2]) 5、实指数函数 【例5】实指数函数:f(t)=3exp(0.5t),其实现程序: clear all t=0:0.001:3; B=3; A=3; a=0.5; u=A*exp(a*t); plot(t,u)

通过matlab产生wav的白噪声

MATLAB 中产生高斯白噪声 MATLAB 中产生高斯白噪声非常方便,可以直接应用两个函数,一个是WGN,另一个是AWGN。WGN 用于产生高斯白噪声,AWGN 则用于在某一信号中加入高斯白噪声。 1. WGN:产生高斯白噪声 y = wgn(m,n,p) 产生一个m 行n 列的高斯白噪声的矩阵,p 以dBW 为单位指定输出噪声的强 度。 y = wgn(m,n,p,imp) 以欧姆(Ohm)为单位指定负载阻抗。 y = wgn(m,n,p,imp,state) 重置RANDN 的状态。 在数值变量后还可附加一些标志性参数: y = wgn(…,POWERTYPE) 指定p 的单位。POWERTYPE 可以是’dBW’, ‘dBm’或’linear’。线性强度(linear power)以瓦特(Watt)为单位。 y = wgn(…,OUTPUTTYPE) 指定输出类型。OUTPUTTYPE 可以是’real’或’complex’。 2. AWGN:在某一信号中加入高斯白噪声 y = awgn(x,SNR) 在信号x 中加入高斯白噪声。信噪比SNR 以dB 为单位。x 的强度假定为0dBW。 如果x 是复数,就加入复噪声。 y = awgn(x,SNR,SIGPOWER) 如果SIGPOWER 是数值,则其代表以dBW 为单位的信号强度;如 果SIGPOWER 为’measured’,则函数将在加入噪声之前测定信号强度。 y = awgn(x,SNR,SIGPOWER,STATE) 重置RANDN 的状态。 y = awgn(…,POWERTYPE) 指定SNR 和SIGPOWER 的单位。POWERTYPE 可以是’dB’或’linear’。如果POWERTYPE 是’dB’,那么SNR 以dB 为单位,而SIGPOWER 以dBW 为单位。如果POWERTYPE 是’linear’,那么SNR 作为比值来度量,而SIGPOWER 以瓦特为单位。 注释 2.1 分贝(decibel, dB) 分贝(dB)是表示相对功率或幅度电平的标准单位,换句话说,就是我们用来表示两个 能量之间的差别的一种表示单位,它不是一个绝对单位。例如,电子系统中将电压、电流、功率等物理量的强弱通称为电平,电平的单位通常就以分贝表示,即事先取一个电压或电流 作为参考值(0dB),用待表示的量与参考值之比取对数,再乘以20 作为电平的分贝数(功率 的电平值改乘10)。 2.2 分贝瓦(dBW, dB Watt) 指以1W 的输出功率为基准时,用分贝来测量的功率放大器的功率值。 2.3 dBm (dB-milliWatt) 即与1milliWatt(毫瓦)作比较得出的数字。 0 dBm = 1 mW 10 dBm = 10 mW 20 dBm = 100 mW 补充: 也可直接用randn 函数产生高斯分布序列,例如: y=randn(1,2500); y=y/std(y); y=y-mean(y); a=0.0128; b=sqrt(0.9596); y=a+b*y;

相关文档
相关文档 最新文档