ask fsk psk matlab仿真代码
时间: 2023-09-05 16:07:42 浏览: 59
以下是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)]);
```
这些代码仅供参考,您可以根据自己的需要进行修改和优化。