⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 基于matlab的数字64qam调制解调仿真.txt

📁 利用Matlab生成给定P生成多项式的CRC编码程序
💻 TXT
字号:
以下是实现系统仿真的源代码:
主函数Projec.m文件:
function project(N,p)   
 N=400;    %N=200 or 400  
 p=0.2;    %0<p<1
source=randsrc(1,N,[1,0;p,1-p]);
 [source1,source2]=QAM_modulation(source);
figure(1);
c4_qamdemo;
sig_insert1=insert_value(source1,8);
sig_insert2=insert_value(source2,8);
figure(2);
plot_2way(sig_insert1,sig_insert2,length(sig_insert1),0.5);
title('两路信号波形图');
[sig_rcos1,sig_rcos2]=rise_cos(sig_insert1,sig_insert2,0.25,2);
figure(3);
plot_2way(sig_rcos1,sig_rcos2,length(sig_rcos1)/4,0.5);
hold on
title('通过低通滤波器后两路信号波形图');
stem_2way(sig_insert1,sig_insert2,3,0.25,2,length(sig_rcos1)/4);
 [t,sig_modulate]=modulate_to_high(sig_rcos1,sig_rcos2,0.25,2.5);
figure(4);
plot(t(1:500),sig_modulate(1:500));
title('载频调制信号图');
snr=10;
[x1,x2]=generate_noise(sig_rcos1,sig_rcos2,snr);
sig_noise1=x1';
sig_noise2=x2';
%end
figure(5);
plot_2way(sig_noise1,sig_noise2,length(sig_noise1)/4,0.5);
title('加入高斯白噪声的两路信号波形');
[sig_match1,sig_match2]=rise_cos(sig_noise1,sig_noise2,0.25,2);
figure(6);
plot_2way(sig_match1,sig_match2,length(sig_match1)/4,0.5);
title('经过匹配滤波器后的波形');
[x1,x2]=pick_sig(sig_match1,sig_match2,8);
sig_pick1=x1;
sig_pick2=x2;
figure(8);
plot_snr; 
QAM调制函数c4_qamdemo.m文件
levelx =8;
levely =8;
m =500;
n =20;
bw =0.2;
[xd,xq] = qam(levelx,levely,m,n);
subplot(1,1,1)						% first pane
plot(xd,xq,'*')						% unfiltered scatterplot
a = 1.4;
maxd = max(xd); maxq = max(xq);
mind = min(xd); minq = min(xq);
axis([a*mind a*maxd a*minq a*maxq])
axis equal
xlabel('xd'); ylabel('xq')
line([-10,10],[0,0],'lineWidth',1,'Color','red');
line([0,0],[-10,10],'lineWidth',1,'Color','red');
title('64QAM星座图');
叠加高斯噪声generate_noise.m文件
function [y1,y2]=generate_noise(x1,x2,snr)
snr1=snr+10*log10(4);
ss=var(x1+i*x2,1);
y=awgn([x1+j*x2],snr1+10*log10(ss/10),'measured');
y1=real(y);
y2=imag(y);
插值insert_value.m文件 
function y=insert_value(x,ratio)    %两路信号进行插值
y=zeros(1,ratio*length(x));
a=1:ratio:length(y);
y(a)=x;
mary.m文件
function y= mary(levels,m,n)     % m = number of symbols
% n = samples per symbol
l = m*n;                         % Total sequence length
y = zeros(1,l-n+1);              % Initalize output vector
lm1 = levels-1;
x=2*fix(levels*rand(1,m))-lm1;
for i = 1:m                      % Loop to generate info symbols
        k = (i-1)*n+1;
        y(k) = x(i);
end
y = conv(y,ones(1,n));           % Make each symbol n samples
调制到载波Modulate_to_hight.m文件
function [t,y]=modulate_to_high(x1,x2,f,hf)
yo1=zeros(1,length(x1)*hf/f*10);
yo2=zeros(1,length(x2)*hf/f*10);
n=1:length(yo1);
yo1(n)=x1(floor((n-1)/(hf/f*10))+1);
yo2(n)=x1(floor((n-1)/(hf/f*10))+1);
t=(1:length(yo1))/hf*f/10;
y=yo1.*cos(2*pi*hf*t)-yo2.*sin(2*pi*hf*t);
采样pick_sig.m文件
function [y1,y2]=pick_sig(x1,x2,ratio)
y1=x1(ratio*3*2+1:ratio:(length(x1)-ratio*3*2));
y2=x2(ratio*3*2+1:ratio:(length(x1)-ratio*3*2));
绘制正交信号图plot_2way.m文件
function y=plot_2way(x1,x2,len,t)
mm=150;
subplot(2,1,2);
plot((1:len)*t,x2(1:len));
axis([0 len*t -4 4]);
hold on
plot((1:len)*t,x2(1:len),'.','color','red');
hold off
xlabel('虚部信号');
subplot(2,1,1);
plot((1:len)*t,x1(1:len));
axis([0 len*t -4 4]);
hold on
plot((1:len)*t,x1(1:len),'.','color','red');
xlabel('实部信号');
hold off
误码率曲线图plot_snr.m文件
clear all;
Fd=10;                             % 消息序列的采样速率
Fs=3*Fd;                           % 已调信号的采样速率
M=64; 
SNR_db=0:12;                        % 仿真信噪比范围
SNR1_db=0:0.1:12;                    %   理论计算信噪比范围
for n=1:length(SNR_db)
        Eb_N0=10^(SNR_db(n)/10);
        sgma=sqrt(5/(4*Eb_N0));           % nc Ns的均方差
        x=randint(10000,1,M);                 % 产生的随机序列  
        y=dmodce(x,Fd,Fs,'qask',M);           % QAM调制
        ynoise=y+sqrt(Fs/Fd)*sgma*(randn(length(y),1)+j*randn(length(y),1));   % 加噪
        z=ddemodce(ynoise,Fd,Fs,'qask',M);                 % 解调
        [numbers,pe(n)]=symerr(x,z);                       % 计算误符号率
end;
for m=1:length(SNR1_db)                                % 计算理论误码率
        Eb_N0=10^(SNR1_db(m)/10);                   
        sq_M=sqrt(M);
        temp=(1/2)*erfc((sqrt(Eb_N0*(3*(log2(M)))/(M-1)))/sqrt(2));  
        pe_theory(m)=1-(1-(2*(sq_M-1)*temp)/sq_M)^2;
end
semilogy(SNR_db,pe,'*',SNR1_db,pe_theory);                 % 作图
xlabel('信噪比(dB)');
ylabel('误码率(Pe)');
legend('仿真得到的误符号率','理论符号误码曲线');
title('64QAM系统误码率仿真');
qam.m文件
function [xd,xq] = qam(levelx,levely,m,n)
xd = mary(levelx,m,n);
xq = mary(levely,m,n);
Qam_modulation.m文件
function[y1,y2]=QAM_modulation(x)
N=length(x);
a=1:2:N;
y1=x(a);
y2=x(a+1);
a=1:2:N/2;
temp1=y1(a);
temp2=y1(a+1);
y11=temp1*2+temp2;
temp1=y2(a);
temp2=y2(a+1);
y22=temp1*2+temp2;
 a=1:N/4;
y1=(y11*2-1-4)*1.*cos(2*pi*a);
y2=(y22*2-1-4)*1.*cos(2*pi*a);
y1(find(y11==0))=-3;
y1(find(y11==1))=-1;
y1(find(y11==3))=1;
y1(find(y11==2))=3;
y2(find(y22==0))=-3;
y2(find(y22==1))=-1;
y2(find(y22==3))=1;
y2(find(y22==2))=3;
升余弦滤波rise_cos.m文件
function [y1,y2]=rise_cos(x1,x2,fd,fs)
[yf,tf]=rcosine(fd,fs,'fir/sqrt');
[yo1,to1]=rcosflt(x1,fd,fs,'filter/Fs',yf);
[yo2,to2]=rcosflt(x2,fd,fs,'filter/Fs',yf);
y1=yo1;
y2=yo2;
绘制滤波后的信号图stem_2way.m文件
function stem_2way(x1,x2,delay,fd,fs,len)
subplot(2,1,1);
hold on
stem(((1:len)+fs/fd*3)/fs,x1(1:len));
subplot(2,1,2);
hold on
stem(((1:len)+fs/fd*3)/fs,x2(1:len));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -