matlab2c使用c++实现matlab信号操作函数awgn、normrnd、fft、sawtooth、sinc、signcdf、signpdf
本次带给大家c++实现matlab函数中关于“信号操作”的相关函数,包括
awgn、normrnd、fft、sawtooth、sinc、signcdf、signpdf等matlab函数。
在你的项目中引用下载的matlab2c.h文件。
在你的cpp文件中声明需要调用的函数。
#include "Matlab2c.h" //添加文件引用 using namespace Matlab2c; //添加空间引用 //为信号添加高斯白噪声 信噪比单位为dB Matrix awgn(Matrix& sign,double SNR); //生成正太分布矩阵 Matrix normrnd(int rowsnum ,int columnsnum ,double aver ,double sigma); //复数序列fft 提示:实序列可以先转化为复数结构体再fft CMatrix fft(CMatrix& a); //产生锯齿波或者三角波,幅度为正负1 //a是行向量,产生周期为2pi,width为上升段比例 Matrix sawtooth(Matrix& a,double width); //生成sinc信号 输入:sinc信号时域取值点a 输出:sinc信号在取值点上的值 Matrix sinc(Matrix& a); //获取信号数据data在区间x点上的累计概率密度 Matrix signcdf(Matrix& data ,Matrix& x); //根据信号信息获取数据的概率密度函数 data 和x是向量 //提示:概率密度计算可能和公式计算不一样.这里为区间点上的积分值 Matrix signpdf(Matrix& data ,Matrix& x);
在你的cpp文件中编写矩阵生成函数的具体实现。
#include "Matlab2c.h" using namespace Matlab2c;
//为信号添加高斯白噪声
//输入:实信号,信噪比
// 输出:输出添加列信噪比的信号
// 提示:信噪比单位为dB
Matrix awgn(Matrix& sign,double SNR) { int i; double sigPower=0; double noisePower=0; Matrix p(sign.row,sign.column); Matrix noise; srand((unsigned)time(NULL)); for (i=0;i//生成正太分布矩阵
Matrix normrnd(int row,int column,double aver ,double sigma) { double x,dScope,y,fengzhi; int i,j; Matrix p(row,column); srand((unsigned)time(0)); for (i=0;iy); p(i,j)=x; } } return p; } ;i++)>//复数序列fft
//输入:复数序列a
// 输出:序列a的fft
// 提示:实序列可以先转化为复数结构体再fftCMatrix fft(CMatrix& a) { int i,k; CMatrix p; int len =a.row*a.column; double x1,y1; p.row=a.row; p.column=a.column; p.data = new Complex[p.row*p.column]; for(k=0;k*sign.column;i++)>//产生锯齿波或者三角波,幅度为正负1 //输入:锯齿波信号时域取值点a,上升段比例width // 输出:锯齿波信号在取值点上的值 // 提示:幅度为正负1,周期为2pi,width为上升段比例
Matrix sawtooth(Matrix& a,double width)//a是行向量,产生周期为2pi,width为上升段比例 { int i,j; Matrix p(a.row,a.column); int n; double data; for (i=0;i0) p(i,j) = 1.0/(PI*width)*data-1; else if (data>(2*PI*width) && data<=(2*PI)) p(i,j) = -1.0/(PI*(1-width))*data+(1+width)/(1-width); } return p; }//生成sinc信号
//输入:sinc信号时域取值点a
// 输出:sinc信号在取值点上的值Matrix sinc(Matrix& a) { int i,j; Matrix p(a.row,a.column); for (i=0;i;k++)>//获取信号数据data在区间x点上的累计概率密度 //输入:信号数据,计算累计概率的区间点 // 输出:信号在区间点上的累计概率值 // 提示:调用较多内部自定义函数
Matrix signcdf(Matrix& data ,Matrix& x) { int i; Matrix p,temp1,temp2; temp1 = Matlab2c::x_vector(-INT_MAX,x); //添加一个负无穷大 temp2 = Matlab2c::histc(data,temp1); temp2.row--; //去掉最后一个数据,因为最后一个一定为1 for (i=0;i;i++)>//根据信号信息获取数据的概率密度函数 //输入:信号数据data 计算概率的区间点 // 输出:信号数据在区间点上的概率密度 // 提示:概率密度计算可能和公式计算不一样.这里为区间点上的积分值
Matrix signpdf(Matrix& data ,Matrix& x) // data 和x是向量 { int i; Matrix p; p = Matlab2c::histc(data,x); p.row--; //去掉最后一个数据,因为区间数比数据点数少一个 for (i=0;i;i++)>;i++)>
上一篇: C++中的10个关键字
下一篇: 看完小学生嘴边的顺口溜,我表示鸭梨很大