关于NI美国国家仪器音频分析器使用技巧(4461音频分析仪)

关于音频分析仪分享很少,所以积少成多。希望能帮到碰到同样问题的同学们。 

 在工作中要用到NI的4461音频分析仪,开始用的是华X达的驱动(也就是根据NIDAQmx编写的动态库),但是在使用过程中有很大的局限性。所以还是自己动根据NIDAQmx写程序更顺手一点。

首先分享一下NI的官网关于DAQmx的帮助:http://www.ni.com/white-paper/2835/zhs/ 参考其中的部分函数已经能解决信号的产生和接收问题。

问题一:如何同时打开两个通道?

解答:

首先复制一段代码:

在C/C++中创建任务
DAQmxCreateTask()函数可用于创建任务, DAQmxCreateAIVoltageChan()函数则用于创建模拟输入电压通道。关于创建不同测试类型的通道的信息,请查看“NI-DAQmx C参考帮助”。以下程序片段是这两个函数的应用范例。

TaskHandle  taskHandle=0;
char        chan[256] = "Dev1/ai0";
float64     min = -10, max = 10;

DAQmxCreateTask("",&taskHandle);

DAQmxCreateAIVoltageChan(taskHandle ,chan ,"", DAQmx_Val_Cfg_Default, min, max, DAQmx_Val_Volts, NULL);

本例中只给出了一个通道的倒开方式:char   chan[256]="Dev1/aio";

其实要想打开两个通道只需要::char   chan[256]="Dev1/aio,“Dev1/ai1";就可以了。很简单。

问题二:如果在音频分析仪中产生双通道不同频率的正弦波?

解答:希望得到答案可以在下面留言。(现在有事,有空再写)

继续:要产生双通道不同频率首先要了解音频分析仪存储数据的结构:间接存储。也就是先存一个波形的点的数据,再存储另外一个波形点的数据

例如:

SinePattern (Number , Value, 0.0, cycles, SineWave1k);//产生波形  其中的参数自己定
SinePattern (Number2 , Value2, 0.0, cycles2, SineWave1k2);


for( i = 0 ; i < Number ; i ++ )
{
SineWave1 [i*2]= SineWave1k[i]; 
SineWave1 [i*2+1]=SineWave1k2[i];
}

这样数组SineWav1就是在函数中调用的数组:

DAQmxWriteAnalogF64 (AudioOUT, Number, 1, 10.0, DAQmx_Val_GroupByScanNumber, SineWave1, NULL, 0);//注意第五个参数

下面是整个程序部分代码:

int   main(void)  
{
// int errStatus;
int Number=100,Number2=100,i,a;
double Value=1.0,Value2=2.0;
double cycles=1.0,cycles2=2.0;
double rate=20000.0,rate2=40000.0;
float64 *SineWave1k,*SineWave1k2,*SineWave1;

SineWave1 = (float64 *) malloc (2*Number * sizeof(float64) );  

//double SineWave1[2*Number]={0};
SineWave1k = (float64 *) malloc (Number * sizeof(float64) );  
SineWave1k2 = (float64 *) malloc (Number2 * sizeof(float64) ); 

SinePattern (Number , Value, 0.0, cycles, SineWave1k);
SinePattern (Number2 , Value2, 0.0, cycles2, SineWave1k2);

for( i = 0 ; i < Number ; i ++ )
{
SineWave1 [i*2]= SineWave1k[i]; 
SineWave1 [i*2+1]=SineWave1k2[i];
}

DAQmxClearTask (AudioOUT); // 清除任务
DAQmxCreateTask ("", &AudioOUT);//创建任务
DAQmxCreateAOVoltageChan (AudioOUT, "Dev4/ao0,Dev4/ao1", "", -10.0, 10.0, DAQmx_Val_Volts, "");//创建通道
DAQmxCfgSampClkTiming (AudioOUT, "", rate, DAQmx_Val_Rising,DAQmx_Val_ContSamps, Number);//定时设定
DAQmxWriteAnalogF64 (AudioOUT, Number, 1, 10.0, DAQmx_Val_GroupByScanNumber, SineWave1, NULL, 0);//

free(SineWave1);
free(SineWave1k);
free(SineWave1k2);
DAQmxStopTask(AudioOUT);
DAQmxClearTask(AudioOUT);
DAQmxStopTask(AudioOUT2);
DAQmxClearTask(AudioOUT2);
return 0;
}

你可能感兴趣的:(关于NI美国国家仪器音频分析器使用技巧(4461音频分析仪))