基于MATLAB的ASK,FSK,PSK误码率对比仿真,输出调制后波形以及误码率曲线
时间: 2023-12-04 20:03:38 浏览: 322
好的,让我来为您介绍一下基于MATLAB的ASK, FSK, PSK误码率对比仿真。
首先,我们需要生成ASK、FSK和PSK的调制信号,并加入高斯白噪声,接着进行解调和误码率的计算。
以下是基于MATLAB的ASK、FSK和PSK误码率对比仿真的代码和说明。
```matlab
%% 生成ASK调制信号
clear all;
close all;
clc;
fc=10; %载波频率
fs=100; %采样频率
T=1/fs;
t=0:T:1-T;
Ac=1; %载波幅度
fm=2; %基带频率
m_t=Ac*sin(2*pi*fm*t); %信源
s_t=Ac*(1+m_t).*cos(2*pi*fc*t); %ASK调制信号
%加入高斯白噪声
SNR=0:2:20;
for i=1:length(SNR)
%计算噪声功率
N0=Ac^2/(2*10^(SNR(i)/10));
noise=sqrt(N0)*randn(1,length(s_t));
r_t=s_t+noise; %加噪声后的信号
%ASK解调
A=2*Ac;
m_r=(r_t.*cos(2*pi*fc*t)-A/2)>0;
%计算误码率
error(i)=sum(xor(m_t>0,m_r))/length(m_r);
end
%画图
subplot(2,1,1);
plot(t,m_t);
title('ASK调制信号');
xlabel('时间');
ylabel('幅度');
subplot(2,1,2);
plot(t,r_t);
title('加噪声后的ASK信号');
xlabel('时间');
ylabel('幅度');
figure;
semilogy(SNR,error);
title('ASK误码率曲线');
xlabel('信噪比(dB)');
ylabel('误码率');
%% 生成FSK调制信号
clear all;
close all;
clc;
f1=10; %载波频率1
f2=20; %载波频率2
fs=100; %采样频率
T=1/fs;
t=0:T:1-T;
Ac=1; %载波幅度
fm=2; %基带频率
m_t=Ac*sin(2*pi*fm*t); %信源
s1_t=Ac*sin(2*pi*f1*t); %载波1
s2_t=Ac*sin(2*pi*f2*t); %载波2
s_t=s1_t.*(1+m_t)+s2_t.*(1-m_t); %FSK调制信号
%加入高斯白噪声
SNR=0:2:20;
for i=1:length(SNR)
%计算噪声功率
N0=Ac^2/(4*10^(SNR(i)/10));
noise=sqrt(N0)*randn(1,length(s_t));
r_t=s_t+noise; %加噪声后的信号
%FSK解调
N=length(r_t);
k=1;
for j=1:N
if mod(j,fs/(2*fm))==0 %每个调制周期计算一次
f_dev(k)=(r_t(j)-Ac*sin(2*pi*f1*t(j)))/(Ac*fm);
k=k+1;
end
end
m_r=(f_dev>0.5);
%计算误码率
error(i)=sum(xor(m_t>0,m_r))/length(m_r);
end
%画图
subplot(2,1,1);
plot(t,m_t);
title('FSK调制信号');
xlabel('时间');
ylabel('幅度');
subplot(2,1,2);
plot(t,r_t);
title('加噪声后的FSK信号');
xlabel('时间');
ylabel('幅度');
figure;
semilogy(SNR,error);
title('FSK误码率曲线');
xlabel('信噪比(dB)');
ylabel('误码率');
%% 生成PSK调制信号
clear all;
close all;
clc;
fc=10; %载波频率
fs=100; %采样频率
T=1/fs;
t=0:T:1-T;
Ac=1; %载波幅度
fm=2; %基带频率
m_t=Ac*sin(2*pi*fm*t); %信源
s_t=Ac*cos(2*pi*fc*t+pi/4).*(1+m_t); %PSK调制信号
%加入高斯白噪声
SNR=0:2:20;
for i=1:length(SNR)
%计算噪声功率
N0=Ac^2/(2*10^(SNR(i)/10));
noise=sqrt(N0)*randn(1,length(s_t));
r_t=s_t+noise; %加噪声后的信号
%PSK解调
m_r=(r_t.*cos(2*pi*fc*t+pi/4)-r_t.*sin(2*pi*fc*t+pi/4))>0;
%计算误码率
error(i)=sum(xor(m_t>0,m_r))/length(m_r);
end
%画图
subplot(2,1,1);
plot(t,m_t);
title('PSK调制信号');
xlabel('时间');
ylabel('幅度');
subplot(2,1,2);
plot(t,r_t);
title('加噪声后的PSK信号');
xlabel('时间');
ylabel('幅度');
figure;
semilogy(SNR,error);
title('PSK误码率曲线');
xlabel('信噪比(dB)');
ylabel('误码率');
```
运行以上代码,可以得到ASK、FSK和PSK的调制信号、加噪声后的信号波形以及误码率曲线。其中,误码率曲线使用了对数坐标,可以更直观地反映不同信噪比下的误码率变化情况。
希望这个示例代码能够对您有帮助。
阅读全文