基于MATLAB的PM信号的调制与解调并且加噪的代码
时间: 2023-08-03 19:07:23 浏览: 73
以下是基于MATLAB的PM信号的调制与解调并且加噪的代码:
调制部分:
```
% 设置调制参数
fc = 10000; % 载波频率
fm = 1000; % 调制信号频率
beta = 1; % 调制指数
Fs = 100000; % 采样频率
t = 0:1/Fs:1; % 时间向量
% 生成调制信号
m = sin(2*pi*fm*t);
m = m/max(abs(m)); % 归一化
subplot(3,1,1);
plot(t,m);
title('调制信号');
% 生成载波信号
c = cos(2*pi*fc*t);
% 计算调制信号的相位
phi = cumsum(2*pi*beta/Fs*m);
% 生成PM信号
s = c.*cos(phi);
% 绘制调制后的信号
subplot(3,1,2);
plot(t,s);
title('PM信号');
% 加入高斯白噪声
snr = 10; % 信噪比
noise = randn(size(s));
noise = noise - mean(noise);
noise = noise/std(noise);
noise = noise/sqrt(snr);
s_noise = s + noise;
% 绘制加噪后的信号
subplot(3,1,3);
plot(t,s_noise);
title('加噪后的PM信号');
```
解调部分:
```
% 解调PM信号
y = s_noise.*c;
y_lp = lowpass(y,2*pi*fc/Fs); % 低通滤波
y_lp = y_lp - mean(y_lp); % 去除直流分量
% 估计调制信号的相位
phi_hat = cumsum(2*pi*fc/Fs*y_lp);
% 重构调制信号
m_hat = cos(phi_hat);
% 绘制解调后的信号
figure;
subplot(2,1,1);
plot(t,m);
hold on;
plot(t,m_hat);
title('调制信号和解调信号');
% 计算信噪比
err = m - m_hat;
snr = 10*log10(var(m)/var(err));
disp(['SNR = ',num2str(snr),' dB']);
% 绘制误差信号
subplot(2,1,2);
plot(t,err);
title('误差信号');
```
注意:代码中的 `lowpass` 函数需要先定义。