用matlab代码实现一系列脉冲函数经过窄带滤波器后的时频响应
时间: 2023-05-28 16:01:13 浏览: 91
首先,需要定义一系列脉冲序列,并定义一个窄带滤波器的频率响应。
假设脉冲序列为:
```matlab
n = -50:50;
x = zeros(size(n));
x(n == 0) = 1;
```
定义窄带滤波器的频率响应为:
```matlab
fc = 10; % 滤波器中心频率
b = 1; % 滤波器带宽
fs = 100; % 采样频率
N = 101; % 滤波器阶数
h = zeros(N,1);
for i = 1:N
if (i-1-N/2)*fs/N >= fc-b/2 && (i-1-N/2)*fs/N <= fc+b/2
h(i) = 1;
end
end
```
接下来,需要对脉冲序列进行滤波,并绘制时频响应图。
```matlab
y = conv(x,h); % 进行滤波
t = -0.5:1/fs:0.5; % 时间轴
f = linspace(-fs/2,fs/2,length(y)); % 频率轴
Y = fftshift(abs(fft(y))); % 滤波后信号的频谱
subplot(2,1,1)
plot(t,x)
title('原始信号')
subplot(2,1,2)
plot(f,Y)
title('滤波后信号的频谱')
```
这里使用 `conv()` 函数对脉冲序列进行卷积滤波,然后绘制时域和频域波形。最后,使用 `fft()` 函数对滤波后的信号进行傅里叶变换,得到其时频响应图。
完整代码如下:
```matlab
n = -50:50;
x = zeros(size(n));
x(n == 0) = 1;
fc = 10; % 滤波器中心频率
b = 1; % 滤波器带宽
fs = 100; % 采样频率
N = 101; % 滤波器阶数
h = zeros(N,1);
for i = 1:N
if (i-1-N/2)*fs/N >= fc-b/2 && (i-1-N/2)*fs/N <= fc+b/2
h(i) = 1;
end
end
y = conv(x,h); % 进行滤波
t = -0.5:1/fs:0.5; % 时间轴
f = linspace(-fs/2,fs/2,length(y)); % 频率轴
Y = fftshift(abs(fft(y))); % 滤波后信号的频谱
subplot(2,1,1)
plot(t,x)
title('原始信号')
subplot(2,1,2)
plot(f,Y)
title('滤波后信号的频谱')
```
阅读全文