首页 > 编程语言 >1. 通信软件基础-移动通信中的算法问题-实验

1. 通信软件基础-移动通信中的算法问题-实验

时间:2024-04-09 15:01:56浏览次数:31  
标签:int float 通信 信号强度 算法 通信软件 基站 信号 txt

目录

简介

 任务描述:

关键词:无线信号强度 排序算法 相关检测

无线信号强度计算

 基站信号强度排序

相关检测

代码模块

头文件定义:

函数相关:

快排:

无限信号求和:

主函数:

变量定义

主要流程一

主要流程二(搭档写的)

总结


简介

移动通信中的算法问题是指在移动通信系统中,为了实现高效的通信和资源分配,需要设计和实现各种算法。这些算法涉及到信道分配、功率控制、调度、路由选择等方面,目的是优化系统性能,提高通信质量和用户体验。

数字信号处理的往往 是复数信号。

在开始代码之前,先了解一些基础的东西。

算法方面希望去了解快速排序         

如: a + bi

信号强度计算实例

序号为n的点,a[n]+b[n]i,其信号强度:

信号强度(N为序列个数):

相关检测方法 假设确定信号序列为x[m],具有噪声背景的实际信号序列为y[n],m<n,通过滑动相关计算,找出滑动相关计算序列z[k]的最大的值,则可以求出具有噪声背景的实际信号序列y中所包含的确定信号序列x的位置。    

滑动相关计算公式为: 

 任务描述:

关键词:无线信号强度 排序算法 相关检测

无线信号强度计算

已知0到9号基站信号数据在0.txt-9.txt文件中

奇数行是信号实部和偶数行是信号虚部

计算N=20时各基站的信号强度 (各基站前20个采样信号的强度)

需要几个txt文本,需要读者自行准备。

 基站信号强度排序

对各基站信号强度进行排序,输出排序结果

输出应接入基站(信号强度最大基站)的序号

推荐使用:快速排序

相关检测

已知10号基站信号(噪音+原始信号)强度数据在y.txt文件中(无需再计算实部虚部的模);

原始信号强度数据在x.txt中 确定10号基站的信号序列(原始信号)位置,即计算使得z最大的k值 (设原始信号长度m=50)

文本文件需要自行准备

代码模块

头文件定义:

#define _CRT_SECURE_NO_DEPRECATE//不使用这个在vs里运行,读写文件会出错
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include<conio.h>

函数相关:

快排:

int quick_sort(float* a,int *c, int low,  int high)//a是需要计算的数组,c的存在是为了保护下标
{
	int i = low;
	int j = high;
	int temp1,temp2;
	float key = a[i];
	while (i < j)
	{
		while (i < j && a[j] >= key)
		{
			j--;
		}
		temp1 = c[i];
		c[i] = c[j];
		c[j] = temp1;
		a[i] = a[j];
		while (i < j && a[i] <= key)
		{
			i++;
		}
		temp2 = c[j];
		c[j] = c[i];
		c[i] = temp2;
		a[j] = a[i];
	}
	a[i] = key;
	if (i - 1 > low)
	{
		quick_sort(a, c,low, i - 1);
	}

	if (i + 1 < high)
	{
		quick_sort(a, c,i + 1, high);
	}

	return 0;
}

无限信号求和:

/*无线信号的求和*/
float wireless_Signal_Strength_Calculations(int a[N], int b[N], double * c)
{
	float sum=0;
		for(int i = 0; i <N; i++)
		{
			c[i] = sqrt(pow(a[i], 2) + pow(b[i], 2));
			sum += c[i];
	    }

		return sum;
}

主函数:

变量定义

/*变量声明*/
int a[N];
int b[N];
double c[N];
FILE* file;
char line[MAX_LINE_LENGTH];
char filename[MAX_FILENAME_LENGTH];
char filenames[2][MAX_FILENAME_LENGTH];
int sort_Bs[N] = { 0,1,2,3,4,5,6,7,8,9 };//一个数组存储下标
float signal_Sum[10] = {};

/*任务三变量声明*/
float* x, * y, ret = 0,max = 0;
int xSize = 100, ySize = 100;
int xIndex = 0, yIndex = 0;
int i = 0, j = 0, pos = 0;

主要流程一

/*主要流程1:一二题的实现*/
for (int i = 0; i <= 9; i++)
{
	sprintf(filename, "%d.txt", i);
	file = fopen(filename, "r");
	if (file == NULL) {
		printf("无法打开文件 %s\n", filename);
		continue;  // 如果无法打开文件,跳过当前循环,继续下一个文件
	}
	//读取文件内容
	int file_size = 0;
	while (fgets(line, MAX_LINE_LENGTH, file) != NULL)
	{
		int number = atoi(line);
		//printf(" % d", number);
		if (file_size % 2 != 0)
		{
			a[file_size / 2] = number;

		}
		else
		{
			b[file_size / 2] = number;

		}
		file_size++;
	}
	fclose(file);

	signal_Sum[i] = wireless_Signal_Strength_Calculations(a, b, c);
	file_size++;
	// 关闭文件


}

printf("第一,二题:");
printf("排序之前:\n");
for (int i = 0; i < sizeof(signal_Sum) / sizeof(signal_Sum[0]); i++)
{
	printf("%lf ", signal_Sum[i]);
}
putchar(10);//换行

//调用-快排
quick_sort(signal_Sum, sort_Bs, 0, (sizeof(signal_Sum) / sizeof(signal_Sum[0])-1));

printf("排序之后:\n");
for (int i = 0; i < sizeof(signal_Sum) / sizeof(signal_Sum[0]); i++)
{
	printf("%lf ", signal_Sum[i]);
}
putchar(10);
printf("信号最大的基站是%d", sort_Bs[sizeof(signal_Sum) / sizeof(signal_Sum[0])-1]);
printf("\n按任意键继续...");
char nouse=_getch();//屏幕停顿
system("cls");//清屏

主要流程二(搭档写的)

/*第三题*/


printf("第三题:");
strcpy(filenames[0], "x.txt");
strcpy(filenames[1], "y.txt");

x = (float*)malloc(xSize * sizeof(float));
y = (float*)malloc(ySize * sizeof(float));

// 逐个处理每个文件
for (int fileIndex = 0; fileIndex < 2; fileIndex++) {
	// 打开文件
	file = fopen(filenames[fileIndex], "r");
	if (file == NULL) {
		printf("无法打开文件 %s\n", filenames[fileIndex]);
		continue; // 如果无法打开文件,跳过当前文件,继续处理下一个文件
	}

	// 逐行读取文件内容
	while (fgets(line, MAX_LINE_LENGTH, file)) {
		// 将字符串转换为数字
		float number = atof(line);

		// 根据文件索引存储到相应的数组中
		if (fileIndex == 0) {
			if (xIndex >= xSize) {
				// 如果数组已满,扩展数组大小
				xSize *= 2;
				x = (float*)realloc(x, xSize * sizeof(float));
			}
			x[xIndex] = number;
			xIndex++;
		}
		else if (fileIndex == 1) {
			if (yIndex >= ySize) {
				// 如果数组已满,扩展数组大小
				ySize *= 2;
				y = (float*)realloc(y, ySize * sizeof(float));
			}
			y[yIndex] = number;
			yIndex++;
		}
	}

	// 关闭文件
	fclose(file);
}

for (i = 0; i <= yIndex - xIndex; i++) {
	ret = 0;
	for (j = 0; j < xIndex; j++) {
		ret = ret + y[j + i] * x[j];
	}
	if (ret > max) {
		pos = i;
		max = ret;
	}
}
printf("最大相关=%lf, 此时位置 = %d\n", max, pos);

// 释放动态分配的内存
free(x);
free(y);

return 0;

总结

实验内容其实很简单,尽量自己跟着老师完成,大多数其实通过查资料都可以解决,这有助于你的代码能力。

标签:int,float,通信,信号强度,算法,通信软件,基站,信号,txt
From: https://blog.csdn.net/a6s686/article/details/137551719

相关文章

  • 深度探索:机器学习Deep Belief Networks(DBN)算法原理及其应用
    目录1.引言与背景2.定理3.算法原理4.算法实现5.优缺点分析优点:缺点:6.案例应用7.对比与其他算法8.结论与展望1.引言与背景深度学习在近年来取得了显著进展,其在图像识别、语音识别、自然语言处理等多个领域的成功应用引发了广泛的关注。其中,DeepBeliefNetworks......
  • 深度探索:机器学习堆叠泛化(Stacked Generalization, Blending)算法原理及其应用
    目录1.引言与背景2.集成学习定理3.算法原理4.算法实现5.优缺点分析优点:缺点:6.案例应用7.对比与其他算法8.结论与展望1.引言与背景机器学习领域中,模型性能的提升往往依赖于对数据特征的深入理解、恰当的模型选择以及有效的超参数调整。然而,在面对复杂且高度非线性......
  • 深度探索:机器学习多维尺度(MDS)算法原理及其应用
    目录1.引言与背景2.MDS定理3.算法原理4.算法实现5.优缺点分析优点:缺点:6.案例应用7.对比与其他算法8.结论与展望1.引言与背景多维尺度分析(Multi-DimensionalScaling,MDS)是一种统计学方法,用于将复杂、高维的相似性或距离数据转化为直观的、低维的可视化表示。MD......
  • 冒泡排序的基本实现【数据结构与算法—TypeScript 实现】
    笔记整理自coderwhy『TypeScript高阶数据结构与算法』课程概念本质:相邻元素两两比较并交换位置,使整个序列按照特定的顺序排列特性复杂度分析时间复杂度:最好情况:O(n)最坏情况:O(n^2)平均情况:O(n^2)空间复杂度:O(1),原地排序使用场景因为时间复杂度为O(n^2)适......
  • 优先队列的基本实现【数据结构与算法—TypeScript 实现】
    笔记整理自coderwhy『TypeScript高阶数据结构与算法』课程特性效率比普通队列高每个出队元素拥有最高优先级可以用数组、链表等数据结构实现,但是堆结构是最常用的实现方式设计实现方式:基于堆结构实现,堆结构底层基于数组实现属性:heap:存放队列元素方法:enq......
  • 插入排序的基本实现【数据结构与算法—TypeScript 实现】
    笔记整理自coderwhy『TypeScript高阶数据结构与算法』课程概念本质:将数列分为已排序和未排序,将未排序中的元素插入到已排序中的合适位置特性复杂度分析时间复杂度:最好情况:O(n),有序序列最坏情况:O(n^2),倒序序列平均情况:O(n^2),随机数列空间复杂度:O(n),原地排序使......
  • 选择排序的基本实现【数据结构与算法—TypeScript 实现】
    笔记整理自coderwhy『TypeScript高阶数据结构与算法』课程概念本质:两两元素相比较,先扫描一遍未排序数列,把未排序的数列中的最小(大)元素,放到数列的已排序的末尾特性选择排序是冒泡排序的优化版本,主要优化了交换的过程在所有完全依靠交换去移动元素的排序方法中,选择排......
  • 深入理解 WebSocket:实时双向通信的核心技术(python案例)
    引言WebSocket是一种在Web开发中广泛使用的通信协议,它提供了一种实时、双向的通信机制,允许客户端和服务器之间建立持久连接,实现高效的实时数据传输。本文将深入探讨WebSocket的工作原理、优势、应用场景以及使用示例,帮助读者全面了解WebSocket技术。什么是WebSocket?......
  • AO-SVM,基于AO天鹰算法优化SVM支持向量机回归预测(多输入单输出)-附代码
    AO天鹰算法(AntOptimizationEagleAlgorithm)是一种启发式算法,它是灵感来自天鹰座在捕捉猎物过程中的自然行为。因此,优化所提出的AO算法的程序用四种方法表示;按高选择搜索空间垂直俯冲翱翔,通过短滑翔攻击的轮廓飞行在发散的搜索空间内探索,通过低速飞行和慢速下降攻击在收敛搜索......
  • 【游戏分析】RPG类型游戏数据关联名称库加密算法
    我们找到的无论是周围数组还是数组套链表结构里都没有发现NPC名称那么我们在不能直接观察得到的时候只有单独去找名称属性了 找一个NPC搜索其名称得到10几个那么我们尝试修改看看是哪一个  发现是14这个地址到DO中去看一下   发现周围全是其他的各......