对信号进行滤波处理

目录

用fft对信号进行滤波

在下采样前进行滤波


用fft对信号进行滤波

        首先,建立三个模拟信号,它们的频率分别为5、20、50Hz,并将这个三个信号相加合成一个信号,即:

y1 = sin(2*pi*5*t);
y2 = cos(2*pi*20*t);
y3 = sin(2*pi*50*t);

%%合并信号
y = y1 + y2 + y3;

plot(y);

        如图所示:

        合成信号的图形为:

        对该合成的信号进行傅里叶变换得到频谱图得:

        图中的频率与实际的频率基本一致,接下来将频谱进行滤波处理,将频率为20Hz的信号滤除:

ffs = find(f>16 & f < 24);
Y(ffs) = 0;  %单边
Y(N-ffs+1) = 0;%双边
yfilter = ifft(Y);
figure;
plot(t,yfilter);

        滤波后的图形为:

        对滤波后的信号进行fft变换求得频谱图得: 

         从频谱图中可知,20Hz的信号已经被滤除了,达到了滤波的效果。完整的代码:

%%
ds = 500;
t = 0:1/ds:1;
y1 = sin(2*pi*5*t);
y2 = cos(2*pi*20*t);
y3 = sin(2*pi*50*t);

%%合并信号
y = y1 + y2 + y3;

subplot(311)
plot(t,y1);
subplot(312);
plot(t,y2);
subplot(313);
plot(t,y3);

%%y
figure;
plot(t,y);

%%fft
N = length(y);
f = (ds/N)*(0:N/2-1);
Y = fft(y);
%%
figure;
plot(f,abs(Y(1:N/2)));
title('Single-Sided Amplitude Spectrum of S(t)')
xlabel('f (Hz)')
ylabel('|Y(f)|')

%%filter
ffs = find(f>16 & f < 24);
Y(ffs) = 0;  %单边
Y(N-ffs+1) = 0;%双边
yfilter = ifft(Y);
figure;
plot(t,yfilter);
%%
Yfilter = fft(yfilter);
figure;
plot(f,abs(Yfilter(1:N/2)));
title('Single-Sided Amplitude Spectrum of S(t)')
xlabel('f (Hz)')
ylabel('|Y(f)|')

在下采样前进行滤波

         此示例说明如何在下采样前进行滤波以减轻混叠造成的失真。

        可以使用 decimate 或 resample 以通过一个函数进行滤波和下采样。也可以先对数据进行低通滤波,然后使用 downsample。创建基带频谱支持大于 π 弧度的信号。使用 decimate 以在下采样之前通过 10 阶 Chebyshev I 类低通滤波器对信号滤波。

        创建信号并绘制幅值频谱。

f = [0 0.2500 0.5000 0.7500 1.0000];
a = [1.00 0.6667 0.3333 0 0];

nf = 512;
b = fir2(nf-1,f,a);
Hx = fftshift(freqz(b,1,nf,'whole'));

omega = -pi:2*pi/nf:pi-2*pi/nf;
plot(omega/pi,abs(Hx))
grid
xlabel('\times\pi rad/sample')
ylabel('Magnitude')

        如图所示:

        使用 10 阶 Chebyshev I 类低通滤波器对信号进行滤波,然后以 2 为因子下采样。绘制原始信号以及经过滤波和下采样的信号的幅值频谱。低通滤波器减少了区间 [−π/2,π/2] 之外的混叠失真量。

y = decimate(b,2,10);
Hy = fftshift(freqz(y,1,nf,'whole'));

hold on
plot(omega/pi,abs(Hy))
legend('Original','Downsampled')

         如图所示:

MATLAB是一款功能强大的科学计算软件,也是处理语音信号的常用工具之一。在MATLAB中,可以使用一系列函数对语音信号进行滤波处理滤波是语音信号处理中的一项重要技术,通过滤波可以去除信号中的噪声、增强信号的频率成分等。常用的滤波器包括低通滤波器、高通滤波器、带通滤波器等。 下面以低通滤波为例,介绍在MATLAB中对语音信号进行滤波处理的步骤: 1. 读取语音信号文件 使用MATLAB中的`audioread`函数读取语音信号文件,将信号存储在一个向量中,例如: ``` [x, fs] = audioread('speech.wav'); ``` 其中`x`为语音信号向量,`fs`为采样率。 2. 设计滤波器 使用MATLAB中的`designfilt`函数设计一个低通滤波器,例如: ``` lpFilt = designfilt('lowpassiir', 'FilterOrder', 8, 'PassbandFrequency', 1000, 'PassbandRipple', 0.2, 'SampleRate', fs); ``` 其中,`'lowpassiir'`表示设计一个无限冲激响应(IIR)的低通滤波器,`'FilterOrder'`表示滤波器的阶数,`'PassbandFrequency'`表示通带截止频率,`'PassbandRipple'`表示通带最大纹波,`'SampleRate'`表示采样率。 3. 对语音信号进行滤波处理 使用MATLAB中的`filter`函数对语音信号进行滤波处理,例如: ``` y = filter(lpFilt, x); ``` 其中,`lpFilt`为设计好的低通滤波器,`x`为原始语音信号,`y`为滤波后的语音信号。 4. 播放滤波后的语音信号 使用MATLAB中的`sound`函数播放滤波后的语音信号,例如: ``` sound(y, fs); ``` 其中,`y`为滤波后的语音信号,`fs`为采样率。 通过以上步骤,就可以在MATLAB中对语音信号进行低通滤波处理,并播放滤波后的语音信号
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值