使用MATLAB(1)画出一个由80Hz,250Hz,700Hz正弦信号构成的信号,采样率为1500Hz,利用Matlab计算它的DFT并画出它的幅频特性曲线。 (2)如果信号受随机噪声干扰,对信号加噪并分析时频特性。 (3)设计合适的滤波器,将上述三个正弦信号分离,画出各滤波器的幅度响应及相位响应,对比两种滤波器的滤波效果。
时间: 2024-03-11 22:45:04 浏览: 67
好的,我会尽力回答。首先,针对你的第一个问题:
1. 生成信号并计算DFT
```matlab
fs = 1500; % 采样率
t = 0:1/fs:1; % 信号持续时间为1秒
f = [80 250 700]; % 信号频率
s = sin(2*pi*f'*t); % 生成信号矩阵,每行代表一个信号
x = sum(s); % 将三个信号相加得到混合信号
% 计算DFT
N = length(x); % 信号长度
X = fft(x)/N; % 计算DFT并归一化
f_axis = (0:N-1)/N*fs; % 构建频率轴
% 绘制幅频特性曲线
plot(f_axis, abs(X))
xlabel('Frequency (Hz)')
ylabel('Magnitude')
```
2. 加噪声并分析时频特性
```matlab
% 加高斯白噪声
noise = randn(1, N);
SNR = 10; % 信噪比为10dB
noise = noise / std(noise) * std(x) / (10^(SNR/20)); % 使噪声与信号的功率比为10^(SNR/10)
x_noisy = x + noise;
% 计算DFT并绘制幅频特性曲线
X_noisy = fft(x_noisy)/N;
plot(f_axis, abs(X_noisy))
xlabel('Frequency (Hz)')
ylabel('Magnitude')
```
3. 设计滤波器分离信号
```matlab
% 设计三个带通滤波器
f_cutoff = [60 200 600]; % 截止频率
f_width = 10; % 通带宽度
b = zeros(3, N);
for i = 1:3
b(i,:) = fir1(N, [f_cutoff(i)-f_width/2 f_cutoff(i)+f_width/2]/(fs/2));
end
% 将混合信号通过三个滤波器
y = zeros(3, N);
for i = 1:3
y(i,:) = filter(b(i,:), 1, x_noisy);
end
% 计算DFT并绘制幅频响应
Y = fft(y')/N; % 注意需要将y转置
for i = 1:3
subplot(3,1,i)
plot(f_axis, abs(Y(i,:)))
title(sprintf('Filter %d', i))
xlabel('Frequency (Hz)')
ylabel('Magnitude')
end
% 绘制相位响应
for i = 1:3
subplot(3,1,i)
[h, w] = freqz(b(i,:), 1, N);
plot(f_axis, angle(h))
title(sprintf('Filter %d', i))
xlabel('Frequency (Hz)')
ylabel('Phase')
end
```
这样就能得到三个滤波器的幅频响应和相位响应,可以对比它们的滤波效果。
阅读全文