📄 digital2psk.m
字号:
clear all;
close all;
echo on
%------------------系统仿真参数
A=1; %载波振幅
fc=2; %载波频率(Hz)
snr=5; %信噪比dB
N_sample=8;% 基带信号中每个码元的的采样点数
N=10000; % 码元数
Ts=1; % 码元宽度
df=0.01%频率分辨率
B=1/Ts;
f_start=fc-B;
f_cutoff=fc+B;
fs=fc*N_sample%系统采样频率,即考虑载波后一个码元内的采样点数。
ts=Ts/fs; % 系统采样间隔
t=0:ts:N*Ts-ts;
Lt=length(t);
%-----------画出调制信号波形及功率谱
% 产生二进制信源
d=sign(randn(1,N));
dd=sigexpand((d+1)/2,fc*N_sample);
gt=ones(1,fc*N_sample); % NRZ波形
d_NRZ=conv(dd,gt);
d_NRZ1=d_NRZ(1:Lt);
pause%画出单极性NRZ波形及其功率谱
figure(1)
subplot(221);
plot(t,d_NRZ1);% 画出单极性NRZ信号波形
axis([0 10 0 1.2]);
xlabel('t');
ylabel('单极性信号');
subplot(222);
[d_NRZ1f,d_NRZ1,df1,f]=T2F(d_NRZ1,ts,df,fs);%求出单极性NRZ信号功率谱
plot(f,10*log10(abs(fftshift(d_NRZ1f).^2/length(f))));% 画出单极性NRZ信号功率谱
axis([-3*B 3*B -50 0]);
xlabel('f');
ylabel('单极性信号PDF');
pause%画出双极性NRZ波形及其功率谱
d_sjx=2*d_NRZ-1;%生成双极性NRZ信号
d_sjx1=d_sjx(1:Lt);
subplot(223);
plot(t,d_sjx1);% 画出双极性NRZ信号波形
axis([0 10 0 1.2]);
xlabel('t');
ylabel('双极性信号');
subplot(224);
[d_sjx1f,d_sjx1,df1,f]=T2F(d_sjx1,ts,df,fs);%求出双极性NRZ信号功率谱
plot(f,10*log10(abs(fftshift(d_sjx1f).^2/length(f))));% 画出双极性NRZ信号功率谱
axis([-3*B 3*B -50 0]);
xlabel('f');
ylabel('双极性信号PDF');
%-------这个图为figure(1)--------%
%---------画出数字频带信号及其功率谱
% 对数字基带信号进行2ASK调制
ht=A*sin(2*pi*fc*t);%载波
s_2ask=d_NRZ(1:Lt).*ht;%生成已调信号2ASK
pause%画出已调信号2ASK及其功率谱
figure(2)
subplot(221);
plot(t,s_2ask);%画出2ASK信号
axis([0 10 -1.2 1.2]);
xlabel('t');
ylabel('2ASK');
%求2ASK信号功率谱
[s_2askf,s_2ask,df1,f]=T2F(s_2ask,ts,df,fs);%求出单极性NRZ信号功率谱
subplot(222);
plot(f,10*log10(abs(fftshift(s_2askf).^2/length(f))));% 画出单极性NRZ信号功率谱
axis([-fc-3*B fc+3*B -50 0]);
xlabel('f');
ylabel('2ASK信号PDF');
% 对数字基带信号进行2FSK调制
s_2fsk=A*cos(2*pi*fc*t+2*pi*d_sjx(1:Lt).*t);%生成2FSK信号
pause%画出已调信号2FSK及其功率谱
subplot(223)
plot(t,s_2fsk);%画出2FSK波形
axis([0 10 -1.2 1.2]);
xlabel('t');
ylabel('2FSK');
subplot(224)
[s_2fskf,s_2fsk,df1,f]=T2F(s_2fsk,ts,df,fs);%求2FSK信号功率谱
plot(f,10*log10(abs(fftshift(s_2fskf).^2/length(f))));% 画出2FSK功率谱
axis([-fc-3*B fc+3*B -50 0]);
xlabel('f');
ylabel('2FSK信号PDF');
%-------这个图为figure(2)--------%
% 对数字基带信号进行2PSK调制
s_2psk=d_sjx(1:Lt).*ht;%生成2PSK信号
pause%画出已调信号2PSK及其功率谱
figure(3)
subplot(321)
plot(t,s_2psk);%画出2PSK波形
axis([0 10 -1.2 1.2]);
xlabel('t');
ylabel('2PSK');
subplot(322)
[s_2pskf,s_2psk,df1,f]=T2F(s_2psk,ts,df,fs);%求2PSK信号功率谱
plot(f,10*log10(abs(fftshift(s_2pskf).^2/length(f))));% 画出2PSK信号功率谱
axis([-fc-3*B fc+3*B -50 0]);
xlabel('f');
ylabel('2PSK信号PDF');
%-----------将2PSK信号送入信道进行传输,先生成信道加性高斯白噪声噪声
snr_lin=10^(snr/10); %换算成倍数
signal_power=power_x(s_2psk(1:Lt));%求出信号平均功率
noise_power=(signal_power*fs)/(snr_lin*2*(2*B));%求出噪声方差(噪声均值为0)
noise_std=sqrt(noise_power);%求出噪声均方差
noise=noise_std.*randn(1,Lt);%以噪声均方差作为幅度产生高斯白噪声
%----------------将已调信号送入信道
pause%画出信道中的高斯白噪声及其功率谱
subplot(323)
plot(t,noise(1:Lt));%画出噪声
xlabel('t');
ylabel('信道噪声');
axis([0 10 -3 3]);
[noisef,noise,df1,f]=T2F(noise,ts,df,fs);%求信道噪声功率谱
subplot(324)
plot(f,10*log10(abs(fftshift(noisef).^2/length(f))));% 画出信道噪声功率谱
axis([-fs/2-2 fs/2+2 -50 0]);
xlabel('f');
ylabel('信道噪声PDF');
r=s_2psk(1:Lt)+noise(1:Lt);%叠加了噪声的已调信号,相当于将已调信号送入理想信道
pause%画出加噪后的已调信号2PSK及其功率谱
subplot(325)
plot(t,r);%画出加噪后的已调信号2PSK
xlabel('t');
ylabel('加噪2PSK信号');
axis([0 10 -3 3]);
[rf,r,df1,f]=T2F(r,ts,df,fs);%求加噪后的已调信号2PSK功率谱
subplot(326)%画出加噪后已调信号的功率谱
plot(f,10*log10(abs(fftshift(rf).^2/length(f))));% 画出已调信号2PSK功率谱
axis([-fc-3*B fc+3*B -50 0]);
xlabel('f');
ylabel('加噪2PSK信号PDF');
%-------这个图为figure(3)--------%
%-----在接收端准备进行解调,先通过带通滤波器
pause%画出带通滤波器
[H,f]=bp_f(length(rf),f_start,f_cutoff,df1,fs,1);%经过理想带通滤波器
figure(4)
subplot(322)
plot(f,abs(fftshift(H)));% 画出理想带通滤波器
axis([-fc-3*B fc+3*B -0.2 1.2]);
xlabel('f');
ylabel('理想BPF');
DEM = H.*rf; %滤波器输出的频谱
[dem]=F2T(DEM,fs);%滤波器的输出波形
dem1=dem(1:Lt)
pause%经过理想带通滤波器后的信号波形及功率谱
subplot(323)%经过理想带通滤波器后的信号波形
plot(t,dem1)%画出经过理想带通滤波器后的信号波形
axis([0 10 -4 4]);
xlabel('t');
ylabel('理想BPF输出信号');
[demf1,dem1,df1,f]=T2F(dem1,ts,df,fs);%求经过理想带通滤波器后信号功率谱
subplot(324)
plot(f,10*log10(abs(fftshift(demf1).^2/length(f))));% 画出经过理想带通滤波器后信号功率谱
axis([-fc-3*B fc+3*B -50 0]);
xlabel('f');
ylabel('理想BPF输出信号PDF');
%-----进行相干解调,先和本地载波相乘,即混频
subplot(325)%画出同频同相的本地载波
plot(t,ht);
axis([0 10 -1.2 1.2]);
xlabel('t');
ylabel('本地载波');
subplot(326)% 本地载波频谱
[htf,ht,df1,f]=T2F(ht,ts,df,fs);
plot(f,fftshift(abs(htf)))% 画出载波频谱
axis([-fc-3*B fc+3*B 0 15]);
xlabel('f');
ylabel('本地载波频谱');
%-------这个图为figure(4)--------%
pause%画出混频后的信号及功率谱
figure(5)
der=dem1(1:Lt).*ht(1:Lt);%和本地载波相乘,即混频
subplot(221)%画出混频后的波形
plot(t,der);
axis([0 10 -2 2]);
xlabel('t');
ylabel('混频后的信号');
[derf,der,df1,f]=T2F(der,ts,df,fs);%求混频后信号的功率谱
subplot(222)
plot(f,10*log10(abs(fftshift(derf).^2/length(f))));%画出混频后的功率谱
axis([-fc-3*B fc+3*B -50 0]);
xlabel('f');
ylabel('混频后信号的PDF');
%---------------再经过低通滤波器
pause%画出理想低通滤波器
[LPF,f]=lp_f(length(derf),B,df1,fs,1);%求低通滤波器
subplot(224) % 画出理想低通滤波器
plot(f,fftshift(abs(LPF))); axis([-fc-3*B fc+3*B -0.2 1.2]);
xlabel('f');
ylabel('理想LPF');
pause%混频信号经理想低通滤波器后的波形及功率谱
DM = LPF.*derf; %理想低通滤波器输出信号频谱
[dm]=F2T(DM,fs); %理想低通滤波器的输出波形
%-------这个图为figure(5)--------%
figure(6)
subplot(221)
plot(t,dm(1:Lt));%画出经过低通滤波器后的解调出的波形
axis([0 10 -1.2 1.2]);
xlabel('t');
ylabel('LPF输出信号');
subplot(222)
[dmf,dm,df1,f]=T2F(dm,ts,df,fs);%求LPF输出信号的功率谱
plot(f,10*log10(abs(fftshift(dmf).^2/length(f))));%画出LPF输出信号的功率谱
axis([-fc-3*B fc+3*B -50 0]);
xlabel('f');
ylabel('LPF输出信号功率谱');
%-------最后对LPF输出信号抽样判决
panjue=zeros(1,N);%建立存储判决值的矩阵
%抽样判决,规则:大于0判1,小于判-1
for i=1:N;
if dm(fc*N_sample*(i-1)+fc*N_sample/2+1)>0;%抽样判决时刻
panjue(i)=1;
else
panjue(i)=-1;
end
end
%----画出判决出的基带信号波形,并和调制信号比较
rr=sigexpand(panjue,fc*N_sample);
rrt=ones(1,fc*N_sample); % NRZ波形
huifu_NRZ=conv(rr,rrt);
pause%观察调制信号和解调信号波形
%-------这个图为figure(6)--------%
subplot(224)
plot(t,d_sjx(1:Lt));%调制信号波形
axis([0 10 -1.2 1.2]);
xlabel('t');
ylabel('调制信号');
subplot(223)
plot(t,huifu_NRZ(1:Lt));%解调信号波形
axis([0 10 -1.2 1.2]);
xlabel('t');
ylabel('解调信号');
%-------------------统计误码数
numoferr=sum(abs(panjue-d)/2)/N%计算出错误码元数
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -