在C/ c++中等效的GNU八度代码
GNU Octave Code Equivalent in C/C++
我有一些GNU八度/Matlab代码,我想翻译成C或c++。我可以处理大部分的翻译,但我不知道x1=0:1:pts-1;
在C代码中会翻译成什么。如果我理解正确,它是Octave的范围类型,但我不确定C或c++中的什么数据类型会支持相同的功能。完整的脚本是:
pkg load signal
fs = 48000;
fc=18300;
rlen=10;
ppiv=100;
beta=9.0;
apof=0.9;
apobeta=0.7;
pts = ppiv*rlen+1;
x1=0:1:pts-1;%this line here!!!!
x2=rlen*2*(x1-(pts-1)/2 +0.00001)/(pts-1); % and the the usage of x1 in this line
x3=pi*fc/fs*x2;
h=sin(x3)./x3;
w=kaiser(pts,beta);
g=w.*h;
aw = 1-apof*kaiser(pts,apobeta);
g=aw.*g;
g=g/max(g);
figure(1);
subplot(1,2,1);
plot(x2/2,g);
axis([-rlen/2 rlen/2 -0.2 2.0002]);
%xlabel(“Time in Sampling Intervals”);
%title(‘Bandlimited Impulse’);
subplot(1,2,2);
zpad=20;
g2=[g;zeros((zpad-1)*pts,1)];
wspec=abs(fft(g2));
wspec=max(wspec/max(wspec),0.00001);
fmax=60000;
rng = round(rlen*zpad*fmax/fs);
xidx = 0:1:rng;
semilogy(fmax/1000*xidx/rng,wspec(1:(rng+1)));
%xlabel(‘Frequency in kHz’);
%title(‘amplitude spectrum’);
grid;
hold;
plot([20 20],[0.00001,1]);
plot([fs/1000-20 fs/1000-20], [0.00001 1]);
plot([fs/1000 fs/1000], [0.00001 1]);
hold off;
所以我要找的是一个代码片段或如何处理这种转换的一些资源。
Thanks in advance
由于您是从Octave代码转换,因此使用Octave的c++库非常有意义。他们可以在网上看到它的氧气文档。
对于您的具体情况,您可以使用octave_range
类:
#include "ov-range.h"
octave_range x (0, pts -1, 1);
注意,这只是一个范围,就像在Octave中一样。如果你想从中得到一个矩阵,你可以这样做:
Matrix mx = x.matrix_value ();
如果这让你感到困惑,将范围转换为矩阵,看看它是如何在Octave中实际完成的。创建一个范围并检查它在内存中的大小。然后与由此创建的矩阵进行比较:
octave-cli-3.8.1> x = 0:1:10000;
octave-cli-3.8.1> whos x
Variables in the current scope:
Attr Name Size Bytes Class
==== ==== ==== ===== =====
x 1x10001 24 double
Total is 10001 elements using 24 bytes
octave-cli-3.8.1> x = [0:1:10000];
octave-cli-3.8.1> whos x
Variables in the current scope:
Attr Name Size Bytes Class
==== ==== ==== ===== =====
x 1x10001 80008 double
Total is 10001 elements using 80008 bytes
x1是一个数组(如果你喜欢,也可以是矩阵),包含值0,1,2,3,…,(pts-1)。
你可以在C中生成它,比如:
int a[500];
int i;
for(i = 0; i < 500; i++) {
a[i] = i;
}
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在Linux for Windows上编译C++代码时出错
- 我的字符计数代码计算错误.为什么
- 孤立代码块在结构中引发异常
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 此代码是否违反一个定义规则
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 为什么在这个代码结束循环中没有得到结束
- 在c代码之间共享数据的最佳方式
- 在C/ c++中等效的GNU八度代码