matlab FSK相干解调
时间: 2023-09-26 08:12:38 浏览: 49
FSK(频移键控)是一种数字调制技术,用于数字通信系统中。FSK调制的基本思想是将数字信息转换为频率信息,然后将频率信息与载波进行调制,形成调制信号。解调时,需要将接收到的调制信号与本地载波进行匹配,得到频率信息,从而还原数字信息。
FSK调制与解调的基本原理如下:
1. FSK调制
将数字信息转换为频率信息,然后将频率信息与载波进行调制,形成调制信号。
具体方法如下:
1)将数字信息转换为一系列频率,频率之间的差值为所选用的频移量。例如,如果选择的频移量为f,数字1对应的频率为f1,数字0对应的频率为f0,则f1-f0=f。
2)将频率信息与载波进行调制,形成调制信号。调制方法可以采用相干调制,也可以采用非相干调制。
2. FSK解调
将接收到的调制信号与本地载波进行匹配,得到频率信息,从而还原数字信息。
具体方法如下:
1)将接收到的调制信号与本地载波进行相乘。由于频率信息被调制到了信号中,在频域上可以看作是信号的幅度发生了变化。
2)将相乘后的信号经过低通滤波器滤波。由于数字信息的变化频率较低,因此只有低频信号能够通过低通滤波器,高频信号被滤掉。
3)对滤波后的信号进行采样,得到数字信息。
在Matlab中实现FSK调制与解调可以采用如下代码:
% FSK调制
fc = 10000; %载波频率
f0 = 1000; %数字0对应的频率
f1 = 2000; %数字1对应的频率
fs = 100000; %采样频率
t = 0:1/fs:1; %时间序列
data = [1 0 1 1 0 1 0 0]; %数字信息
f = zeros(size(t)); %频率序列
for i = 1:length(data)
if data(i) == 0
f(i*fs/length(data)-(fs/length(data)):i*fs/length(data)) = f0;
else
f(i*fs/length(data)-(fs/length(data)):i*fs/length(data)) = f1;
end
end
s = cos(2*pi*fc*t + 2*pi*cumsum(f)/fs); %调制后的信号
% FSK解调
fc = 10000; %载波频率
f0 = 1000; %数字0对应的频率
f1 = 2000; %数字1对应的频率
fs = 100000; %采样频率
t = 0:1/fs:1; %时间序列
data = [1 0 1 1 0 1 0 0]; %数字信息
f = zeros(size(t)); %频率序列
for i = 1:length(data)
if data(i) == 0
f(i*fs/length(data)-(fs/length(data)):i*fs/length(data)) = f0;
else
f(i*fs/length(data)-(fs/length(data)):i*fs/length(data)) = f1;
end
end
s = cos(2*pi*fc*t + 2*pi*cumsum(f)/fs); %调制后的信号
r = s.*cos(2*pi*fc*t); %接收到的信号
[b,a] = butter(8,f1/fs*2,'low'); %低通滤波器
x = filter(b,a,r); %滤波后的信号
y = x(1:length(data)*fs/length(data):end); %采样后的信号
demodulated_data = zeros(size(data)); %解调后的数字信息
for i = 1:length(demodulated_data)
if y(i*fs/length(data)-(fs/length(data)))>0
demodulated_data(i) = 1;
else
demodulated_data(i) = 0;
end
end
其中,data为输入的数字信息,f0和f1为数字0和数字1对应的频率,fc为载波频率,fs为采样频率,s为调制后的信号,r为接收到的信号,x为滤波后的信号,y为采样后的信号,demodulated_data为解调后的数字信息。