概述
本例程展示了信号处理中低通滤波的作用,首先生成一个高斯白噪声,然后对其进行低通滤波。低通滤波器的截止频率和Q值可以自己设定,得到低通滤波器的传输函数后,在经过双线性变换法得到其单位脉冲响应。滤波后对原始信号的频谱和滤波后的信号的频谱进行了对比。
%% 低通滤波器演示程序
%% 生成白噪声信号
clc;clear all; close all;
N = 1000; %采样点数
fs = N; %采样频率
fre_base = -N/2:N/2-1;
a = randn(N,1); %生成符合高斯分布的随机噪声
F = fftshift((fft(a)))*2/N; %对其进行快速傅里叶变换
%% 生成低通滤波器
cut_off_freq = 50;
Q = 0.625;
plot_enable_L = 1;
[Hs, H_z] = produce_LPF(cut_off_freq, Q, fs, plot_enable_L);
%% 进行低通滤波
filterd_signal = filter(H_z.num{:}, H_z.den{:}, a);
filter_sig_f = fftshift(fft(filterd_signal))*2/N;
%% 绘图
figure;
subplot(2,1,1); %绘制子图
plot(fre_base,abs(F)); %绘制频率图
xlabel('Hz');
title('原始信号频谱图');
subplot(2,1,2); %绘制子图
plot(fre_base,abs(filter_sig_f)); %绘制频率图
xlabel('Hz');
title('低通滤波后信号频谱图');
产生低通滤波器的子函数代码如下:
function [Hs, H_z] = produce_LPF(cut_off_freq, Q, fs, plot_enable_L)
%% 构造低通滤波器
w0 = 2*pi*cut_off_freq; % 滤波器截止频率对应的角频率
A=1; B=w0/Q; C=w0^2; % 传递函数构造因子
numerator = C; % 传递函数的分子的矩阵表示
denominator = [A B C]; % 传递函数的分母的矩阵表示
disp('二阶低通滤波器的传递函数');
Hs = tf(numerator, denominator) % 构造模拟低通滤波器传递函数
H_z = c2d(Hs, 1/fs, 'tustin'); % 将滤波器的脉冲响应用双线性变换法离散化
%% 绘制图形
if plot_enable_L == 1
%%计算坐标,画模拟滤波器的频率特性
w = logspace(1,6); % 产生10^1到10^4次的对数坐标
hs = freqs(numerator,denominator,w); % 滤波器的幅频、相频特性曲线
mag = abs(hs); % 取幅值
phase = angle(hs); % 取相角
f = w/(2*pi); % 将横坐标的单位由rad变为Hz
phase = phase*180/pi; % 将纵坐标的单位变为度。
figure; semilogx(f, mag); grid on
xlabel('频率(Hz)'); ylabel('增益'); title('滤波器的幅频特性曲线');
figure; semilogx(f, phase); grid on;
xlabel('频率(Hz)'); ylabel('相位(°)'); title('滤波器的相频特性曲线');
figure; impulse(Hs); grid on
xlabel('时间'); ylabel('幅度'); title('模拟滤波器脉冲响应');
figure; impz(H_z.num{:}, H_z.den{:}); grid on; %画双线性变换后的数字滤波器的脉冲响应
xlabel('点数'); ylabel('幅度'); title('数字滤波器脉冲响应');
end
end
最后
以上就是自信绿草为你收集整理的低通滤波-matlab低通滤波程序的全部内容,希望文章能够帮你解决低通滤波-matlab低通滤波程序所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复