BPSK,QPSK的C语言仿真

BPSK,QPSK的C语言仿真

本文首先给出BPSK的原理,再给出对应的C语言设计过程,并附代码。
当给出BPSK的过程后,QPSK即为分路问题,将直接给出代码。

一、什么是BPSK

BPSK可以被称为二进制相移键控,其利用载波的相位变化来传递数字信息,而振幅和频率保持不变。以初始相位0和 π \pi π来表示二进制比特(符号)1和0。在传输时可以用以下波形函数表示:

s ( t ) = A sin ⁡ ( ω t + φ n ) s\left( t \right) = A\sin \left( {\omega t + {\varphi _n}} \right) s(t)=Asin(ωt+φn)

其中, φ n \varphi _n φn表示第 n n n个符号的绝对相位,取值规则与之前所述相同。

二、BPSK仿真的问题处理

1. 流程确认

首先确定数据流的传递方式。其流程可以由以下过程表示:

程序执行过程由以上图片可知,仿真的难点在于信噪比和高斯噪声的加入。其他方式由低通等效原理可以省略高频调制步骤,至于其余步骤均为映射和判断的if else语句没有难度。

2. C语言随机信源的产生方式

首先应该了解C语言的随机数产生方式。
在标准C语言库stdlib.h内有rand()函数用于生成一个介于0与RAND_MAX之间的int型整数。其中RAND_MAX是一个整数,它与系统有关。
rand函数没有输入参数,由于rand函数在产生随机数前,需要系统提供的生成伪随机数序列的种子,rand根据这个种子的值产生一系列随机数。如果系统提供的种子没有变化,每次调用rand函数生成的伪随机数序列都是一样的,所以说C语言的随机是一种伪随机。
下面介绍srand函数。srand(unsigned seed)通过参数seed改变系统提供的种子值,从而可以使得每次调用rand函数生成的伪随机数序列不同,从而实现真正意义上的“随机”。通常利用系统时间来改变系统的种子值,即srand(time(NULL)),可以为rand函数提供不同的种子值,进而产生不同的随机数序列。注意,time函数包含在time.h头文件内,故声明时需要加入此文件。
具体使用时可以配合RAND_MAX得到想要范围内的随机值。
若要产生信源0,1,则使得生成的随机数除以2取余数即可。

// 信源生成函数
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#define data_len XXX
void main()
{
   
	srand((unsigned int)time(NULL));
	int data_beforecoding[data_len];
		for (int i = 0; i < data_len; i++)
		{
   
			data_beforecoding[i] = rand() % 2;
		}
}

3. 高斯噪声的加入

生成高斯噪声的方式我们采用Box-Muller方法,其描述如下:
如果在 ( 0 , 1 ] \left( {0,1} \right] (0,1]值域内有两个均匀分布随机变量 X X X Y Y Y,则可以由以下运算得到正态分布随机变量 Z Z Z
Z = R cos ⁡ θ Z=R\cos\theta Z=Rcosθ
(或 Z = R sin ⁡ θ Z=R\sin\theta Z=Rsinθ) 其中, R = − 2 ln ⁡ X R=\sqrt{-2\ln X} R=2lnX θ = 2 π Y \theta {\rm{ = 2}}\pi Y θ=2πY

此时,正态随机变量 Z ∼ N ( 0 , 1 ) Z \sim N\left( {0,1} \right) ZN(0,1)

下面我们来证明一下:
假定随机变量 X ∼ N ( 0 , 1 ) X \sim N\left( {0,1} \right) XN(0,1) Y ∼ N ( 0 , 1 ) Y \sim N\left( {0,1} \right) YN(0,1),且相互独立,令 p ( X ) p\left( X \right) p(X) p ( Y ) p\left( Y \right) p(Y)分别为其概率密度函数,有:

p ( X ) = 1 2 π e − X 2 2 p\left( X \right) = \frac{1}{ {\sqrt {2\pi } }}{e^{ - \frac{ { {X^2}}}{2}}} p(X)=2π 1e2X2
p ( Y ) = 1 2 π e − Y 2 2 p\left( Y \right) = \frac{1}{ {\sqrt {2\pi } }}{e^{ - \frac{ { {Y^2}}}{2}}} p(Y)=2π 1e2Y2

联合概率密度由于独立,有

p ( X , Y ) = 1 2 π e − X 2 + Y 2 2 p\left( {X,Y} \right) = \frac{1}{ {2\pi }}{e^{ - \frac{ { {X^2} + {Y^2}}}{2}}} p(X,Y)=2π1e2X2+

  • 9
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值