文章目录一、信号处理入门先搞懂这两个概念二、MATLAB信号处理必学函数这几个你一定要记住1. fft fftshift看信号的频率成分2. filter去掉信号里的噪声你是不是刚接触信号处理看着一堆公式头大或者想用MATLAB处理数据但不知道从哪下手别慌今天我就把自己踩过的坑和总结的技巧分享给你保证让你从入门到能做简单项目——毕竟MATLAB可是信号处理领域的“瑞士军刀”用好它能省不少力气一、信号处理入门先搞懂这两个概念信号处理的核心其实就两个视角时域和频域。时域信号随时间变化的样子比如你说话时声音的大小变化。频域信号里包含哪些频率成分比如一首歌里的鼓点、吉他声各占多少。用MATLAB看这两个视角超级简单举个例子生成一个50Hz的正弦波然后画出它的时域和频域图。% 1. 设置参数fs1000;% 采样率每秒采1000个点t0:1/fs:1;% 时间范围0到1秒f_signal50;% 信号频率50Hz% 2. 生成正弦波xsin(2*pi*f_signal*t);% 3. 画时域图figure;subplot(2,1,1);plot(t,x);title(时域波形50Hz正弦波);xlabel(时间秒);ylabel(幅值);%4. 画频域图傅里叶变换Nlength(x);ffs/2*linspace(0,1,N/21);% 频率范围Xfft(x)/N;% 傅里叶变换并归一化X_amp2*abs(X(1:N/21));% 取幅值单边谱subplot(2,1,2);plot(f,X_amp);title(频域频谱50Hz正弦波);xlabel(频率Hz);ylabel(幅值);运行这段代码你会看到时域上是一条波动的曲线频域上在50Hz处有一个尖峰——这就是信号的“指纹”敲黑板傅里叶变换是信号处理的基础一定要掌握二、MATLAB信号处理必学函数这几个你一定要记住MATLAB的Signal Processing Toolbox里有几百个函数但新手先掌握这5个就够了1.fftfftshift看信号的频率成分fft是傅里叶变换函数但直接输出的频谱是“不对称”的需要用fftshift把它移到中心。比如Xfft(x);X_shiftedfftshift(X);f_shiftedlinspace(-fs/2,fs/2-fs/N,N);% 中心频率范围plot(f_shifted,abs(X_shifted));这样你就能看到正负频率的分布啦2.filter去掉信号里的噪声想去掉高频噪声用filter函数加一个低通滤波器就行。比如% 设计Butterworth低通滤波器order4;% 滤波器阶数cutoff100;% 截止频率Hz[b,a]butter(order,cutoff/(fs/2));% 归一化截止频率% 滤波x_filteredfilter(b,a,x);注意阶数越高滤波效果越“陡”但可能会导致信号失真——别调太高哦###3.conv信号的卷积运算卷积常用于平滑信号或计算系统响应。比如用一个滑动窗口平滑噪声信号noise0.1*randn(size(x));% 加噪声x_noisyxnoise;windowones(1,10)/10;% 10点平均窗口x_smoothedconv(x_noisy,window,same);% 卷积平滑运行后你会发现噪声明显减少了###4.audioreadaudioplayer处理音频信号MATLAB能直接读音频文件比如导入一段MP3处理后再播放% 导入音频[audio,fs]audioread(your_audio.mp3);% 替换成你的音频文件audiomean(audio,2);% 转成单声道如果是立体声% 播放原始音频playeraudioplayer(audio,fs);play(player);% 滤波后播放filtered_audiofilter(b,a,audio);play(audioplayer(filtered_audio,fs));小贴士如果音频太长先截取一段处理——不然运行会很慢###5.spectrogram看信号的时频变化有些信号的频率随时间变化比如语音这时候用spectrogram看时频图spectrogram(x_noisy,256,128,256,fs);% 参数窗口大小、重叠、FFT点数、采样率title(信号时频图);图里的颜色越深说明该时间点的该频率成分越强——比如你说话时不同音节对应不同的颜色块##三、实战案例用MATLAB修复一段嘈杂的音频光说不练假把式我们来做个实战修复一段有背景噪声的演讲音频。###步骤1导入并查看音频[audio,fs]audioread(speech_noisy.wav);audioaudio(:,1);% 取左声道t0:1/fs:length(audio)/fs-1/fs;% 画时域图figure;plot(t,audio);title(嘈杂音频时域图);你会看到波形里有很多“毛刺”——那就是噪声###步骤2分析噪声的频率通常背景噪声是低频或高频的我们用FFT看频谱Nlength(audio);Xfftshift(fft(audio));flinspace(-fs/2,fs/2-fs/N,N);figure;plot(f,abs(X));title(嘈杂音频频谱);假设我们发现噪声集中在8000Hz以上——那我们用低通滤波器去掉它###步骤3设计滤波器并滤波order3;cutoff8000;[b,a]butter(order,cutoff/(fs/2));audio_cleanfilter(b,a,audio);###步骤4对比效果% 播放对比play(audioplayer(audio,fs));% 原音频pause(5);% 等5秒play(audioplayer(audio_clean,fs));% 处理后音频是不是清晰多了小技巧如果噪声是周期性的比如电流声可以用 notch filter 去掉特定频率——用iirnotch函数就行##四、我踩过的坑这些错误你别犯忘记归一化频率用butter函数时截止频率要除以fs/2因为它默认归一化到0-1——我第一次用的时候没归一化结果滤波完全没效果FFT点数不够频谱分辨率fs/NN越小分辨率越低——想看清细节就把N设大一点比如用fft(x, 2^nextpow2(N))。卷积时用错模式conv的第三个参数选same能保持输出长度和输入一致选full会变长——别选错哦处理音频时没注意采样率不同音频的采样率不一样播放时一定要用正确的fs——不然声音会变调滤波器阶数太高阶数太高会导致信号“振铃”波形两端出现波动——4-6阶就够了##五、总结MATLAB信号处理的正确打开方式MATLAB信号处理其实没那么难先搞懂时域和频域的关系掌握几个核心函数fft、filter、conv、audioread多做实战案例比如处理自己的录音、传感器数据遇到问题就查文档MATLAB的help超详细。最后想说信号处理是一门“实践出真知”的学科——别光看教程动手写代码才是最快的学习方式下次遇到信号问题记得打开MATLAB它一定能帮你搞定如果这篇文章对你有帮助记得收藏哦——下次想用的时候直接翻小贴士MATLAB还有很多强大的工具比如Signal AnalyzerAPP——可视化操作不用写代码就能处理信号你可以在APP里拖放文件直接看时域、频域甚至滤波——新手必试我现在处理简单信号都用这个APP省了好多时间好了今天的分享就到这里。希望你能从中学到东西下次见对了如果你有什么MATLAB信号处理的问题可以在评论区留言——我会尽量回复但别问我怎么“激活”软件哦——支持正版哈哈开个玩笑完