在现代无线通信系统中,天线阻抗匹配是确保信号高效传输的关键环节。阻抗失配不仅会导致信号反射、功率损耗,还可能影响整个系统的稳定性和性能。史密斯圆图(Smith Chart)作为一种经典的图形化工具,凭借其直观、高效的特点,成为射频工程师调试天线阻抗匹配的利器。它能够将复杂的复数阻抗变换过程可视化,帮助工程师快速完成阻抗匹配网络的设计与优化。
本文将介绍如何利用史密斯圆图分析和调整天线阻抗,涵盖基础理论、实际操作步骤,配合鼎阳的矢量网络分析仪为工程师提供天线阻抗匹配测试方案。


在现代无线通信系统中,天线阻抗匹配是确保信号高效传输的关键环节。阻抗失配不仅会导致信号反射、功率损耗,还可能影响整个系统的稳定性和性能。史密斯圆图(Smith Chart)作为一种经典的图形化工具,凭借其直观、高效的特点,成为射频工程师调试天线阻抗匹配的利器。它能够将复杂的复数阻抗变换过程可视化,帮助工程师快速完成阻抗匹配网络的设计与优化。
本文将介绍如何利用史密斯圆图分析和调整天线阻抗,涵盖基础理论、实际操作步骤,配合鼎阳的矢量网络分析仪为工程师提供天线阻抗匹配测试方案。

图3 史密斯圆图阻抗圆

图4 史密斯圆图导纳圆

图5 左电导圆/并L/逆时针

图6 左电导圆/并C/顺时针

图7 右电阻圆/串L/顺时针
图7 右电阻圆/串L/顺时针

图8 右电阻圆/串C/逆时针
使用鼎阳的矢网测试2.4G天线的S11,将显示格式切换为史密斯圆图,测得2.4G频点处的阻抗为10+10j,将数据点添加到仿真软件中。

图9 天线2.4G频点原始阻抗
为了将阻抗点匹配到史密斯圆图正中心的50Ω处,先串联L使得数据点沿着电阻圆顺时针移动到与50Ω等电导圆的交叉位置,之后再并联C使得数据点沿着电导圆顺时针移动到50Ω匹配点。

图10

图11 天线2.4G频点串联L并联C后阻抗
鼎阳的矢量网络分析仪不仅具备高精度的S参数测试能力,同样集成了阻抗匹配仿真功能,可帮助工程师快速优化天线、滤波器、功放等射频电路的阻抗匹配设计。该功能基于史密斯圆图可视化分析,结合自动化计算与仿真工具,显著提升调试效率。
点击CAL按键 > 夹具仿真 > 夹具仿真设置 > 选择相应port > Circuit Model。
选择合适的匹配电路,设置电容电感值,最后勾选“Enable Port Matching…”,同时打开夹具仿真应用。
注意,双击“电路模型”可以将阻抗匹配窗口最小化,便于调试。
以下图中的设置为例,选择“Shunt C-Series L”(并联C-串联L),注意阻抗匹配时是从DUT往负载端看,所以实际上是先串联了2.15nH的电感L,再并联了8.5Pf的电容C,其他未使用到的参数(R/G)不做设置即可。橙色迹线Tr1是未进行匹配仿真的原始迹线,蓝色迹线Tr2是经过匹配仿真后的迹线,可以看到对应频点经过匹配后已经十分接近50Ω匹配点。

图12 鼎阳矢网史密斯圆图阻抗匹配仿真
本文简单介绍了史密斯圆图在阻抗匹配中的核心原理,配合”上感下容,左并右串”等实用口诀,提升匹配网络设计效率。同时介绍鼎阳矢量网络分析仪的阻抗匹配仿真功能,让工程师更加快速便捷的完成天线、放大器、滤波器等器件的阻抗匹配。
#!/bin/bash
echo $1
diskP1=p1
diskP2=p2
if [[ $1 = "-h" || $1 = "-H" ]]; then
echo "===========虚拟磁盘使用说明==========="
echo "参数一:命令字,C-创建磁盘 D-删除磁盘 F-格式化磁盘 S-烧写固件 H-帮助"
echo "参数二:硬盘大小,单位MB,最小硬盘1MB"
echo "参数三:硬盘名称,自定义"
echo "======================================"
exit 1
else
if [[ -z "$1" || -z "$2" || -z "$3" ]]; then
echo "请输入有效的参数!"
exit 1
elif [[ $1 = "-c" || $1 = "-C" ]]; then
echo "开始创建虚拟磁盘!"
dd if=/dev/zero of=$3 bs=1M count=$2
# 非交互式执行 fdisk 命令
# 这里的逻辑是:n(新建分区) -> p(主分区) -> 1(分区号) -> 回车(默认起始扇区) -> +10G(大小) -> w(保存)
echo -e "n\np\n1\n\n+200M\nn\np\n\n\n\nw" | fdisk $3
echo "创建磁盘完成!"
elif [[ $1 = "-d" || $1 = "-D" ]]; then
echo "开始删除虚拟磁盘!"
sudo rm -rf $3
echo "删除完成!"
elif [[ $1 = "-f" || $1 = "-F" ]]; then
echo "开始格式化虚拟磁盘!"
sudo losetup -fP $3
varInfo=$(losetup -l | grep $3)
varInfo=(${varInfo//,/ })
echo ${varInfo}
sudo mkfs.fat ${varInfo}${diskP1}
sudo mkfs.ext4 ${varInfo}${diskP2}
sudo losetup -d $varInfo
echo "格式化完成!"
elif [[ $1 = "-s" || $1 = "-S" ]]; then
echo "开始烧写固件!"
sudo losetup -fP $3
varInfo=$(losetup -l | grep $3)
varInfo=(${varInfo//,/ })
echo ${varInfo}
sleep 1
sudo mount ${varInfo}${diskP1} /mnt
sudo cp Image s5000c-64c.dtb /mnt
sync
sudo umount /mnt
sudo umount /mnt
sleep 1
sudo mount ${varInfo}${diskP2} /mnt
sudo cp rootfs.tar /mnt
cd /mnt
sudo tar -xvf rootfs.tar
sleep 1
sync
sleep 5
cd /
sudo umount /mnt
sudo umount /mnt
sleep 1
sudo losetup -d $varInfo
echo "烧写完成!"
fi
fi
你可以通过以下步骤在Linux上虚拟一个磁盘,并将其挂载到 /mnt/ 目录下:
使用 dd 命令创建一个虚拟磁盘文件(例如大小为1GB):
dd if=/dev/zero of=/root/virtual_disk.img bs=1M count=1024
这将创建一个名为 virtual_disk.img 的1GB大小的文件。
使用 mkfs.ext4 命令将虚拟磁盘文件格式化为ext4文件系统:
mkfs.ext4 /root/virtual_disk.img
创建一个挂载点,例如 /mnt/ 目录:
mkdir -p /mnt/virtual_disk
使用 mount 命令将虚拟磁盘挂载到 /mnt/virtual_disk:
mount /root/virtual_disk.img /mnt/virtual_disk
使用 df -h 命令查看挂载是否成功:
df -h
如果希望在系统重启后自动挂载该虚拟磁盘,可以编辑 /etc/fstab 文件,添加以下内容:
/root/virtual_disk.img /mnt/virtual_disk ext4 defaults 0 0
这样就成功在Linux系统上创建并挂载了一个虚拟磁盘文件。
在虚拟硬盘上创建分区并格式化后,可以单独挂载每个分区。具体步骤如下:
步骤 1: 使用 losetup 绑定虚拟硬盘到环回设备
假设你已经创建了一个虚拟硬盘文件,例如 /root/virtual_disk.img,并在其中创建了分区。首先,使用 losetup 将虚拟磁盘文件关联到一个环回设备(loop device):
losetup -fP /root/virtual_disk.img
-f:自动选择一个未使用的环回设备。-P:自动解析分区信息。使用以下命令查看绑定的环回设备名(例如 /dev/loop0):
losetup -l
使用 lsblk 或 fdisk -l 查看该环回设备的分区:
lsblk /dev/loop0
或者:
fdisk -l /dev/loop0
此时,你应该可以看到类似 /dev/loop0p1、/dev/loop0p2 等分区。
假设你想挂载第一个分区 /dev/loop0p1,可以使用 mount 命令将其挂载到指定目录。例如,挂载到 /mnt/partition1:
mkdir -p /mnt/partition1
mount /dev/loop0p1 /mnt/partition1
使用 df -h 或 lsblk 检查分区是否成功挂载:
df -h
lsblk
完成操作后,可以通过以下命令解除环回设备的绑定:
losetup -d /dev/loop0
如果希望分区在系统重启后自动挂载,可以在 /etc/fstab 中添加对应分区的挂载信息。例如:
/dev/loop0p1 /mnt/partition1 ext4 defaults 0 0
/dev/loop0p2 /mnt/partition2 ext4 defaults 0 0
通过上述步骤,你可以单独挂载虚拟磁盘中的每个分区。
losetup(set up and control loop devices) 是 Linux 中用于管理环回设备(loop devices)的命令。环回设备是一个虚拟设备,它将文件当作块设备来使用,从而可以像操作硬盘一样操作一个普通的文件。losetup 指令主要用于将文件与环回设备进行绑定或解除绑定,以及查看现有环回设备的状态。
基本用法
losetup /dev/loopX /path/to/file.img
将文件 /path/to/file.img 绑定到指定的环回设备 /dev/loopX,使其成为一个可以像物理硬盘一样操作的设备。
losetup -f /path/to/file.img
-f 选项会自动查找并选择一个未使用的环回设备,避免手动指定。
losetup -fP /path/to/file.img
-P 选项会自动扫描并解析文件中的分区表,使文件中的各个分区都能作为 /dev/loopXpN 设备挂载,类似于实际的硬盘分区。
losetup -a
列出系统中所有已经绑定的环回设备及其关联的文件。
losetup /dev/loopX
显示特定环回设备的详细信息。
losetup -d /dev/loopX
将环回设备 /dev/loopX 解除绑定,不再将其作为块设备使用。
losetup -D
动解除所有未使用的环回设备的绑定。
常用选项
-f:自动查找一个未使用的环回设备。
-P:自动重新扫描分区表(适用于分区文件)。
-d:解除环回设备绑定。
-a:显示所有绑定的环回设备及其信息。
-l:列出系统中所有环回设备的详细信息。
-D:自动解除所有未使用的环回设备。
dd if=/dev/zero of=/root/virtual_disk.img bs=1M count=100
losetup -fP /root/virtual_disk.img
mkfs.ext4 /dev/loop0
mount /dev/loop0 /mnt
2.解除虚拟磁盘的挂载和解除环回设备绑定:
umount /mnt
losetup -d /dev/loop0
主要区别如下:
losetup 解析出每个分区,并为每个分区创建独立的环回设备。ISO 9660 或 UDF 文件系统,且是只读的。见下一个文章
【NFS】Ubuntu安装nfs服务器及使用教程 – 天英科技创新协会
1、nfs指令是否支持
可以通过编译uboot源码,menuconfig勾选来实现,具体编译方法不在此描述。
2、nfs指令使用
nfs 80800000 192.168.1.200:/home/xiaobao/workspace/nfs/rootfs/Image
nfs指令通过挂在192.168.1.200远端NFS服务器,把镜像文件Image加载到内存80800000
3、NFS版本兼容
解决方案:
【NFS】VFS: Unable to mount root fs via NFS. [ 115.256801] devtmpfs: mounted【NFS】 – 天英科技创新协会
4、加载超时一直打印TTTTTTTTTTTTTTT
解决方案:
编辑服务端 /etc/hosts 文件:
sudo vim /etc/hosts
添加开发板 IP 和服务端 NFS 共享文件目录:

再次重启 NFS 服务:
sudo service nfs-kernel-server restart
1、支持nfs客户端及网络环境
配置网络部分
Networking support
Networking options
TCP/IP networking
IP: kernel level autoconfiguration
[*] IP: DHCP support
[*] IP: BOOTP support


配置开启nfs服务
File systems
Network File Systems
<*> NFS client support
[*] NFS client support for NFS version 3
[*] NFS client support for the NFSv3 ACL protocol extension
[*] NFS client support for NFS version 4
[*] Root file system on NFS

uboot启动参数配置
setenv bootargs root=/dev/nfs nfsroot=172.16.27.200:/home/xiaobao/workspace/nfs/rootfs ip=dhcp console=ttyAMA1,115200 earlycon=pl011,0x20001000 rootdelay=10 rw
启动直接挂载远端NFS
nfs全称是network files system(网络文件系统),是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
正是因为nfs文件系统可以使客户端像访问本地文件一样地访问nfs服务器的文件,所以在嵌入式设备开发阶段常常用来挂载到开发板,执行正在开发的程序,这样可以避免频繁地将程序烧录到嵌入式开发板,极大地节省了开发时间。
👉2.1 安装nfs服务器
在Ubuntu安装nfs服务器比较简单,只需要在命令行执行下面这个命令即可:
sudo apt install nfs-kernel-server
2.2 创建nfs服务器共享目录
创建一个目录用于nfs服务器将文件共享给客户端,这个目录将会写入到nfs配置文件中:
sudo mkdir /nfsroot
执行下面命令修改该目录的拥有者为当前用户,我的用户wkd,读者需要改为自己的用户组:用户名:
sudo chown wkd:wkd /nfsroot/
nfs服务器配置文件使用vi命令打开nfs服务器配置文件/etc/exports,
sudo vi /etc/exports
指定nfs服务器共享目录及其属性,内容如下:
/nfsroot *(rw,sync,no_root_squash)
解析:
/nfsroot:指定/nfsroot为nfs服务器的共享目录
*:允许所有的网段访问,也可以使用具体的IP
rw:挂接此目录的客户端对该共享目录具有读写权限
sync:资料同步写入内存和硬盘
no_root_squash:root用户具有对根目录的完全管理访问权限
no_subtree_check:不检查父目录的权限
2.4 重启nfs服务器
执行下面两个命令其中一个可以重启nfs服务器:
sudo service nfs-kernel-server restart
或者
sudo /etc/init.d/nfs-kernel-server restart
到此,Ubuntu安装nfs服务器的过程就完成了,可以执行下面这个命令查看nfs服务器的共享目录:
showmount -e localhost
三、客户端访问nfs服务器共享目录
这一小节使用nfs客户端是嵌入式开发板系统自带的,一般嵌入式开发板移植了Linux系统后,都自带有nfs客户端,如果确实需要在Ubuntu安装,可以执行下面的命令安装:
sudo apt install nfs-common
3.1 在nfs客户端挂载服务器共享目录
下面是在客户端挂载服务器共享目录的命令,在嵌入式开发板或者Ubuntu的nfs客户端挂载都可以使用,需要将192.168.2.183换成自己的nfs服务器ip:
mount -t nfs -o nolock 192.168.2.183:/nfsroot /nfsroot
-t:挂载的文件系统类型-o nolock:不要文件锁192.168.xxx.xxx:/nfsroot:nfs服务器ip:服务器共享目录nfsroot:客户端已存在的目录
-t:挂载的文件系统类型-o nolock:不要文件锁192.168.xxx.xxx:/nfsroot:nfs服务器ip:服务器共享目录nfsroot:客户端已存在的目录

nfs客户端卸载服务器共享目录在nfs客户端执行下面命令,可以查询挂载的·nfs·服务器目录
mount

在nfs客户端执行下面命令,可以卸载的·nfs·服务器目录
umount /nfsroot
至此,在客户端挂载、卸载服务器就演示完成。
NFS配置没问题:NFS服务开启与使用、目录挂载与卸载
使用 NFS 挂载文件系统的时候报错:
[ 101.800373] VFS: Unable to mount root fs via NFS, trying floppy.
[ 101.807335] VFS: Cannot open root device "nfs" or unknown-block(2,0): error -6
[ 101.814718] Please append a correct "root=" boot option; here are the available partitions:
[ 101.823160] 0100 65536 ram0 (driver?)
[ 101.827880] 0101 65536 ram1 (driver?)
[ 101.832573] 0102 65536 ram2 (driver?)
[ 101.837347] 0103 65536 ram3 (driver?)
[ 101.841988] 0104 65536 ram4 (driver?)
[ 101.846695] 0105 65536 ram5 (driver?)
[ 101.851335] 0106 65536 ram6 (driver?)
[ 101.856027] 0107 65536 ram7 (driver?)
[ 101.860667] 0108 65536 ram8 (driver?)
[ 101.865333] 0109 65536 ram9 (driver?)
[ 101.869974] 010a 65536 ram10 (driver?)
[ 101.874720] 010b 65536 ram11 (driver?)
[ 101.879446] 010c 65536 ram12 (driver?)
[ 101.884194] 010d 65536 ram13 (driver?)
[ 101.888922] 010e 65536 ram14 (driver?)
[ 101.893669] 010f 65536 ram15 (driver?)
[ 101.898410] b300 15273984 mmcblk0 driver: mmcblk
[ 101.903768] b301 15269888 mmcblk0p1 9be55837-01
[ 101.909104] b308 7634944 mmcblk1 driver: mmcblk
[ 101.914503] b309 131072 mmcblk1p1 5edd22ea-01
[ 101.919862] b30a 7493632 mmcblk1p2 5edd22ea-02
[ 101.925247] b320 512 mmcblk1rpmb (driver?)
[ 101.930494] b318 4096 mmcblk1boot1 (driver?)
[ 101.935857] b310 4096 mmcblk1boot0 (driver?)
[ 101.941192] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
[ 101.949470] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
[ 112.942790] random: nonblocking pool is initialized
原因:
以前使用的16.04版本的ubuntu没问题,现在更换了18.04.4版本,开始报错。
从Ubuntu17.04开始,nfs默认只支持协议3和协议4,而kernel中默认支持协议2。
sudo vim /etc/default/nfs-kernel-server
2.在末尾添加:
RPCNFSDOPTS="--nfs-version 2,3,4 --debug --syslog"

3.重启 NFS 服务:
sudo /etc/init.d/nfs-kernel-server restart
注:如果kernel版本较高支持nfs协议3的话,可以在Uboot传到Kernel的bootargs参数中加入’nfsvers=3’,使kernel使用nfs协议3。