将这5个行MATLAB代码转换为c++吗?

10视图(30天)
麦克米
麦克米 2020年5月9日
回答: 李鹏 2020年5月9日
我试图把MATLAB代码 在这里 c++。
代码输出BiQuad a1 / a2滤波器系数的一系列级联全通滤波器来模拟inharmonicity合成的字符串(如。吉他/钢琴)。它来自 这篇文章
大部分的代码是很明显的,几乎相同的C + +,但有一些线我不明白,因为我不是在MATLAB受训。我希望有点帮助的我可以做到这一点。要点我得不到的有:
1)方括号和冒号是什么?
我困在这两条线:
phik =π* (1:2:2 * nap-1);
伊顿= (0:nap-1) /(1.2 *午睡)* df;
我理解方括号和数组和冒号与向量。但这些做什么特别的事吗?手动 在这里 给出一个示例:
x = 1:3:19
创建一个向量的增量的3。所以第一行创建一个数组的值从1开始,增量除以2,并上升到(2 *小睡- 1)?和数组中所有的值然后乘以π?
在第二行,它创建一个数组的伊顿值从0到nap-1然后每个除以1.2 *小睡和乘以df ?如果是这样,增量是什么?是一个增量的假定当它不是指定的吗?
2)这是什么意思:
δ= diff([θ(1)θ))/ 2;
我理解差异意味着它需要两个值的差。这是项-左项在这种情况下吗?
下一个“θ(1)”是什么?θ的定义如下:
θ= fs /(2 *π)* (phik - phin +(2 *π/ fs) *伊顿。*较)。/(较- mu0);
我明白括号应该是对于输入操作功能,c++一样。但是我没有看到任何地方输入“1”在这里申请θ。这做什么呢?它是引用的第一个数组中θθ?ie。第一个全通滤波器的θ?我不确定。
3)如何这些线输出数组BiQuad系数?
temp =[(打盹,1)的2 *α’。* cc“α”。^ 2);
sos = [fliplr(临时)临时];
我认为临时创建一个向量的值。”(打盹,1)”返回nap-by-one矩阵的值。第二部分我困惑。这里的撇号是什么?这是什么做的“阿尔法”和“cc”?
最后sos功能显然只是被sos逆转所包含的元素。但我们甚至有什么意义?一个矩阵的,两个函数乘以α?这些元素之一是a1和a2 Biquad ?
4)如何实现这些输出成Biquad通过吗?(小问题因为我很确定我有这个…)
我的理解 这篇文章 是获得一个通过biquad,你设置g = a2, B1 = a1 / a2和B2 = 1 / a2。因此你只需要a1和a2上面的代码应该提供所有通过的系列。最后,biquad取样处理的格式 在这里 为:
所以我冒昧的c++实现每一个正确的通过将:
g = a2;
B1 =a1 / a2;
B2 = 1 / a2;
inputGained_2 = inputGained_1;
inputGained_1 = inputGained;
inputGained =输入* g;
output_2 = output_1;
output_1 =输出;
输出= inputGained + (B1 * inputGained_1) + (B2 * inputGained_2) - (a1 * output_1) (a2 * output_2);
我敢肯定这是直接和我已经正确的一部分。但问题1 - 3如何让我的a1和a2为每一个都通过我可以处理他们的系列卡在上述5行。
任何帮助吗?
谢谢。

接受的答案

李鹏
李鹏 2020年5月9日
创建一个向量的增量的3。所以第一行创建一个数组的值从1开始,增量除以2,并上升到(2 *小睡- 1)?和数组中所有的值然后乘以π? 是的
在第二行,它创建一个数组的伊顿值从0到nap-1然后每个除以1.2 *小睡和乘以df ?如果是这样,增量是什么?是一个增量的假定当它不是指定的吗? 是的,增量1如果没有明确。
我理解差异意味着它需要两个值的差。这是项-左项在这种情况下吗?
下一个“θ(1)”是什么?
我明白括号应该是对于输入操作功能,c++一样。但是我没有看到任何地方输入“1”在这里申请θ。这做什么呢?它是引用的第一个数组中θθ?ie。第一个全通滤波器的θ?我不确定。
diff执行一阶差分。给定一个向量,x (i), i = 1: n, diff给另一个向量的长度n - 1,每个元素被x - x (i) (i + 1)。
添加了一个额外的θ(1),以确保输出长度相同的θ。
是的θ(1)索引的第一个元素θ。在c++中,θ[0]我认为。
我认为临时创建一个向量的值。”(打盹,1)”返回nap-by-one矩阵的值。第二部分我困惑。这里的撇号是什么?这是什么做的“阿尔法”和“cc”? 明智的乘法。*元素,。^元素是否明智的权力。例如,[1,2,3]。*(1、2、3)=(1、4、9)(在这种情况下你不能直接使用*,因为它不符合标准执行一个向量/矩阵乘法。(1、2、3)。^ 2 =(1、4、9),你不能使用(1、2、3)^ 2。
最后sos功能显然只是被sos逆转所包含的元素。但我们甚至有什么意义?一个矩阵的,两个函数乘以α?这些元素之一是a1和a2 Biquad ? 是的,我认为这是需要的算法。没有深入但你是对的,它创建了一个对称的矢量,首先翻转,concatanent他们。
我没有检查你提到这篇文章,但我认为您的实现的CPP只接受a1 / a2作为标量(单值)。它将从你提到的那些代码,结果他们是向量。所以在CPP我相信你会需要实现一个while循环。

更多的答案(0)

下载188bet金宝搏


释放

R2020a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!