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

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

✅作者简介:热爱科研的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电子书和数学建模资料


相关文章
|
9月前
|
算法 定位技术 计算机视觉
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
1099 0
|
9月前
|
算法 机器人 计算机视觉
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
295 0
|
9月前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
406 8
|
9月前
|
机器学习/深度学习 编解码 算法
基于OFDM技术的水下声学通信多径信道图像传输研究(Matlab代码实现)
基于OFDM技术的水下声学通信多径信道图像传输研究(Matlab代码实现)
398 8
|
9月前
|
机器学习/深度学习 数据采集 测试技术
基于CEEMDAN-VMD-BiLSTM的多变量输入单步时序预测研究(Matlab代码实现)
基于CEEMDAN-VMD-BiLSTM的多变量输入单步时序预测研究(Matlab代码实现)
354 8
|
9月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
783 0
|
9月前
|
新能源 Java Go
【EI复现】参与调峰的储能系统配置方案及经济性分析(Matlab代码实现)
【EI复现】参与调峰的储能系统配置方案及经济性分析(Matlab代码实现)
293 0
|
9月前
|
机器学习/深度学习 算法 自动驾驶
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
465 8
|
9月前
|
编解码 运维 算法
【分布式能源选址与定容】光伏、储能双层优化配置接入配电网研究(Matlab代码实现)
【分布式能源选址与定容】光伏、储能双层优化配置接入配电网研究(Matlab代码实现)
792 12
|
9月前
|
人工智能 数据可视化 网络性能优化
【顶级SCI复现】虚拟电厂的多时间尺度调度:在考虑储能系统容量衰减的同时,整合发电与多用户负荷的灵活性研究(Matlab代码实现)
【顶级SCI复现】虚拟电厂的多时间尺度调度:在考虑储能系统容量衰减的同时,整合发电与多用户负荷的灵活性研究(Matlab代码实现)
298 9

热门文章

最新文章