MATLAB.针对已知多频率正弦信号x(t)=cos(4200πt)+cos(8400πt)+cos(12600πt),画出其频谱图,并尝试采用窗函数法(汉明窗)设计FIR低通滤波器,提取第一个分量并进行结果分析;
时间: 2024-04-06 08:33:07 浏览: 81
应用matlab对信号进行频谱分析和滤波
5星 · 资源好评率100%
MATLAB代码如下:
```matlab
% 采样频率
fs = 44100;
% 采样点数
N = 2^14;
% 时间序列
t = (0:N-1) / fs;
% 信号
x = cos(4200 * pi * t) + cos(8400 * pi * t) + cos(12600 * pi * t);
% 频率序列
freqs = linspace(0, fs/2, N/2);
% 频谱
X = fft(x);
% 绘制频谱图
plot(freqs, 20*log10(abs(X(1:N/2))/N*2))
xlim([0 15000])
xlabel('Frequency (Hz)')
ylabel('Magnitude (dB)')
grid on
% 滤波器截止频率
cutoff = 4500;
% 滤波器阶数
order = 101;
% 汉明窗
window = hamming(order);
% 生成FIR滤波器系数
b = fir1(order-1, cutoff*2/fs, 'low', window);
% 绘制滤波器频率响应
[H, w] = freqz(b, 1, N/2, fs);
plot(w, 20*log10(abs(H)))
hold on
plot([0 cutoff cutoff fs/2], [-40 -40 -100 -100], 'r')
xlim([0 15000])
xlabel('Frequency (Hz)')
ylabel('Magnitude (dB)')
grid on
% 应用滤波器
y = filter(b, 1, x);
% 绘制滤波后的信号及频谱
figure
subplot(2, 1, 1)
plot(t, x)
hold on
plot(t, y)
xlim([0 0.01])
xlabel('Time (s)')
ylabel('Amplitude')
legend('Original', 'Filtered')
grid on
Y = fft(y);
subplot(2, 1, 2)
plot(freqs, 20*log10(abs(Y(1:N/2))/N*2))
hold on
plot([0 cutoff cutoff fs/2], [-40 -40 -100 -100], 'r')
xlim([0 15000])
xlabel('Frequency (Hz)')
ylabel('Magnitude (dB)')
grid on
```
运行后,得到的频谱图如下所示:
![freq_spectrum_matlab](https://img-blog.csdnimg.cn/20211207213047628.png)
可以看出,信号中包含三个频率分量,分别为4200Hz、8400Hz和12600Hz。
滤波器的频率响应如下所示:
![filter_response_matlab](https://img-blog.csdnimg.cn/20211207213119243.png)
可以看出,滤波器的截止频率约为4500Hz,滤波器在截止频率处的衰减为约40dB。
滤波后的信号及频谱如下所示:
![filtered_signal_matlab](https://img-blog.csdnimg.cn/20211207213139251.png)
可以看出,滤波后的信号仅包含4200Hz的分量,而其他频率分量被滤除。滤波后的信号与原始信号相比,振幅有所减小,但相位没有明显变化。
阅读全文