
簡介這份資源是南京郵電大學(xué)「信號分析與處理實驗」課程的完整實驗報告面向正在修讀數(shù)字信號處理、信號與系統(tǒng)相關(guān)課程的高校學(xué)生以及需要借助 MATLAB 完成信號處理實驗與課程設(shè)計的學(xué)習(xí)者。報告圍繞信號的產(chǎn)生和運(yùn)算、連續(xù)時間信號的頻域分析、時域采樣與重建、離散傅里葉變換及應(yīng)用等核心實驗展開并延伸至連續(xù)時間系統(tǒng)頻域與復(fù)頻域分析、數(shù)字濾波器設(shè)計及信號處理綜合應(yīng)用配有 MATLAB 程序示例與圖形結(jié)果便于對照理解時域和頻域特性。資源包共 1 個 docx 文件約 1.02MB內(nèi)容為實驗?zāi)康?、實驗?nèi)容、過程與結(jié)果分析的完整記錄可直接參考實驗思路、程序編寫與數(shù)據(jù)解析方法。目前已有 952 人學(xué)習(xí)適合作為實驗預(yù)習(xí)、報告撰寫與 DSP 入門復(fù)習(xí)的參考材料。1. 信號處理實驗的“黑匣子”為什么你照著敲代碼卻看不懂頻譜很多人第一次做信號分析與處理實驗時都有過這種體驗MATLAB 代碼一行行敲進(jìn)去stem、plot、fft跑得飛起圖也畫出來了可一旦被問“這個頻譜為什么長這樣”“采樣間隔改一下為什么就混疊了”腦子立刻空白。問題不在于不會用 MATLAB而在于把信號處理當(dāng)成了“調(diào)包畫圖”的玄學(xué)——代碼是抄的結(jié)果是懵的。這份實驗報告合集實驗 1 到 4真正的價值不是給你幾段能跑的腳本而是把“信號從時域到頻域、從連續(xù)到離散、從采樣到重建”這條鏈路完整地攤開。它逼著你親手產(chǎn)生單位階躍、復(fù)指數(shù)、正弦序列親手做卷積、算奇偶部、畫雙邊譜、觀察吉布斯過沖、驗證奈奎斯特間隔。每一個現(xiàn)象背后都對應(yīng)一個可推導(dǎo)的機(jī)制。搞懂這些機(jī)制你才算真正跨進(jìn)了 DSP 的門而不是停留在“MATLAB 繪圖員”的層面。下面就從信號怎么被“造”出來開始一層層拆到采樣定理和重建誤差的底層邏輯。2. 信號的產(chǎn)生與運(yùn)算從序列定義到卷積的底層邏輯2.1 離散序列不是“連續(xù)曲線的采樣點”而是獨(dú)立定義的映射實驗一里最先碰到的坑是把離散序列當(dāng)成連續(xù)信號來理解。比如單位階躍序列u[n]代碼里寫的是x[zeros(1,10) 1 ones(1,20)]配合n-10:20。這行代碼的含義是在索引n-10到n-1上取 0在n0上取 1在n1到n20上取 1。它和連續(xù)階躍函數(shù)u(t)最大的區(qū)別在于離散序列只在整數(shù)點上有定義點與點之間沒有“過渡”也沒有“無窮小的跳變”。這解釋了一個常見困惑為什么u[n7]的代碼是[zeros(1,10M) 1 ones(1,20-M)]因為左移 7 位意味著原本在n0處的跳變移到了n-7所以前面補(bǔ)的零從 10 個變成 17 個后面剩下的 1 從 20 個變成 13 個。移位在離散域就是索引的平移不涉及任何插值或重采樣。理解這一點后面做卷積、做 DFT 的循環(huán)移位才不會翻車。復(fù)指數(shù)序列x[n]1.5e^{(0.2j3)n}更值得細(xì)看。代碼里c0.23*1i然后xK*exp(c*n)最后分別畫real(x)和imag(x)。這里藏著一個關(guān)鍵機(jī)制復(fù)指數(shù)序列的實部和虛部都是衰減或增長振蕩的。實部對應(yīng)1.5e^{0.2n}\cos(3n)虛部對應(yīng)1.5e^{0.2n}\sin(3n)。很多新手看到實部圖里幅度在漲以為是“信號不穩(wěn)定”其實只是e^{0.2n}這個包絡(luò)在起作用。把復(fù)指數(shù)拆成包絡(luò)和振蕩兩部分是理解 Z 變換和傅里葉變換的起點。2.2 奇偶分解為什么fliplr能拆出對稱分量實驗一里有一個看似簡單但極其重要的操作對x[n]{1,2,4,-5,-2}n-2到n2做奇偶分解。代碼只有三行核心y fliplr(x); % 時間反轉(zhuǎn)x[-n] xe 0.5*(xy); % 偶部 xo 0.5*(x-y); % 奇部這里fliplr做的是左右翻轉(zhuǎn)對應(yīng)時域反轉(zhuǎn)x[-n]。但要注意這個操作成立的前提是序列的索引關(guān)于n0對稱。如果序列從n0開始直接fliplr會得到錯誤的“反轉(zhuǎn)”結(jié)果因為x[0]翻轉(zhuǎn)后應(yīng)該還在n0而不是跑到末尾。實驗里特意選了n-2:2這個對稱區(qū)間就是為了讓fliplr和真正的時域反轉(zhuǎn)等價。偶部xe[n](x[n]x[-n])/2滿足xe[n]xe[-n]奇部xo[n](x[n]-x[-n])/2滿足xo[n]-xo[-n]。這個分解在信號處理里的意義是任何序列都可以拆成對稱部分和反對稱部分而傅里葉變換的實部對應(yīng)偶對稱、虛部對應(yīng)奇對稱。后面做 DFT 時如果輸入是實序列頻譜的共軛對稱性就是從這里來的。很多人背“實序列頻譜共軛對稱”這個結(jié)論卻不知道它和奇偶分解是同一件事。2.3 線性卷積conv背后到底在算什么實驗一里x[n](-1)^n0≤n≤14和h[n]cos(0.25πn)0≤n≤7做卷積代碼直接調(diào)用yconv(x,h)結(jié)果長度是158-122對應(yīng)n0:21。這里有兩個必須搞清楚的機(jī)制。第一卷積的物理含義是“翻轉(zhuǎn)、平移、相乘、求和”。conv函數(shù)內(nèi)部做的就是這件事把h翻轉(zhuǎn)然后沿著x滑動每個位置做點積。對于長度分別為L和M的序列輸出長度是LM-1。這個公式不是隨便定的而是因為滑動窗口從完全重疊到完全分離一共經(jīng)歷了LM-1個位置。第二conv默認(rèn)從n0開始計算它不關(guān)心你原來的索引是0:14還是-5:9。如果你輸入的序列索引不是從 0 開始conv的輸出索引需要你自己平移。比如x的索引是-2:2h的索引是0:3那么卷積結(jié)果的起始索引是-20-2終點索引是235。實驗里兩個序列都從 0 開始所以輸出索引直接是0:21不需要額外平移。這個細(xì)節(jié)在后續(xù)做系統(tǒng)響應(yīng)、做濾波器時域分析時經(jīng)常被忽略導(dǎo)致畫出來的圖“對不上”。連續(xù)正弦信號x_a(t)cos(5000πt)4sin(2000πt)sin(3000πt)的繪制則提醒另一件事連續(xù)信號在 MATLAB 里是用極密的采樣點“假裝”的。代碼里t0:0.5e-6:6e-3采樣間隔 0.5 微秒對應(yīng)采樣率 2 MHz。這個采樣率遠(yuǎn)高于信號最高頻率分量5000π rad/s 對應(yīng) 2500 Hz2000π 和 3000π 的乘積產(chǎn)生 1000 Hz 和 5000 Hz 分量所以畫出來的波形是可信的。如果采樣率不夠畫出來的“連續(xù)波形”本身就是混疊的產(chǎn)物后面做頻域分析會全盤皆錯。3. 連續(xù)時間信號的頻域分析從傅里葉級數(shù)到吉布斯過沖3.1 周期矩形脈沖的雙邊譜為什么 T 增大譜線變密實驗二的核心是周期矩形脈沖信號的傅里葉級數(shù)。代碼P2_1畫的是A1, τ0.1s, T0.5s的雙邊幅度譜和相位譜。這里的關(guān)鍵參數(shù)是占空比τ/T和基頻Ω?2π/T。雙邊譜的譜線出現(xiàn)在kΩ?處幅度正比于sinc(kΩ?τ/2)。當(dāng)T從 0.5s 增大到 1s 和 2s 時基頻Ω?從4π減小到2π和π譜線間隔變小所以譜變得更“密”。同時因為c?Aτ/T直流分量隨T增大而減小整體幅度譜的值也下降。這個現(xiàn)象背后是傅里葉級數(shù)到傅里葉變換的過渡周期趨于無窮大時離散譜線間隔趨于零譜線連成一片就變成了連續(xù)頻譜密度。實驗里讓你比較T1s和T2s的圖其實是在用肉眼觀察這個極限過程。相位譜同樣值得注意。對于實偶對稱的矩形脈沖c_k是實數(shù)相位只有 0 和 π 兩種取值對應(yīng)正負(fù)號。如果脈沖不是關(guān)于原點對稱的相位就會變成連續(xù)的斜線對應(yīng)時移。這個“時移對應(yīng)相位線性變化”的規(guī)律在后續(xù)做 DFT 的相位分析時反復(fù)出現(xiàn)。3.2 諧波疊加與吉布斯現(xiàn)象為什么過沖不會消失P2_2用有限項傅里葉級數(shù)合成矩形脈沖N取 15、25、50?,F(xiàn)象是N越大合成波形越接近矩形但在不連續(xù)點附近始終存在過沖而且過沖的峰值不隨N增大而減小只是越來越靠近跳變點。這就是吉布斯現(xiàn)象。實驗里P2_4用代碼算出了過沖最大值function p2_4(N) t-2:10^(-4):2; A1; tau1; T2; Omega_0 2*pi/T; c0A*tau/T; f_Nc0*ones(1,length(t)); for k1:1:N f_N f_N 2*A*tau/T*sinc(k*Omega_0*tau/2/pi)*cos(k*Omega_0*t); end overshoot max(f_N); fprintf(The maximum overshoot is %.4f\n, overshoot); end運(yùn)行結(jié)果是1.0896也就是約 8.96% 的過沖。這個數(shù)字不是偶然的它等于(2/π)∫?^π (sin t / t) dt - 1是一個只與跳變幅度有關(guān)的常數(shù)。無論N取多大只要是用有限項傅里葉級數(shù)去逼近有跳變的函數(shù)這個過沖就存在。要消除它只能換用其他基函數(shù)比如小波或者對級數(shù)做求和加速比如 Fejér 求和。實驗里讓你親手算出這個數(shù)比背十遍“吉布斯現(xiàn)象”定義都管用。3.3 男女聲頻譜差異基音頻率和共振峰的物理含義實驗二最后一部分用 FFT 分析男女聲錄音的頻譜?,F(xiàn)象是男聲波形基音頻率低、振幅變化大頻譜能量集中在低頻女聲基音頻率高、波形細(xì)致頻譜能量分布更均勻。這里涉及兩個概念基音頻率pitch和共振峰formant?;纛l率由聲帶振動決定男性通常在 100-150 Hz女性在 200-300 Hz。在頻譜上表現(xiàn)為一系列間隔為基音頻率的諧波。共振峰由聲道形狀決定表現(xiàn)為頻譜包絡(luò)上的峰值。男聲聲道更長共振峰頻率更低女聲聲道更短共振峰頻率更高。實驗里讓你“查閱資料回答男聲轉(zhuǎn)女聲的方法”答案里提到的基頻調(diào)整、聲道長度調(diào)整、諧波調(diào)整本質(zhì)上都是在改這兩個東西。用 MATLAB 做 FFT 只是第一步真正難的是從頻譜里把基音和共振峰分離出來——這通常需要倒譜分析或線性預(yù)測編碼實驗報告里沒有展開但方向已經(jīng)指出來了。4. 時域采樣與重建奈奎斯特間隔不是“經(jīng)驗值”而是硬約束4.1 采樣定理的驗證為什么 Ts2 一定會混疊實驗三用升余弦脈沖信號做采樣和頻譜分析。提示里給了一個關(guān)鍵推導(dǎo)升余弦脈沖的頻譜大部分集中在[0, 2π/τ]設(shè)截止頻率Ω_m2π/τ代入?yún)?shù)得Ω_m2所以奈奎斯特間隔T_s1/(2f_m)π/2。當(dāng)T_sπ/2時采樣頻譜剛好不混疊當(dāng)T_s2時T_s π/2采樣頻譜發(fā)生混疊。這個推導(dǎo)里有一個容易忽略的點Ω_m2是角頻率對應(yīng)的實際頻率是f_mΩ_m/(2π)1/π。奈奎斯特率是2f_m2/π奈奎斯特間隔是1/(2f_m)π/2。實驗里直接給T_sπ/2是因為升余弦脈沖的頻譜不是嚴(yán)格帶限的Ω_m只是一個“大部分能量集中”的邊界。如果信號嚴(yán)格帶限T_sπ/2剛好滿足如果信號有高頻拖尾即使T_sπ/2也可能有輕微混疊。實驗里判斷“未發(fā)生混疊”是基于頻譜圖的主瓣是否重疊不是嚴(yán)格的數(shù)學(xué)證明。當(dāng)T_s2時采樣率f_s1/T_s0.5遠(yuǎn)低于奈奎斯特率2/π≈0.637混疊不可避免。頻譜圖上會看到原本在高頻的副本搬移到了低頻和主瓣重疊。這個現(xiàn)象在音頻處理里就是“ aliasing ”聽起來像金屬聲或鳥叫。實驗里讓你親眼看到混疊后的頻譜比記公式深刻得多。4.2 信號重建理想低通濾波器為什么在現(xiàn)實中做不到P3_2做的是采樣后重建。理想重建是用一個截止頻率為Ω_cΩ_m的理想低通濾波器對采樣信號做濾波恢復(fù)出原始連續(xù)信號。代碼里用sinc插值實現(xiàn)。當(dāng)T_sπ/2時重建誤差很小當(dāng)T_s2且Ω_cΩ_m時重建誤差大大增加。誤差增大的原因有兩層第一采樣間隔增大導(dǎo)致頻譜混疊高頻分量被“折疊”到低頻這部分信息在重建時無法恢復(fù)第二低通濾波器的截止頻率設(shè)為Ω_m但混疊后的信號里包含了原本高于Ω_m的頻率分量這些分量被濾波器保留了一部分表現(xiàn)為噪聲。實驗報告里寫“高頻分量噪聲成分增加”指的就是這個。這里有一個常見的誤解很多人以為只要采樣率滿足奈奎斯特定理重建就完美。實際上理想低通濾波器在時域是sinc函數(shù)它無限長、非因果物理不可實現(xiàn)。實際重建只能用近似濾波器會引入相位失真和幅度失真。實驗里用sinc插值是在“模擬”理想重建不是真的實現(xiàn)了它。理解這個區(qū)別才能明白為什么實際音頻系統(tǒng)里過采樣和抗混疊濾波器那么重要。4.3 采樣間隔與誤差的定量關(guān)系實驗里沒有給出誤差的定量公式但可以從機(jī)制上推導(dǎo)。對于升余弦脈沖采樣后的重建誤差主要來自兩部分混疊誤差和截斷誤差?;殳B誤差隨T_s增大而增大大致正比于T_s超過奈奎斯特間隔的部分。截斷誤差來自sinc插值的有限長度在實驗里因為t的范圍足夠大可以忽略。如果要在實驗里定量驗證可以計算重建信號與原始信號的均方誤差error mean((xa_recon - xa_original).^2);當(dāng)T_sπ/2時error應(yīng)該很小當(dāng)T_s2時error會顯著增大。這個計算在實驗報告里沒有寫但它是驗證采樣定理最直接的方法。很多新手做完實驗只畫圖不量化結(jié)果對“誤差增大”只有模糊的視覺印象沒有數(shù)字概念。加上這一行整個實驗的嚴(yán)謹(jǐn)性就上了一個臺階。5. 避坑與排查信號處理實驗里最容易翻車的五個地方5.1 現(xiàn)象conv結(jié)果長度不對畫圖時橫坐標(biāo)對不上原因conv輸出長度是LM-1但很多人直接用輸入序列的索引作為輸出索引。如果輸入索引不是從 0 開始輸出索引需要平移。解決先確定輸出起始索引n_start n_x_start n_h_start然后生成n_out n_start : n_start length(y) - 1。畫圖時用stem(n_out, y)不要用stem(y)。5.2 現(xiàn)象fft得到的頻譜和理論譜對不上幅度差一個系數(shù)原因MATLAB 的fft不除以N而傅里葉級數(shù)系數(shù)c_k通常要除以N或T。另外fft的輸出順序是[0, 1, ..., N-1]對應(yīng)頻率[0, f_s/N, ..., f_s(N-1)/N]不是雙邊譜的順序。解決用fftshift把零頻移到中心用abs(fft(x))/N得到幅度譜。如果要畫雙邊譜頻率軸用(-N/2:N/2-1)*f_s/N。5.3 現(xiàn)象采樣后頻譜圖看起來“沒混疊”但重建誤差很大原因頻譜圖的分辨率不夠或者只看了幅度譜沒看相位譜?;殳B可能發(fā)生在高頻段幅度很小肉眼看不出來但重建時誤差會累積。解決把頻譜圖放大到高頻段用對數(shù)坐標(biāo)20*log10(abs(X))觀察。同時計算重建誤差的均方值不要只靠肉眼判斷。5.4 現(xiàn)象吉布斯過沖的數(shù)值每次運(yùn)行都不一樣原因t的步長10^(-4)可能沒有剛好落在不連續(xù)點上導(dǎo)致max(f_N)取到的峰值位置有微小偏移。另外N越大過沖峰值越靠近跳變點但t的離散化可能錯過真正的峰值。解決用更細(xì)的步長比如10^(-5)或者在跳變點附近加密采樣。理論上過沖極限是1.0896實際計算值應(yīng)該穩(wěn)定在這個數(shù)附近。5.5 現(xiàn)象男女聲頻譜對比時發(fā)現(xiàn)女聲低頻能量反而更高原因錄音設(shè)備的頻響特性、錄音距離、音量歸一化都會影響頻譜。如果女聲錄音音量更大低頻能量可能反而更高。解決先對兩段音頻做歸一化除以最大絕對值再計算頻譜。比較時看的是頻譜形狀基音間隔、共振峰位置不是絕對幅度。6. 從實驗到工程采樣定理的邊界與重建的取舍做完這四個實驗最容易留下的印象是“采樣率大于兩倍最高頻率就萬事大吉”。但真實工程里這個結(jié)論只在理想條件下成立。信號不是嚴(yán)格帶限的濾波器不是理想低通采樣時鐘有抖動量化有噪聲。奈奎斯特間隔是一個下界不是舒適區(qū)。實際系統(tǒng)里通常把采樣率做到奈奎斯特率的 2.5 到 10 倍就是為了給抗混疊濾波器留過渡帶給時鐘抖動留裕量。另一個取舍是重建濾波器的設(shè)計。理想sinc插值在數(shù)學(xué)上完美但時域無限長無法實時實現(xiàn)。實際系統(tǒng)用零階保持器加補(bǔ)償濾波器或者用多相濾波器組做插值。這些方法都會引入幅度失真和相位失真需要在通帶平坦度和阻帶衰減之間做權(quán)衡。實驗里用sinc插值是在“事后”重建沒有實時性要求所以可以用很長的窗口。如果換成實時音頻流就必須用短濾波器誤差會更大。還有一個容易被忽略的點采樣定理保證的是“可以從采樣點唯一恢復(fù)原信號”但前提是原信號嚴(yán)格帶限。如果信號有寬帶噪聲即使采樣率很高噪聲也會混疊。這時候需要先做抗混疊濾波把噪聲帶寬限制在奈奎斯特頻率以內(nèi)。實驗里沒有涉及噪聲但實際做音頻采集或傳感器信號處理時抗混疊濾波器是前端電路里最關(guān)鍵的模擬部分。我自己的習(xí)慣是每次做采樣相關(guān)的設(shè)計先算奈奎斯特率然后問三個問題——信號真的帶限嗎抗混疊濾波器的過渡帶夠嗎重建濾波器的相位失真在可接受范圍內(nèi)嗎這三個問題答不上來采樣率再高也是白搭。從那以后我每次看到“采樣率 44.1 kHz 就夠了”這種說法都會先確認(rèn)信號帶寬和濾波器特性再下結(jié)論。希望這份實驗報告里的代碼和現(xiàn)象能幫你把采樣定理從公式變成直覺。本文還有配套的精品資源點擊獲取