pinfen.m
来自「自己编写的时分复用程序!!!!!!!!自己编写的」· M 代码 · 共 225 行
M
225 行
%%%%%%%%%%%%%%%%%%%%%%%%
%%两路正弦信号的频分复用%%
%%%%%%%%%%%%%%%%%%%%%%%%
fs=10000;
f1=50;
f2=100;
t=0:1/fs:1;
x1=sin(2*pi*f1*t);
x2=sin(2*pi*f2*t);
f01=500;
f02=1000;
x01=sin(2*pi*f01*t);
x02=sin(2*pi*f02*t);
y=x1.*x01+x2.*x02;
%时域波形
figure(1);
subplot(4,1,1);plot(t(1:600),x1(1:600));xlabel('sec');
ylabel('x1');title('原始信号1');
subplot(4,1,2);plot(t(1:600),x2(1:600));xlabel('sec');
ylabel('x2');title('原始信号2');
subplot(4,1,3);plot(t(1:90),x01(1:90));xlabel('sec');
ylabel('x01');title('载波信号1');
subplot(4,1,4);plot(t(1:90),x02(1:90));xlabel('sec');
ylabel('x02');title('载波信号2');
%两路原始信号频谱
figure(2);
N=length(x1);
fx=fft(x1);
dfx=fs/N;
n=0:N/2;
f=n*dfx;
subplot(2,2,1);plot(f,abs(fx(n+1))*2/N);title('原始信号1频谱');
axis([0 250 0 1]);
xlabel('频率');
ylabel('幅度');
N=length(x2);
fx=fft(x2);
dfx=fs/N;
n=0:N/2;
f=n*dfx;
subplot(2,2,2);plot(f,abs(fx(n+1))*2/N);title('原始信号2频谱');
axis([0 250 0 1]);
xlabel('频率');
ylabel('幅度');
%两路载波信号频谱
N=length(x01);
fx=fft(x01);
dfx=fs/N;
n=0:N/2;
f=n*dfx;
subplot(2,2,3);plot(f,abs(fx(n+1))*2/N);title('载波信号1频谱');
axis([0 1500 0 1]);
xlabel('频率');
ylabel('幅度');
N=length(x02);
fx=fft(x02);
dfx=fs/N;
n=0:N/2;
f=n*dfx;
subplot(2,2,4);plot(f,abs(fx(n+1))*2/N);title('载波信号2频谱');
axis([0 1500 0 1]);
xlabel('频率');
ylabel('幅度');
%传输信号频谱
figure(3);
y=x1.*x01+x2.*x02;
N=length(y);
fx=fft(y);
dfx=fs/N;
n=0:N/2;
f=n*dfx;
plot(f,abs(fx(n+1))*2/N);title('信道中传输信号频谱');
axis([0 1500 0 1]);
xlabel('频率');
ylabel('幅度');
%设计滤波器通带截止频率为400-600Hz,阻带截止频率为350-650Hz,
Wp1=[400 600]/(fs/2);
Ws1=[350 650]/(fs/2);
%通带最大衰减为1db,阻带最小衰减为5d b
Rp=1;Rs=5;
[N1, Wn1] = BUTTORD(Wp1, Ws1, Rp, Rs); %求出滤波器的阶数和固有频率
[B1,A1] = butter(N1,Wn1,'bandpass'); %返回滤波器的传输函数
y1 = filter(B1,A1,y);
N=length(y1); %画出经过滤波器后的第一路高频载波
fx=fft(y1);
dfx=fs/N;
n=0:N/2;
f=n*dfx;
figure(4);
subplot(2,1,1);plot(f,abs(fx(n+1))*2/N);title('滤波器滤出的第一路载波');
axis([0 1500 0 0.6]);
xlabel('频率');
ylabel('幅度');
%以同样的方法设计第二个带通滤波器
Wp2=[900 1100]/(fs/2);
Ws2=[850 1150]/(fs/2);
[N2, Wn2] = BUTTORD(Wp2, Ws2, Rp, Rs);
[B2,A2] = butter(N2,Wn2,'bandpass');
y2 = filter(B2,A2,y);
N=length(y2); %画出经过滤波器后的第二路高频载波
fx=fft(y2);
dfx=fs/N;
n=0:N/2;
f=n*dfx;
subplot(2,1,2);plot(f,abs(fx(n+1))*2/N);title('滤波器滤出的第二路载波');
axis([0 1500 0 0.5]);
ylabel('幅度');
xlabel('频率');
%相干解调
Z1=y1.*x01;
Wp3=120/(fs/2);
Ws3=140/(fs/2);
[N3,Wn3]=BUTTORD(Wp3,Ws3,Rp,Rs);
[B3,A3]=butter(N3,Wn3,'low');
y3=filter(B3,A3,Z1);
N=length(y3);
fx=fft(y3);
dfx=fs/N;
n=0:N/2;
f=n*dfx;
figure(5);
subplot(2,1,1);plot(f,abs(fx(n+1))*2/N);title('相干解调后的原始信号1频谱');
axis([0 250 0 0.5]);
ylabel('幅度');
xlabel('频率');
Z2=y2.*x02;
Wp4=140/(fs/2);
Ws4=160/(fs/2);
[N4,Wn4]=BUTTORD(Wp4,Ws4,Rp,Rs);
[B4,A4]=butter(N4,Wn4,'low');
y4=filter(B4,A4,Z2);
N=length(y4);
fx=fft(y4);
dfx=fs/N;
n=0:N/2;
f=n*dfx;
subplot(2,1,2);plot(f,abs(fx(n+1))*2/N);title('相干解调后的原始信号2频谱');
axis([0 250 0 0.5]);
ylabel('幅度');
xlabel('频率');
%恢复出的两路原始信号
figure(6);
subplot(4,1,1);plot(t,y3);xlabel('sec');axis([0 0.1 -0.5 0.5]);
ylabel('x1'); title('恢复出的原始信号1');
subplot(4,1,2);plot(t,y4);xlabel('sec');axis([0 0.1 -0.47 0.47]);
ylabel('x2');title('恢复出的原始信号2');
%加入噪声
SNRpBit=20; %信噪比
M=2; %进制数
SNR=SNRpBit/log2(M);
n=awgn(y,SNR-10*log10(0.5)-10*log10(N),'measured',[],'dB'); %在已调信号中加入高斯白噪声]
%设计滤波器通带截止频率为400-600Hz,阻带截止频率为350-650Hz,
Wp1=[400 600]/(fs/2);
Ws1=[350 650]/(fs/2);
%通带最大衰减为1db,阻带最小衰减为5d b
Rp=1;Rs=5;
[N1, Wn1] = BUTTORD(Wp1, Ws1, Rp, Rs);
[B1,A1] = butter(N1,Wn1,'bandpass');
y1 = filter(B1,A1,n);
%以同样的方法设计第二个带通滤波器
Wp2=[900 1100]/(fs/2);
Ws2=[850 1150]/(fs/2);
[N2, Wn2] = BUTTORD(Wp2, Ws2, Rp, Rs);
[B2,A2] = butter(N2,Wn2,'bandpass');
y2 = filter(B2,A2,n);
%相干解调
Z1=y1.*x01;
Wp3=120/(fs/2);
Ws3=140/(fs/2);
[N3,Wn3]=BUTTORD(Wp3,Ws3,Rp,Rs);
[B3,A3]=butter(N3,Wn3,'low');
y3=filter(B3,A3,Z1);
Z2=y2.*x02;
Wp4=140/(fs/2);
Ws4=160/(fs/2);
[N4,Wn4]=BUTTORD(Wp4,Ws4,Rp,Rs);
[B4,A4]=butter(N4,Wn4,'low');
y4=filter(B4,A4,Z2);
%两路加入噪声后恢复出的原始信号
figure(6);
subplot(4,1,3);plot(t,y3);xlabel('sec');axis([0 0.1 -1.5 1.5]);
ylabel('x1'); title('加噪后恢复出的原始信号1');
subplot(4,1,4);plot(t,y4);xlabel('sec');axis([0 0.1 -1.5 1.5]);
ylabel('x2');title('加噪后恢复出的原始信号2');
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?