用matlab写在噪声下2PSK调制和解调程序,描绘调制和解调之后频谱和时域波形,并给出误码率
时间: 2024-01-15 18:04:08 浏览: 70
验收.zip_2FSK时域图_2psk_2psk调制解调
好的,下面是在噪声下2PSK调制和解调程序,以及描绘调制和解调之后频谱和时域波形,并给出误码率的MATLAB示例:
2PSK调制和解调程序:
```matlab
% 生成在噪声下的2PSK调制和解调
fc = 1000; % 载波频率
fs = 10000; % 采样率
T = 1/fs; % 采样间隔
t = 0:T:1-T; % 时间序列
m = [1 0 1 1 0]; % 待调制的数字信号
bps = length(m); % 每秒比特数
A = 1; % 信号幅度
s = A*cos(2*pi*fc*t + pi*(m-0.5)); % 2PSK调制信号
n = length(s); % 信号长度
SNRdB = 10; % 信噪比
sigma = sqrt(A^2/(2*bps)*10^(-SNRdB/10)); % 噪声标准差
noise = sigma*randn(1, n); % 高斯白噪声
r = s + noise; % 加噪声后的接收信号
phi = pi/2; % 初始相位
demod_m = zeros(1, bps); % 解调出的数字信号
for i = 1:bps
y = r((i-1)*fs/bps+1:i*fs/bps).*cos(2*pi*fc*t((i-1)*fs/bps+1:i*fs/bps)+phi); % 与载波同频率相乘
I = sum(y)/fs*2; % 直接积分得到I分量
y = r((i-1)*fs/bps+1:i*fs/bps).*sin(2*pi*fc*t((i-1)*fs/bps+1:i*fs/bps)+phi); % 与载波正交相乘
Q = sum(y)/fs*2; % 直接积分得到Q分量
phi = atan(Q/I); % 更新相位
if phi < 0
phi = phi + 2*pi; % 保证相位在0~2*pi之间
end
if phi > pi
phi = phi - 2*pi;
end
if phi > 0
demod_m(i) = 1; % 判断I分量的正负,决定解调出的数字信号
end
end
figure(1);
subplot(211); plot(t, s); title('2PSK调制信号'); ylim([-1.2 1.2]);
subplot(212); plot(t, r); title('加噪声后的接收信号'); ylim([-3 3]);
figure(2);
subplot(211); spectrogram(s, hamming(128), 120, 128, fs, 'yaxis'); title('2PSK调制信号频谱');
subplot(212); spectrogram(r, hamming(128), 120, 128, fs, 'yaxis'); title('加噪声后的接收信号频谱');
figure(3);
subplot(211); stem(m); title('数字信号'); ylim([-0.2 1.2]);
subplot(212); stem(demod_m); title('解调出的数字信号'); ylim([-0.2 1.2]);
```
误码率计算:
```matlab
% 计算误码率
error = sum(m ~= demod_m);
BER = error/bps;
disp(['误码率为:', num2str(BER)]);
```
这个程序可以生成在噪声下2PSK调制和解调,并给出误码率。你可以根据需要进行修改。
阅读全文