FIR滤波器小试牛刀

走进数字信号的世界

C4.求解FIR滤波器

介绍

有限冲击响应FIR滤波器属于线性时不变系统,最大的特点是频率响应具备线性相位,为此FIR滤波器在信号滤波中得到广泛应用。其中,FIR滤波器的单位脉冲响应具备以下条件:
$$
h(n)=0, \quad n<0, n \geq N
$$
当系统输出为x(n) 时,系统输出为:
$$
y(n)=\sum_{m=0}^{N-1} h(m) x(n-m)
$$
为此,使用matlab中的conv卷积函数就可以求解FIR滤波器的输出。

matlab程序

1
clear;
2
close all;
3
% x = sin(2*pi*0.4*(0:127)/10);
4
% figure;plot(0:127,x);xlim([0 127]);grid on;
5
% xlabel('n','fontsize',14);ylabel('x(n)','fontsize',14);title('系统输入信号x(n)','fontsize',14);
6
% h(1:10)=(1:10);h(11)=11;h(12:21)=(10:-1:1);%产生系统单位脉冲序列
7
% figure;plot(0:20,h);ylim([0 11]);grid on;xlabel('n');ylabel('h(n)');title('系统单位脉冲响应h(n)');
8
% 
9
% hf = freqz(h,1,1024);%求系统频率响应
10
% xf = freqz(x,1,1024);%求输入信号频谱
11
% figure;subplot(2,1,1);
12
% plot((0:1023)*10/2048,20*log10( abs(hf)/max(abs(hf)) ));grid on;xlabel('kHz');ylabel('系统频率响应');title('系统频率响应');
13
% subplot(2,1,2);
14
% plot((0:1023)*10/2048, 20*log10(abs(xf)/max(abs(xf))) );grid on;xlabel('kHz');ylabel('输入信号频谱');title('输入信号频谱');
15
% 
16
% y=conv(h,x);%
17
% figure;plot(0:147,y);grid on;xlim([0 147]);xlabel('n');ylabel('y(n)');title('系统输出');
18
19
%---程序2:输入为两个正弦信号,其中一个信号在系统阻带  %
20
x = sin(2*pi*0.3*(0:127)/10) + sin(2*pi*2.4*(0:127)/10);%产生两个正弦信号
21
figure;plot(0:127,x);xlim([0 127]);grid on;xlabel('n');ylabel('系统输入信号x(n)');title('系统输入信号x(n)');
22
23
h(1:20)=(1:20);h(21)=21;h(22:41)=(20:-1:1);
24
figure;plot(0:40,h);ylim([0 21]);grid on;xlabel('n');ylabel('h(n)');title('系统单位脉冲响应h(n)');
25
26
hf = freqz(h,1,1024);%系统频率响应
27
xf = freqz(x,1,1024);%求输入信号频谱
28
figure;subplot(2,1,1);
29
plot((0:1023)*10/2048,20*log10( abs(hf)/max(abs(hf)) ));grid on;xlabel('kHz');ylabel('系统频率响应');title('系统频率响应');
30
subplot(2,1,2);
31
plot((0:1023)*10/2048, 20*log10(abs(xf)/max(abs(xf))) );grid on;xlabel('kHz');ylabel('输入信号频谱');title('输入信号频谱');
32
33
y = conv(h,x);
34
figure;plot(0:167,y);grid on;xlim([0 167]);xlabel('n');ylabel('y(n)');title('系统输出');

运行截图

分析

C7.相关函数在噪声中检测信号的应用

介绍

首先产生一路高斯白噪声(均值为0,方差为1),再在单载波信号上叠加上噪声,然后求被噪声污染后的自相关函数。

程序

1
xn=randn(1,200);%产生高斯白噪声
2
rnn=xcorr(xn,xn);
3
figure;subplot(2,1,1);plot(0:199,xn);grid on;
4
title('噪声的时域图');ylabel('N(n)');xlabel('n');
5
subplot(2,1,2);plot(0:199,rnn(200:399)/200);grid on;
6
title('噪声的自相关函数图');ylabel('rn(m)');xlabel('m');
7
8
SNR=-3;%信噪比
9
A=sqrt(2*10^(SNR/10));%根据信噪比计算信号幅度
10
x1=A*sin(pi*0.165*(0:199));%产生单载波信号
11
x=x1+randn(1,200);
12
y=xcorr(x,x);%求x的自相关函数,2N-1
13
y=y/200;%自相关函数幅度求平均
14
figure;subplot(3,1,1);plot(0:199,x1);grid on;
15
title('信号的时域图');ylabel('s(n)');xlabel('n');
16
subplot(3,1,2);plot(0:199,x);grid on;title('信号加噪声时域图');ylabel('x(n)');xlabel('n');
17
subplot(3,1,3);plot(0:99,y(200:299));grid on;title('信号加噪声 相关函数图');ylabel('r(m)');xlabel('m');

运行截图

分析

高斯白噪声的自相关函数只在m=0处有值(等于噪声功率),其余m值处近似为零,因此对被污染的信号求其自相关函数即可检测出原信号。