Код Matlab, требующий пояснения - PullRequest
0 голосов
/ 16 февраля 2020

Я очень новичок в Matlab и не могу преобразовать следующий код в c ++

предположим, что conv уже написан на C ++, я не знаю, реализует ли код 2D conv или 1D на самом деле

Как бы я преобразовал следующий код в C ++

% Description:
%   Function that evaluates the equivalent loop transfer function from the
%   loop integrator gain
%
% Input:
%   KK      [real,vector]:  Integrator gains
%   N       [integer]    :  Order of the loop filter

% Output:
%   A      [real, vector]:  Coefficients of the denominator
%   B      [real, vector]:  Coefficients of the numerator
%
% Remarks:
%   o A rate-only NCO is assumed


% construct the loop filter transfer function
v1 = 1;
v2 = 1;

B = zeros(1, N);
for ii = N:-1:1,
    v1 = conv( v1, [1 -1] );
    B = B + KK(ii)*[v2 zeros(1, ii - 1)];
    v2 = conv(v2, [1 -1]);
end


v1 = conv( v1, [1 0]);

% Account for the rate-only NCO - Change this code to implement different
% NCO models
B = conv(B, [1 1])*1/2;
B = [ 0 B ];

A = v1 + B;

1 Ответ

1 голос
/ 16 февраля 2020
#include <vector>
#include <algorithm>
using std::vector;
int main() {
    // v1 = 1;
    double v1 = 1;
    // v2 = 1;
    double v2 = 1;


    // B = zeros(1, N);
    vector<double> B(N, 0);
    //for ii = N:-1:1,
    for (int ii=N; ii>=1; ii--) {
        // v1 = conv( v1, [1 -1] );
        v1 = conv(v1, {1, -1});
        // B = B + KK(ii)*[v2 zeros(1, ii - 1)];
        vector<double> temp(v2.size() + ii - 1, 0); // initialize with zeros
        std::copy(v2.begin(), v2.end(), temp.begin()); // copy v2 to temp
        B += temp * KK[ii];
        // v2 = conv(v2, [1 -1]);
        v2 = conv(v2, {1, -1});
    // end
    }


    // v1 = conv( v1, [1 0]);
    v1 = conv(v1, {1, 0});

    // B = conv(B, [1 1])*1/2;
    B = conv(B, {1, 1}) * 0.5;
    // B = [ 0 B ];
    B.insert(B.begin(), 0);

    // A = v1 + B;
    vector<double> A = v1 + B;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...