fsk仿真代码
时间: 2023-08-21 13:03:26 浏览: 44
以下是一个简单的 FSK 信号的仿真代码示例,使用 MATLAB 实现:
```matlab
% 设置基本参数
fs = 2000; % 采样率
fc1 = 100; % 第一个频率
fc2 = 200; % 第二个频率
A = 1; % 振幅
T = 1; % 信号持续时间
t = 0:1/fs:T-1/fs; % 时间向量
% 生成两个正弦波信号
x1 = A*sin(2*pi*fc1*t);
x2 = A*sin(2*pi*fc2*t);
% 生成 FSK 信号
f = [fc1*ones(1,length(t)/2), fc2*ones(1,length(t)/2)]; % 频率向量
x_fsk = A*sin(2*pi*f.*t);
% 绘制信号波形图
figure;
subplot(3,1,1);
plot(t, x1);
title('信号1');
subplot(3,1,2);
plot(t, x2);
title('信号2');
subplot(3,1,3);
plot(t, x_fsk);
title('FSK信号');
```
该代码生成了两个不同频率的正弦波信号,并将它们组合成一个 FSK 信号。最后,绘制了三个信号的波形图,以便于观察它们之间的差异。
相关问题
2fsk的matlab仿真代码
以下是一个简单的2FSK调制和解调的MATLAB仿真代码:
```
% 设置参数
fc1 = 100; % 第一个载波频率
fc2 = 200; % 第二个载波频率
fs = 1000; % 采样频率
T = 1; % 信号持续时间
A = 1; % 信号幅度
fdev = 50; % 频偏
% 生成调制信号
t = 0:1/fs:T-1/fs; % 时间向量
message = square(2*pi*5*t); % 一个简单的方波作为调制信号
f1 = fc1 + fdev*message; % 第一个载波频率加上频偏
f2 = fc2 + fdev*message; % 第二个载波频率加上频偏
s1 = A*sin(2*pi*f1.*t); % 第一个调制信号
s2 = A*sin(2*pi*f2.*t); % 第二个调制信号
s = s1 + s2; % 混合两个调制信号
% 显示调制信号
figure
subplot(3,1,1)
plot(t,message)
title('调制信号')
% 显示第一个调制信号
subplot(3,1,2)
plot(t,s1)
title('第一个调制信号')
% 显示第二个调制信号
subplot(3,1,3)
plot(t,s2)
title('第二个调制信号')
% 解调信号
s_demod = abs(hilbert(s)); % 使用包络检测解调信号
% 显示解调信号
figure
subplot(2,1,1)
plot(t,s)
title('调制信号')
subplot(2,1,2)
plot(t,s_demod)
title('解调信号')
```
这个代码使用一个简单的方波信号作为调制信号,然后使用两个不同的载波频率进行2FSK调制。解调信号使用包络检测法进行解调。你可以修改代码来尝试不同的调制信号和频偏,以及使用其他解调方法。
ask fsk psk matlab仿真代码
以下是FSK和PSK的MATLAB仿真代码示例:
FSK:
```matlab
clear all;
close all;
clc;
% 设置参数
Tb = 1; % 位时间
fb = 1/Tb; % 带宽
f0 = 2*fb; % 0的频率
f1 = 4*fb; % 1的频率
fs = 10*fb; % 采样率
N = 100; % 位数
% 生成随机二进制序列
data = randi([0 1],1,N);
% FSK调制
t = 0:1/fs:N*Tb-1/fs;
s = zeros(1,length(t));
for i = 1:N
if data(i) == 0
s((i-1)*fs*Tb+1:i*fs*Tb) = cos(2*pi*f0*t((i-1)*fs*Tb+1:i*fs*Tb));
else
s((i-1)*fs*Tb+1:i*fs*Tb) = cos(2*pi*f1*t((i-1)*fs*Tb+1:i*fs*Tb));
end
end
% 添加高斯白噪声
SNR = 10; % 信噪比
noise = randn(1,length(t));
noise = noise./max(abs(noise));
noise = noise./sqrt(2*10^(SNR/10));
r = s + noise;
% FSK解调
data_hat = zeros(1,N);
for i = 1:N
x = r((i-1)*fs*Tb+1:i*fs*Tb);
f = abs(fft(x));
[~,ind] = max(f);
if ind == f0*fs+1
data_hat(i) = 0;
else
data_hat(i) = 1;
end
end
% BER计算
ber = sum(xor(data,data_hat))/N;
disp(['BER = ' num2str(ber)]);
```
PSK:
```matlab
clear all;
close all;
clc;
% 设置参数
Tb = 1; % 位时间
fb = 1/Tb; % 带宽
f = 2*fb; % 载波频率
fs = 10*fb; % 采样率
N = 100; % 位数
phi = pi/4; % 初始相位
% 生成随机二进制序列
data = randi([0 1],1,N);
% PSK调制
t = 0:1/fs:N*Tb-1/fs;
s = zeros(1,length(t));
for i = 1:N
if data(i) == 0
s((i-1)*fs*Tb+1:i*fs*Tb) = cos(2*pi*f*t((i-1)*fs*Tb+1:i*fs*Tb)+phi);
else
s((i-1)*fs*Tb+1:i*fs*Tb) = cos(2*pi*f*t((i-1)*fs*Tb+1:i*fs*Tb)-phi);
end
end
% 添加高斯白噪声
SNR = 10; % 信噪比
noise = randn(1,length(t));
noise = noise./max(abs(noise));
noise = noise./sqrt(2*10^(SNR/10));
r = s + noise;
% PSK解调
data_hat = zeros(1,N);
for i = 1:N
x = r((i-1)*fs*Tb+1:i*fs*Tb);
y = x.*cos(2*pi*f*t((i-1)*fs*Tb+1:i*fs*Tb));
z = y + j*x.*sin(2*pi*f*t((i-1)*fs*Tb+1:i*fs*Tb));
if angle(sum(z)) > 0
data_hat(i) = 1;
else
data_hat(i) = 0;
end
end
% BER计算
ber = sum(xor(data,data_hat))/N;
disp(['BER = ' num2str(ber)]);
```
这些代码仅供参考,您可以根据自己的需要进行修改和优化。