失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 基于音频信号的AM SSB DSB FM调制MATLAB仿真

基于音频信号的AM SSB DSB FM调制MATLAB仿真

时间:2022-07-13 11:19:56

相关推荐

基于音频信号的AM SSB DSB FM调制MATLAB仿真

一、读取音频

MATLAB自带一系列音频,例如:chirp(鸟叫声)、train(火车鸣笛)……调用方法如下:

load chirp;% load train;

load上述信号后,可以看到工作区出现两个变量y(音频信号),Fs(音频信号采样频率)。

注:MATLAB自带的音频信号采样率Fs = 8192Hz。

二、采样率的那些坑

错误代码1:

如果你使用了下面的代码,程序结果一定会让你十分疑惑。

load chirp;% y, FsN = length(y - 1);fc = 20e3;% 载波频率t = (0:N - 1) / Fs;st = (y + 0.2) .* cos(2 * pi * fc * t);% AM信号为例

当你对上述代码生成的信号st进行频谱分析时,会发现频率与理论值不符。问题在于,音频信号的采样频率Fs= 8192Hz,但采用20KHz的载波,不符合奈奎斯特采样定律。

错误代码2:

如果你使用了下面的代码,程序结果依然会让你十分疑惑。

load chirp;% y, FsN = length(y - 1);fc = 20e3;% 载波频率fs = 4 * fc;% AM信号采样频率t = (0:N - 1) / fs;st = (y + 0.2) .* cos(2 * pi * fc * t);% AM信号为例

虽然进行了一定修改,但上述代码仍然存在一定问题。问题在于,上述代码仅仅提高了载波cos(2 * pi * fc * t)的采样率,音频信号y的采样率为Fs,但你却将y的采样率硬生生看做fs = 4 * fc。

正确的打开方式:

最终,我们明白了问题所在,并解决了问题。

fc = 20e3;fs = 4 * fc;% 对载波的采样频率y = resample(y,fs,Fs);% 关键,对音频信号进行再采样N = length(y);t = (0:N - 1) / fs;st = (y + 0.2) .* cos(2 * pi * fc * t);% AM信号为例

三、AM调制与解调

调制:

k = 0.2;% 控制调幅指数st = (y + k) .* cos(2 * pi * fc * t);% AM信号为例

解调:

sr = st .* cos(2 * pi * fc * t);% 相干解调point = 6000 / (Fsr / 2);% 6000Hz略大于chirp音频信号的最高频率bhi = fir2(34,[0 point point 1],[1 1 0 0]);freqz(bhi,1,Nr);yo = filter(bhi,1,yo); % 低通滤波yo = yo - mean(yo); % 滤除直流分量

四、DSB调制与解调

调制:

st = y .* cos(2 * pi * fc * t);% AM信号为例

解调:

同上

五、SSB调制与解调

调制:

y1 = imag(hilbert(y));% MATLAB函数问题,虚部才是希尔伯特变换st = 0.5 * y .* cos(2 * pi * fc * t) + 0.5 * y1 .* sin(2 * pi * fc * t);% +,-均可,对应不同边频

证明如下:

解调:

同上

六、FM调制与解调

看了网上很多文章,大多是对单频的信号进行FM调制解调仿真的。采用单频信号仿真具有一定的局限性,其仿真结果可能会使得我们对FM信号的特点理解产生误差。下面,我们采用一段复杂频率的音频信号,实现FM调制、解调仿真,并阐述其中一系列注意事项。

调制:

FM调制的原理、公式,本文不再赘述,大家可以轻易地在网上查找到FM调制的公式及原理。在此,我们重点介绍,面对一段实际的音频信号,如何合理地确定FM调制的“调频灵敏度Kf”。

我们基于以下两个公式进行讨论:

B = 2 * (dfm / Fmax + 1) * Fmax = 2 * (dfm + Fmax)dfm = kf * max(abs(mt)) / (2 * pi)其中,B为调频信号的近似带宽(事实上,调频信号带宽无限大),mt为基带信号,Fmax为基带信号mt的上限频率,dfm为使用mt进行调频后,最大的调频频率。

我们的目的是求解Kf。通常,我们可以通过频谱分析,获得基带信号的上限频率Fmax,因此,Fmax是已知的。而调频信号带宽B,应满足如下公式:

B / 2 < fc---(1)B / 2 + fc < fs / 2---(2)公式(1)保证调频信号正、负频谱不会重叠公式(2)保证调频信号满足采样率要求

由此,我们可以求解出dfm,进而得到Kf,公式如下:

B = min(2 * fc, fs - 2 * fc);B = B * 0.9;% 留一定的带宽余量,系数<=1dfm = B / 2 - Fmax;% Fmax通过对mt频谱分析得到kf = 2 * pi * dfm / max(abs(mt));

现在,我们就求解出了合理的Kf。下面展示FM调制MATLAB仿真代码:

Fmax = 4800; % chirp信号的最高频率大概是4800Hz,Fmax对应音频信号最高频率Bfm = min(2 * fc,Fst - 2 * fc);Bfm = Bfm * 0.9; % 留下一定的带宽余量dfm = Bfm / 2 - Fmax; % dfm表示由音频信号调频产生的最大频偏kf = 2 * pi * dfm / max(abs(y));phi = cumsum(y) / Fst;% 积分yi = cos(2 * pi * fc * tt + kf * phi);

解调:

本文只列出非相干解调(包络检波)的方法(相关理论推导以及相干解调的方法可以参考其它网络博客),代码如下:

% FM信号解调,利用希尔伯特变换实现包络检波(非相干解调)ydt = diff(out);yo = [0 abs(hilbert(ydt))];yo = yo - mean(yo);% 滤除直流分量

注意事项:

1、FM信号的仿真,Kf的选择尤其重要,直接影响了仿真的结果。

2、FM信号包络不一定是恒定的,因为FM信号的带宽无限大,很可能出现各个分量叠加、抵消的情况。(网上大多用单频信号进行FM调制,他们的实验结果给我造成很大的困惑。)

七、仿真结果

将原始的音频信号、解调后的音频信号,利用sound函数对比,基本没有质量损失,下面展示时域信号及其频谱。

AM:

DSB:

SSB:

FM:

八、结语

仿真文件代码:【radioStation.m】

文章观点或有偏颇之处,如有问题,请多多交流。

如果觉得《基于音频信号的AM SSB DSB FM调制MATLAB仿真》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。