【Matlab】信号FIR滤波及谱分析

前言

一个使用matlab对正弦信号进行FIR滤波及频谱分析的学习笔记,本文使用的是窗函数法滤波。

一、正弦信号生成

正弦函数的频率为95和105

Fs=5120;  % 采样率
N=1024;   % 采样点
dt=1.0/5120.0;
T=dt*N;
t=linspace(0,T,N);
x=10*sin(2*pi*95*t)+10*sin(2*pi*105*t); % 原始信号
figure(1);
plot(t,x);grid on;
title('原始信号');
xlabel('时间');
ylabel('幅值');

【Matlab】信号FIR滤波及谱分析_第1张图片

二、信号加窗

2.1 矩形窗

w1=rectwin(N);  % 矩形窗
subplot(2,2,1);plot(t,w1');
title('矩形窗');
z1=2*w1'.*x;  % 加矩形窗信号
subplot(2,2,3);plot(t,z1);
title('加矩形窗信号');

2.2 布莱克曼窗

w2=blackman(N);  % 布莱克曼窗
subplot(2,2,2);plot(t,w2');
title('布莱克曼窗');
z2=2*w2'.*x; % 加布莱克曼窗信号
subplot(2,2,4);plot(t,z2);
title('加布莱克曼窗信号');

【Matlab】信号FIR滤波及谱分析_第2张图片
函数加窗就是将窗函数乘到原信号上,从上图可以看到,加矩形窗的结果就是截取出窗宽度的信号;而布莱克曼窗前后会将信号衰减掉。

三、频谱分析

y1=fft(z1,N);
y2=fft(z2,N);
f=linspace(0,Fs/2,N/2);
A1=abs(y1)/(N/2); % 加矩形窗幅值谱
subplot(2,1,1);plot(f,A1(1:N/2));
title('加矩形窗幅值谱');
xlabel('频率');
ylabel('幅值');
axis([0 200 0 20]);
A2=abs(y2)/(N/2); % 加布莱克曼窗幅值谱
subplot(2,1,2);plot(f,A2(1:N/2));
title('加布莱克曼窗幅值谱');
xlabel('频率');
ylabel('幅值');
axis([0 200 0 20]);

【Matlab】信号FIR滤波及谱分析_第3张图片
加矩形窗后的信号跟原信号是一样的,所以其频谱就是原信号的频谱,可以看到有两个峰值,就是原信号里正弦信号的频率;而加了布莱克曼的信号频率已经不是95和105了

四、源程序

clear;
Fs=5120;  % 采样率
N=1024;   % 采样点
dt=1.0/5120.0;
T=dt*N;
t=linspace(0,T,N);
x=10*sin(2*pi*95*t)+10*sin(2*pi*105*t); % 原始信号
figure(1);
plot(t,x);grid on;
title('原始信号');
xlabel('时间');
ylabel('幅值');

figure(2);
w1=rectwin(N);  % 矩形窗
subplot(2,2,1);plot(t,w1');
title('矩形窗');
z1=2*w1'.*x;  % 加矩形窗信号
subplot(2,2,3);plot(t,z1);
title('加矩形窗信号');
w2=blackman(N);  % 布莱克曼窗
subplot(2,2,2);plot(t,w2');
title('布莱克曼窗');
z2=2*w2'.*x; % 加布莱克曼窗信号
subplot(2,2,4);plot(t,z2);
title('加布莱克曼窗信号');

% 谱分析
figure(3);
y1=fft(z1,N);
y2=fft(z2,N);
f=linspace(0,Fs/2,N/2);
A1=abs(y1)/(N/2); % 加矩形窗幅值谱
subplot(2,1,1);plot(f,A1(1:N/2));
title('加矩形窗幅值谱');
xlabel('频率');
ylabel('幅值');
axis([0 200 0 20]);
A2=abs(y2)/(N/2); % 加布莱克曼窗幅值谱
subplot(2,1,2);plot(f,A2(1:N/2));
title('加布莱克曼窗幅值谱');
xlabel('频率');
ylabel('幅值');
axis([0 200 0 20]);

结语

  1. 信号的谱分析可以知道信号的频率,频谱图也就是该信号里所有的频率图
  2. 窗函数法是FIR滤波器中的一种滤波方法,选择合适的窗可以将信号截取出合适的新信号

你可能感兴趣的:(学习笔记,Matlab,matlab,dsp开发)