matlab单边带调幅系统的建模仿真(笔记)

单边带调幅系统的建模仿真

希尔伯特变换

实信号 x(t) 的希尔伯特变换就是将该信号中所有频率成分的信号份量移相 −π/2 而得到的新信号,记为 x ^ ( t ) \hat{x}(t) x^(t)。对于单频率正弦波信号,设 m(t) = Acos(2πft + φ),则其希尔伯特变换为

m ^ ( t ) = A cos ⁡ ( 2 π f t + ϕ − π 2 ) = A sin ⁡ ( 2 π f t + ϕ ) \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 ∞ a n cos ⁡ ( 2 π n f t + ϕ n ) x(t)=\sum_{n=0}^{\infty} a_{n} \cos \left(2 \pi n f t+\phi_{n}\right) x(t)=n=0ancos(2πnft+ϕn)
希尔伯特变换为

x ^ ( t ) = ∑ n = 0 ∞ a n cos ⁡ ( 2 π n f t + ϕ n − π 2 ) = ∑ n = 0 ∞ a n sin ⁡ ( 2 π n f t + ϕ 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=0ancos(2πnft+ϕn2π)=n=0ansin(2πnft+ϕn)
实信号 x(t) 的解析信号 y(t) 是一个复信号,其实部为信号 x(t) 本身,其虚部为 x(t) 的希尔波特变换 x ^ ( t ) \hat{x}(t) x^(t)。即

y ( t ) = x ( t ) + j x ^ ( 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--');

matlab单边带调幅系统的建模仿真(笔记)_第1张图片

单边带调幅与解调原理

设基带信号为:

m ( t ) = ∑ n = 0 ∞ a n cos ⁡ ( 2 π n f t + ϕ n ) m(t)=\sum_{n=0}^{\infty} a_{n} \cos \left(2 \pi n f t+\phi_{n}\right) m(t)=n=0ancos(2πnft+ϕn)

则以Acos(2pifc*t)为载波的双边带输出(DSB)信号为:

s D S B ( t ) = m ( t ) A cos ⁡ 2 π f c t = A cos ⁡ 2 π f c t ∑ n = 0 ∞ a n cos ⁡ ( 2 π n f t + ϕ n ) = A 2 ∑ n = 0 ∞ a n cos ⁡ ( 2 π ( f c + n f ) t + ϕ n ) + A 2 ∑ n = 0 ∞ a n cos ⁡ ( 2 π ( f c − n f ) 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πfct=Acos2πfctn=0ancos(2πnft+ϕn)=2An=0ancos(2π(fc+nf)t+ϕn)+2An=0ancos(2π(fcnf)tϕn).
上式第一项为上边带,第二项为下边带。上边带的调制输出为:

s S S B ( t ) = A 2 ∑ n = 0 ∞ a n cos ⁡ ( 2 π ( f c + n f ) t + ϕ n ) = A 2 ∑ n = 0 ∞ ( a n cos ⁡ ( 2 π n f t + ϕ n ) cos ⁡ 2 π f c t − a n sin ⁡ ( 2 π n f t + ϕ n ) sin ⁡ 2 π f c t ) = A 2 m ( t ) cos ⁡ 2 π f c t − A 2 m ^ ( t ) sin ⁡ 2 π f c t \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)=2An=0ancos(2π(fc+nf)t+ϕn)=2An=0(ancos(2πnft+ϕn)cos2πfctansin(2πnft+ϕn)sin2πfct)=2Am(t)cos2πfct2Am^(t)sin2πfct

下边带为

s S S B ( t ) = A 2 m ( t ) cos ⁡ 2 π f c t + A 2 m ^ ( t ) sin ⁡ 2 π f c t s_{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)=2Am(t)cos2πfct+2Am^(t)sin2πfct

例题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~400Hz
    m_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]);

matlab单边带调幅系统的建模仿真(笔记)_第2张图片

例题2

对例题1产生的单边带(上边带)信号进行相干解调,仿真其解调波形和幅度频谱。

clear;
Fs=10000;      % 仿真的采样率
t=1/Fs:1/Fs:1; % 仿真时间点
m_t(Fs*1)=0;   % 基带信号变量初始化
for F=150:400  % 基带信号发生:频率150Hz~400Hz
    m_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

out=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]);

matlab单边带调幅系统的建模仿真(笔记)_第3张图片

例题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 文件,程序如下。

[wav,fs]=audioread('GDGvoice8000.wav');
t_end=1/fs *length(wav);  % 计算声音的时间长度
Fs=50000;                 % 仿真系统采样率
t=1/Fs:1/Fs:t_end;        % 仿真系统采样时间点
% 设计300Hz~3400Hz的带通预滤波器H(z) 
[fenzi,fenmu]=butter(3,[300 3400]/(fs/2));
% 对音频信号进行预滤波 
wav=filter(fenzi,fenmu,wav);
% 利用插值函数将音频信号的采样率提升为Fs=50KHz 
wav=interp1([1/fs:1/fs:t_end],wav,t,'spline');
wav_hilbert=imag(hilbert(wav)); % 音频信号的希尔伯特变换
fc=10000;                       % 载波频率Hz
SSB_OUT=wav.*cos(2*pi*fc*t)-wav_hilbert.*sin(2*pi*fc*t); % 单边带调制 
figure(1);                      % 观察调制前后频谱 
subplot(2,2,1); plot(wav(53550:53750));     axis([0 200 -0.3 0.3]);
subplot(2,2,2); psd(wav, 10000, Fs);        axis([0 25000 -20 10]);
subplot(2,2,3); plot(SSB_OUT(53550:53750)); axis([0 200 -0.3 0.3]);
subplot(2,2,4); psd(SSB_OUT, 10000, Fs);    axis([0 25000 -20 10]);
audiowrite('SSB_OUT.wav',0.5*SSB_OUT,Fs);      % 将SSB调制输出存盘备用 

音频文件下载

matlab单边带调幅系统的建模仿真(笔记)_第4张图片

为了仿真指定信噪比的信道,编写信道仿真函数如下:

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单边带调幅系统的建模仿真(笔记))