2FSK2FSK2FSK编码的MATLABMATLABMATLAB仿真
有具体实验需求可私聊定制
-
2FSK2FSK2FSK为二进制数字频率调制即二进制频移键控,用载波的频率来传送数字信息,即用所传送的数字信息控制载波的频率。2FSK2FSK2FSK信号便是符号“000”对应于载频$ f1$,而符号“111”对应于载频f2f2f2即与f1f1f1 不同的另一载频的已调波形,而且f1f1f1与f2f2f2 之间的改变是瞬间的。传“000”信号时,发送频率为f1f1f1的载波;传“111”信号时,发送频率为f2f2f2的载波。可见,FSKFSKFSK是用不同频率的载波来传递数字消息的。
-
一般来说,其信号产生有两种方法,即频率键控法和直接调频法。
-
频率键控法:两个分别产生正弦振荡的独立振荡器经由数字基带信号控制的电子开关后,选出的高频振荡信号就是FSKFSKFSK调制信号。
-
直接调频法是利用数字基带信号直接控制载频振荡器的振荡频率。与键控法调频相比较,它产生的信号频率稳定性比键控法产生的信号差,且存在过渡频率。
-
在接收端,信号的解调方法有两种,一种为相干解调法,另一种叫非相干解调法也叫包络检波法。
-
相干载波与原调制的载波信号必须同频同相,理论上来说虽然在信号中确实存在着载波分量,但是由于提取载波分量的过程需要加上额外的电路,会给设备增加复杂度,因此,一般情况下均采用非相干解调的方式还原信号。幅移键控调制的方式出现较早,实现虽然容易,但相对于其他方式来说抗干扰能力不强,因此在实际中不常使用。
-
非相干解调首先将得到的信号进行带通滤波后滤除载波频率以外的噪声以及干扰,使得信号可以完整的通过,再经过全波整流器输出正极端的包络曲线,然后经过低通滤波器或者整流模块输出基带包络信号,再经过抽样判决器输出基带二进制信号。包络检波各个部分最终输出的波形在时间上相对于原基带二进制信号有一定的延时,这是硬件部分进行信号处理时无法避免的,在信号速率不大的情况下这种延时可以忽略。
实验结果
clc
clear
N = 10000 % 码元数
fs = 900000 % 采样频率
source = randi([0, 1], 1, N); % 信源
T = 1/9000; % 单个码元持续时间
rate1 = 2; % 载波频率与码元频率之比
rate2 = 4;
fc1 = rate1*(1/T); % 载波频率
fc2 = rate2*(1/T);
t = (0:N*fs*T-1)/fs; % 时间刻度
L = fs*T;
t_decode = (0:(N*L+L/2-1))/fs;
decode_2FSK = zeros(1, N);
carrier1 = sin(2*pi*fc1*t); % 载波
carrier2 = sin(2*pi*fc2*t);
s = reshape((repmat(source', 1, L))', 1, N*L);
ASK_res = carrier1.*s+carrier2.*(~s);
%计算信号的傅里叶变换
Y = fft(ASK_res);
%计算双侧频谱 P2。然后基于 P2 和偶数信号长度 L 计算单侧频谱 P1。
P2 = abs(Y/(N*L));
P1 = P2(1:N*L/2+1);
P1(2:end-1) = 2*P1(2:end-1);
%定义频域 f 并绘制单侧幅值频谱 P1。与预期相符,频率和幅值与理论相同
f = fs*(0:(N*L/2))/(N*L);
s_awgn = awgn(ASK_res, 15);
x = abs(s_awgn); % 加噪,全波整流
Rp=8; % 通带纹波系数
Rs=10; % 阻带衰减系数
% Wp=16000; % 通带截止频率
% Fs=12000; % 阻带起始频率
Wp=10000;
Fs=8000;
Wp1=[12000 24000];
Fs1=[16000 20000];
Wp2=[30000 42000];
Fs2=[34000 38000];
Wp=Wp/(fs/2); % 通带截止频率
Fs=Fs/(fs/2); % 阻带起始频率
Wp1=Wp1/(fs/2);
Fs1=Fs1/(fs/2);
Wp2=Wp2/(fs/2);
Fs2=Fs2/(fs/2);
% 计算滤波器的最低阶数n和3dB截止频率Wn
[n,Wn]=buttord(Wp,Fs,Rp,Rs);
[n1,Wn1]=buttord(Wp1,Fs1,Rp,Rs);
[n2,Wn2]=buttord(Wp2,Fs2,Rp,Rs);
% 计算系统函数H(z)的分子、分母多项式系数
[b,a]=butter(n,Wn);
[b1,a1]=butter(n1,Wn1);
[b2,a2]=butter(n2,Wn2);
y=filter(b,a,x); % filter函数实现IIR滤波器的直接形式
de_car1=filter(b1,a1,s_awgn);
de_car2=filter(b2,a2,s_awgn);
de_car1_abs = abs(de_car1);
de_car2_abs = abs(de_car2);
y1 = filter(b, a, de_car1_abs);
y2 = filter(b, a, de_car2_abs);
figure;
subplot(4,1,1);plot(t, de_car1);axis([0,10*T,-1.5,1.5]);
subplot(4,1,2);plot(t, de_car2);axis([0,10*T,-1.5,1.5]);
subplot(4,1,3);plot(t, de_car1_abs);axis([0,10*T,-1.5,1.5]);
subplot(4,1,4);plot(t, de_car2_abs);axis([0,10*T,-1.5,1.5]);
for i = 1:N
if y1(L*i-L/2)>y2(L*i-L/2)
decode_2FSK(i)=1;
else
decode_2FSK(i)=0;
end
end
source;
decode_2FSK;
de_2FSK = [zeros(1, L/2), reshape(repmat(decode_2FSK', 1, L)', 1, N*L)];
k = xor(source, decode_2FSK);
length(find(k(1,:)==1))
error = length(find(k(1,:)==1))/N;
disp('误码率:')
disp(error)
figure;
subplot(3, 1, 1); plot(t, s); axis([0, 10*T, -0.5, 1.5])
subplot(3, 1, 2); plot(t, ASK_res); axis([0,10*T,-1.5,1.5])
subplot(3,1,3); plot(f,P1); xlabel('f (Hz)'); title('X(t)的单边幅值谱')
figure;
subplot(4,1,1);plot(t, s_awgn);axis([0,10*T,-1.5,1.5]);
subplot(4,1,2);plot(t, x);axis([0,10*T,-0.5,1.5]);
subplot(4,1,3);plot(t, y1);axis([0,10*T,-0.5,1.5]);
subplot(4,1,4);plot(t, y2);axis([0,10*T,-0.5,1.5]);
figure;
subplot(2, 1, 1); plot(t, s); axis([0, 10*T, -0.5, 1.5])
subplot(2,1,2);plot(t_decode, de_2FSK);axis([0,10*T,-0.5,1.5]);