通信系统仿真

崔春雷

目录

  • 1 第一单元: MATLAB基础
    • 1.1 课程说明与资料
      • 1.1.1 作业参考答案
      • 1.1.2 移动22级作业答案
    • 1.2 MATLAB安装与运行环境
      • 1.2.1 MATLAB介绍
    • 1.3 基本数据类型:数值类型
    • 1.4 基本数据类型:字符类型
    • 1.5 数据类型转换与输出
    • 1.6 数组与矩阵基础
      • 1.6.1 矩阵运算进阶
    • 1.7 数组与矩阵常用函数
    • 1.8 matlab中的逻辑运算
    • 1.9 实验: MATLAB常用数学函数
      • 1.9.1 实验 作业答案
    • 1.10 元胞数组
    • 1.11 结构体数组
      • 1.11.1 结构体进阶
      • 1.11.2 元胞数组与结构体数组对比
      • 1.11.3 map 容器
    • 1.12 附录:MATLAB常用基础命令
    • 1.13 拓展内容:实时脚本
      • 1.13.1 实时脚本示例
    • 1.14 课程作业与答案
      • 1.14.1 《通信系统仿真》期末考试
  • 2 第二单元:Matlab 程序设计
    • 2.1 顺序结构程序
    • 2.2 分支结构—— if语句
    • 2.3 分支结构—— switch语句
    • 2.4 循环结构—— while语句
    • 2.5 循环结构—— for语句
    • 2.6 图像处理基础
    • 2.7 Matlab的函数
      • 2.7.1 函数内容的课外扩展
    • 2.8 本章实验:for循环的应用
      • 2.8.1 素数问题
        • 2.8.1.1 素数的螺旋线排列
      • 2.8.2 3X+1猜想
      • 2.8.3 7 行代码计算 π
    • 2.9 排序算法
      • 2.9.1 冒泡排序
      • 2.9.2 选择排序
      • 2.9.3 插入排序
      • 2.9.4 快速排序
      • 2.9.5 基数排序
      • 2.9.6 计数排序
      • 2.9.7 堆排序
    • 2.10 动态规划算法
      • 2.10.1 动态规划编程实例
      • 2.10.2 动态规划:01背包问题
      • 2.10.3 动态规划常见题目分析
      • 2.10.4 动态规划题目分析2
    • 2.11 常用算法简介
      • 2.11.1 剪枝算法
      • 2.11.2 二分查找
      • 2.11.3 递归算法
      • 2.11.4 回溯算法
        • 2.11.4.1 Leetcode回溯题目合集
        • 2.11.4.2 回溯算法总结
        • 2.11.4.3 回溯法解数独问题
        • 2.11.4.4 DFS与BFS
          • 2.11.4.4.1 DFS/BFS原理
          • 2.11.4.4.2 BFS的应用:Dijkstra算法
      • 2.11.5 n 皇后问题专题
      • 2.11.6 双指针算法
      • 2.11.7 数组模拟链表(约瑟夫环)
      • 2.11.8 Hash(哈希表)
      • 2.11.9 图论与路径规划
        • 2.11.9.1 迪杰斯特拉算法
        • 2.11.9.2 A*算法
          • 2.11.9.2.1 A*算法的MATLAB实现
        • 2.11.9.3 RRT路径规划算法
          • 2.11.9.3.1 RRT算法 MATLAB代码
          • 2.11.9.3.2 参考资料
      • 2.11.10 数据结构
        • 2.11.10.1 数据结构例题
      • 2.11.11 前缀和 差分 双指针
      • 2.11.12 位运算
      • 2.11.13 常用算法代码模板
    • 2.12 练习题库
    • 2.13 code
      • 2.13.1 简易计算器gui代码
      • 2.13.2 五子棋
      • 2.13.3 连连看小游戏
      • 2.13.4 递归算法与汉诺塔
      • 2.13.5 有理数的小数循环节
    • 2.14 MATLAB编程风格
      • 2.14.1 向量化编程专题
  • 3 第三单元:Matlab 图形图像处理
    • 3.1 二维图形绘图基础
    • 3.2 二维图形绘图进阶
    • 3.3 三维图形绘图
      • 3.3.1 MATLAB绘图小结
        • 3.3.1.1 用matlab绘制好看图像
    • 3.4 MATLAB高级绘图
    • 3.5 文件操作
    • 3.6 Matlab图像处理进阶
      • 3.6.1 补充:Matlab图像处理常用函数
      • 3.6.2 RGB/HSV/HSI颜色模型
      • 3.6.3 图片切换动画效果
      • 3.6.4 图像连通域标记
      • 3.6.5 图像旋转与插值
      • 3.6.6 图像的形态学
      • 3.6.7 空间滤波
        • 3.6.7.1 图像中常见的噪声类型与滤波方法
        • 3.6.7.2 matlab中的滤波函数
        • 3.6.7.3 BM3D 去噪算法
        • 3.6.7.4 双边滤波
      • 3.6.8 图像的频域处理
    • 3.7 本章总结
    • 3.8 实验 : matlab 绘图练习1
    • 3.9 实验: matlab 绘图练习2
    • 3.10 实验 :数学函数图像绘制
    • 3.11 实验:绘图综合练习
    • 3.12 实验:曲线拟合
    • 3.13 实验:牛顿法求解方程的根
    • 3.14 实验:信号的傅里叶变换
      • 3.14.1 傅里叶变换、小波变换、希尔伯特变换
      • 3.14.2 新建目录
    • 3.15 课外补充:图像处理基础1
    • 3.16 课外补充:图像处理基础2
    • 3.17 课外补充:图像处理基础3
    • 3.18 课外补充:PYTHON基础
  • 4 第五单元:MATLAB通信仿真
    • 4.1 现代通信系统的介绍
    • 4.2 模拟通信系统的仿真原理
    • 4.3 HDB3编解码的仿真实现
    • 4.4 SIMULINK和其模块简介
    • 4.5 数字通信系统的仿真原理
    • 4.6 模拟通信系统Simulink仿真
    • 4.7 数字通信系统Simulink仿真
    • 4.8 音频信号测处理与仿真
    • 4.9 图像数字水印技术
      • 4.9.1 三角函数到傅里叶变换再到语音识别与数字水印
    • 4.10 信息系统与算法
      • 4.10.1 递归算法
        • 4.10.1.1 递归与堆栈的关系
      • 4.10.2 哈希表
      • 4.10.3 双指针算法
        • 4.10.3.1 双指针算法实战
        • 4.10.3.2 双指针进阶:滑动窗口算法
      • 4.10.4 字符串匹配 KMP算法
        • 4.10.4.1 字符串匹配B-M算法
      • 4.10.5 快速傅里叶变换
      • 4.10.6 回溯算法
      • 4.10.7 动态规划
      • 4.10.8 分治算法
      • 4.10.9 Dijkstra算法
  • 5 第六单元: systemview通信仿真
    • 5.1 SystemView概述
    • 5.2 模拟通信系统 数字系统的仿真分析
    • 5.3 SystemView通信系统仿真进阶
    • 5.4 新建课程目录
  • 6 第四单元:MATLAB高级应用
    • 6.1 符号运算基础
      • 6.1.1 利用Matlab自动推导公式
    • 6.2 Matlab中的数值计算
      • 6.2.1 积分的计算
      • 6.2.2 龙格库塔:常微分方程的数值解法
      • 6.2.3 fmincon函数与非线性方程最小值
    • 6.3 统计、拟合、插值
      • 6.3.1 协方差与相关系数
    • 6.4 GUI设计初步
    • 6.5 matlab GUI界面编程
      • 6.5.1 gui实例
      • 6.5.2 gui编程中常用函数
      • 6.5.3 App Designer入门
    • 6.6 实验:GUI设计图像空间变换系统
    • 6.7 作业:利用GUI设计 计算器、信号发生器等
    • 6.8 MTALB数据导入方法
    • 6.9 课外补充:MATLAB的App会取代GUI吗?
    • 6.10 模拟退火算法matlab实现
    • 6.11 遗传算法的Matlab实现
      • 6.11.1 进化算法(Evolutionary Algorithm)及相关函数介绍
    • 6.12 粒子群算法 matlab实现
      • 6.12.1 粒子群算法及MATLAB实例仿真
    • 6.13 BP网络的应用
    • 6.14 matlab 结构体
    • 6.15 群智能算法合集
  • 7 拓展知识
    • 7.1 什么是算法的时间复杂度?
    • 7.2 Notepad++使用教程
    • 7.3 MATLAB常用函数总结
    • 7.4 MATLAB常用知识点总结
    • 7.5 MATLAB命令大全
    • 7.6 视频:MATLAB官方基础教程
    • 7.7 经典书籍:Matlab2012经典超强教程
    • 7.8 经典书籍:MATLAB揭秘(自学宝典)
    • 7.9 经典资料:MATLAB N个实用技巧
    • 7.10 Matlab编程小技巧
    • 7.11 寻优算法
      • 7.11.1 Dijkstra算法python实现
    • 7.12 PYTHON基础教程
      • 7.12.1 Python进阶
      • 7.12.2 Python小技巧
      • 7.12.3 Python总结
        • 7.12.3.1 Python循环语句总结
        • 7.12.3.2 24个顶级Python库
        • 7.12.3.3 魔法函数
      • 7.12.4 廖雪峰python
      • 7.12.5 正则表达式基础
      • 7.12.6 numpy
        • 7.12.6.1 101道Numpy习题
        • 7.12.6.2 Numpy简要语法教程
        • 7.12.6.3 Numpy实现全连接神经网络 (手写数字识别)
        • 7.12.6.4 图解NumPy
      • 7.12.7 matplotlib
        • 7.12.7.1 matplotlib练习50题
        • 7.12.7.2 Matplotlib速查表
        • 7.12.7.3 Matplotlib 实操指南
      • 7.12.8 Python3 模块 import
      • 7.12.9 Python 小项目
    • 7.13 参考资源:数据结构与算法
      • 7.13.1 十大经典排序算法总结
    • 7.14 机器学习概述
      • 7.14.1 反向传播算法
        • 7.14.1.1 反向传播的数学原理
      • 7.14.2 极大似然估计
        • 7.14.2.1 极大似然估计与最小二乘法
      • 7.14.3 Batch Normalization
        • 7.14.3.1 Batch Normalization&Dropout浅析
        • 7.14.3.2 ​BN层的梯度反向传播计算
        • 7.14.3.3 Batch Size的大小与神经网络的性能
        • 7.14.3.4 标准化和归一化
      • 7.14.4 主成分分析PCA与SVD奇异值分解
        • 7.14.4.1 岭回归 与 PCA
        • 7.14.4.2 PCA原理推导
        • 7.14.4.3 PCA原理新解
        • 7.14.4.4 svd
        • 7.14.4.5 PCA数学原理
      • 7.14.5 正则化
        • 7.14.5.1 L1、L2正则化和过拟合 总结
        • 7.14.5.2 L1 和 L2 正则化的直观解释
      • 7.14.6 SVM
        • 7.14.6.1 从零推导支持向量机(SVM)
        • 7.14.6.2 支持向量机(SVM)介绍
        • 7.14.6.3 SVM推导与实战
        • 7.14.6.4 支持向量机的直观理解
        • 7.14.6.5 浅显易懂的支持向量机SVM
      • 7.14.7 线性回归
      • 7.14.8 逻辑回归
      • 7.14.9 BP算法
        • 7.14.9.1 万能逼近——神经网络拟合任意函数原理
      • 7.14.10 激活与池化
        • 7.14.10.1 激活函数与损失函数 小结
      • 7.14.11 深度学习简述
        • 7.14.11.1 MATLAB2020深度学习实例
      • 7.14.12 损失函数与误差反向传播
        • 7.14.12.1 梯度下降与损失函数
      • 7.14.13 深度学习优化问题
      • 7.14.14 梯度下降法
        • 7.14.14.1 各类梯度下降算法的Python实现
        • 7.14.14.2 梯度下降的直观理解
        • 7.14.14.3 动量、RMSProp、Adam
      • 7.14.15 卷积的概念
        • 7.14.15.1 卷积的矩阵化算法
      • 7.14.16 局部连接
      • 7.14.17 RNN
      • 7.14.18 LSTM
      • 7.14.19 CNN-四大经典CNN技术浅析
      • 7.14.20 熵(Entropy)与交叉熵
      • 7.14.21 softmax函数详解
      • 7.14.22 自编码算法详细理解与代码实现
      • 7.14.23 pytorch
        • 7.14.23.1 ​PyTorch简介
          • 7.14.23.1.1 Pytorch快速入门资料
        • 7.14.23.2 CNN的PyTorch实现
        • 7.14.23.3 pytorch总结
        • 7.14.23.4 PyTorch trick 集锦
        • 7.14.23.5 在PyTorch上加载自定义数据集
        • 7.14.23.6 实战:Pytorch识别验证码
        • 7.14.23.7 实战:Transformer的最简洁pytorch实现
        • 7.14.23.8 使用PyTorch实现神经网络分类
      • 7.14.24 卷积神经网络CNN概述
        • 7.14.24.1 CNN 简易原理
        • 7.14.24.2 卷积神经网络CNN原理详解
        • 7.14.24.3 自己手写一个卷积神经网络
        • 7.14.24.4 CNN反向传播算法
        • 7.14.24.5 卷积计算、作用与思想
        • 7.14.24.6 用卷积神经网络CNN识别手写数字集
        • 7.14.24.7 卷积 池化 参数的计算
        • 7.14.24.8 im2col方法实现卷积算法
        • 7.14.24.9 卷积核的梯度计算
        • 7.14.24.10 卷积层反向传播推导及实现
        • 7.14.24.11 反向传输算法
          • 7.14.24.11.1 resnet残差网络
        • 7.14.24.12 CNN反向传播的MATLAB实现
      • 7.14.25 神经网络的调参技巧
      • 7.14.26 BP神经网络
        • 7.14.26.1 零开始搭建bp神经网络
        • 7.14.26.2 MATLAB自带的bp工具箱
        • 7.14.26.3 神经网络中偏置(bias)的作用
      • 7.14.27 聚类分析 k-means
        • 7.14.27.1 matlab做聚类分析(k-means)
        • 7.14.27.2 聚类模型探讨综述
        • 7.14.27.3 5种经典聚类算法
      • 7.14.28 深度学习的一些概念
      • 7.14.29 人工智能简述:AI的过去和现在
      • 7.14.30 k-NN(k近邻算法)
      • 7.14.31 神经网络中的优化器:BGD、SGD、MBGD、Momentum
      • 7.14.32 卷积神经网络的经典网络总结
        • 7.14.32.1 卷积神经网络中十大拍案叫绝的操作
      • 7.14.33 GAN 对抗样本攻击
      • 7.14.34 蒙特卡洛模拟
      • 7.14.35 dropout与随机部分连接
      • 7.14.36 Jupyter 等 IDE概览
      • 7.14.37 分类算法常用评价指标
      • 7.14.38 Inception 网络与不变性
      • 7.14.39 卷积神经网络的可视化
      • 7.14.40 隐马尔可夫模型HMM
        • 7.14.40.1 马尔科夫链
    • 7.15 MATLAB音频处理
      • 7.15.1 python处理音频信号
    • 7.16 图像处理
      • 7.16.1 图像处理中的指标
    • 7.17 代码集
    • 7.18 论文写作与阅读方法
      • 7.18.1 期刊投稿攻略
      • 7.18.2 论文排版教程
      • 7.18.3 SCI-HUB论文下载技巧
      • 7.18.4 几种论文写作神器,提高写作效率
      • 7.18.5 latex入门
      • 7.18.6 LaTeX教程
    • 7.19 机器学习常用的网站以及资源
      • 7.19.1 很详细的ML&DL学习博客
    • 7.20 SymPy 符号计算基本教程
  • 8 程序设计数学基础
    • 8.1 编程数学基础
      • 8.1.1 概率的历史
      • 8.1.2 概率
        • 8.1.2.1 常见概率分布
          • 8.1.2.1.1 二维正态分布
        • 8.1.2.2 蒙特卡罗方法
        • 8.1.2.3 置信区间
        • 8.1.2.4 协方差与相关系数
      • 8.1.3 矩阵 向量求导法则
      • 8.1.4 雅可比矩阵 海森矩阵
      • 8.1.5 矩阵的几种分解方式
      • 8.1.6 行列式和代数余子式
      • 8.1.7 向量
      • 8.1.8 矩阵的基本运算
      • 8.1.9 矩阵分析
      • 8.1.10 矩阵的LU分解
      • 8.1.11 矩阵奇异值分解(SVD)
        • 8.1.11.1 SVD分解2
        • 8.1.11.2 SVD分解逐步推导
        • 8.1.11.3 奇异值与特征值的意义
      • 8.1.12 随机向量
        • 8.1.12.1 随机过程简述
      • 8.1.13 投影矩阵和最小二乘
      • 8.1.14 知乎数学精选集
        • 8.1.14.1 高数问题集
      • 8.1.15 小波变换
      • 8.1.16 程序设计数学基础1:高等数学
      • 8.1.17 程序设计数学基础2:线性代数
      • 8.1.18 程序设计数学基础3:概率论和数理统计
      • 8.1.19 向量的距离与相似度计算
      • 8.1.20 复数
      • 8.1.21 高等数学——幂级数
      • 8.1.22 无穷小的本质
      • 8.1.23 数列极限和收敛性
      • 8.1.24 不定积分技巧总结
    • 8.2 有趣的数学题目
    • 8.3 高等数学
      • 8.3.1 泰勒级数
  • 9 路径规划与智能算法
    • 9.1 常见路径规划算法简介
    • 9.2 Dijkstra算法详细
  • 10 教学文档
    • 10.1 授课计划
    • 10.2 课程标准
文件操作






数据导入


在编写一个程序时,经常需要从外部导入数据,或者将程序运行的结果保存为文件。

一、save与load函数保存和加载程序数据

基本格式为:

save('FILENAME', 'VARIABLES')

load('FILENAME', 'VARIABLES')

例如,save ('datas.mat','data','x','y','z'); 表示将内存变量data, x, y, z 保存到当前路径下的datas.mat文件,其它程序若要载入这几个变量的数据,只需前面路径下执行load datas;即可。


例1:

x=[1:0.1:10];

y=sin(x);

save('test1.mat','x','y')  %把变量x,y的内容保存到名为test1.mat的文件里(本目录下)

z=load('test1.mat')      % 导入test1.mat,赋给z,其中z为struct结构数据类型

z.x

z.y


例2:

MATLAB存储文件有两种方式。一种是存储为 *.mat 格式, 一种为EXCEL。

save mydata1.mat   

%将工作区所有的变数全部保存到名为mydata1的 *.mat  文件中,比ascii的格式要存储的内容要多

save mydata2.mat -ascii  

 %将工作区所有的变数全部保存到名为mydata1的 *.mat  文件中,并且以ASCII码的格式存储

save mydata1.mat, A     

%将工作区中A这个变数存到mydata1.mat 文件中


load('mydata1.mat', )            %读取 mydata1.mat

load('mydata1.mat', '-ascii')   

%如果 mydata1.mat是用 ASCII格式存储的,那么读取时要用这个格式


xlswrite('04.xlsx',M)             %将变数M存到04.xlsx

xlswrite('D:\04.xlsx',M)          %将变数M存到04.xlsx,位置放到D盘

xlswrite('04.xlsx',M,1,'E2:E4')       % 将娈数M放到04.xlsx的SHEET1,位置为E2:E4

xlswrite('04.xlsx',{'Mean'},1,'E1')   % 将字符串 Mean 放到04.xlsx的SHEET1,位置为E1


xlsread('04Score.xlsx')            %读取04Score.xlsx

xlsread('04Score.xlsx','B2:D4')    %读取04Score.xlsx的B2:D4


[Score Header] = xlsread('04.xlsx')  %可以看到所有的数据都放到Score,所有的标题放到 Header


二、txt文件的导入导出

1. 导入格式一致的数据

例1 现有txt文件如下:




代码

x1=load('data1.txt');  %注意设置当前路径为文件所在路径

x2=load('data2.txt');


2. 导入有固定分隔符的数据

dlmread('FILENAME', '分隔符', '读取范围')

例2读取txt文件如下(需要跳过前2行的非数据行,或列数不同):

代码

x3=dlmread('data3.txt', ',', 2,0) ;  %设定读取的初始位置:2行0列之后的数据

x4=dlmread('data4.txt');  %列数不足用0不齐,load函数读取将报错


3. 将矩阵数据写入指定分隔符的ASCII格式文件

dlmwrite(‘文件名’, ‘数据’, ‘分隔符’, ‘起始行’, ‘起始列’)

dlmwrite(‘文件名’, ‘数据’, '-append')

'-append'表示将矩阵数据写到文本末尾,若不指定将覆盖原文本数据。


4. 导入带表头的txt或excel数据

importdata函数允许加载不同格式的各种数据文件。它有以下五种形式 :

序号函数描述
1A = importdata(filename)从文件filename中将数据加载到数组A中。
2A = importdata('-pastespecial')从系统剪贴板而不是从文件加载数据。
3A = importdata(___, delimiterIn)解析delimiterIn作为在ASCII文件,文件名或剪贴板数据中的列分隔符。可以使用delimiterIn与上述语法中的任何输入参数。
4A = importdata(___, delimiterIn, headerlinesIn)从ASCII文件,文件名或剪贴板加载数据,从行头标题In + 1开始读取数字数据。
5[A, delimiterOut, headerlinesOut] = importdata(___)返回在delimiterOut中检测到的输入ASCII文件的分隔符字符,并使用前面语法中的任何输入参数检测headerlinesOut中检测到的标题行数。


importdata(‘文件名’, ‘分隔符’, ‘n’) 将数据存入“结构体”,其中,n表示n行表头;也可以用来读入图片:

x=importdata('tupian.jpg'); image(x);

例3 读入如下的txt文件:

代码

x5=importdata('data5.txt',' ',1);  %空格分隔, 第1行是表头

x5.data  %数据

x5.textdata %表头变量


再比如:

filename = 'mydog.jpg';
A = importdata(filename);
image(A);


运行文件时,MATLAB显示图像文件。但是,必须将其存储在当前工作目录(F:\worksp\matlab)中



5. 导入混合格式文本

textscan(fid, 'format', N, 'param', value);

其中,fid为文件句柄;format为读取格式;N表示用该格式读取N次数据;'param', value(可选项)指定分隔符和值对。

注意:使用textscan之前,必须先用fopen打开要读入的文件;函数textread用法类似。

例4 混合格式数据的txt文件如下:

代码

fid=fopen('data6.txt','r');  %打开文件句柄

C=textscan(fid, '%s%s%f32%d8%u%f%f%s%f');  %按格式读入元胞数组C

fclose(fid);  %关闭文件句柄

C{1}

C{9}

[names,types,y,answer]=textread('data7.txt','%9c %6s %*f %2d %3s', 1)  %读入固定格式的文件的第一行,忽略其中的浮点值

运行结果:C{1} = 'Sally' 'Joe' 'Bill'

C{9} = 5.1000 + 3.0000i 2.2000 - 0.5000i 3.1000 + 0.1000i

names = Sally Lev

types = 'el1'

y = 45

answer = 'Yes'

三、csv文件导入与导出

csv文件是逗号分隔的txt文件,使用csvread( ) 函数,有3种格式:

csvread( 'filename', row, col, range)

其中,第一个参数指定文件名;

row和col指定开始读取位置的行号和列号。注意是从0开始计数,即row=0, col=0表示从文件中第一个数(1, 1)开始读;

range指定读取的范围,range=[R1 C1 R2 C2],表示读取区域的左上角位置为(R1+1, C1+1),读取区域的右下角位置为(R2-1, C2-1),且要求row, col等于R1, C1.

注意:csv文件中的空项,读到矩阵中时,会初始化为0.

四、 Excel文件的导入与导出

1. 导入Excel数据文件

[num, txt, raw] = xlsread('文件名.xls','工作表', '数据范围')


num=xlsread('data1.xlsx','Sheet1','A1:E13');
input_train=num(1:8,1:4)';
output_train=num(1:8,5)';
input_test=num(9:13,1:4)';
output_test=num(9:13,5)';

其中,num:只是一个定义的名称而已,你可以把他定义成你所想想要的名称即可,比如:settlement;data1:是你自己给这个excel起的名字;xlsx:这是excel的文件后缀,如果你是更早的版本可能是xls,注意甄别即可;Sheet1:这个是你的数据在excel的第几页里面;A1:E13:这个是你的数据在excel所处的全部范围。num(1:8,1:4):1:8的意思是第一行到第八行,1:4是第一列到第四列,下面的以此类推。


例:现有data1.xlsx文件(导入Sheet1的A1至H4数据):

代码

[num,txt,raw]=xlsread('data1.xlsx','Sheet1','A1:H4')
%数据返回num;文本返回txt;不处理直接作为元胞返回raw

运行结果:

num =

1 60101 6010101 NaN 0 63 63

2 60101 6010102 NaN 0 73 73

3 60101 6010103 NaN 0 0 0


txt =

'序号' '班名' '学号' '姓名' '平时成绩' '期末成绩' '总成绩' '备注'

'' '' '' '陈亮' '' '' '' ''

'' '' '' '李旭' '' '' '' ''

'' '' '' '刘鹏飞' '' '' '' '缺考'


raw =

'序号' '班名' '学号' '姓名' '平时成绩' '期末成绩' '总成绩' '备注'

[ 1] [60101] [6010101] '陈亮' [ 0] [ 63] [ 63] [ NaN]

[ 2] [60101] [6010102] '李旭' [ 0] [ 73] [ 73] [ NaN]

[ 3] [60101] [6010103] '刘鹏飞' [ 0] [ 0] [ 0] '缺考'



2. 将数据导出到Excel文件

status = xlswrite(‘filename.xls’, ‘数据’, ‘工作表’, ‘指定区域’)

成功返回1,失败返回0.


例6 将矩阵或元胞数组的数据写成xls文件

代码

A=[12.7 5.02 -98 12; 63.9 0 -0.2 56];
xlswrite('testdata.xls', A)
d={'Time', 'Temp'; 12 98; 13 99; 14 97};
s=xlswrite('tempdata.xls', d, 'Temperatures', 'E1')
%将数据d写入文件tempdata.xls, Temperatures表,E1起始

例7 读取数据、处理日期数据,根据日期绘制开盘价变化趋势图形。ExpData.xlsx文件如下(部分):

代码

[num,txt]=xlsread('ExpData.xlsx');
%读取excel表格中的数据,数值存入num,文本存入txt
date=txt(2:end,1); %取出日期数据单独处理
t=datenum(date);    %将日期转化为数值(方便绘图使用)
date1=datestr(t);  %将数值转化为日期
h=figure            %生成空的图形窗口句柄
set(h,'color','w');  %将图的背景颜色设为白色
plot(t,num(:,1));    %以日期为横坐标,开盘价为纵坐标,绘制图形
%plot(t,num(:,1),'*');  %绘制散点图
datetick('x',23);    %将x轴标注变成日期格式:mm/dd/yyyy
xlabel('日期');
ylabel('开盘价');

运行结果

五、   .mat文件

mat文件是matlab的数据存储的标准格式。mat文件是标准的二进制文件,还可以ASCII码形式保存和加载,在MATLAB中打开显示类似于单行EXCEL表格。

load     打开mat文件

save      关闭\保存mat文件

load('filename','X','Y','Z')     加载filename文件中的X Y Z变量到工作区间中

save('filename','-struct','s')     保存结构体s 到filename中


具体操作:

  1. 如:在命令行窗口中输入a=[1 2 3 4 5 6],按回车键之后,输入save a,将a变量保存在新生成的a.mat文件,如下图所示:

    matlab怎么保存和读取mat文件数据

  2. 2

    第二步按回车键之后,在当前文件夹中,可以看到新生成的a.mat文件,需要注意的是在保存数据到mat文件中的时候,可以设置mat文件名,保存的变量,保存的路径,如下图所示:

    matlab怎么保存和读取mat文件数据

  3. 3

    第三步使用“load a”,读取a.mat文件数据,读取之后,就可以直接使用mat文件里面的a变量,如下图所示:

    matlab怎么保存和读取mat文件数据

  4. 4

    第四步如果我们想保存多个变量到mat文件中,可以通过save('data.mat','a','b')的方式,data.mat是生成的mat文件名,a和b是存入的变量,如下图所示:

    matlab怎么保存和读取mat文件数据

  5. 5

    第五步使用load('data.mat')读取mat文件,读取之后,可以直接使用a和b变量,如下图所示:

    matlab怎么保存和读取mat文件数据



=======================================

=======================================


(1)matlab中dir()函数

matlab中使用dir()函数获得指定文件夹下的所有子文件夹和文件,并存放在一种文件结构体数组中。

dir()函数的调用方式有三种,分别为:

1、dir('.')  列出当前目录下所有子文件夹和文件

2、dir('E:\Matlab')  列出指定目录下所有子文件夹和文件

3、dir(E:\Matlab,'*.bmp')  列出指定目录下后缀为.bmp的文件

举个例子,批量读取文件,

file=dir('F:\cabspottingdata\cabspottingdata\*.txt');
for n=1:length(file);
      D{n,1}=importdata(['F:\cabspottingdata\cabspottingdata\',file(n).name]);
end


%比如要获得某一路径下所有后缀为.3gp的文件个数:
D1=dir(fullfile(filedir,'*.3gp'));
filename={D1.name}'; %name要进行转置
precount=size(filename,1);


%比如要获得训练图片
cd('C:\训练\');
file=dir('C:\训练\*.jpg');
[k len]=size(file);
for i=1:k
   name=file(i).name;
   I=imread(name);
   figure(i);
   imshow(I);
end

2)matlabfullfile()函数

f = fullfile('dir1', 'dir2', ..., 'filename') %fullfile构成地址字符串;

如:输入:f = fullfile('C:','Applications','matlab','fun.m')
得到:f =C:\Applications\matlab\fun.m

%下例为读取train文件夹中的所有图片;

folder=‘train';

filepaths = dir(fullfile(folder,'*.bmp'));%列出该文件夹下所有.bmp格式的文件(其中包括文件的名字、日期、像素等);

for i = 1 : length(filepaths)

    image = imread(fullfile(folder,filepaths(i).name));%读入第i个图片;
    image = rgb2ycbcr(image);
    image = im2double(image(:, :, 1));%获得图像的y通道;
    im_label = modcrop(image, scale);%保证图像被scale整除;
    [hei,wid] = size(im_label);
    im_input = imresize(imresize(im_label,1/scale,'bicubic'),[hei,wid],'bicubic');%对图像用'bicubic'先下采样再上采样;
    %提取数据;
    for x = 1 : stride : hei-size_input+1
        for y = 1 :stride : wid-size_input+1
            subim_input = im_input(x : x+size_input-1, y : y+size_input-1);%子图像尺寸33*33;
            subim_label = im_label(x+padding : x+padding+size_label-1, y+padding : y+padding+size_label-1);%子图像类别尺寸21*21;
            %subim_input和subim_label的中心一致;
            count=count+1;
            data(:, :, 1, count) = subim_input;
            label(:, :, 1, count) = subim_label;
        end
    end
end



%遍历文件夹中指定类型的文件

path = 'G:\testImg\';

fileExt = '*.bmp';

files = dir(fullfile(path,fileExt));

len = size(files,1);

for i=1:len

     fileName = strcat(path,files(i,1).name),

end;