matlab调制2FSK的代码
时间: 2023-12-06 22:37:10 浏览: 43
以下是matlab调制2FSK的代码示例:
```matlab
% 设置参数
Fs = 10000; % 采样率
Fc1 = 1000; % 第一个载波频率
Fc2 = 2000; % 第二个载波频率
Tb = 0.1; % 每个比特的时间
Rb = 1/Tb; % 比特速率
L = 100; % 比特流长度
bits = randi([0 1],1,L); % 随机生成比特流
% 生成调制信号
t = 0:1/Fs:L*Tb-1/Fs; % 时间轴
s = zeros(1,length(t)); % 初始化调制信号
for i = 1:L
if bits(i) == 0
s((i-1)*Fs*Tb+1:i*Fs*Tb) = cos(2*pi*Fc1*t((i-1)*Fs*Tb+1:i*Fs*Tb));
else
s((i-1)*Fs*Tb+1:i*Fs*Tb) = cos(2*pi*Fc2*t((i-1)*Fs*Tb+1:i*Fs*Tb));
end
end
% 绘制调制信号图像
plot(t,s);
xlabel('Time');
ylabel('Amplitude');
title('2FSK Modulation Signal');
```
该代码首先设置了一些参数,包括采样率、载波频率、比特时间、比特速率、比特流长度等。然后随机生成了一个比特流,并根据比特流生成了2FSK调制信号。最后绘制了调制信号的图像。
相关问题
2fsk调制解调matlab代码
以下是2FSK调制解调的MATLAB代码:
% 2FSK调制
fc = 1000; %载波频率
fs = 10000; %采样频率
T = 1/fs; %采样时间间隔
t = 0:T:1-T; %时间序列
f1 = 2000; %数字信息“1”对应的频率
f2 = 4000; %数字信息“0”对应的频率
a = [1 0 1 1 0 1 0 0]; %数字信息序列
s = zeros(1,length(t)); %初始化调制信号
for i = 1:length(a)
if a(i) == 1
s((i-1)*fs/f1+1:i*fs/f1) = sin(2*pi*f1*t((i-1)*fs/f1+1:i*fs/f1));
else
s((i-1)*fs/f2+1:i*fs/f2) = sin(2*pi*f2*t((i-1)*fs/f2+1:i*fs/f2));
end
end
c = sin(2*pi*fc*t); %载波信号
x = s.*c; %调制信号
subplot(3,1,1);
plot(t,s);
title('数字信息信号');
subplot(3,1,2);
plot(t,c);
title('载波信号');
subplot(3,1,3);
plot(t,x);
title('2FSK调制信号');
% 2FSK解调
y = x.*c; %解调信号
[b,a] = butter(6,2*pi*(f2-f1)/fs); %设计带通滤波器
z = filter(b,a,y); %滤波
figure;
subplot(3,1,1);
plot(t,x);
title('2FSK调制信号');
subplot(3,1,2);
plot(t,y);
title('2FSK解调信号');
subplot(3,1,3);
plot(t,z);
title('2FSK解调后的数字信息信号');
其中,a为数字信息序列,fc为载波频率,fs为采样频率,f1和f2分别为数字信息“1”和“0”对应的频率。代码中使用了带通滤波器对解调信号进行滤波,得到数字信息序列。
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调制信号。最后,根据解调原理解调信号,并计算误码率。