基于MATLAB的信号发生器设计
- 格式:pdf
- 大小:201.63 KB
- 文档页数:10
因为 PCI-6024E 只有 2 路 DAC,所以输出通道的选择只有这 2 路,或者只输出其 中的一路。运行、停止则是开始和停止计算波形、输出波形的过程。编写 M 文件 来处理 GUI 界面的事件的响应。
本设计的独特之处在于输出通道的可选择性,可选择 NI-DAQ(PCI-6024E), 声卡,或者并行等。考虑到信号幅度范围对于不同硬件也是不同的(PCI-6024E 是-10~10v),超出范围的部分是无效的,程序同样会报错并停止运行。
幅度 amplitude
文件名 filename
默认值
500
1
自定义波参数如表 8 所示。设采样率:samp
说明:本选项是信号发生器的扩展功能之一,通过菜单区操作可以读取保存
为图像和数据的文件,输出信号到输出板卡上。
①读取图像文件(*.bmp)
源程序段:
h1=imread(filename);
h2=rgb2gray(h1)
《MatLab 信号处理》
-----基于 MATLAB 的信号发生器设计
姓名: 学号: 班级: 2010.12
基于 MATLAB 的信号发生器设计
虚拟仪器能充分利用现有计算机资源,通过配以独特设计的软硬件,实现普 通仪器的全部功能以及一些在普通仪器上无法实现的功能的软件或程序。本设计 的主要内容就是基于 MATLAB 来实现一个信号发生器,除具有信号发生器一般功 能外,还应能通过文件或图形获取波形数据,以实现任意波形的生成,并以 PCI-6024 DAQ 卡作为硬件平台输出。
[m,n]=size(h2);
for i=1:n
x(i)=0;
end
for i=1:n
for j=1:m
if (h2(j,i)~=255)
x(i)=1-j/m;
end
end
end
说明:imread 函数按象素读取图像文件的 RGB 值(24 位颜色时每个象素需要
3 个字节),存储为二维数组,rgb2gray 将彩色图转变为灰度图(每个象素 1 个 字节)。读到一个不为白色(255)的象素既是画线所在,因为图像原点在左上角, 所以还要经过求反和归一化处理(x(i)=1-j/m)。 ②读取数据文件(*.txt)
二、信号发生器的设计和实现 程序简介
程序参考 MATLAB 的 Data Acquisition Toolbox 实现。在 MATLAB 的 GUI 设 计中,有两种设计方式:利用 GUI 编辑器和编写 M 文件。
GUI 是用户的操作界面,是选择波形、设定和修改波形参数、设定采样率、 选择输出通道和运行、停止程序的人机交互接口。本程序的界面中,可选波形包 括正余弦(sin),Sa 波(sinc),方波(square),三角波(triangle),锯齿波 (tooth),噪声波(random),频变波(chirp),以及自定义波形(读取图形和 数据文件)。波形参数包括频率(frequency),幅度(amplitude),直流偏置 (offset),初相位(phase),占空比(duty cycle),频变方法(method),频 变时间(target time),初始频率(initial(F)),目标频率(target(F))等。
源程序段: fid = fopen(filename); x = fscanf(fid,'%g',[1 inf]) fclose(fid) 说明:fscanf 函数可以读取已打开文本文件中的数字,放到一维数组中。 注意:数据文件格式―数据值在 0~1 之间,以空格,Tab 为间隔。 举例:0.1 0.2 0.4 0.9 0.3 0.5 0.7 0.6 ③数组长度-插值 因为读取图像和数据文件得到的数组长度和采样率所需点数无关,所以涉及 到数组长度的改变,进而引出了插值的问题。 源代码段: p1=round(samp/frequency); for k=2:p1
500
1
0
三角波参数如表 4 所示。设采样率:samp
数组表示:
t=0:(1/samp):1;
y=(4*amplitude*frequency*mod(t,1/frequency)-2*amplitude).*sign(mo
d(t1,1/frequency)-1/frequency/2)-amplitude+offset;
上升和下降的占空比均为 50%。
锯齿波(tooth)
表 5 锯齿波参数
参数名
频率 frequency
幅度 amplitude
默认值
500
1
锯齿波参数如表 5 所示。设采样率:samp
直流偏置 offset 0
数组表示: t=0:(1/samp):1; y1=2 *amplitude *frequency *mod(t,1/ frequency)- amplitude+ offset;
说明:t 在 1 秒内有 samp 个均匀采样点,y 做为 samp×1 的一维数组输出到
板卡的一个通道。
Sa 波(sinc)
表 2 Sa 波参数
参数名
频率 frequency
幅度 amplitude
直流偏置 offset
初相位 phase
默认值
500
1
0
0
Sa 波参数如表 2 所示。设采样率:samp
信号输出
这个部分,就是把上一部分生成的数组输出到输出板卡上。目前本信号发生 器只支持 PCI-6024E 和 winsound。因为 MATLAB 对 PC 扩展板卡的支持十分全面, 集成化,所以驱动和 winsound 的代码是非常相似的。
硬件设定
硬件设定包括板卡选择和通道选择。 板卡选择 源代码段: out = daqhwinfo; device=out.InstalledAdaptors set(handles.device,'string',device); 说明:daqhwinfo.InstalledAdaptors 包含安装的硬件板卡的信息,将其加入作 为下拉列表框的选项。 通道选择 源代码段: if ~strcmp(get(handles.channel1,'checked'),'on')
注意:源代码中如表 9 所示,
表 9 线性插值
l1
l2
l3
Y()所对的 x()的下标 比 l1 小的最大整数 比 l1 大的最小整数
第一个 for 循环将原数组延拓为一个周期的点数(samp/frequency);第二 个 for 循环再将其延拓为 1 秒的点数 samp(此处为 samp+1)。
数组表示:
t=0:(1/samp):1;
y=offset+amplitude*sin(2*pi*frequency*t+phase*pi/180+eps)./
(2*pi*frequency*t+phase*pi/180+eps);
这 里 “ / ” 用 的 是 “ ./ ”, 表 示 数 组 中 对 应 元 素 运 算 。 为 了
1
50
100
频变波参数如表 7 所示。设采样率:samp
数组表示:
t=0:(1/samp):1;
method=linear 时
y=sin(2*pi*mod(t,tTime).*(iF+mod(t,tTime)*(tF-iF)/tTime));
method=log 时
y=sin(2*pi*mod(t,tTime).*mod(t,tTime)*exp(log(tF/iF))*iF/tTime)
y1=zeros(1,samp+1); end
if ~strcmp(get(handles.channel2,'checked'),'on') y2=zeros(1,samp+1);
end 说明:通道 1 或 2 不输出其实就是把输出数组置为全 0。
PCI-6024E 相关代码
源代码段: AO = analogoutput('nidaq',1); addchannel(AO,0:1); set(AO,'SampleRate',samp) set(AO,'RepeatOutput',inf) putdata(AO, [y1' y2']) start(AO) ………… stop(AO) delete(AO) clear AO 说明:analogoutput 指定输出板卡,(PCI-6024E)的 ID 是 1;addchannel 加入 通道;接着设定采样率,重复次数,;start 启动输出;stop 停止输出,delete 删除输出。 注意:putdata 指定输出信号时要用列数组,如上[y1' y2']。
噪声波(random)
表 6 噪声波参数
参数名
种子 seed
幅度 amplitude
直流偏置 offset
默认值
500
1
0
噪声波参数如表 6 所示。设采样率:samp
数组表示:
t=0:(1/samp):1;
y=2* amplitude*(rand(1,length(t))-0.5)+ offset;
数组表示:
t=0:(1/samp):1;
y= offset + amplitude* sign(duty/100/ frequency -mod(t,
1/frequency));
三角波(triangle)
表 4 三角波参数
参数名
频率 frequency
幅度 amplitude
直流偏置 offset
默认值