二进制fsk调制的matlab代码
时间: 2023-10-04 08:06:03 浏览: 83
以下是一个简单的二进制FSK调制的matlab代码示例:
```matlab
% 定义参数
Fs = 1000; % 采样率
f1 = 50; % 第一个频率
f2 = 100; % 第二个频率
t = 0:1/Fs:1; % 时间序列
data = [1 0 1 1 0]; % 待调制的数据
% 将二进制数据映射到频率
f = zeros(size(data));
f(data==0) = f1;
f(data==1) = f2;
% FSK调制
x = cos(2*pi*f.*t);
% 绘制调制后的信号
plot(t, x);
xlabel('时间(秒)');
ylabel('幅度');
title('二进制FSK调制信号');
```
这段代码将一个长度为5的二进制数据 `[1 0 1 1 0]` 映射到两个频率 `50Hz` 和 `100Hz`,然后使用这些频率进行FSK调制。调制后的信号将在图形窗口中绘制出来。
相关问题
二进制fsk的matlab代码
以下是一个简单的二进制FSK调制和解调的MATLAB代码示例:
% 设置参数
f1 = 1000; % 第一个频率
f2 = 2000; % 第二个频率
Tb = 1/1000; % 每个比特的持续时间
Fs = 10000; % 采样率
t = 0:1/Fs:Tb-1/Fs; % 一个比特的时间向量
% 生成消息序列
msg = [1 0 1 1 0 1 0 0];
% 调制
mod_signal = []; % 初始化调制信号变量
for i=1:length(msg)
if msg(i)==1
mod_signal = [mod_signal sin(2*pi*f1*t)];
else
mod_signal = [mod_signal sin(2*pi*f2*t)];
end
end
% 添加高斯白噪声
SNR = 10; %信噪比
mod_signal = awgn(mod_signal,SNR,'measured');
% 解调
demod_signal = []; % 初始化解调信号变量
for i=1:length(msg)
% 计算每个比特的能量
E1 = sum(sin(2*pi*f1*t).^2);
E2 = sum(sin(2*pi*f2*t).^2);
% 计算每个比特的相关性
C1 = sum(mod_signal((i-1)*length(t)+1:i*length(t)).*sin(2*pi*f1*t));
C2 = sum(mod_signal((i-1)*length(t)+1:i*length(t)).*sin(2*pi*f2*t));
% 判断最大相关性对应的频率
if C1/E1 > C2/E2
demod_signal = [demod_signal 1];
else
demod_signal = [demod_signal 0];
end
end
% 比较消息序列和解调信号
if isequal(msg,demod_signal)
disp('解调成功!');
else
disp('解调失败!');
end
MATLAB中2FSK调制系统代码
以下是MATLAB中2FSK调制系统的代码,包含信号生成、调制、解调和误差率计算部分:
```matlab
%% 2FSK调制系统代码
clear; clc;
%% 参数设置
fc1 = 1000; % 第一个载波频率
fc2 = 2000; % 第二个载波频率
fs = 8000; % 采样频率
T = 1; % 信号持续时间
R = 100; % 每秒传输比特数
N = T*fs; % 采样点数
tb = 1/R; % 每个比特的时间
A = 1; % 信号幅值
Eb = 1; % 每个比特的能量
%% 信号生成
bits = randi([0 1], 1, N/R); % 随机产生二进制比特流
t = (0:N-1)/fs; % 时间序列
msg = kron(bits, ones(1, fs*R)); % 重复每个比特,形成消息信号
s = A*cos(2*pi*fc1*t + 2*pi*(fc2-fc1)/tb*cumsum(msg)); % 2FSK调制信号
%% 解调
fc = (fc1+fc2)/2; % 解调载波频率
fdev = (fc2-fc1)/tb/2; % 频偏
Kp = 1/fdev; % 相位解调器增益
Kf = fdev/2/pi; % 频率解调器增益
phihat = angle(s(2:end).*conj(s(1:end-1))); % 相位差
phihat_unwrap = unwrap(phihat); % 去除2*pi的相位差
fh = diff(phihat_unwrap)/(1/fs);% 相邻符号间的频率
bhat = (fh > 0)'; % 解调输出比特流
%% 误码率计算
err_bits = sum(bits ~= bhat);
BER = err_bits/length(bits);
disp(['误码率为:', num2str(BER)]);
```
该代码首先设置了调制参数,如载波频率、采样频率、信号持续时间等。随机产生二进制比特流,重复每个比特形成消息信号。然后采用2FSK调制方式,生成2FSK调制信号。最后,根据解调原理解调信号,并计算误码率。