2008-05-22 回答
这破烂系统,好不容易敲了半天,居然说我的回答有不当内容,全删了!
我决定再敲一次。
实际上,fsk的原理是利用不同的频率表征不同的数字信号,例如比特1用某一种频率,比特2用另一种频率。
fsk其实并没有什么研究意义,因为它相对简单。不过作为数字通信原理的入门学习,它倒是有点作用的。
fsk在最新的数字通信中几乎没什么应用,未来的3g和4g通信基本上都用的是psk、qam等技术了。在现阶段的2g通信中,fsk则应用在gsm通信中。gsm使用的是gmsk,它是msk的一种特殊实现方式,而msk也是一种特殊的fsk,可以说是它的一个变种。fsk还有许多其它变种,例如afsk等。fsk在业余无线电、北美的callid中也有应用。
fsk的matlab调制仿真程序如下。其输入参数为:
g:0和1的数字序列,比特率为1hz;
f0:0的调制频率
f1:1的调制频率
例如,如果有一比特率为1hz的比序列“10110”,要用fsk来调制之,其中用频率为1hz的正弦波调制比特0,频率为3hz的正弦波调制比特1,则调制后的波形可以通过调用以下函数获得:fskd([10110],1,3)。
特此声明,该函数也不是我写的,我只是选取一段copy过来。
functionfskd(g,f0,f1)
ifnargin>3
error('toomanyinputarguments')
elseifnargin==1
f0=1;f1=2;
elseifnargin==2
f1=2;
end
val0=ceil(f0)-f0;
val1=ceil(f1)-f1;
ifval0~=0||val1~=0;
error('frequencymustbeaninteger');
end
iff0<1||f1<1;
error('frequencymustbebiggerthan1');
end
t=0:2*pi/99:2*pi;
cp=[];sp=[];
mod=[];mod1=[];bit=[];
forn=1:length(g);
ifg(n)==0;
die=ones(1,100);
c=sin(f0*t);
se=zeros(1,100);
elseg(n)==1;
die=ones(1,100);
c=sin(f1*t);
se=ones(1,100);
end
cp=[cpdie];
mod=[modc];
bit=[bitse];
end
ask=cp.*mod;
subplot(2,1,1);plot(bit,'linewidth',1.5);gridon;
title('binarysignal');
axis([0100*length(g)-2.52.5]);
subplot(2,1,2);plot(ask,'linewidth',1.5);gridon;
title('fskmodulation');
axis([0100*length(g)-2.52.5]);