一个简单的单边带电台Matlab仿真

2018-12-04 22:50

一个简单的单边带电台仿真

这个仿真以真实的音频信号作为输入,设计一个单边带发信机。将基带信号调制为SSB信号后送入带通型高斯噪声信道,加入给定功率的噪声之后,再送入单边带接收机。单边带接收机将型号解调下来,通过计算机声卡将解调信号播放出来试听效果,从而对信道信噪比与解调音质之间的关系进行主观测试。

现设计一个单边带发信机、带通信道和相应的接收机,参数定位如下值。

(1) 输入信号为一个话音信号,采样率为 8000Hz。话音输入后首先进行预滤波,滤波

器是一个频率范围在[300, 3400]Hz的带通滤波器,其目的是将话音频频谱限制在3400Hz以下。单边带调制的载波频率设计为 10kHz,调制输出上边带。要求观测单边带调制前后的信号功率谱。 (2) 信道是一个带限高斯噪声信道,其通带频率范围是[10000, 13500]Hz。能够根据信噪

比 SNR 的要求加入高斯噪声。 (3) 接收机采用相干解调方式。为了模拟载波频率误差对解调话音音质的影响,设本地

载波频率为 9.8kHz,与发信机载波平率相差200Hz。解调滤波器设计为 300~3400Hz的带通滤波器。 1. 对音频输入与调制的仿真

根据设置的参数,系统中信号最高频率约为 14kHz。为了较好地显示调制波形,系统仿真采样率设为 50kHz,满足取样定理。由于话音信号的采样率为 8000Hz,与系统仿真采样率不等,因此,在进行信号处理之前,必须将话音的采样率提高到 50kHz,用插值函数来做这一任务。

先编写程序将基带音频信号读入,进行[300,3400]Hz的带通滤波,并将信号采样率提高到 50kHz,进行单边带调制之后,将调制输出结果保存为 wav 文件,文件名为 SSB_OUT.wav。程序如下:

ForSSB.m

% FileName: ForSSB.m % 功能:音频录入与调制 clc; clear all;

% 录音,采样点数为 1000,采样率为 8000 % jilu = wavrecord(5*8000, 8000, 'double'); % wavwrite(jilu, 'GDGvoice8000.wav'); [wav, fs] = wavread('GDGvoice8000.wav');

% 计算声音的时间长度 t_end = 1/fs * length(wav); % 仿真系统采样率 Fs = 50000;

% 仿真系统采样时间点 t = 1/Fs:1/Fs:t_end;

% 设计 300~3400Hz 的带通滤波器 H(z) [fenzi, fenmu] = butter(3, [300 3400]/(fs/2));

% 对音频信号进行滤波 wav = filter(fenzi, fenmu, wav);

SSB_OUT = wav.*cos(2*pi*fc*t) -

wav_hilbert.*sin(2*pi*fc*t);

figure(1);

% 利用插值函数将音频信号的采样率提升为 Fs=50kHz

wav = interp1([1/fs:1/fs:t_end], wav, t, 'spline');

subplot(2, 2, 2); psd(wav, 10000, Fs); axis([0

% 音频信号的希尔伯特变换 wav_hilbert = imag(hilbert(wav)); % 载波频率 fc = 10000; % 单边带调制

2500 -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); % 将 SSB 调制输出存盘备用 wavwrite(0.5*SSB_OUT, 'SSB_OUT.wav'); subplot(2, 2, 1); plot(wav(53550:53750)); axis([0 200 -0.3 0.3]);

程序仿真结果:

2. 对指定信噪比信道的仿真

仿真指定信噪比信道,仿真函数如下(ChanelSimulink.m)。

% FileName: ForSNR.m % 功能:计算实际信噪比 clear;

[in, Fs] = wavread('SSB_OUT.wav');

SNRdB = 20;

out = ChanelSimulink(in, SNRdB); wavwrite(out, Fs, 'Chanel_OUT.wav');

计算信噪比为20db 时的信道输出,将结果保存为 Chanel_out.wav 文件。输出仿真的实际测量信噪比为 17.8303 db。

% ChanelSimulink.m

% 功能:仿真指定信噪比的信道 function out = ChanelSimulink(in, SNRdb)

SNR_dB

% SNR_db 设定信噪比 % in 输入信号序列 % out 信道输出序列 % 系统采样率 Fs = 50000;

Power_of_in = var(in); Power_of_noise

Power_of_in/(10.^(SNRdb/10));

% 信道带宽

bandwidth = 13500 - 10000; % 噪声功率谱密度值 W/Hz NO = Power_of_noise/bandwidth;

Gause_noise = sqrt(NO*Fs/2) .* randn(size(in)); % 噪声通道 10~13.5Hz

[num, den] = butter(4, [10000 13500]/(Fs/2));

=

_out));

% 测量得出信噪比 % 信道输出

out = signal_of_filter_out + noise_of_filter_out; SNR_dB clear; Fs = 50000;

% 读入信道输出信号数据

[recvsignal, Fs] = wavread('Chanel_OUT.wav'); t = (1/Fs:1/Fs:length(recvsignal)/Fs)'; % 本地载波频率 fc_local = 10000 -200; % 本地载波

local_carrier = cos(2*pi*fc_local.*t);

=

10*log10(var(signal_of_filter_out)/var(noise_of_filter

signal_of_filter_out = filter(num, den, in); noise_of_filter_out Gause_noise);

=

filter(num,

den,

% 相干解调

xianggan_out = recvsignal.*local_carrier;

wavwrite(demod_out, 'SSBDemod_OUT.wav'); subplot(1,

2,

Fs,

1);

% 设计 300~3400Hz 的带通滤波器 [fenzi, fenmu] = butter(3, [300 3400]/(Fs/2)); demod_out = filter(fenzi, fenmu, xianggan_out); sound(demod_out/max(demod_out), Fs);

plot(5*demod_out(53550:53750)); axis([0 200 -0.3 0.3]);

subplot(1, 2, 2); psd(5*demod_out, 10000, Fs); axis([0 25000 -20 10]);

解调后图像,可见仿真结果还行!

解调输出信号被保存为音频文件 SSBDemo_OUT.wav,并由 sound 函数播放。聆听播放解调输出信号的声音可知,在20dB信道信噪比条件下,即使解调本地载波频率误差达到 200Hz,声音仍然是清晰可懂的。


一个简单的单边带电台Matlab仿真.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:请描述自己在日常教学中为某节课某一环节所设计的案例

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: