本文介绍了一个基于MATLAB GUI的信号发生器设计与实现。该系统通过MATLAB GUI的图形化界面,不仅能够产生包括方波、三角波、正弦波、锯齿波、白噪声、冲激信号多种波形信号,还可以生成能用解析式表示的信号(如sinwt),而且具备频谱分析、相关分析(自相关和互相关)以及功率谱分析(Welch 法,矩形窗、海明窗、Blackman窗)等信号处理功能。
一、信号生成
%A为幅度,w为角频率,t为时间
y=A*square(w*t,z); % 生成方波信号,z为占空比
y=A*sawtooth(w*t,0.5); % 生成三角波信号
y=A*sin(w*t); % 生成正弦信号
y=A*sawtooth(w*t); % 生成锯齿波信号
y=A*(rand(1,length(t))-0.5); % 生成白噪声信号
y=A*(t==n); % 生成冲激信号,输入n
二、GUI界面
三、回调函数
1.波形生成
A=str2num(get(handles.fudu,'string')); % 获取信号的幅度
w=str2num(get(handles.pinlv,'string'));% 获取信号的频率
z=str2num(get(handles.zhankongbi,'string'));% 获取方波的占空比
x1=str2num(get(handles.x1,'string')); % 获取横坐标的起始值
x2=str2num(get(handles.x2,'string')); % 获取横坐标的终止值
y1=str2num(get(handles.y1,'string')); % 获取纵坐标的起始值
y2=str2num(get(handles.y2,'string')); % 获取纵坐标的终止值
t=x1:0.01:x2; % 信号的横坐标范围
y=生成信号;
plot(handles.axes1,t,y,'LineWidth',2); % 绘制信号,蓝色,宽度为 2
axis([x1,x2,y1,y2]); % 设置坐标轴范围
guidata(hObject,handles); % 刷新数据
2.频谱分析
fs =str2num(get(handles.fs,'string')); % 采样率
ts = 1/fs; % 采样间隔
N =str2num(get(handles.N,'string')); % 采样点
t = (0:N-1)*ts;
A=str2num(get(handles.fudu,'string')); % 获取信号的幅度
w=str2num(get(handles.pinlv,'string'));% 获取信号的频率
z=str2num(get(handles.zhankongbi,'string'));% 获取方波的占空比
x1=str2num(get(handles.x1,'string')); % 获取横坐标的起始值
x2=str2num(get(handles.x2,'string')); % 获取横坐标的终止值
y1=str2num(get(handles.y1,'string')); % 获取纵坐标的起始值
y2=str2num(get(handles.y2,'string')); % 获取纵坐标的终止值
y=生成信号
Y = fft(y);
freq=(0:N-1)*fs/N;
plot(handles.axes2,freq,abs(Y),'k');
grid on;
3.功率谱分析
Fs= str2num(get(handles.fs,'string')); % 采样率
nfft= str2num(get(handles.N,'string')); % 采样点
window=boxcar(100); %矩形窗
window1=hamming(100); %海明窗
window2=blackman(100); %blackman 窗
noverlap=20; %数据无重叠
range='half'; %频率间隔为[0 Fs/2],只计算一半的频率
y=生成信号
[Pxx,f]=pwelch(y,window,noverlap,nfft,Fs,range);
[Pxx1,f1]=pwelch(y,window1,noverlap,nfft,Fs,range);
[Pxx2,f2]=pwelch(y,window2,noverlap,nfft,Fs,range);
plot_Pxx=10*log10(Pxx);
plot_Pxx1=10*log10(Pxx1);
plot_Pxx2=10*log10(Pxx2);
plot(handles.axes7,f,plot_Pxx);
plot(handles.axes8,f1,plot_Pxx1);
plot(handles.axes9,f2,plot_Pxx2);
guidata(hObject,handles); % 刷新数据
4.相关分析
%互相关
Tmin = str2double(get(handles.edit16,'string'));
Tmax =str2double( get(handles.edit17,'string'));
Xmin =str2double(get(handles.edit18,'string'));
Xmax =str2double( get(handles.edit19,'string'));
Ymin =str2double( get(handles.edit20,'string'));
Ymax =str2double( get(handles.edit21,'string'));
N = 1024;
T = Tmax;
t = linspace(0,T,N);
x=str2func(['@(t)',get(handles.edit14,'String')]);%输入信号
y=str2func(['@(t)',get(handles.edit15,'String')]);%输入信号
r = xcorr(x(t),y(t),'unbiased');
t1 = linspace(-T,T,2*N-1);
plot(handles.axes14,t1,r); % 绘制信号
guidata(hObject,handles); % 刷新数据
四、一些结果
(成品可前往xian*🐟*“么三么三”账号购买。)