设计一个基于matlab的fft快速傅里叶变换程序,在gui界面能够更改采样频率和采样点数,输入非周期信号后生成波形图,并将其进行FFT变换生成频谱图
时间: 2024-02-05 10:13:10 浏览: 109
下面是一个基于MATLAB的FFT快速傅里叶变换程序:
```matlab
function FFT_GUI()
% 创建GUI界面
h = figure('Position',[100 100 600 400],'MenuBar','none','ToolBar','none');
handles = guihandles(h);
% 设置GUI界面控件
handles.text1 = uicontrol('Style','text','String','采样频率:','Position',[50 320 100 20]);
handles.edit1 = uicontrol('Style','edit','String','1000','Position',[150 320 100 20]);
handles.text2 = uicontrol('Style','text','String','采样点数:','Position',[50 280 100 20]);
handles.edit2 = uicontrol('Style','edit','String','1024','Position',[150 280 100 20]);
handles.button1 = uicontrol('Style','pushbutton','String','生成波形图','Position',[50 220 100 40],'Callback',{@button1_callback,handles});
handles.axes1 = axes('Position',[0.1 0.5 0.4 0.4]);
handles.axes2 = axes('Position',[0.6 0.5 0.4 0.4]);
% 设置GUI界面初始值
guidata(h,handles);
end
function button1_callback(hObject,eventdata,handles)
% 获取GUI界面控件的值
Fs = str2double(get(handles.edit1,'String')); % 采样频率
N = str2double(get(handles.edit2,'String')); % 采样点数
% 生成信号
t = 0:1/Fs:(N-1)/Fs;
f1 = 10;
f2 = 100;
x = sin(2*pi*f1*t) + sin(2*pi*f2*t) + 0.5*randn(1,N); % 加入高斯噪声
% 绘制波形图
axes(handles.axes1);
plot(t,x);
xlabel('Time');
ylabel('Amplitude');
title('Waveform');
% 进行FFT变换
X = fft(x);
f = Fs*(0:(N/2))/N;
P = abs(X/N);
P = P(1:N/2+1);
P(2:end-1) = 2*P(2:end-1);
% 绘制频谱图
axes(handles.axes2);
plot(f,P);
xlabel('Frequency');
ylabel('Magnitude');
title('Frequency Spectrum');
end
```
这个程序包含了一个GUI界面,可以通过更改采样频率和采样点数来生成信号的波形图和FFT变换的频谱图。在这个例子中,我们生成了一个包含两个正弦波和高斯噪声的信号,并将其绘制成波形图。然后进行FFT变换,并将其绘制成频谱图。
阅读全文