matlab legend_Clarke 变换与 Park 变换的 MATLAB 代码

c0d295322c537bed50e079686d11b7d9.png
t 

实际上真正有用的只有前四行。时间认为是和角度(deg单位)一比一的关系。这里用了 sind 和 cosd 函数,就是 sin 和 cos 关于角度的形式。运行一下以后会发现,iabc 是一个三行的矩阵,每一列代表了对应时间(角度)的电机三个脚的电流,ialbe 是一个两行的矩阵,每一列代表了对应时间的 i_alpha 和 i_beta。这个的计算比较简单,因为 Clarke 变换需要乘的矩阵是固定的,所以直接乘就是了。

Park 变换的矩阵随时间变化,所以说计算比较复杂。需要用到三维的矩阵。我们希望的矩阵形式是在第一个和第二个维度长得和正常的矩阵一样,第三个维度是时间的维度,所以需要进行一些构造。

cat

cat 且第一个系数为 3 的意思是将这两个两行的矩阵在第三维合并,这样,至少我们得到了一个第一个维度(沿矩阵的列)是目标矩阵的第二个维度(沿矩阵的行),第二个维度是时间,也就是目标矩阵的第三个维度,第三个维度(可以认为是沿垂直纸面的方向)是目标矩阵的第一个维度的矩阵。也就是说,目标矩阵的维度是[现有矩阵维度三,现有矩阵维度一,现有矩阵维度二],那么可以利用 permute 函数转换维度

permute

这个 [3 1 2] 就是刚才说的目标矩阵的维度。

permute

这一句是将 i_alpha 和 i_beta 升至三维,这时 iable 原来三维的维度(长度就是1)被换到了一维上,时间上的维度被换到了三维,也就是说,不管第三个维度,这就是个行向量(为什么用行向量后面会说)。这样,就做好了相乘的准备。

sum

到这里,如果不管时间上的维度,剩下的就只是矩阵和向量相乘了,实际上矩阵与向量相乘就是在矩阵确定的线性空间中,这个向量作为坐标,所表达的向量,在笛卡尔坐标系上的投影。所以说要用行向量,利用矩阵自动扩展,让行向量与矩阵相乘,也就是矩阵的每一列(也就是基向量)相乘,然后用 sum 对第二个维度,也就是沿着行相加,也就是求各个基向量与对应坐标相乘后的和,这个过程就是矩阵与向量相乘的过程。

permute

乘完了以后,再利用一次 permute 就可以把时间上的维度(第三维)换到第二维,也就是每一列对应一个时间。至此,i_alpha 与 i_beta 就求出来了。

如果感觉自己没看晕的话,可以看下下面这个,理清了运算关系以后你会发现这个也是对的,可以省去几次 permute,而且 sum 默认给第一维(沿列)相加,可以省掉一个参数。

idq 

矩阵自动扩展是比较新的 MATLAB 才有的特性,如果没法运行的话看看自己的 MATLAB 版本是不是有点老。

4fb75941d1252ba9ee677bbf46d5498c.png
原来的三个电流

ea5b7d9a64fca290e3c247559ac83f61.png
经过 Clarke 变换以后的效果

ed6d80b8e82e9785189c62518b2687e4.png
经过 Park 变换以后的效果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值