优化这段代码wc = 5; T = 0.1*pi/wc; N = 100*2*pi/wc/T; w = linspace(0, N-1, N) * 2*pi/N; M = floor(wc/(2*pi/N)); H = [ones(1, 2*M+1), zeros(1, N-4*M-1), ones(1, 2*M+1)]; h = ifftshift(ifft(H)); t = linspace(-T*N/2, T*N/2, N); plot(t, h); xlabel('t'); ylabel('h(t)');
时间: 2023-09-16 09:12:47 浏览: 105
优化算法的代码
这段代码的功能是设计一个带通滤波器,并绘制其时域响应。
这个实现已经相对比较高效了,但是还有一些可以优化的地方。
1. `linspace` 函数可以改用 `colon` 运算符来替代,以避免创建不必要的数组。
2. `ifftshift` 函数可以放到 `ifft` 函数中处理,以避免创建不必要的数组。
下面是优化后的代码:
```
wc = 5;
T = 0.1*pi/wc;
N = 100*2*pi/wc/T;
w = (0:N-1).' * 2*pi/N;
M = floor(wc/(2*pi/N));
H = [ones(2*M+1, 1); zeros(N-4*M-1, 1); ones(2*M+1, 1)];
h = ifft(H, 'symmetric');
t = (-T*N/2:T*N/2-1).' * T/N;
plot(t, h); xlabel('t'); ylabel('h(t)');
```
这个实现中,使用了 `colon` 运算符来生成等间隔的频率点,同时使用了 `'symmetric'` 参数来指定 `ifft` 函数输出实数时不产生虚部。最后,使用 `colon` 运算符生成等间隔的时间点,避免了使用 `linspace` 函数。
阅读全文