写一段AM调制及相干解调的matlab代码,包含调制指数和信噪比
时间: 2023-07-15 11:14:10 浏览: 108
以下是一个简单的 AM 调制及相干解调的 MATLAB 代码示例,包含调制指数和信噪比:
```matlab
% 设置参数
fc = 1000; % 载波频率
fm = 100; % 调制信号频率
fs = 10000; % 采样频率
t = 0:1/fs:1; % 时间向量
% 生成调制信号
m = 0.5; % 调制指数
x = sin(2*pi*fm*t); % 原始信号
y = sin(2*pi*fc*t); % 载波信号
z = (1 + m*x).*y; % AM 调制信号
% 添加噪声
SNR = 10; % 信噪比
P_signal = mean(z.^2); % 信号功率
P_noise = P_signal / 10^(SNR/10); % 噪声功率
noise = sqrt(P_noise) * randn(size(z)); % 生成噪声
s = z + noise; % 添加噪声后的信号
% 相干解调
I = s .* cos(2*pi*fc*t); % I路信号
Q = s .* sin(2*pi*fc*t); % Q路信号
I_lp = lowpass(I, fm, fs); % 低通滤波
Q_lp = lowpass(Q, fm, fs); % 低通滤波
demodulated = I_lp.^2 + Q_lp.^2; % 解调后的信号
% 绘图
subplot(3,1,1);
plot(t,x);
title('原始信号');
xlabel('时间');
ylabel('幅值');
subplot(3,1,2);
plot(t,z);
title('AM调制信号');
xlabel('时间');
ylabel('幅值');
subplot(3,1,3);
plot(t,demodulated);
title(['相干解调信号, 调制指数=',num2str(m),', 信噪比=',num2str(SNR),'dB']);
xlabel('时间');
ylabel('幅值');
```
在上述代码中,首先定义了载波频率、调制信号频率、采样频率和时间向量等参数。然后使用 sin 函数生成原始信号和载波信号,并根据调制指数 m 将它们相乘得到 AM 调制信号。接下来,生成指定信噪比的高斯白噪声并将其加到 AM 调制信号中,得到最终的带噪声信号。最后,使用相干解调公式分别计算 I、Q 两路信号,进行低通滤波后得到解调后的信号,并绘制原始信号、AM 调制信号和相干解调信号的波形图。
需要注意的是,上述代码中的解调方式是相干解调,即要求解调信号和载波信号保持相位同步。如果信号中的载波频率和相位未知,则需要使用非相干解调方法,如包络检测法或抑制载波法。
阅读全文