关于相干解调

  • c实现数字信号通过低通滤波器
    在这里插入图片描述
    对前面采集的数字信号进行相干解调的过程中,使用到一个滤波器数组和接收信号数组的线性卷积的过程。
//lb2.c
//离散序列线性卷积
#include <stdio.h> 
float convolute(double *f,double *g,unsigned int k)
{
	unsigned int n=0;
	float sum=0;
	
	for(n=0;n!=k;n++)
	{
		sum+=f[n]*g[k-n];
	}
	return sum;
}
void main()
{   int i,k,j;
	double f[256]={0};
	
	double g[257]={0};
	float convo=0;
	

	
FILE *fp1=fopen("lbq1.dat","r");
for(i=0;i<256;i++)
{
  fscanf(fp1,"%lf",&g[i]);
 
}

fclose(fp1);


FILE *fp=fopen("am.dat","r");
FILE *fp3=fopen("lb2.dat","w");

for(j=1;j<10240;j++)
{
	
	
if(j<=256)
{	
for(i=0;i<j;i++)
{
  fscanf(fp,"%lf",&f[i]);
  
}
convo=convolute(f,g,j-1);
fprintf(fp3,"%lf\n",convo);
}

else
{   
   
fseek(fp,(j-256)*8L,SEEK_SET);
for(i=0;i<256;i++)
{
  fscanf(fp,"%lf",&f[i]);
  
}
convo=convolute(f,g,256);
fprintf(fp3,"%lf\n",convo);
}
	
	
	

 

}
fclose(fp);
fclose(fp3);
}



使用文件写入将低筒滤波器的数据写入到一个数组中待用,也即对应上图中的h(0)…h(n-1)序列的数值。
对于接收到的数据序列,此处数值为51200个点,想要滤波,预先设置好一个数组f,大小为256个数,在数据点小于257点时,每次读入数据到f数组中,实现卷积算法后输出对应的一个点,即是滤波后的数据点。对于大于256个数后,对原始数据文件里面的数据使用的方法是类似入队出队的算法,此处使用的是根据读取的数据的规律,使用文件指针函数fseed()定义数据文件的位置,每次读取256个点,与滤波器的数据序列进行卷积计算出滤波后的数值。程序算法流程图如下:
在这里插入图片描述
关于上面使用到的fseek函数,每次定义其指针地址的位置,实现类似数据入队出队的功能(fseek(fp,(j-256)*8L,SEEK_SET);偏离首地址的字节数为(j-256)*8L;

  • 实现对AM信号解调
    AM信号解调:
    在这里插入图片描述
    对AM信号进行相干解调时候,首先对数据加入一个同步载波,再将其经过低通滤波器;相当于上面数组f读取的是接收信号乘上同步载波后的数据。采样10240个点后滤波,通过gnuplot将滤波后的图形画出来:
    在这里插入图片描述
    对DSB信号的解调也是使用相干解调的方法来实现,采取对接收到的信号进行同步载波相乘后进过滤波器滤波,解调出来的信号图形如下:
    在这里插入图片描述
    原始信号为:
    在这里插入图片描述
    可见解调还原出了原始信号,但是由于滤波器设计的短板,所以不可能无误差的还原出原始信号,解调出来的信号在幅值和初相上有一定程度的失真。
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值