产生3种正弦信号,并叠加在一起,信号的频率自己定义(要有明显的频
率间隔),移动进度条(slide1,slide2),(进度条用
来选择频率),然后点击Run按钮,就可以逐个分离出前述的3种不同频率的正弦信号,
或者不点击Run按钮就能动态的分离出不同频率的信号,请使用matlab编程实现,可
以借助filterDesign来实现。
% 创建GUI窗口
figure('Name', 'Signal Separation', 'Position', [200 200 400 300]);
% 初始化参数
fs = 1000; % 采样率
t = 0:1/fs:1; % 时间向量
f1 = 10; % 信号1的频率
f2 = 20; % 信号2的频率
f3 = 30; % 信号3的频率
% 生成三种正弦信号
signal1 = sin(2*pi*f1*t);
signal2 = sin(2*pi*f2*t);
signal3 = sin(2*pi*f3*t);
% 叠加信号
mixedSignal = signal1 + signal2 + signal3;
% 创建滑动条
slide1 = uicontrol('Style', 'slider', 'Position', [50 230 300 20], 'Min', 1, 'Max', 100, 'Value', f1);
slide2 = uicontrol('Style', 'slider', 'Position', [50 200 300 20], 'Min', 1, 'Max', 100, 'Value', f2);
% 创建按钮
button = uicontrol('Style', 'pushbutton', 'Position', [160 150 80 30], 'String', 'Run', 'Callback', @runSeparation);
% 绘制混合信号图像
subplot(2, 1, 1);
plot(t, mixedSignal);
title('Mixed Signal');
xlabel('Time');
ylabel('Amplitude');
% 分离信号的回调函数
function runSeparation(~, ~)
% 获取滑动条的值
freq1 = get(slide1, 'Value');
freq2 = get(slide2, 'Value');
% 设计滤波器
order = 4; % 滤波器阶数
cutoff = 2; % 截止频率
% 创建低通滤波器
lowpassFilter = designfilt('lowpassfir', 'FilterOrder', order, 'CutoffFrequency', cutoff, 'SampleRate', fs);
% 分离信号
separatedSignal1 = filter(lowpassFilter, mixedSignal);
% 绘制分离后的信号图像
subplot(2, 1, 2);
plot(t, separatedSignal1);
title('Separated Signal');
xlabel('Time');
ylabel('Amplitude');
end
function my_program % 设置采样频率 fs = 1000; % 设置采样间隔 T = 1/fs; % 设置信号时间范围 t = 0:T:1; % 设置频率数组 freqs = [50, 100, 200]; % 产生三种正弦信号并叠加 signal = sin(2pifreqs(1)t) + sin(2pifreqs(2)t) + sin(2pifreqs(3)*t); % 绘制三种信号的频域图像 figure for i = 1:3 subplot(3,1,i) ft = fft(signal); plot(linspace(-fs/2,fs/2,length(ft)),abs(fftshift(ft))); title(['Frequency Domain, f=',num2str(freqs(i))]) end
% 添加两个移动进度条 slide1 = uicontrol('style','slider','position',[20 20 300 20],'min',1,'max',200,'value',50); slide2 = uicontrol('style','slider','position',[20 50 300 20],'min',1,'max',200,'value',100); % 添加按钮 btn = uicontrol('style', 'pushbutton', 'string', 'Run', 'position', [20 80 50 20], 'callback', @run_callback);
function run_callback(~, ~) % 获取移动进度条上的值 freq1 = get(slide1,'value'); freq2 = get(slide2,'value'); % 分离不同频率的信号 signal1 = sin(2pifreq1t); signal2 = sin(2pifreq2t); signal3 = signal - signal1 - signal2; % 绘制分离后的三种信号的时域图像 figure subplot(3,1,1) plot(t, signal1) title(['Signal 1, f=',num2str(freq1)]) subplot(3,1,2) plot(t, signal2) title(['Signal 2, f=',num2str(freq2)]) subplot(3,1,3) plot(t, signal3) title('Signal 3') end
end