m及CVSD编译码实验心得
Ⅰ matlab 从【a b c d e f g h i j k l m n o p q】中依次取6个字母。
摘要:先容了蓝牙技术的系统结构及特色,并联合TransiliCA公司生产的OnechIP蓝牙产品TR0700单芯片,剖析了硬件实现模式。
要害词:蓝牙技术 硬件实现 链路管理与控制 跳频
蓝牙技术是一项新兴的技术。它的重要目标是在全世界树立一个短间隔的无线通信尺度。它应用2.4GHz~2.5GHz的ISM(Instrion Scientifc Medical)频段来传送话音和数据。应用成熟、适用、先进的无线技术来取代电缆,它提供了低本钱、低功耗的无线接口,使所有固定和移动设备通过微微网PAN(Personal Area Network)连接起来,诸如:盘算机体系、家庭影院系统、无绳电话体系、通信设备等,相互通讯,实现资源共享。蓝牙技术支撑多种电子设备之间的短间隔无线通信,这种通信不须要任何线缆,亦不须要用户直接手工干预;每当一个嵌进了蓝牙技术的设备发觉另一同样嵌入蓝牙技术的装备,它们就能主动同步,相互通讯,实现资源共享。
1 蓝牙的结构系统
蓝牙协议栈的系统结构如图1所示。它是由底层硬件模块,中间层和高端运用层三大部分组成。
1.1 蓝牙的底层模块
底层模块是蓝牙技巧的核心模块,所有嵌入蓝牙技术的设备都必需包含底层模块。它主要由链路治理层LMP(Link Manager Protocol)、基带层BB(Base Band)和射频RF(Rodio Fraquency)组成。其功能是:无线连接层(RF)通过2.4GHz无需申请的ISM频段,实现数据流的过滤和传输;它重要定义了工作在此频段的蓝牙接受机应满足的需求;其带层(BB)供给了两种不同的物理链路(同步面向连接路SCO Synchronous Connection Oriented和异步无衔接链路ACL Asynchronous Connection Less),负责跳频和蓝牙数据及信息帧的传输,且对所有类型的数据包提供了不同层次的前向纠错码FEC(Frequency Error Correction)或循环沉余度错误校验CTC(Cyclic Rendancy Check);LMP层负责两个或多个设备链路的树立和拆除及链路的安全和把持,如鉴权和加密、控制和协商基带包的大小等,它为上层软件模块提供了不同的拜访进口;蓝牙主机节制器接口HCI(Host Cntroller Interface)由基带控制器、连接收理器、掌握和事件存放器等组成。它是蓝牙协议中软硬件之间的接口,提供了一个调用下层BB、LM、状况和控制存放器等硬件的同一命令,上、下两个模块接口之间的新闻和数据的传递必需通过HCI的说明才干进行。HCI层以上的协定软件实体运行在主机上,而HCI以下的功效由蓝牙装备来完成,二者之间通过传输层进行交互。
1.2 中间协议层
中间协议层由逻辑链路控制与适配协议L2CAP(Logical Link Control and Adaptation Protocol)、服务发明协议SDP(Service Discovery Protocol)、串口仿真协议或称线缆调换协议(RFCOM)和二进制电话控制协议TCS(Telephony Control protocol Spectocol)组成。L2CAP是蓝牙协议栈的核心组成部分,也是其它协议实现的基本。它位于基带之上,向上层提供面向连接和无连接的数据服务。它主要完成数据的拆装、服务质量控制、协议的复用、分组的分割和重组(Segmentation And Reassembly)及组提取等功能。L2CAP容许高达64KB的数据分组。SDP是一个基于客户/服务器结构的协议。它工作在L2CAP层之上,为上层利用程序提供一种机制来发明可用的服务及其属性,而服务属性包含服务的类型及该服务所需的机制或协议信息。RFCOMM是一个仿真有线链路的无线数据仿真协议,符合ETSI尺度的TS 07.10串口仿真协议。它在蓝牙基带上仿真RS-232的控制和数据信号,为本来应用串行连接的上层业务提供传送才能。TCS是一个基于ITU-T Q.931建议的采取面向比特的协议,它定义了用于蓝牙设备之间树立语音和数据呼叫的控制信令(Call Control Signalling),并负责处置蓝廾设备组的移动管理进程。
1.3 高端利用层
高端应用层位于蓝牙协议栈的最上部分。一个完全的蓝牙协议栈按其功能又可划分为四层:核心协议层(BB、LMP、LCAP、SDP)、线缆调换协议层(RFCOMM)、电话掌握协议层(TCS-BIN)、选用协定层(PPP、TCP、TP、UDP、OBEX、IrMC、WAP、WAE)。而高端利用层是由选用协议层组成。选用协议层中的PPP(Point-to-Point Protocol)是点到点协议,由封装、链路节制协议、网络把持协议组成,定义了串行点到点链路应该如何传输因特网协议数据,它要用于LAN接进、拨号网络及传真等应用规范;TCP/IP(传输控制协议/网络层协议)、UDP(User Datagram Protocol对象交流协议)是三种已有的协议,它定义了因特网与网络相干的通信及其他类型盘算机设备和外围设备之间的通信。蓝牙采取或共享这些已有的协议往实现与衔接因特网的设备通讯,这样,既可进步效力,又可在必定水平上保证蓝牙技术和其它通信技巧的互操作性;OBEX(Object Exchange Protocol)是对象交流协议,它支撑设备间的数据交换,采取客户/服务器模式提供与HTTP(超文本传输协议)雷同的基础功效。该协议作为一个开放性尺度还定义了可用于交流的电子商务卡、个人日程表、新闻和便条等格局;WAP(Wireless Application Protocol)是无线应用协议,它的目标是要在数字蜂窝电话和其它小型无线装备上实现因特网业务。它支持移动电话阅读网页、收取电子邮件和其它基于因特网的协议。WAE(Wireless Application Environment)是无线应用环境,它供给用于WAP电话和个人数字助理PDA所需的各种运用软件。
2 蓝牙硬件的实现
蓝牙的技术规范除了包括协议部分外还包括蓝牙的应用部分(即应用模型)。在实现蓝牙的时候,一般是将蓝牙分成两部分来斟酌,其一是软件实现部分,它位于HCI的上面,包括蓝牙协议栈上层的L2CAP、RFCOMM、SDP和TCS以及蓝牙的一些应用;其二是硬件实现部分,它位于HCI的下面,亦即上面提到的底层硬件模块,它已在图1中标示出。下面讨论蓝牙硬件模块的结构与性能。
蓝牙硬件模块由蓝牙协定栈的无线收发器(RF)、其带节制器(BB)和链路治理层(LMP)组成。目前大多数生产厂家都是应用片上体系技巧SOC(System-On-Chip)将这三层功能模块集嵌在同一块芯片上。图2为单芯片蓝牙硬件模块构造图。它由微处置器(CPU)、无线收发器(RF)、基带掌握器(BB)、静态随机存储器(SRAM)、闪存(Flash程序存储器)、通用异步收发器(UAST)、通用串行接口(USB)、语音编/解码器(CODEC)及蓝牙测试模块组成。下面分辨叙述各部分的组成及功能。
(1)蓝牙基带控制器
蓝牙基带控制器是蓝牙硬件模块的要害模块。它主要由链路控制序列产生器、可编程程序列产生器、内部语音处理器、共享RAM裁器及定时链管理、加密/解密处理等功能单元组成。其主要功能:在微处理器模块控制下,实现蓝牙基带部分的所实时处理功能,包括负责对吸收bit流进行符号定时提取的恢复;分组头及净荷的循环沉余度校验(CRC);分组头及净荷的前向纠错码(FEC)处理和发送处理;加密和解密处理等。且能提供从基带控制器到其它芯片的接口(诸如数据路径RAM客户接口、微处理器接口、脉码调制接口(PCM)等。
(2)无线收发器模块
无线收发器是蓝牙设备的核心,任何蓝牙设备都要有无线收发器。它与用于广播的普通无线收发器的不同之处在于体积小、功率小(目前生产的蓝牙无线收发器的最大输出功率只有100mW、2.5mW、1mW三种)。它由锁相环、发送模块和接受模块等组成。发送部分包含一个倍频器,且直接使用压控振荡器调制(VCO);吸收部分包括混频器、中频器放大器、鉴频器以及低噪音放大器等。无线收发器的主要功能是调制/解调、帧定时恢复和跳频功能同时完成发送和吸收操作。发送操作包括载波的发生、载波调制、功率控制及主动增益控制AGC;接收操作包括频率调谐至准确的载波频率及信号强度控制等。
(3)微处理器(CPU)
CPU负责蓝牙比特流调制和解调所的所有比特级处置,且还负责把持收发器和专用的语言编码和解码器。
(4)Flash存储器和SRAM
Flash存储器用于寄存基带和链路治理层中的所有软件部分。SRAM作为CPU的运行空间,在作时把Flash中的软件调用SRAM中。
(5)语音编/解码器CODEC(Coder Decoder)
语音编/解码器CODEC由ADC(数模转换器)、模数转换口(ADC)、数字接口、编码模块等组成。重要功效:供给语音编码和解码功能,提供CVSD(Continuous Variable Slope Delta Molation)即持续可变斜率增量调制及对数PCM(Pulse Coded Molation)即脉码调制两种编码方法。
(6)蓝牙测试模块
它是由DUT(Device Under Test)即被测试模块与测试设备及计量设备组成。一般测试 设备被测试设备构成一个微微网,测试设备是主节点,DUT是从节点。测试设备对全部测试进程进行控制,其主要功能提供无线层和基带层的认证和一致性规范,同时还管理产品的生产和售后测试。
(7)UART(Universal Asynchronous Keceiver Transunitter)通用异步收发器和USB(Universal Serial Bus)通用串行接口。
功能:提供到HCI(Host Confroller Interface)即主机控制器接口传输层的物理连接,是高层与物理模块进行通信的通道。
3 TR0700单芯片先容
RT0700单芯片是Transilica公司的蓝牙产品,其构造如图3所示。它把无线收发器与基带都集成到一块CMOS芯片上,替换传统的串行语音和通用串行接口电缆,为语音和数据业务提供无线衔接。
3.1 构造及工作原理
RT0700单芯片由收发器、基带、语音编/解码器(CODEC)、带有4个可配置的8bit接口的8051微处理器、两个串行口双高性能的通用异步收发器(UART)、4KB的静态随机存储器(SRAM)、64KB的Flash程序存储器等组成。
收发器由低噪放大器(LNA)、电平控制器(PA)、混频器、鉴频器、控制存放器、发送滤波器、振荡器等组成。其工作原理是:来自接受天线上的信号经低噪放大器(LNA)放大后,送至多级滤波器,多级滤波用具有预选择功能,它把LAN的输出信号限制在2.4GHz的ISM频段内,往除负频率成分,输出合适进行下变频处理的信号。I、Q混频器把蓝牙频段的信号移频至低中频(IF)传输的调制信号。复合滤波器负责从下变频信号中滤除无用信号和噪声。鉴频器使用过采样技术从IF信号中取出蓝牙低调制指数信号;发送器由发送滤波器、频率合成器、功率放大器、振荡器、天线等组成。其工作原理是:发送滤波器是一个高斯数字滤波器,它对发送环Tx输入的数据进行数字过滤;振荡器的功能是驱动一个外部的晶体振荡器或者接收一个外部的时钟信号,向频率合成器提供一个低噪声的参考频率。功率放大器的主要功能是对频率合成器的输出功率放大到1mW左右,且对频率合成器起缓冲作用,减少负载变更对合成器的影响;发送天线:当应用差分输入的LNA时,它可以是一个低噪声的平衡双极天线;8051微处理器是一个8位的微处理器,它的主要功能是管理和实现蓝牙协议栈。它具有一加强的指令集、二级数据指针、扩大的SRAM和双UART。在TR0700中对一些反复性的操作诸如分组的组装和拆解、加密、地址编码/解码、纠错和同步等都由硬件来实现,这样能下降处理器的开销,有效地进步响应性能。TR0700除了8051微处理器本身所带有的一些特别功能寄存器(SFR)外,还定义了一些新的特别功能寄存器(SFR),它还引入了一些特别的中止,如一个带有特殊维护的外部中止INT3等。RT0700的基带操作有三种模式可供选择:数据/地址、端口、测试。
3.2 基础功能及应用
TR0700单芯片的基础功能是:具有10m的传输间隔及1Mbps的数据速率;支持79跳系统及支撑点到点、点到多点连接,既可以是主节点又可以是从节点;支持GAP、TCS、手机、intercom剖面和串行口等;支持Hold、Sniff和Park功率节俭模式;对LC、LM、L2CAP、SDP、RECOMM等蓝牙协议栈能完整实现;对于SCO链路支持HV1、HV2、HV3数据分组;对于ACL分组支持DM1、DM3、DM5、HD1、HD3、HD5和AUX1数据分组;具有用于测试和Flash内存升级的JTAG接口。TR0700单芯片的主要运用有:用于电信方面的峰房和无绳电话、调制解调器、手持设备、互联设备、小型监督器;用于盘算机方面有键盘、鼠标、控制杆、扫描仪、监督器、打印机、桌面、笔记本计算机等。用于花费类的PDA、耳机、监督系统、游戏控制器和数字相机等。
蓝牙技术作为一个开放的无线应用标准,能通过无线连接方法将必定范畴内的固定或移动设备连接起来,使人们能够更方面更快速地进行语音和数据的交换,这无疑将会成为未来无线通信范畴的一个主要的研讨方向。本文所描写的蓝牙技术硬件实现模式剖析,只是蓝牙核心技术中的一小部分,随着蓝牙技术的不断完美与产品的胜利开发,可以确定,蓝牙技术将会逐渐进入我们的工作和生涯,成为不可缺乏的一部分。
相关的主题文章:
蓝牙广告与传统广告的对比
全球500强资深讲师 探讨蓝牙营销的前景
蓝牙广告发展趋势
我回答你的问题啊!呵呵,你怎么不给分啊????实验命令:clc;clear all;
N=input('N=');%输入信源符号的个数
s=0;l=0;H=0;
for i=1:N
fprintf('第%d个',i);
p(i)=input('p=');%输入信源符号概率分布矢量,p(i)<1
if p(i)<=0
error('不符合概率分布')
end
s=s+p(i)
H=H+(- p(i)*log2(p(i)));%计算信源信息熵
end
if (s<=0.999999||s>=1.000001)
error('不符合概率分布')
end
tic;
for i=1:N-1 %按概率分布大小对信源排序
for j=i+1:N
if p(i)<p(j)
m=p(j);p(j)=p(i);p(i)=m;
end
end
end
x=f1(1,N,p,1);
for i=1:N %计算平均码长
L(i)=length(find(x(i,:)));
l=l+p(i)*L(i);
end
n=H/l; %计算编码效率
fprintf('按概率降序排列的码字:\n');
disp(x) %显示按概率降序排列的码字
fprintf('平均码长:\n');
disp(l)% 显示平均码长
fprintf('信源信息熵:\n');
disp(H)%显示信源信息熵
fprintf('编码效率:\n');
disp(n) %显示编码效率
fprintf('计算耗时time= %f\n',toc);
再建立两个M文件:%函数f1存放于f1.m
function x=f1(i,j,p,r)
global x;
x=char(x);
if(j<=i)
return;
else
q=0;
for t=i:j %对于区间[i,j]自上而下求累加概率值
q=p(t)+q;y(t)=q;
end
for t=i:j%把所有自上而下的累加概率值与该区间总概率值减该累加概率值之差取绝对值存在一数组
v(t)=abs(y(t)-(q-y(t)));
end
for t=i:j
if(v(t)==min(v)) %求该数组中最小的一个值来确定分界点位置
for k=i:t %赋值码字
x(k,r)='0';
end
for k=(t+1):j
x(k,r)='1';
end
d=t;
f1(i,d,p,r+1); %递归调用及相互调用
f2(d+1,j,p,r+1);
f1(d+1,j,p,r+1);
f2(i,d,p,r+1);
else
end
end
end
return;第二个:%函数f2存放于f2.m
function x=f2(i,j,p,r)
global x;
x=char(x);
if(j<=i)
return;
else
q=0;
for t=i:j %对于区间[i,j]自上而下求累加概率值
q=p(t)+q;y(t-i+1)=q;
end
for t=1:j-(i-1)%把所有自上而下的累加概率值与该区间总概率值减该累加概率值之差取绝对值存在一数组
v(t)=abs(y(t)-(q-y(t)));
end
for t=1:j-(i-1)
if(v(t)==min(v)) %求该数组中最小的一个值来确定分界点位置
d=t+i-1;
for k=i:d %赋值码字
x(k,r)='0';
end
for k=(d+1):j
x(k,r)='1';
end
f2(d+1,j,p,r+1);%递归调用及相互调用
f1(i,d,p,r+1);
f2(i,d,p,r+1);
f1(d+1,j,p,r+1);
else
end
end
end
return;
Ⅲ 哈夫曼树及哈夫曼编码译码的实现(根据程序画流程图及对每句程序注释)
这是以前写的,可是我不想加注释了,Huffman编码其实原理很简单的,你自己好好学下吧,一句一句注释也太夸张了啊。
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
int m,s1,s2;
typedef struct {
unsigned int weight;
unsigned int parent,lchild,rchild;
}HTNode,*HuffmanTree;
typedef char ** HuffmanCode;
void Select(HuffmanTree HT,int n)
{
int i,j;
for(i=1;i<=n;i++)
if(HT[i].parent==0)
{s1=i;
break;
}
for(j=i+1;j<=n;j++)
if(HT[j].parent==0)
{
s2=j;
break;
}
for(i=1;i<=n;i++)
{
if(HT[i].parent==0)
if(HT[s1].weight>HT[i].weight)
if(s2!=i)
s1=i;
}
for(j=1;j<=n;j++)
{
if(HT[j].parent==0)
if(HT[s2].weight>HT[j].weight)
if(s1!=j)
s2=j;
}
if(s1>s2)
{
int temp=s1;
s1=s2;
s2=temp;
}
}
void HuffmanCoding(HuffmanTree &HT, HuffmanCode &HC, int *w, int n)
{
int i,j;
char *cd;
int p;
int cdlen;
if (n<=1) return;
m = 2 * n - 1;
HT = (HuffmanTree)malloc((m+1) * sizeof(HTNode));
for (i=1; i<=n; i++)
{
HT[i].weight=w[i-1];
HT[i].parent=0;
HT[i].lchild=0;
HT[i].rchild=0;
}
for (i=n+1; i<=m; i++)
{
HT[i].weight=0;
HT[i].parent=0;
HT[i].lchild=0;
HT[i].rchild=0;
}
//添加查看,便于调试
printf("构造过程显示:\n");
for(i=1;i<=m;i++)
printf("%4d%4d%4d%4d%4d\n",i,HT[i].weight, HT[i].parent,HT[i].lchild, HT[i].rchild);
system("pause");
for(i=n+1;i<=m;i++)
{
Select(HT,i-1);
HT[s1].parent = i; HT[s2].parent = i;
HT[i].lchild = s1; HT[i].rchild = s2;
HT[i].weight = HT[s1].weight + HT[s2].weight;
//添加查看,便于调试
/*printf("s1=%d,s2=%d\n",s1,s2);
for(j=1;j<=i;j++)
printf("%d%4d%4d%4d",j,HT[j].weight,HT[j].parent,HT[j].lchild, HT[j].rchild);
system("pause");
*/
}
cd = (char *)malloc(n*sizeof(char));
p=m;
cdlen=0;
for(i=1;i<=m;i++)
HT[i].weight=0;
while(p)
{
if(HT[p].weight==0)
{
HT[p].weight=1;
if(HT[p].lchild!=0)
{
p=HT[p].lchild;
cd[cdlen++]='0';
}
else if(HT[p].rchild==0)
{
HC[p]=(char *)malloc((cdlen+1)*sizeof(char));
cd[cdlen]='\0';
strcpy(HC[p],cd);
}
}
else if(HT[p].weight==1)
{
HT[p].weight=2;
if(HT[p].rchild!=0)
{
p=HT[p].rchild;
cd[cdlen++]='1';
}
}
else
{
HT[p].weight=0;
p=HT[p].parent;
--cdlen;
}
}
}
int main()
{
HuffmanTree HT;
HuffmanCode HC;
int *w,n,i;
printf("请输入节点数:\n");
scanf("%d",&n);
HC = (HuffmanCode)malloc(n*sizeof(HuffmanCode));
w=(int *)malloc(n*sizeof(int));
printf("请输入节点的权值:\n");
for(i=0;i<n;i++)
scanf("%d",&w[i]);
HuffmanCoding(HT,HC,w,n);
printf("输出编码:\n");
for(i=1;i<=n;i++)
printf("%2d(%4d):%s\n",i,w[i-1],HC[i]);
return 0;
system("pause");
}
Ⅳ 我想知道AMD和Inter那个处理器好具体有什么区别吗
单一的比较很难说,就总体性能来说,AMD就象大卡车,开的不是太快,但也不慢,载的东西多,如果你要运行很多的东西就选AMD。INTER,占世界70%的份额,种类多,INTER就象豪华的跑车,速度快,但载的东西少一些,不过,足够你个人用户使用的!下面是我对他们的比较,你参考一下:
我并不想具体在细节上对早期的Athlon和Duron处理器进行比较,因为他们在属于他们的那个时代都曾进辉煌过。但是就现在而言,他们的确已经过时了,如果有读者想要对他们进行细节了解,我们在下面的测试中对他们进行了粗略的测定。
早期的以Pluto及Orion为核心的,采用Slot A架构的Athlon处理器拥有L2缓存,缓存的大小是主频的1/2,2/5或者1/3——主频越快,比率越低。例如主频为700MHz的Athlon处理器的L2缓存为350MHz,而主频为750MHz的Athlon处理器的L2缓存则为300MHz,主频更高的850MHz的Athlon处理器的L2缓存更低,为340MHz。一般来说,当时在Athlon处理器与Pentium III处理器的评测中,双方不相上下,两款处理器在不同的测试项目中都有自己的优势。Athlon处理器的x87浮点性能更好,而Pentium III处理器则在最优化应用软件MMX和SSE的测试中,成绩超过Athlon处理器。
架构在socket A下的处理器在L2缓存技术方面有所进步。AMD处理器的性能在当时的一段时间内要超过英特尔处理器产品的性能。Athlon Thunderbird的缓存达到了1.4GHz,而Pentium III曾经试图达到1.13GHz但最终以失败告终,后来的Pentium III Tualatin达到了1.4GHz的水平,但这是在英特尔推出了Pentium 4处理器后才得以实现的。因此当时AMD是众多游戏玩家的至爱。
Athlon XP处理器更改了Athlon处理器的某些架构,以获得更好的性能。由于Athlon XP处理器的推出是为了与英特尔的Pentium 4处理器相抗衡,因此AMD推出了一些新的型号并且提出了“主频不是一切”的处理器性能理念。AMD公司声称Athlon XP处理器的性能相当于Thunderbird核心,但是很少有人相信这种说法,更多人认为这只是一种商业说法,由于英特尔公司新推出的处理器在主频方面有了显着的提高,而Athlon核心根本赶不上英特尔的脚步,因此“主频不是一切”的理念被提了出来。
随着处理器大战的延续,两家公司不断推出新的产品。Thoroughbred核心是一款高工作频率核心,但是并没有达到其设计的初衷。因此Thoroughbred B核心诞生了,它使得处理器的工作频率略有提高,达到了2250MHz。值得一提的是Thoroughbred B核心在冷却条件合适的时候可以超频到2.3GHz到2.4GHz,但是相比而言Thoroughbred核心的工作频率则被限制在了2.1GHz到2.2GHz之间。
Thoroughbred之后,AMD推出的Barton核心在缓存技术方面又有所突破。由于缓存的增加可以提高处理器的工作性能,因此AMD重新调整了其处理器型号。而此时英特尔公司的处理器产品在缓存以及主线频率方面都有所提高,但是公司并没有调整处理器型号。AMD推出2500+,2600+以及2800+以追赶英特尔公司的脚步,但是事实上是英特尔推出前端总线频率为800MHz,主频为200MHz的“C”系列Pentium 4处理器后,AMD新推出的前端总线频率为200MHz的Athlon XP 3200+的性能只相当于P4 2.8C。一般的消费者会简单的认为3200+的性能与3.2C不相上下,但是实际情况并非如此。关于AMD的移动处理器实在没有什么可以多介绍的,与其台式机处理器相比,移动处理器只是在减少主频的情况下减少了电能的消耗,因此移动处理器工作在低电压状态。AMD移动Athlon XP处理器由于其在超频性能上表现良好因而收到广泛的推崇。就Athlon 64处理器而言,它的命名是由于其64位地址和整数位。但是Athlon 64处理器的核心并非Athlon处理器核心的升级版本。它仍然保持了10/15级管线。拥有了x86-64的支持,的确是一个很成功的商业行为同时也吸引了不少消费者的眼球。但由于64位还没有成为现在市场的主流,因此它多少还是显得英雄无用武之地。但是随着Windows XP-64的问世,相信它在不久的将来一定会物尽其才。
Athlon 64处理器性能上的优势主要依靠于可以很好的减小延迟的整合内存控制器。它可以帮助内存在很大的情况下仍然保持L3缓存很小,同样可以在内存频率升高的同时减少内存延迟。Athlon 64 3200+处理器的内存延迟为81ns,P4 3.2C处理器的内存延迟为77ns。同时,Athlon 64 3400+处理器的内存延迟达到了48ns。
老的Pentium Pro P6架构拥有12级管线,它拥有三个专门的位址产生单元,两个算术逻辑单元——一个用来解决简单的计算,另外一个单元用来解决复杂的计算,以及一个浮点单元。其中浮点单元拥有CPU指令集,SEE(AMD直到Athlon XP处理器之前的产品均不具备这项支持)和MMX的支持。由于有了这些,使得他们在技术上领先于AMD的产品。
由于使用了Tualatin核心,使得Athlon处理器的主频可以轻松超至1.4GHz。实际上,后来的Celeron 1.0A以及Celeron 1.4A处理器在超频方面表现的也相当不错。总线频率为133MHz的Celeron 1.1A处理器更是表现出了良好的全面性能。由于市场的需要,英特尔公司在后来的日子里停产了这几款性能优越的处理器,转而开发了主频更高的Pentium 4和NetBurst处理器。
NetBurst架构拥有20级管线,从而大大加强了数据处理能力。为了减少核心引入指令以及编译码的时间,英特尔公司推出了一种新的缓存,名叫trace缓存。它被证明可以有效的提高处理器数据处理效率。在NetBurst架构下的P4处理器的逻辑算法单元以核心频率的两倍速度运行,并能以一半核心时钟周期执行部分指令,整数指令则以其于速度的两倍执行。
而其后的Prescott架构则在NetBurst架构的基础上加了3级管线,达到了23级管线。除此之外,Prescott架构的L2缓存是Northwood架构的两倍,还加入了SSE3的支持,架构在Prescott下的64位至强处理器系列现在已经开始发售。据推断在XP-64面世以后,英特尔公司也将推出相应的64位台式机处理器。
英特尔近两年来全力推展同步多执行绪技术,公司称其为超线程技术。英特尔直到P4 3.06处理器后才将这项技术植入后续处理器中。后来的至强平台,800MHz前端总线频率的所有"C"处理器均拥有超线程技术的支持。超线程技术就是利用特殊的硬件指令,把两个逻辑内核模拟成两个物理芯片,让单个处理器都能使用线程级并行计算。从而兼容多线程操作系统和软件,提高处理器的性能。在一个程序出错的同时,另一个程序仍然可以运行,这样就可以使得运行性能提高20%到50%。“超线程”技术可以使芯片同时进行多线程处理,使芯片性能得到提升。
现在让我们来看看socket 775 LGA架构,英特尔同样在这种架构下推出了多款处理器。通常而言,编号数字大的产品说明产品的性能越好,但是我们看到这样一个现象,5xx针脚处理器的性能要高于7xx针脚处理器,而某些3xx针脚处理器则要比他们的后辈性能优越。所有5xx针脚处理器使用的均是Prescott核心,拥有800MHz前端总线频率以及1MB大小的L2缓存。其他产品的具体情况读者可以在下表中找到。这样你就会明白为什么会出现产品编号数字大的处理器在性能上反而不敌编号数字小的处理器产品的原因了。
在Pentium 4处理器的基础上,加以主频的限制,变造就了非常适合于笔记本使用的英特尔移动处理器。主频越高意味着需要的能量就越大,对于笔记本而言就也就意味着需要增强电池的使用时间。面对来自Transmeta的压力,英特尔推出了集高性能与低耗电于一体的Israel核心处理器。而最终产品就是目前笔记本电脑的主流处理器Pentium M。Pentium M处理器在能量消耗方面表现极为优秀,英特尔公司为了维持其在移动处理器市场的龙头地位,将Pentium M处理器架构在P6之上。
P6架构的改进之处在于其增大了L2缓存,这使得大部分缓存可以处在低能量“睡眠”模式中。P6架构的L1缓存仍为PIII的两倍,达到了64k。浮点性能由于MMX/SSE单元的倍增而得以增强,构架在其他方面也都略有改动。总体来说,Pentium M移动处理器的性能相当于同主频的Athlon处理器,但是耗电则要略低。运用Pentium M移动处理器的笔记本电池要比运用Pentium 4处理器,移动Celeron或者移动Athlon XP的笔记本电池在使用时间上提高25%到50%。
Itanium处理器是目前最不被广大消费者了解的处理器产品。即便是最便宜的型号,其售价也超过了$1000。这并不值得奇怪,因为英特尔公司当时推出这类处理器时便将目标瞄向了高端团体市场。Itanium处理器被用来处理大量的并行进程,它还可以在512路SMP系统中工作,当然,这不能全面的解释Itanium这款高端处理器。
最初,英特尔公司将Itanium处理器作为64位处理器,并且将它架构在了一个新的IA-64结构下。IA-64架构与x86架构相似,是一款面向未来的架构体系。实际上,它的竞争对手并非至强或是Opteron处理器,Itanium的问世是英特尔公司为了占领高端64位处理器市场而推出的。它真正的竞争对手是基于IBM Power4/5, HP PA-RISC, Sun UltraSparc-III以及DEC Alpha的服务器。
就处理器结构设计而言,英特尔使用了一种在以前的大型机上运用的技术,超长指令字(VLIW)。这是一种非常长的指令组合,它把许多条指令连在一起,增加了处理器运算的速度。但是Itanium并非严格意义上的超长指令字处理器,这是由于超长指令字有其自身比较明显的弱点,而英特尔改进了这些弱点,并重新命名,称之为精确并行指令(EPIC)。与至强和Opteron处理器相比,Itanium处理器可以同时最多执行3条指令。Itanium 2处理器则可以在一个周期内执行8条指令。就性能而言,主频为1GHz的Itanium处理器相当于主频为2.66GHz的至强或者Opteron处理器,而主频为1.5GHz的Itanium 2处理器的性能则相当于4GHz的至强或者Opteron处理器。
为了达到最佳性能,Itanium处理器使用了128位四泵总线,使用标准SDRAM内存。最初的Merced版Itanium处理器拥有四个算术逻辑运算器单元,两个浮点单元以及三个分支处理单元,两个SIMD单元(例如MMX/SSE)和两个地址产成单元。而后的改进版McKinley Itanium处理器则拥有六个算术逻辑运算器单元,三个分支处理单元,两个浮点单元以及SIMD单元,两个读取单元,两个存储单元和四个地址产成单元。除此之外,McKinley版本的缓存带宽是Merced版本的三倍。
Ⅳ cvsd编码译码原理
语法规则及函数模块如下所示:
int do_stat()
{
int es=0;
fscanf(fp,"%s %s\n",&token,&token1);
printf("%s %s\n",token,token1);
es=statement();
if (es>0) return(es);
fscanf(fp,"%s %s\n",&token,&token1);
printf("%s %s\n",token,token1);
if(strcmp(token,"while")==0)
{
fscanf(fp,"%s %s\n",&token,&token1);
printf("%s %s\n",token,token1);
if(strcmp(token,"(")) return(es=5);
fscanf(fp,"%s %s\n",&token,&token1);
printf("%s %s\n",token,token1);
es=expression();
if(es>0) return(es);
if(strcmp(token,")")) return(es=6);
fscanf(fp,"%s %s\n",&token,&token1);
printf("%s %s\n",token,token1);
}
else es=3;
return(es);
}
//<声明语句> ::=int <变量>|<变量>;
//<declaration_stat>::=int ID,{ID};
int declaration_stat()
{
int es=0;
fscanf(fp,"%s %s\n",&token,&token1);
printf("%s %s\n",token,token1);
if (strcmp(token,"ID")) return(es=3); //不是标识符
fscanf(fp,"%s %s\n",&token,&token1);
printf("%s %s\n",token,token1);
while(strcmp(token,",")==0 )
{
fscanf(fp,"%s %s\n",&token,&token1);
printf("%s %s\n",token,token1);
if (strcmp(token,"ID")) return(es=3); //不是标识符
fscanf(fp,"%s %s\n",&token,&token1);
printf("%s %s\n",token,token1);
};
if (strcmp(token,";") ) return(es=4);
fscanf(fp,"%s %s\n",&token,&token1);
printf("%s %s\n",token,token1);
return(es);
}
//<程序>::={<声明序列><语句序列>}
//program::={<declaration_list><statement_list>}
int program()
{
int es=0;
fscanf(fp,"%s %s\n",token,token1);
printf("%s %s\n",token,token1);
if(strcmp(token,"main")==0)
{
fscanf(fp,"%s %s\n",&token,&token1);
printf("%s %s\n",token,token1);
if (strcmp(token,"(")) return(es=5); //少左括号
fscanf(fp,"%s %s\n",&token,&token1);
printf("%s %s\n",token,token1);
if (strcmp(token,")")) return(es=6); //少右括号
fscanf(fp,"%s %s\n",&token,&token1);
printf("%s %s\n",token,token1);
}
else
{
es=8;
return(es);
}
if(strcmp(token,"{"))//判断是否'{'
{
es=1;
return(es);
}
fscanf(fp,"%s %s\n",&token,&token1);
printf("%s %s\n",token,token1);
es=declaration_list();
if (es>0) return(es);
es=statement_list();
if (es>0) return(es);
if(strcmp(token,"}"))//判断是否'}'
{
es=2;
return(es);
}
return(es);
}
输入如下:
main()
{int a,b,c;
read a;
read b;
c=0;
do{
c=a*b;
b=b+1;
a=a-1;
}while(b<=20)
write c;
}
输出结果如下:
请输入源程序文件名(包括路径):main.txt
词法分析成功!
main main
( (
) )
{ {
int int
ID a
, ,
ID b
, ,
ID c
; ;
read read
ID a
; ;
read read
ID b
; ;
ID c
= =
NUM 0
; ;
do do
{ {
ID c
= =
ID a
* *
ID b
; ;
ID b
= =
ID b
+ +
NUM 1
; ;
ID a
= =
ID a
- -
NUM 1
; ;
} }
while while
( (
ID b
<= <=
ID b
<= <=
NUM 20
) )
write write
ID c
; ;
ID c
; ;
} }
=====语法分析结果!======
语法分析成功!
程序分析成功!!!
Ⅵ 什么是cvsd
CVSD:连续可变斜率增量调制。
ΔM的量化信噪比与抽样频率成三次方关系,即抽样频率每提高一倍则量化信噪比提高9dB。通常ΔM的抽样频率至少16KHz以上才能使量化信噪比达到15dB以上。32KHz时,量化信噪比约为26dB左右,可以用于一般的通信质量要求。如果设信道可用的最小信噪比为15dB,则信号的动态范围仅有11dB,远远不能满足高质量通信要求的35-50dB的动态范围,除非抽样频率提高到100KHz以上采用实用价值。上述理论分析的结论读者可以通过改变仿真实验的信号抽样频率观察到。当抽样频率低于16KHz时,信号失真已十分明显,当抽样频率为128KHz时失真较小。
改进ΔM动态范围的方法有很多,其基本原理是采用自适应方法使量阶Δ的大小随输入信号的统计特性变化而跟踪变化。如量阶能随信号瞬时压扩,则称为瞬时压扩ΔM,记作ADM。若量阶Δ随音节时间间隔(5一20ms)中信号平均斜率变化,则称为连续可变斜率增量调制,记作CVSD。由于这种方法中信号斜率是根据码流中连“1”或连“0”的个数来检测的,所以又称为数字检测、音节压扩的自适应增量调制,简称数字压扩增量调制。图9.20给出了数字压扩增量调制的方框图。
Ⅶ 用费诺编码实现信源编译码
我回答你的问题啊!呵呵,你怎么不给分啊????实验命令:clc;clear all;
N=input('N=');%输入信源符号的个数
s=0;l=0;H=0;
for i=1:N
fprintf('第%d个',i);
p(i)=input('p=');%输入信源符号概率分布矢量,p(i)<1
if p(i)<=0
error('不符合概率分布')
end
s=s+p(i)
H=H+(- p(i)*log2(p(i)));%计算信源信息熵
end
if (s<=0.999999||s>=1.000001)
error('不符合概率分布')
end
tic;
for i=1:N-1 %按概率分布大小对信源排序
for j=i+1:N
if p(i)<p(j)
m=p(j);p(j)=p(i);p(i)=m;
end
end
end
x=f1(1,N,p,1);
for i=1:N %计算平均码长
L(i)=length(find(x(i,:)));
l=l+p(i)*L(i);
end
n=H/l; %计算编码效率
fprintf('按概率降序排列的码字:\n');
disp(x) %显示按概率降序排列的码字
fprintf('平均码长:\n');
disp(l)% 显示平均码长
fprintf('信源信息熵:\n');
disp(H)%显示信源信息熵
fprintf('编码效率:\n');
disp(n) %显示编码效率
fprintf('计算耗时time= %f\n',toc);
再建立两个M文件:%函数f1存放于f1.m
function x=f1(i,j,p,r)
global x;
x=char(x);
if(j<=i)
return;
else
q=0;
for t=i:j %对于区间[i,j]自上而下求累加概率值
q=p(t)+q;y(t)=q;
end
for t=i:j%把所有自上而下的累加概率值与该区间总概率值减该累加概率值之差取绝对值存在一数组
v(t)=abs(y(t)-(q-y(t)));
end
for t=i:j
if(v(t)==min(v)) %求该数组中最小的一个值来确定分界点位置
for k=i:t %赋值码字
x(k,r)='0';
end
for k=(t+1):j
x(k,r)='1';
end
d=t;
f1(i,d,p,r+1); %递归调用及相互调用
f2(d+1,j,p,r+1);
f1(d+1,j,p,r+1);
f2(i,d,p,r+1);
else
end
end
end
return;第二个:%函数f2存放于f2.m
function x=f2(i,j,p,r)
global x;
x=char(x);
if(j<=i)
return;
else
q=0;
for t=i:j %对于区间[i,j]自上而下求累加概率值
q=p(t)+q;y(t-i+1)=q;
end
for t=1:j-(i-1)%把所有自上而下的累加概率值与该区间总概率值减该累加概率值之差取绝对值存在一数组
v(t)=abs(y(t)-(q-y(t)));
end
for t=1:j-(i-1)
if(v(t)==min(v)) %求该数组中最小的一个值来确定分界点位置
d=t+i-1;
for k=i:d %赋值码字
x(k,r)='0';
end
for k=(d+1):j
x(k,r)='1';
end
f2(d+1,j,p,r+1);%递归调用及相互调用
f1(i,d,p,r+1);
f2(i,d,p,r+1);
f1(d+1,j,p,r+1);
else
end
end
end
return;
Ⅷ CVSD如何从输出编码数据中反映出信号斜率的大小
MX639芯片介绍:
CMX639是美国国家半导体公司推出的斜率连续可变增量(CVSD)全双工音频调制芯片。
CMX639完全集成了语音编码和解码功能,实现了单芯片语音处理的能力,外围设备简单,而且用户可以通过其管脚方便地对其编解码算法进行设置,并且具有强大的可选择编码算法,低功耗、低价位、小体积和开发难度低等多种优点,因此特别适合在对成本非常敏感的消费类语音系统中应用。
VDD:3.0V~5.0V供电电压。
ENCODER INPUT(7): 模拟语音信号的输入管脚。
ENCODER OUTPUT(4):语音编码后的输出管脚,将输入的模拟信号编码成为串行数据。
DECODER INPUT(11):用于解码的串行数据的输入管脚
DECODER OUTPUT(9):解码后的模拟语音信号输出管脚。
DATA ENABLE(5):数据使能端,当DATA ENABLE管脚处于高电平状态时,ENCODER OUTPUT才输出编码信号;否则,ENCODER OUTPUT管脚处于高阻状态。
AGRITHM(13):算法选择管脚,由外部输入来决定压缩编码地算法是采用3 bit或4 bit算法。
(10):功率节省管脚。当不需要进行语音编解码时,将POWERSAVE管脚置低电平,芯片处于低功耗的待机状态。
CLOCK MODE1(15),CLOCK MODE2(14),ENCODER DATA CLOCK(3)和DECODER DATA CLOCK(12):其管脚功能见下表。
由上表可知,CMX639采样速率完全取决于振荡器的频率和所设置的时钟模式。用户可以依据实际情况,自主选择采样速率,在语音质量和编码数据码率之间进行权衡,而且在振荡器的频率固定的情况下,还可以利用外部端口改变采样速率,因此赋予用户开发极大的自主权。
② 美国模拟器件公司(ANALOG DEVICES, INC.,ADI):
单芯片JPE2000编解码器ADV202与PULSE~LINK公司的连续波(CWAVE)UWB技术相结合,极大地降低了无线传输信道中产生的误差对视频质量的影响,即使在噪声环境中也能产生良好的图像质量,可实现高质量、低等待时间的无线HD娱乐应用和家庭中的高质量、低成本的无线HD或SD(标准清晰度)视频传输。