数字频带传输---FSK
二进制频移键控(2FSK)
在二进制数字调制中若正弦波的载波频率随二进制基带信号在f1和f2两个频率点间进行变化,则产生二进制频移键控信号(2FSK信号),2FSK信号如图所示。
1、 相位不连续的FSK信号
如图所示:用二进制数字信号去控制开关,分别接入两个振荡器之一,可产生相位不连续的2FSK信号。
相位不连续2FSK信号的数学表达式为:
2、相位连续的2FSK信号
将二进制数字信号对单一载波进行调频,可以得到相位连续的2FSK信号。
相位连续的2FSK信号表达式:
其中K_f是调频器的频率偏移常数,b(t)是双极性不归零码序列
3、IQ实现2FSK信号
4、FSK调制实现
键控法实现FSK信号调制
IQ调制实现FSK调制
5、FSK解调实现
将接收到的信号分别通过w1和w2的带通滤波器,后进行载波恢复,低通滤波,抽样判决,得到输出的比特信息。
程序实现:::
clc;
close all;
clear all;
%%%%%%%%%%%参数设定%%%%%%%%%%%%%%%%%%%%
N=20; %二级制基带数据个数
fc=1000; %码率
j=N*fc;
s=round(rand(1,N)); %产生二级制基带数
t=linspace(0,N,j);
sample = 8;
f1=10; %载波1频率
f2=30; %载波2频率
delte_f = 20;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%产生基带信号
s1=t;
for n=1:N
if s(n)<1
for m=j/N*(n-1)+1:j/N*n
s1(m)=0;
end
else
for m=j/N*(n-1)+1:j/N*n
s1(m)=1;
end
end
end
s2=t;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%基带信号求反
for n=1:j
if s1(n)>=1
s2(n)=0;
else
s2(n)=1;
end
end
figure(1);subplot(411);plot(t,s1);title('基带信号');axis([0,N,-1,2]);
subplot(412);plot(t,s2);title('基带信号求反');axis([0,N,-1,2]);
F1=cos(2*pi*f1*t); %载波信号1
F2=cos(2*pi*f2*t); %载波信号2
subplot(413);plot(t,F1);title('载波信号1');
subplot(414);plot(t,F2);title('载波信号2');
Fsk=s1.*F1+s2.*F2; %2Fsk调制
figure(2);subplot(311);plot(t,Fsk);title('2FSK调制信号')
%设置信噪比
SNR_dB = -20:8;
snr = SNR_dB - 10*log10(0.5*16);
error = zeros(1,length(SNR_dB));
for k = 1:length(SNR_dB)
err = 0;
for x = 1:100
F3=cos(2*pi*f1*t+pi/4);
F4=cos(2*pi*f2*t+pi/4);
Fsk1=s1.*F3+s2.*F4;
%线性高斯白噪声信道
Fskh = awgn(Fsk1,SNR_dB(k),'measured');
b1=fir1(101,[10/500 15/500]); %设置带通滤波器参数
b2=fir1(101,[30/500 40/500]);
Fskh1=filter(b1,1,Fskh); %经过带通滤波器后的信号
Fskh2=filter(b2,1,Fskh);
FskH1=Fskh1.*Fskh1;
FskH2=Fskh2.*Fskh2; %经过相乘器
bn=fir1(101,[2/500 10/500]); %设置低通滤波器参数
st1=filter(bn,1,FskH1); %经过低通滤波器
st2=filter(bn,1,FskH2);
%判决
st1_sum=zeros(1,N);
st2_sum=zeros(1,N);
for p=1:N %抽样判决,在每一个带宽内按抽样频率抽样并相加比较
for j=1000*(p-1)+1:1000*p
st1_sum(p)=st1_sum(p)+st1(j);
st2_sum(p)=st2_sum(p)+st2(j);
end
if(st1_sum(p)>=st2_sum(p))
s_est(p)=1;
else s_est(p)=0;
end
end
s3=t; %解调后的基带信号
for n=1:N
if s_est(n)<1
for m=j/N*(n-1)+1:j/N*n
s3(m)=0;
end
else
for m=j/N*(n-1)+1:j/N*n
s3(m)=1;
end
end
end
err = err+sum(abs(s_est-s));
end
error(k) = err/100;
end
figure();
semilogy(SNR_dB,error/N,'*-');
xlabel('比特信噪比');
ylabel('误码率');
title('不同信噪比下误码率仿真曲线');
legend('实验曲线','理论曲线');
grid on
正交方式实现FSK
clc;
close all;
clear all;
%%%%%%%%%%%参数设定%%%%%%%%%%%%%%%%%%%%
i=20; %数据个数
fc=1000; %码率
j=i*fc;
% s=round(rand(1,i)); %产生二进制基带数
% s =zeros(1,i);
t=linspace(0,i,j);
sample = 8;
f1=10; %载波频率
delte_f = 20; %频率偏移
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%产生基带信号
s1=zeros(1,length(t));
%%%%2FSK映射
for n=1:i
if s(n)<1
for m=j/i*(n-1)+1:j/i*n
s1(m)=cos(2*pi*delte_f*m/j)-1j*sin(2*pi*delte_f*m/j);
end
else
for m=j/i*(n-1)+1:j/i*n
s1(m)=cos(2*pi*delte_f*m/j)+1j*sin(2*pi*delte_f*m/j);
end
end
end
soure_i = real(s1)/max(real(s1));
soure_q = imag(s1)/max(real(s1));
figure(1)
subplot(211),plot(t,soure_i);title('I路数据信息')
subplot(212),plot(t,soure_q);title('Q路数据信息')
%%%滤波器
%滚降滤波器
rcos_fir = rcosdesign(0.5,6,8);
% fvtool(rcos_fir,'Analysis','impulse'); %将脉冲响应可视化
filter_delay1 = (length(rcos_fir)-1); %滚降滤波器的延迟时长
%采用滚降滤波器进行滤波
rcos_msg_source_i = filter(rcos_fir,1,soure_i);
%采用滚降滤波器进行滤波
rcos_msg_source_q = filter(rcos_fir,1,soure_q);
% Z = [rcos_msg_source_i(filter_delay1+1:end)',rcos_msg_source_q(filter_delay1+1:end)'];
% Z=single(Z);
% csvName = ['FSK.csv'];
% csvwrite(csvName,Z,0,0);
% plot(rcos_msg_source_i)
% plot(rcos_msg_source_i(filter_delay1+1:end),rcos_msg_source_q(filter_delay1+1:end));
figure(2)
subplot(211),plot(t,rcos_msg_source_i);title('I路数据通过成型滤波器')
subplot(212),plot(t,rcos_msg_source_q);title('Q路数据通过成型滤波器')
fsk = rcos_msg_source_i.*cos(2*pi*f1*t)-rcos_msg_source_q.*sin(2*pi*f1*t);
plot(t,fsk);
title('2FSK调制信号')
编辑于 2021-08-21 18:30