通信系统仿真

崔春雷

目录

  • 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 课程标准
基本数据类型:字符类型


              Matlab 的基本数据类型——字符类型


1 字符串的创建

注意:字符串就是字符数组(数组内部的元素可以是数字,也可以是字符,前者是数字型数组,后者是字符型数组)

在MATLAB中创建一个字符串非常简单。 例如,在命令提示符下键入以下内容:

>> my_string = 'gdcp'

my_string =

   'gdcp'
   
% MATLAB将所有变量视为数组,并将字符串视为字符数组。
% 使用whos命令来检查上面创建的变量


>> whos
 Name            Size          Bytes  Class    Attributes

 my_string      1x4            8       char    
 
   


有趣的是,使用uint8或uint16等数字转换函数可以字符串中的字符转换为数字。 反之,char函数将整数向量转换回到字符。

示例:

my_string =        'abcd dcba!';

str_ascii =             uint8(my_string)     % 8-bit ascii values

str_back_to_char= char(str_ascii)

str_16bit   =          int16(my_string)     % 16-bit ascii values

str_back_to_char= char(str_16bit)


执行上面示例代码,得到以下结果 :





2 字符矩阵

到目前为止,我们讨论的字符串是一维字符数组; 然而,我们需要存储更多维度的数据。在程序中存储更多的维度文本数据。这是通过创建矩形字符数组来实现的。

创建矩形字符阵列的最简单的方式是根据需要垂直或水平连接两个或更多个一维字符数组。

(1)可以通过以下任一方式水平组合字符串 -

方法1:可使用运算符 [   ] 创建矩阵,并用逗号,) 或空格分隔矩阵内的各个字符串。该方法保留输入数组中的任何尾随空格。

方法2:使用字符串连接函数 strcat( )。 注意此方法会删除输入中的尾随空格。

s1  = 'cui       ';
s2  = 'chun      ';
s3  = 'lei       ';
str1 = [s1 ,s2 , s3]
str2 =
strcat(s1 , s2 , s3)

运行结果:




(2)通过以下任一方式垂直组合字符串 

方法1:可使用运算符 [   ] 创建矩阵,并用分号( )分隔每一行。注意,在这种方法中,每行必须包含相同数量的字符。对于不同长度的字符串,应该根据需要填充空格字符。

方法2:使用char函数把几个字符串垂直组成字符矩阵。注意,如果字符串的长度不同,则char将较短的字符串填充到尾部空白处,以使每行具有相同的字符数。


s1= 'cui       ';

s2= 'chun      '; 

s3= 'lei       ';

str1 = [s1 ; s2 ; s3]

str2 = char(s1 , s2 , s3)


运行结果:





3 MATLAB中的字符串函数

MATLAB提供了许多字符串函数来创建,组合,解析,比较和操作字符串。

下表简要介绍了MATLAB中的字符串函数。                                                                                   

函数描述
char把数字等转换为字符数组(字符串)
blanks创建空白字符串
sprintf将数据格式化为字符串
strcat水平连接字符串
strjoin将单元格中的字符串连接到单个字符串中
ischar确定项目是否是字符数组
isletter数组元素是否为字母
isspace数组元素是否为空格
cellstr从字符数组创建字符串数组
iscellstr确定输入是字符串的单元格数组
strfind在另一个字符串中查找一个字符串
strrep查找并替换子串
strsplit在指定的分隔符处拆分字符串
strtok字符串的选定部分
validatestring检查文本字符串的有效性
symvar确定表达式中的符号变量
regexp匹配正则表达式(区分大小写)
regexpi匹配正则表达式(不区分大小写)
regexprep用正则表达式替换字符串
regexptranslate用正则表达式替换字符串



例1:字符串连接 :strjoin 

指的是把几个字符串用某个“符号”串接起来

str_array = {'red','blue','green', 'yellow', 'orange'};

str1 =strjoin(str_array ,  "@")

str2 =strjoin(str_array ,  "  ")

执行上面示例代码,得到以下结果 -

str1 = 'red@blue@green@yellow@orange'
str2 = 'red  blue  green  yellow  orange'


例2:strrep 查找并替换子串

str= '1+2=4 is correct' ;
new_str = strrep( str , 'correct' , 'wrong' )

输出:
 new_str = '1+2=4 is wrong'
 


例3:使用strfind查找字符串

  strfind(string,pattern)——查找字符串string中是否包含pattern子串;

  如果包含返回子串位置,否则返回空数组。

1

2

3

4

%% 使用strfind查找字符串

s = 'matlab is a very good software';

pl = 'is';

strfind(s,pl)  % 返回 8




字符串比较的函数 :               

函数描述
strcmp比较字符串(区分大小写)
strcmpi比较字符串(区分大小写)
strncmp比较字符串的前n个字符(区分大小写)
strncmpi比较字符串的前n个字符(区分大小写)


例1:strcmp 比较字符串(区分大小写)

%当两个字符不相等时
s1 = 'Yes';
s2 = 'Yea';
tf = strcmp(s1,s2)

tf = logical
      0

      

%当两个字符相等时
s1 = 'Yes';
s2 = 'Yes';
tf = strcmp(s1,s2)

tf = logical
     1



例2:

s1 = 'matlab';

s2 = 'matlab';

s3 = 'matlab is very good';

s4 = 'MATLAB';

s5 = 'MATLAB IS VERY GOOD';


strcmp(s1, s2)         % 1

strcmp(s1, s3)         % 0

strcmp(s1, s4)         % 0

strcmpi(s1, s4)         %1

strncmp(s1, s3, 6)    % 1

strcmpi( s3, s5)        % 1

strncmpi(s1, s5, 6)   % 1




将字符串更改为大写或小写,创建或删除空格的函数:      

函数描述
deblank从字符串末尾剥去尾随空格
strtrim从字符串中删除前导和尾随的空格
lower将字符串转换为小写
upper将字符串转换为大写字母
strjust对齐字符数组






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



字符串数组总结:

(1)使用方括号[ ] 水平串联字符串

1

2

3

4

5

6

7

8

9

10

%% 使用方括号创建单行字符串

s1 = 'MATLAB';

s2 = ' is';

s3 = ' a very good';

s4 = ' software';

% s = [s1 s2 s3 s4];

s = [s1,s2,s3,s4];

disp(s)    % MATLAB is a very good software


(2)使用strcat函数串联多个字符串

  strcat(子串1,子串2,....,子串n)

  使用strcat函数连接字符串时,每个字符串的最右侧空格会被忽略。

1

2

3

4

5

6

7

%% 使用strcat创建单行字符串

s1 = 'MATLAB';

s2 = ' is';

s3 = ' a very good';

s4 = ' software';

s = strcat(s1,s2,s3,s4);

disp(s)     %MATLAB is a very good software


(3)使用[ ] 括号垂直拼接多个字符串

    要求每行的长度要求一致,不足空格来补。

1

2

3

4

5

6

7

%% 使用中括号构建多行字符串

s1 = 'MATLAB      ';

s2 = ' is         ';

s3 = ' a very good';

s4 = ' software   ';

s = [s1;s2;s3;s4];

size(s)


(4)使用strvcat构建多行字符串(过时,尽量不用

  strvcat(子串1,子串2,...,子串n)——不要求每行的长度一致

   若有一行是空字符串,那么会被忽略掉。

1

2

3

4

5

6

%% 使用strvcat构建多行字符串

s1 = 'MATLAB';

s2 = ' is';

s3 = ' a very good';

s4 = ' software';

s = strvcat(s1,s2,s3,s4);


(5)使用char构建多行字符串

  char(子串1,子串2,...,子串n)

  空字符串不会被忽略掉,会用空格填满所要求的长度。

1

2

3

4

5

6

7

8

%% 使用char构建多行字符串

s1 = 'MATLAB';

s2 = ' is';

s3 = ' a very good';

s4 = ' software';

s = char(s1,s2,s3,s4);

size(s) % 4 12

s






(6)使用函数比较字符串

  strcmp(a,b)——比较字符串a,b是否完全相同

  strcmpi(a,b)——比较字符串a,b在忽略大小写的情况下是否完全相同

  strncmp(a,b,n)——比较字符串a,b的前n个字符是否完全相同

  strncmpi(a,b,n)——比较字符串a,b的前n个字符在忽略大小写的情况下是否完全相同

1

2

3

4

5

6

7

8

9

10

11

12

%% 使用函数比较字符串

s1 = 'matlab';

s2 = 'matlab';

s3 = 'matlab is very good';

s4 = 'MATLAB';

s5 = 'MATLAB IS VERY GOOD';

strcmp(s1,s2) % 1

strcmp(s1,s3) % 0

strcmp(s1,s4) % 0

strncmp(s1,s3,6) % 1

strcmpi(s3,s5) % 1

strncmpi(s1,s5,6) % 1



(7)使用等号比较字符串

  ==  比较的每个字符中的元素相比较

1

2

3

4

5

6

7

8

%% 使用等号比较字符串

s1 = 'MATLAB';

s2 = 'matlab';

s3 = 'm';

s4 = 'a';

s1 == s2 %  0   0   0   0   0   0

s2 == s3 %  1   0   0   0   0   0

s2 == s4 %  0   1   0   0   1   0


(8)使用strfind查找字符串

  strfind(string,pattern)——查找字符串string中是否包含pattern子串;

  如果包含返回子串位置,否则返回空数组。

1

2

3

4

%% 使用strfind查找字符串

s = 'matlab is a very good software';

pl = 'is';

strfind(s,pl) % 8



(9)使用strrep替换字符串

  sNew = strrep(s,s1,s2)——把字符串s中的s1替换成s2

  要有返回值(新字符串);该函数区分大小写;有几个换几个。

1

2

3

4

5

6

7

%% 使用strrep替换字符串

s = 'matlab is a very good software';

s1 = 'matlab';

s2 = 'MATLAB';

sNew = strrep(s,s1,s2);

s  % 'matlab is a very good software'

sNew  % 'MATLAB is a very good software'





tips: eval( ) 函数

eval( ) 函数可以将字符串内容当成matlab命令来执行。








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


               课外拓展:ASCII码简介

1、ASCII码 是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646 

ASCII码分为三类:ASCII 控制字符 ,ASCII 打印字符ASCII扩展码

         

ASCII 打印字符 (字符编码: 32-127)

32~126(共95个)是字符:32是空格,其中48~57为0到9十个阿拉伯数字,65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。第127个字符表示的是键盘上的删除命令。

十进制
DEC
八进制
OCT
十六进制
HEX
二进制
BIN
符号
Symbol
HTML
实体编码
中文解释
Description
320402000100000
 空格
330412100100001!!感叹号
340422200100010""双引号
350432300100011##井号
360442400100100$$美元符
370452500100101%%百分号
380462600100110&&
390472700100111''单引号
400502800101000((左括号
410512900101001))右括号
420522A00101010**星号
430532B00101011++加号
440542C00101100,,逗号
450552D00101101--连字号或减号
460562E00101110..句点或小数点
470572F00101111//斜杠
480603000110000000
490613100110001111
500623200110010222
510633300110011333
520643400110100444
530653500110101555
540663600110110666
550673700110111777
560703800111000888
570713900111001999
580723A00111010::冒号
590733B00111011;&#059;分号
600743C00111100<&#060;小于
610753D00111101=&#061;等号
620763E00111110>&#062;大于
630773F00111111?&#063;问号
641004001000000@&#064;电子邮件符号
651014101000001A&#065;大写字母 A
661024201000010B&#066;大写字母 B
671034301000011C&#067;大写字母 C
681044401000100D&#068;大写字母 D
691054501000101E&#069;大写字母 E
701064601000110F&#070;大写字母 F
711074701000111G&#071;大写字母 G
721104801001000H&#072;大写字母 H
731114901001001I&#073;大写字母 I
741124A01001010J&#074;大写字母 J
751134B01001011K&#075;大写字母 K
761144C01001100L&#076;大写字母 L
771154D01001101M&#077;大写字母 M
781164E01001110N&#078;大写字母 N
791174F01001111O&#079;大写字母 O
801205001010000P&#080;大写字母 P
811215101010001Q&#081;大写字母 Q
821225201010010R&#082;大写字母 R
831235301010011S&#083;大写字母 S
841245401010100T&#084;大写字母 T
851255501010101U&#085;大写字母 U
861265601010110V&#086;大写字母 V
871275701010111W&#087大写字母 W
881305801011000X&#088;大写字母 X
891315901011001Y&#089;大写字母 Y
901325A01011010Z&#090;大写字母 Z
911335B01011011[&#091;左中括号
921345C01011100
&#092;反斜杠
931355D01011101]&#093;右中括号
941365E01011110^&#094;音调符号
951375F01011111_&#095;下划线
961406001100000`&#096;重音符
971416101100001a&#097;小写字母 a
981426201100010b&#098;小写字母 b
991436301100011c&#099;小写字母 c
1001446401100100d&#100;小写字母 d
1011456501100101e&#101;小写字母 e
1021466601100110f&#102;小写字母 f
1031476701100111g&#103;小写字母 g
1041506801101000h&#104;小写字母 h
1051516901101001i&#105;小写字母 i
1061526A01101010j&#106;小写字母 j
1071536B01101011k&#107;小写字母 k
1081546C01101100l&#108;小写字母 l
1091556D01101101m&#109;小写字母 m
1101566E01101110n&#110;小写字母 n
1111576F01101111o&#111;小写字母 o
1121607001110000p&#112;小写字母 p
1131617101110001q&#113;小写字母 q
1141627201110010r&#114;小写字母 r
1151637301110011s&#115;小写字母 s
1161647401110100t&#116;小写字母 t
1171657501110101u&#117;小写字母 u
1181667601110110v&#118;小写字母 v
1191677701110111w&#119;小写字母 w
1201707801111000x&#120;小写字母 x
1211717901111001y&#121;小写字母 y
1221727A01111010z&#122;小写字母 z
1231737B01111011{&#123;左大括号
1241747C01111100|&#124;垂直线
1251757D01111101}&#125;右大括号
1261767E01111110~&#126;波浪号
1271777F01111111
&#127;删除




字符(char)和字符串(string)的区别:












另外,双引号和单引号在处理转义字符时也有差异。在Matlab中,双引号允许使用转义字符表示特殊字符,如换行符、制表符 等。而单引号不支持转义字符,它将特殊字符视为普通字符对待。例如,使用双引号定义一个包含转义字符的字符串:str3 "This is a new line

This is a tab "; 这样str3将显示为两行文本,第一行是"This is a new line",第二行是"This is a tab"。而如果使用单引号定义相同的字符串,转义字符将被视为普通字符,结果将是一个包含转义字符的字符串。


例:编程时可使用""+运算符快速生成n个文件名。





练习:

S1="ABCD"

S2="DEFG"

S3="my name is ""tom"".and your name is?"

S4=S1+S2+S3

S5=strcat(S1,S2,S3)

S6=[S1,S2,S3]

S7=[S1;S2;S3]





S1='ABCD'

S2='DEFG'

S3='my name is ""tom"".and your name is?'

S4=S1+S2

S5=strcat(S1,S2,S3)

S6=[S1,S2,S3]

S7=[S1;S2;S3]