ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

用MATLAB玩转噪声信号与数字滤波器

用MATLAB玩转噪声信号与数字滤波器

MATLAB 数字信号处理 滤波器 低通滤波器 巴特沃斯滤波器 fir滤波器 iir滤波器 信号与系统 通信原理 相关实验和仿真 模拟系统调制解调仿真音频信号处理 脉冲压缩技术 GUI界面设计低通高通带通滤波器matlab 通信原理 信号的调制解调 AM调制解调 FM调制解调 基带信号调制 余弦滚降 数字信号处理 matlab仿真 通信原理仿真 OOK 2pSK BPSK 1.噪声信号的频谱分析。 2.设计数字滤波器和画出频率响应。 利用窗函数和最佳逼近的方法设计FIR滤波器;最后,利用MATLAB中的函数freqz画出各滤波器的频率响应。 3.用滤波器对噪声图像进行滤波。 4.比较几种滤波器去滤波前后噪声图像的波形及频谱。

先来点刺激的——生成白噪声并看它的频谱。MATLAB里造噪声就跟炒菜放盐一样简单:

fs = 1000; % 采样率 t = 0:1/fs:1; noise = 0.5*randn(size(t)); % 高斯白噪声 figure subplot(2,1,1) plot(t,noise) title('时域波形') N = length(noise); f = (-N/2:N/2-1)*(fs/N); subplot(2,1,2) plot(f, 20*log10(fftshift(abs(fft(noise))))) title('频域特性')

这段代码里的骚操作:fftshift把负频率部分移到左边,20*log10转换成dB值显示。跑完就能看到噪声信号在全频带均匀分布的经典特征。

FIR滤波器设计实战:咱们用汉明窗和最小二乘法两种姿势搞起。窗函数法适合快速实现:

fc = 100; % 截止频率 order = 50; b = fir1(order, fc/(fs/2), 'low', hamming(order+1)); freqz(b,1,1024,fs)

fir1的第三个参数要是归一化频率,这里用采样率的一半做分母。想提升阻带衰减?试试切比雪夫逼近:

b = firpm(order, [0 0.15 0.25 1], [1 1 0 0], [1 2]); freqz(b,1,1024,fs)

这个设计参数里的[1 2]权重分配让通带波动比阻带小一半。跑出来的频率响应曲线明显比窗函数法的过渡带更陡峭。

IIR滤波器也不能少,巴特沃斯是经典选择:

[b,a] = butter(4, fc/(fs/2), 'low'); freqz(b,a,1024,fs)

四阶巴特沃斯的相频特性明显非线性,这点在时域滤波时会产生相位失真。不过计算量比FIR小得多,适合实时处理。

MATLAB 数字信号处理 滤波器 低通滤波器 巴特沃斯滤波器 fir滤波器 iir滤波器 信号与系统 通信原理 相关实验和仿真 模拟系统调制解调仿真音频信号处理 脉冲压缩技术 GUI界面设计低通高通带通滤波器matlab 通信原理 信号的调制解调 AM调制解调 FM调制解调 基带信号调制 余弦滚降 数字信号处理 matlab仿真 通信原理仿真 OOK 2pSK BPSK 1.噪声信号的频谱分析。 2.设计数字滤波器和画出频率响应。 利用窗函数和最佳逼近的方法设计FIR滤波器;最后,利用MATLAB中的函数freqz画出各滤波器的频率响应。 3.用滤波器对噪声图像进行滤波。 4.比较几种滤波器去滤波前后噪声图像的波形及频谱。

图像降噪实战:读入带椒盐噪声的图片试试效果

img = im2double(imread('noisy_img.jpg')); h_fir = ftrans2(b); % FIR系数转2D滤波器 img_fir = imfilter(img, h_fir); h_iir = ftrans2(b,a); % IIR系数转换 img_iir = imfilter(img, h_iir);

这里有个坑:IIR滤波器可能会引起图像边界震荡,记得用replicate选项处理边缘。滤波后的PSNR值计算:

psnr_fir = 10*log10(1/immse(img_fir, clean_img)); psnr_iir = 10*log10(1/immse(img_iir, clean_img));

数据对比显示FIR通常比同阶IIR高3-5dB,但处理时间可能是IIR的两倍以上。

频谱对比神器:把原始信号和滤波后信号做FFT叠加显示

[Pxx_orig,f] = pwelch(noise, 1024, 512, 1024, fs); Pxx_filt = pwelch(filtered_sig, 1024, 512, 1024, fs); semilogy(f, Pxx_orig, f, Pxx_filt) legend('原始信号','滤波后')

pwelch做功率谱估计比直接FFT更平滑,特别适合观察阻带衰减效果。巴特沃斯滤波器在截止频率附近的"膝盖"曲线明显,而FIR最小二乘法的阻带波纹会周期性波动。

GUI设计彩蛋:做个交互式滤波器设计工具

function update_filter() fc = get(slider,'Value'); b = fir1(50, fc/500); freqz(b,1,1024,1000,'whole',ax1); % 实时显示滤波效果 y = filter(b,1,noise); plot(ax2, y(1:200)); end

uicontrol做个滑动条控制截止频率,实现动态更新频率响应曲线和时域波形。这种实时反馈对理解滤波器特性帮助极大,比看静态图强十倍。

避坑指南

  1. FIR滤波器阶数选奇数可避免群延迟非整数
  2. IIR滤波用filtfilt实现零相位失真
  3. 图像滤波前务必做边界扩展
  4. fvtool工具可直接对比多个滤波器特性

不同场景的选择策略:实时系统首选IIR,音视频处理用FIR,图像处理可尝试中值滤波等非线性方法。下次试试把FM调制信号混入噪声,再用自适应滤波器来降噪,那才是真功夫!

返回列表