matlab单边带调幅系统的建模仿真(笔记)
單邊帶調幅系統的建模仿真
希爾伯特變換
實信號 x(t) 的希爾伯特變換就是將該信號中所有頻率成分的信號份量移相 ?π/2 而得到的新信號,記為 x^(t)\hat{x}(t)x^(t)。對于單頻率正弦波信號,設 m(t) = Acos(2πft + φ),則其希爾伯特變換為
m^(t)=Acos?(2πft+??π2)=Asin?(2πft+?)\hat{m}(t)=A \cos \left(2 \pi f t+\phi-\frac{\pi}{2}\right)=A \sin (2 \pi f t+\phi)m^(t)=Acos(2πft+??2π?)=Asin(2πft+?)
對於任意實周期信號 x(t),可用周期傅里葉級數展開表示為
x(t)=∑n=0∞ancos?(2πnft+?n)x(t)=\sum_{n=0}^{\infty} a_{n} \cos \left(2 \pi n f t+\phi_{n}\right) x(t)=n=0∑∞?an?cos(2πnft+?n?)
希爾伯特變換為
x^(t)=∑n=0∞ancos?(2πnft+?n?π2)=∑n=0∞ansin?(2πnft+?n)\begin{aligned} \hat{x}(t) &=\sum_{n=0}^{\infty} a_{n} \cos \left(2 \pi n f t+\phi_{n}-\frac{\pi}{2}\right) \\ &=\sum_{n=0}^{\infty} a_{n} \sin \left(2 \pi n f t+\phi_{n}\right) \end{aligned} x^(t)?=n=0∑∞?an?cos(2πnft+?n??2π?)=n=0∑∞?an?sin(2πnft+?n?)?
實信號 x(t) 的解析信號 y(t) 是一個復信號,其實部為信號 x(t) 本身,其虛部為 x(t) 的希爾波特變換 x^(t)\hat{x}(t)x^(t)。即
y(t)=x(t)+jx^(t)y(t)=x(t)+\mathrm{j} \hat{x}(t) y(t)=x(t)+jx^(t)
例如對x(t)=cos(t)進行希爾伯特變換的程序如下:
t = 0:0.1:25; s = cos(t); s_h = hilbert(s); plot(t,real(s,h),t,imag(s_h),'k--');單邊帶調幅與解調原理
設基帶信號為:
m(t)=∑n=0∞ancos?(2πnft+?n)m(t)=\sum_{n=0}^{\infty} a_{n} \cos \left(2 \pi n f t+\phi_{n}\right) m(t)=n=0∑∞?an?cos(2πnft+?n?)
則以Acos(2pifc*t)為載波的雙邊帶輸出(DSB)信號為:
sDSB(t)=m(t)Acos?2πfct=Acos?2πfct∑n=0∞ancos?(2πnft+?n)=A2∑n=0∞ancos?(2π(fc+nf)t+?n)+A2∑n=0∞ancos?(2π(fc?nf)t??n).\begin{aligned} s_{D S B}(t) &=m(t) A \cos 2 \pi f_{c} t \\ &=A \cos 2 \pi f_{c} t \sum_{n=0}^{\infty} a_{n} \cos \left(2 \pi n f t+\phi_{n}\right) \\ &=\frac{A}{2} \sum_{n=0}^{\infty} a_{n} \cos \left(2 \pi\left(f_{c}+n f\right) t+\phi_{n}\right)+\frac{A}{2} \sum_{n=0}^{\infty} a_{n} \cos \left(2 \pi\left(f_{c}-n f\right) t-\phi_{n}\right).\end{aligned} sDSB?(t)?=m(t)Acos2πfc?t=Acos2πfc?tn=0∑∞?an?cos(2πnft+?n?)=2A?n=0∑∞?an?cos(2π(fc?+nf)t+?n?)+2A?n=0∑∞?an?cos(2π(fc??nf)t??n?).?
上式第一項為上邊帶,第二項為下邊帶。上邊帶的調制輸出為:
sSSB(t)=A2∑n=0∞ancos?(2π(fc+nf)t+?n)=A2∑n=0∞(ancos?(2πnft+?n)cos?2πfct?ansin?(2πnft+?n)sin?2πfct)=A2m(t)cos?2πfct?A2m^(t)sin?2πfct\begin{aligned} s_{S S B}(t) &=\frac{A}{2} \sum_{n=0}^{\infty} a_{n} \cos \left(2 \pi\left(f_{c}+n f\right) t+\phi_{n}\right) \\ &=\frac{A}{2} \sum_{n=0}^{\infty}\left(a_{n} \cos \left(2 \pi n f t+\phi_{n}\right) \cos 2 \pi f_{c} t-a_{n} \sin \left(2 \pi n f t+\phi_{n}\right) \sin 2 \pi f_{c} t\right) \\ &=\frac{A}{2} m(t) \cos 2 \pi f_{c} t-\frac{A}{2} \hat{m}(t) \sin 2 \pi f_{c} t \end{aligned} sSSB?(t)?=2A?n=0∑∞?an?cos(2π(fc?+nf)t+?n?)=2A?n=0∑∞?(an?cos(2πnft+?n?)cos2πfc?t?an?sin(2πnft+?n?)sin2πfc?t)=2A?m(t)cos2πfc?t?2A?m^(t)sin2πfc?t?
下邊帶為
sSSB(t)=A2m(t)cos?2πfct+A2m^(t)sin?2πfcts_{S S B}(t)=\frac{A}{2} m(t) \cos 2 \pi f_{c} t+\frac{A}{2} \hat{m}(t) \sin 2 \pi f_{c} t sSSB?(t)=2A?m(t)cos2πfc?t+2A?m^(t)sin2πfc?t
例題1
設基帶信號為一個在 150Hz 到 400Hz 內幅度隨頻率逐漸遞減的音頻信號,載波信號為 1000Hz 的正弦波,幅度為 1。仿真采樣率設為 10000Hz,仿真時間 1 秒。求 SSB 調制輸出信號波形和頻譜。
clear; Fs=10000; % 仿真的采樣率 t=1/Fs:1/Fs:1; % 仿真時間點 m_t(Fs*1)=0; % 基帶信號變量初始化 for F=150:400 % 基帶信號發生:頻率150Hz~400Hzm_t=m_t+0.003*sin(2*pi*F*t)*(400-F); % 幅度隨線性遞減 end m_t90shift=imag(hilbert(m_t)); % 基帶信號的希爾伯特變換 carriercos=cos(2*pi*1000*t); % 1000Hz載波 cos carriersin=sin(2*pi*1000*t); % 1000Hz正交載波 sin s_SSB1=m_t.*carriercos-m_t90shift.*carriersin; % 上邊帶SSB s_SSB2=m_t.*carriercos+m_t90shift.*carriersin; % 下邊帶SSB % 下面作出各波形以及頻譜 figure(1); subplot(4,2,1); plot(t(1:100),carriercos(1:100),... t(1:100),carriersin(1:100),'--r'); % 載波 subplot(4,2,2); plot([0:9999],abs(fft(carriercos))); % 載波頻譜 axis([0 2000 -500 6000]); subplot(4,2,3); plot(t(1:100),m_t(1:100)); % 基帶信號 subplot(4,2,4); plot([0:9999],abs(fft(m_t))); % 信號頻譜axis([0 2000 -500 6000]); subplot(4,2,5); plot(t(1:100),s_SSB1(1:100)); % SSB波形上邊帶 subplot(4,2,6); plot([0:9999],abs(fft(s_SSB1))); % SSB頻譜上邊帶axis([0 2000 -500 6000]); subplot(4,2,7); plot(t(1:100),s_SSB2(1:100)); % SSB波形下邊帶 subplot(4,2,8); plot([0:9999],abs(fft(s_SSB2))); % SSB頻譜下邊帶 axis([0 2000 -500 6000]);例題2
對例題1產生的單邊帶(上邊帶)信號進行相干解調,仿真其解調波形和幅度頻譜。
clear; Fs=10000; % 仿真的采樣率 t=1/Fs:1/Fs:1; % 仿真時間點 m_t(Fs*1)=0; % 基帶信號變量初始化 for F=150:400 % 基帶信號發生:頻率150Hz~400Hzm_t=m_t+0.003*sin(2*pi*F*t)*(400-F); % 幅度隨線性遞減 end m_t90shift=imag(hilbert(m_t)); % 基帶信號的希爾伯特變換 carriercos=cos(2*pi*1000*t); % 1000Hz載波 cos carriersin=sin(2*pi*1000*t); % 1000Hz正交載波 sin s_SSB1=m_t.*carriercos-m_t90shift.*carriersin; % 上邊帶SSBout=s_SSB1.*carriercos; % 相干解調 [a,b]=butter(4, 500/(Fs/2)); % 低通濾波器設計4階,截止頻率為500Hz demodsig=filter(a,b,out); % 解調輸出 % 下面作出各波形以及頻譜 figure(1); subplot(3,2,1); plot(t(1:100),s_SSB1(1:100)); % SSB波形 subplot(3,2,2); plot([0:9999],abs(fft(s_SSB1))); % SSB頻譜axis([0 5000 -500 6000]); subplot(3,2,3); plot(t(1:100),out(1:100)); % 相干解調波形 subplot(3,2,4); plot([0:9999],abs(fft(out))); % 相干解調頻譜axis([0 3000 -500 6000]); subplot(3,2,5); plot(t(1:100),demodsig(1:100)); % 低通輸出信號 subplot(3,2,6); plot([0:9999],abs(fft(demodsig)));% 低通輸出信號的頻譜axis([0 3000 -500 6000]);例題3
設計一個單邊帶發信機、帶通信道和相應的接收機,參數要求如下。
(1)輸入話音信號為一個話音信號,采樣率 8000Hz。話音輸入后首先進行預濾波,預濾5.6 單邊帶調幅系統的建模仿真 預濾波器是一個頻率范圍在 [300,3400]Hz的帶通濾波器。其目的是將話音頻譜限制在 3400Hz 以下。單邊帶調制的載波頻率設計為 10KHz,調制輸出上邊帶。要求觀測單邊帶調制前後的信號功率譜。
(2)信道是一個帶限高斯噪聲信道,其通帶頻率范圍是 [10000,13500]Hz。要求能夠根據信噪比 SNR 要求加入高斯噪聲。
(3)接收機采用相干解調方式。為了模擬載波頻率誤差對解調話音音質的影響,設本地載波頻率為 9.8KHz,與發信機載波頻率相差 200Hz。解調濾波器設計為 300Hz 到 3400Hz 的帶通濾波器。
根據題設參數,系統中信號最高頻率約為 14KHz。為了較好地顯示調制波形,系統仿真采樣率設為 50KHz,滿足取樣定理。由於話音信號的采樣率為 8000Hz,與系統仿真采樣率不相等,因此,在進行信號處理之前,必須將話音信號的采樣率提高到 50KHz,可用插值函數來完成這一任務。
首先編寫程序將基帶音頻信號讀入,進行 [300,3400]Hz 的帶通濾波,并將信號采樣率提高到 50KHz,進行單邊帶調制之后,將調制輸出結果保存為 wav 文件,程序如下。
音頻文件下載
為了仿真指定信噪比的信道,編寫信道仿真函數如下:
function out=ch5example9prog2(in, SNRdB) % SNR_dB 設定信噪比 % in 輸入信號序列 % out 信道輸出序列 Fs=50000; %系統采樣率 Power_of_in=var(in); Power_of_noise=Power_of_in/(10.^(SNRdB/10)); bandwidth=13500-10000; % 信道帶寬 N0=Power_of_noise/bandwidth; % 噪聲功率譜密度值W/Hz Gauss_noise=sqrt(N0*Fs/2).*randn(size(in)); [num, den]=butter(4, [10000 13500]/(Fs/2)); % 帶通信道10KHz到13.5KHz signal_of_filter_out=filter(num, den, in); noise_of_filter_out=filter(num, den, Gauss_noise); SNR_dB=10*log10(var(signal_of_filter_out)/var(noise_of_filter_out)) % 測量得出的信噪比 out=signal_of_filter_out+noise_of_filter_out; % 信道輸出利用信道仿真函數計算 SSB 調制信號通過信道后的輸出結果,例如計算出信道信噪比為 20dB 時的信道輸出,并將結果保存為「 Channel OUT.wav 」文件,輸出仿真的實際測量信噪比為 19.7dB,與設置值相符合。
clear; [in, Fs] = audioread("SSB_OUT.wav"); SNRdB = 20; out = ch5example9prog2(in, SNRdB); audiowrite("channel_out.wav",out,Fs);SNRdB = 19.6597最后實現單邊接收機:
clear; [recvsignal, Fs]=audioread('Channel_out.wav');% 讀入信道輸出信號數據 t=(1/Fs:1/Fs: length(recvsignal)/Fs)'; fc_local=10000-200; % 本地載波頻率9.8KHz local_carrier=cos(2*pi*fc_local.*t); % 本地載波 xianggan_out=recvsignal.*local_carrier; % 相干解調 [fenzi,fenmu]=butter(3,[300 3400]/(Fs/2)); % 設計300Hz~3400Hz的帶通濾波器 demod_out=filter(fenzi,fenmu,xianggan_out); % 對相干輸出信號進行濾波 sound(demod_out/max(demod_out), Fs); % 播放解調音頻 audiowrite('SSBDemod_OUT.wav',demod_out,Fs); % 保存輸出信號摘選的書籍:《MATLAB/Simulink通信系統建模與仿真實例分析》
總結
以上是生活随笔為你收集整理的matlab单边带调幅系统的建模仿真(笔记)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 新鲜出炉《大航海仓库小管家》
- 下一篇: Linux查看tomcat是否关闭以及强