基于MATLAB GUI的虚拟信号发生器设计与实现

本文介绍了一个基于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*🐟*“么三么三”账号购买。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值