【Matlab】通信系统实验:二进制数字调制与仿真

利用Matlab实现对二进制数字调制与解调的仿真,包括以下三部分:二进制数字相移键控(2PSK),二进制数字振幅键控(2ASK),二进制数字频移键控(2FSK)。

解调方式为基本的相干解调,与载波同频同相。

clear all; 
close all;
clc;

M=16;                     %产生码元数    
L=128;                    %码元采样数
Ts=1;                     %码元周期
Rb=1/Ts;                  %码元速率
dt=Ts/L;                  %采样间隔
fs = 1/dt
TotalT=M*Ts;              %总时间
t=0:dt:TotalT-dt;         %时间序列

bits=randi([0,1],1,M);    %随机二进制序列
fz=ones(1,L);             
x1=bits(fz,:);            

dnrz=reshape(x1,1,L*M);   %2ASK调制
fc=2*Rb;                        
zb=sin(2*pi*fc*t); %载波信号
ask2=dnrz.*zb;        
at1=ask2.*cos(2*pi*fc*t);
at1=at1-mean(at1);
[f,af] = T2F(t,at1);%通过低通滤波器
[t,at1] = lpf(f,af,2*Rb);

kf=0.3; %2FSK调制
fsk2=modulate(dnrz,fc,fs,'fm',kf);
ft1=fskdemod(fsk2,M,dt,fc);

m1=[];  %2PSK调制
c1=[];
b1=[];
for i=1:M
      t1=(i-1)*Ts:dt:i*Ts-dt; 
        if bits(i)==0;
            m=ones(1,L);
            b=zeros(1,L);
        else bits(i)==1;
            m=-ones(1,L);
            b=ones(1,L);
        end %通过循环方式对输入信号的进行赋值实现调制目的
        c=sin(2*pi*fc*t1);
        m1=[m1 m];
        c1=[c1 c];
        b1=[b1,b];
end
psk2=c1.*m1;
pt1=2*b1.*psk2;  %同步解调

figure(1); %波形绘制
subplot(4,1,1)
plot(t,dnrz)
title('单极性归零码')
axis([0,TotalT,-0.1,1.1])
subplot(4,1,2)
plot(t,ask2);
title('2ASK已调信号波形')
axis([0,TotalT,-1.1,1.1]);
subplot(413)
plot(t,fsk2);
title('2FSK已调信号波形')
axis([0,TotalT,-1.1,1.1]);
subplot(414)
plot(t,psk2)
title('2PSK已调信号波形')
axis([0,TotalT,-1.1,1.1]);
figure(2)
subplot(3,1,1);
plot(t,at1);
title('2ASK相干解调波形');
subplot(3,1,2);
plot(ft1);
title('2FSK相干解调波形');
subplot(3,1,3);
plot(pt1);
title('2PSK相干解调波形')

function [f,sf]= T2F(t,st)
    dt = t(2)-t(1);
    T=t(end);
    df = 1/T;
    N = length(st);
    f=-N/2*df : df : N/2*df-df;
    sf = fft(st);
    sf = T/N*fftshift(sf);
end
function [t,st]=lpf(f,sf,B)
    df = f(2)-f(1);
    T = 1/df;
    hf = zeros(1,length(f));%全零矩阵
    bf = [-floor( B/df ): floor( B/df )] + floor( length(f)/2 );
    hf(bf)=1;
    yf=hf.*sf;
    [t,st]=F2T(f,yf);
    st = real(st);
end
function [t,st]=F2T(f,sf)
    df = f(2)-f(1);
    Fmx = ( f(end)-f(1) +df);
    dt = 1/Fmx;
    N = length(sf);
    T = dt*N;
    %t=-T/2:dt:T/2-dt;
    t = 0:dt:T-dt;
    sff = fftshift(sf);
    st = Fmx*ifft(sff);
end

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2ASK调制解调是一种基本的数字调制技术,下面是一个简单的Matlab代码示例: ```matlab % 生成二进制数据 data = randi([0, 1], 1, 1000); % 将二进制数据转换为数字信号 signal = 2*data - 1; % 生成调制信号 fc = 10; t = linspace(0, 1, 1000); carrier = cos(2*pi*fc*t); % 进行调制 modulated = signal.*carrier; % 生成加性高斯白噪声 SNR = 10; noise = randn(1, 1000); noise = noise/std(noise)*10^(-SNR/20); % 添加噪声 received = modulated + noise; % 解调 demodulated = received.*carrier; % 低通滤波 [b, a] = butter(6, 2*pi*fc/(2*pi*1000), 'low'); filtered = filter(b, a, demodulated); % 将数字信号转换为二进制数据 decoded = (filtered > 0); % 计算误码率 BER = sum(xor(decoded, data))/length(data); % 绘制调制前后的信号波形 subplot(2, 1, 1); plot(t, signal, 'r'); title('原始信号'); subplot(2, 1, 2); plot(t, modulated, 'b'); title('调制后的信号'); % 绘制解调后的信号波形 figure; plot(t, demodulated, 'r'); hold on; plot(t, filtered, 'b'); legend('解调后的信号', '低通滤波后的信号'); title('解调后的信号'); ``` 在这个代码示例中,我们首先生成了随机的二进制数据,将其转换为数字信号,然后生成调制信号并进行调制,接着添加高斯白噪声,得到接收信号。然后,我们进行解调操作,使用低通滤波器滤除高频噪声,最后将数字信号转换为二进制数据,计算误码率并绘制波形图。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值