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 + -
显示快捷键?