优化一下下面这段MATLAB代码:clear; clc; S=load('ExSignal.txt'); fs=2000; t=0:(1/fs):0.4; [m,n]=size(S); signal=S(1:m,n); % 对信号进行频谱分析 N = 2^nextpow2(fs); Y = fft(signal, N)/N*2; f = fs/N*(0:1:N-1); A = abs(Y); P = angle(Y); figure; subplot(211); plot(t, signal); title('滤波前信号'); xlabel('时间(s)'); ylabel('幅值'); subplot(212); plot(f(1:N/2), A(1:N/2)); title('幅值频谱'); xlabel('频率(Hz)'); ylabel('幅值'); % 设计带通滤波器1 d1 = fdesign.bandpass('Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2', 30, 35, 60, 65, 60, 1, 60, fs); h1 = design(d1); % 对信号进行带通滤波并画出波形 newsignal = filter(h1, signal); Y1 = fft(newsignal, N)/N*2; A1 = abs(Y1); figure; subplot(211); plot(t, newsignal); title('带通滤波后信号'); xlabel('时间(s)'); ylabel('幅值'); subplot(212); plot(f(1:N/2), A1(1:N/2)); title('幅值频谱'); xlabel('频率(Hz)'); ylabel('幅值'); % 设计带通滤波器2 d2 = fdesign.bandpass('Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2', 230, 235, 285, 290, 60, 1, 60, fs); h2 = design(d2); % 对信号进行带通滤波并画出波形 newsignal = filter(h2, signal); Y1 = fft(newsignal, N)/N*2; A1 = abs(Y1); figure; subplot(211); plot(t, newsignal); title('带通滤波后信号'); xlabel('时间(s)'); ylabel('幅值'); subplot(212); plot(f(1:N/2), A1(1:N/2)); title('幅值频谱'); xlabel('频率(Hz)'); ylabel('幅值');
时间: 2023-11-17 12:04:53 浏览: 71
优化后的代码如下:
clear;
clc;
% 加载信号
S = load('ExSignal.txt');
signal = S(:, end); % 取最后一列
% 设定采样率和时间轴
fs = 2000;
t = 0:1/fs:0.4;
% 对信号进行频谱分析
N = 2^nextpow2(length(signal));
Y = fft(signal, N)/N*2;
f = fs/N*(0:1:N-1);
A = abs(Y);
% 绘制原始信号和幅值频谱
figure;
subplot(211);
plot(t, signal);
title('滤波前信号');
xlabel('时间(s)');
ylabel('幅值');
subplot(212);
plot(f(1:N/2), A(1:N/2));
title('幅值频谱');
xlabel('频率(Hz)');
ylabel('幅值');
% 设计带通滤波器1
d1 = fdesign.bandpass('Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2', 30, 35, 60, 65, 60, 1, 60, fs);
h1 = design(d1);
% 对信号进行带通滤波并画出波形和幅值频谱
newsignal1 = filter(h1, signal);
Y1 = fft(newsignal1, N)/N*2;
A1 = abs(Y1);
figure;
subplot(211);
plot(t, newsignal1);
title('带通滤波1后信号');
xlabel('时间(s)');
ylabel('幅值');
subplot(212);
plot(f(1:N/2), A1(1:N/2));
title('幅值频谱');
xlabel('频率(Hz)');
ylabel('幅值');
% 设计带通滤波器2
d2 = fdesign.bandpass('Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2', 230, 235, 285, 290, 60, 1, 60, fs);
h2 = design(d2);
% 对信号进行带通滤波并画出波形和幅值频谱
newsignal2 = filter(h2, signal);
Y2 = fft(newsignal2, N)/N*2;
A2 = abs(Y2);
figure;
subplot(211);
plot(t, newsignal2);
title('带通滤波2后信号');
xlabel('时间(s)');
ylabel('幅值');
subplot(212);
plot(f(1:N/2), A2(1:N/2));
title('幅值频谱');
xlabel('频率(Hz)');
ylabel('幅值');
% 清理无用变量
clearvars -except signal newsignal1 newsignal2;
阅读全文