snr.txt

来自「音频水印水印算法」· 文本 代码 · 共 38 行

TXT
38
字号
 CString fname1,pname1,fname2,pname2,fname3,pname3;
		mxArray* x=NULL;
		mxArray* y=NULL;
        mxArray* RNS=NULL;
		mxArray* SNR=NULL;
		x=mxCreateDoubleMatrix(1,1000000,mxREAL);
        y=mxCreateDoubleMatrix(1,1000000,mxREAL);
		RNS=mxCreateDoubleMatrix(1,1,mxREAL);
	    SNR=mxCreateDoubleMatrix(1,1,mxREAL);
		int fs=44100,nbits=16;
		double *temp=new double[sizeof(double)];
        engEvalString(ep,"[fname1,pname1]=uigetfile('*.wav','open the audio file')");
        engEvalString(ep,"[fname2,pname2]=uigetfile('*.wav','open the watermarkaudio file')");
		engEvalString(ep,"[fname3,pname3]=uigetfile('*.png;*.jpg;*.gif','open the watermark')");
        //RNS=mxCreateDoubleMatrix(1,1,mxREAL);
		//fname2=mxCreateDoubleMatrix(1,1,mxREAL);
		//mxSetName(x,"x");
		//mxSetName(y,"y");
		//engPutArray(ep,"fname1");
        //engPutArray(ep,"fname2");
		//engPutArray(ep,fname3);
       engEvalString(ep,"[x,fs,nbits]=wavread(fname1)");
	   engEvalString(ep,"[y,fs,nbits]=wavread(fname2)");

       engEvalString(ep,"RNS=sum((x-y).^2)./sum(x.^2)");
		//AfxMessageBox(y1);
       engEvalString(ep,"SNR=-10*log10(RNS)");
	   SNR=engGetVariable(ep,"SNR");
   	   memcpy((double *)temp,(double *)mxGetPr(SNR),sizeof(double));
       CString str; 
       str.Format("%lf",*temp); 
       AfxMessageBox(str);
	   mxDestroyArray(x);
	   mxDestroyArray(y);
	   mxDestroyArray(RNS);
	   mxDestroyArray(SNR);
	  //  mxDestroyArray(T);*temp 
AfxMessageBox(*temp);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?