通信软件基础——滑动相关检测
凉凉不冷 Lv4

通信软件基础——滑动相关检测

确定信号 X[]={1,2,0,4}
携带确定信号的噪声信号 Y[]={1,4,6,3,4,1,5,1,8,9,4,2,3,4,5,0}
编程求出:最大相关的值和确定信号的起始位置

  • 相关检测方法

    假设确定信号序列为,具有噪声背景的实际信号序列为,通过滑动相关计算,找出滑动相关计算序列的最大的值(模),则可以求出具有噪声背景的实际信号序列所包含的确定信号序列的位置

  • 滑动相关计算公式

确定信号序列,其中

携带确定信号的噪声信号,其中

满足,接着进行演示滑动相关计算算法,

滑动相关检测

  • 以此类推得到长度的信号序列

最后找出最大值及其位置也就是确定信号的起始位置。

其算法C语言展现如下:(非最优)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
//确定信号 X[]={1,2,0,4}
//携带确定信号的噪声信号 Y[]={1,4,6,3,4,1,5,1,8,9,4,2,3,4,5,0}
//编程求出:最大相关的值和确定信号的起始位置
#include <stdio.h>

#define n 16
#define m 4
#define k n-m+1

int main(void)
{
int X[m] = { 1,2,0,4 };
int Y[n] = { 1,4,6,3,4,1,5,1,8,9,4,2,3,4,5,0 };
int Z[k] = { 0 };
int i = 0;
int j = 0;
int kz = 0;//滑动相关计算序列哨兵
int max = 0;
int maxpos = 0;//确定型号的起始位置,也就是最大值的位置
for (kz = 0; kz < k; kz++)
{
for (i = 0; i < m;i++)
{
Z[kz] += X[i] * Y[i+j];
}
j++;
if (Z[kz] >= max)
{
max = Z[kz];
maxpos = kz;
}
}

printf("滑动相关计算序列为:");
for (kz = 0; kz < k; kz++)
{
printf("%3d",Z[kz]);
}
printf("\r\n序列长度为:%3d", kz);
printf("\r\n最大相关值:%3d", max);
printf("\r\n确定信号起始位置:%3d", maxpos);
return 0;
}

运行结果如下:

滑动相关检测运行截图

收工~

EMT

 Comments