BFSK 在高斯白噪声信道中的传输性能matlab代码
时间: 2023-11-19 11:11:29 浏览: 146
以下是 BFSK 在高斯白噪声信道中的传输性能 Matlab 代码:
```matlab
%% 信号参数设置
fc0 = 1000; % 二进制 0 的载波频率
fc1 = 2000; % 二进制 1 的载波频率
Tb = 0.1; % 符号时间
fs = 10000; % 采样率
L = Tb*fs; % 码元长度
t = (0:L-1)/fs; % 时间序列
N = 1000; % 发送数据长度
data = randi([0 1],1,N); % 发送数据
sign0 = sin(2*pi*fc0*t); % 二进制 0 对应的信号
sign1 = sin(2*pi*fc1*t); % 二进制 1 对应的信号
%% 信道参数设置
Eb = 1; % 符号能量
SNR_dB = 10; % 信噪比
SNR = 10^(SNR_dB/10); % 信噪比
n0 = Eb/SNR; % 噪声功率谱密度
noise = sqrt(n0/2)*randn(1,L*N); % 高斯白噪声
channel = [1 0.5 0.2]; % 信道参数
%% 信号产生与调制
modsignal = []; % 调制后信号
for i = 1:N
if data(i) == 0
modsignal = [modsignal sign0];
else
modsignal = [modsignal sign1];
end
end
%% 信号传输
rxsignal = filter(channel,1,modsignal); % 信号通过信道传输
rxsignal = rxsignal + noise; % 加入噪声
%% 信号检测与解调
recdata = []; % 解调后数据
for i = 1:N
rxdata = rxsignal((i-1)*L+1:i*L); % 接收到的信号
z0 = sum(rxdata.*sign0); % 与二进制 0 对应的信号进行相关
z1 = sum(rxdata.*sign1); % 与二进制 1 对应的信号进行相关
if z0 > z1 % 判断接收到的信号是 0 还是 1
recdata = [recdata 0];
else
recdata = [recdata 1];
end
end
%% 统计误码率
err = sum(recdata ~= data); % 统计误码数
BER = err/N % 计算误码率
```
说明:上述代码实现了 BFSK 在高斯白噪声信道中的传输过程,其中包括信号产生与调制、信号传输、信号检测与解调、统计误码率等步骤。通过改变信噪比的值,可以获得不同信噪比下的误码率数据。
阅读全文