基于Matlab实现ASK、PSK、FSK 调制和 BER 与 SNR 计算附完整代码

该文详细介绍了使用Matlab进行ASK、FSK和PSK三种基本数字调制方法的实现过程,并通过添加AWGN噪声模拟实际信道环境,计算并比较了不同调制方式在不同信噪比下的误码率性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法  神经网络预测 雷达通信  无线传感器

信号处理 图像处理 路径规划 元胞自动机 无人机  电力系统

⛄ 内容介绍

This paper mainly discusses about three basic digital modulation process ASK, FSK, PSK. These modulation schemes can be characterized by their transmitted symbols which consist of a discrete set of values occurring at gradually spaced intervals. The selection of a digital modulation technique for a specific application depend not only the bandwidth efficiency and implementation complexity but also error rate occurred in a bit (BER) and signal to noise ratio. Binary modulation methods use two level symbols and are facile to implement, provide good error substantiation. BER is a key parameter that used for assessing systems that transmit signal data from one location to another. SNR is well known measure of how the signal and noise power compare against each other. It directly affects the probability of error performance of a system. In this paper, we have implemented ASK, FSK and PSK using MATLAB. 

⛄ 完整代码

clc

clear all

msglen=1000;

%msglen= number of bits to be transmitted

%take msglen=10000, or 20000 for more accuracy

%%===============================================

n=msglen;

b=randi(1,n);

f1=1;f2=2;

t=0:1/30:1-1/30;

%ASK

sa1=sin(2*pi*f1*t);

E1=sum(sa1.^2);

sa1=sa1/sqrt(E1); %unit energy 

sa0=0*sin(2*pi*f1*t);

%FSK

sf0=sin(2*pi*f1*t);

E=sum(sf0.^2);

sf0=sf0/sqrt(E);

sf1=sin(2*pi*f2*t);

E=sum(sf1.^2);

sf1=sf1/sqrt(E);

%PSK

sp0=-sin(2*pi*f1*t)/sqrt(E1);

sp1=sin(2*pi*f1*t)/sqrt(E1);

%MODULATION

ask=[];psk=[];fsk=[];

for i=1:n

    if b(i)==1

        ask=[ask sa1];

        psk=[psk sp1];

        fsk=[fsk sf1];

    else

        ask=[ask sa0];

        psk=[psk sp0];

        fsk=[fsk sf0];

    end

end

figure(1)

subplot(411)

stairs(0:10,[b(1:10) b(10)],'linewidth',1.5)

axis([0 10 -0.5 1.5])

title('Message Bits');grid on

subplot(412)

tb=0:1/30:10-1/30;

plot(tb, ask(1:10*30),'b','linewidth',1.5)

title('ASK Modulation');grid on

subplot(413)

plot(tb, fsk(1:10*30),'r','linewidth',1.5)

title('FSK Modulation');grid on

subplot(414)

plot(tb, psk(1:10*30),'k','linewidth',1.5)

title('PSK Modulation');grid on

xlabel('Time');ylabel('Amplitude')

%AWGN

for snr=0:20

    askn=awgn(ask,snr);

    pskn=awgn(psk,snr);

    fskn=awgn(fsk,snr);

    %DETECTION

    A=[];F=[];P=[];

    for i=1:n

        %ASK Detection

        if sum(sa1.*askn(1+30*(i-1):30*i))>0.5

            A=[A 1];

        else

            A=[A 0];

        end

        %FSK Detection

        if sum(sf1.*fskn(1+30*(i-1):30*i))>0.5

            F=[F 1];

        else

            F=[F 0];

        end

        %PSK Detection

        if sum(sp1.*pskn(1+30*(i-1):30*i))>0

            P=[P 1];

        else

            P=[P 0];

        end

    end

    %BER

    errA=0;errF=0; errP=0;

    for i=1:n

        if A(i)==b(i)

            errA=errA;

        else

            errA=errA+1;

        end

        if F(i)==b(i)

            errF=errF;

        else

            errF=errF+1;

        end

        if P(i)==b(i)

            errP=errP;

        else

            errP=errP+1;

        end

    end

    BER_A(snr+1)=errA/n;

    BER_F(snr+1)=errF/n;

    BER_P(snr+1)=errP/n;

end

figure(2)

subplot(411)

stairs(0:10,[b(1:10) b(10)],'linewidth',1.5)

axis([0 10 -0.5 1.5]);grid on

title('Received signal after AWGN Channel')

subplot(412)

tb=0:1/30:10-1/30;

plot(tb, askn(1:10*30),'b','linewidth',1.5)

title('Received ASK signal');grid on

subplot(413)

plot(tb, fskn(1:10*30),'r','linewidth',1.5)

title('Received FSK signal');grid on

subplot(414)

plot(tb, pskn(1:10*30),'k','linewidth',1.5)

title('Received PSK signal');grid on

figure(3)

semilogy(0:20,BER_A, 'b','linewidth',2)

title('BER Vs SNR')

grid on;

hold on

semilogy(0:20,BER_F,'r','linewidth',2)

semilogy(0:20,BER_P, 'k','linewidth',2)

xlabel('Eo/No(dB)')

ylabel('BER')

hold off

legend('ASK','FSK','PSK');

⛄ 运行结果

⛄ 参考文献

[1] Bharati S ,  Rahman M A ,  Podder P . Implementation of ASK, FSK and PSK with BER vs. SNR comparison over AWGN channel[J].  2020.

❤️部分理论引用网络文献,若有侵权联系博主删除

❤️ 关注我领取海量matlab电子书和数学建模资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值