MATLAB信号处理仿真入门实验

MATLAB信号处理仿真入门实验(参考实验)

正弦信号的DFT分析

本次仿真的用途在于,配置信号的幅频特征参数以及分析参数,然后观察两正弦信号合成后信号的加窗幅度谱。这些参数包括:
【1】两正弦波的幅度、频率
【2】信号的量化比特数(通常为8-16)
【3】信号采样率
【4】凯泽窗的beta值,注意,beta=0时,等价位矩形窗,beta越大,主瓣越宽,旁瓣越低。
【5】信号的采样长度,亦即DFT谱分析的长度
通过修改这些仿真参数,可以尝试在什么情况下,两个正弦的谱峰就重合成一个谱峰,不易分辨了呢?
如果两个信号的频率比较接近,但是又不知道具体的频率,只是知道大致的范围,如何调节其他参数(频率和幅度之外的参数),使得有助于分辨出两个正弦信号的谱峰。
补充:
1、尽量使用列向量,matlab内部是向量按列存放。
2、a = [1;2;3;4]定义一个列向量,中括号用于拼接标量为向量,也可以拼接向量为更大的向量,但是注意被拼接的应当都是行向量或都是列向量
3、b = a(1:3) 把向量a的1号到3号分量取出,保存到b向量,圆括号用于进行分量寻址,冒号用于指定范围,1:3 这个表达式生成了一个行向量,[1 2 3],这个行向量被作为寻址的参数给a向量取出分量。
4、共轭转置和普通转置,a = [1+j, 2+j, 3+j] ; b = a’; c=a.’; b是a的共轭转置,c是a的普通转置。这两个转置的混淆会导致非常隐蔽的错误。

%///////////////////////////////////////////////////////////
% DFT analyse of sampled sine signal
%///////////////////////////////////////////////////////////
close all;
clear;
clc;
% generate 2 sampled sine signals with different frequency(生成2个不同频率的采样正弦信号)
freq_x1         = 20.0E3        ;  % frequency of signal x1
amp_x1          = 10            ;  % amptitude of signal x1
freq_x2         = 30.0E3        ;  % frequency of signal x2
amp_x2          = 10            ;  % amptitude of signal x2
data_len        = 512           ;  % signal data length
fs              = 512E3         ;  % sample rate(采样率)
quant_bits      = 12            ;  % signal quant bits(信号量化比特数)
kaiser_beta     = 8             ;  % beta of kaiser win

idx_n           = [0:data_len-1];  % n index
idx_n           = idx_n .'      ;  % we need column vector(列向量)
idx_t           = idx_n/fs      ;  % time index
idx_phase_x1    = 2*pi*idx_n*freq_x1/fs;  % x1 phase  index(x1相位指数)
idx_phase_x2    = 2*pi*idx_n*freq_x2/fs;  % x2 phase  index
x1              = amp_x1*sin(idx_phase_x1);
x2              = amp_x2*sin(idx_phase_x2);
% signal x is consisted of x1 and x2;
x = x1 + x2;
max_abs_x = max(abs(x));    %   abs-求数值的绝对值与复数的幅值  %  normalize x to (-1,1)
x = x / max_abs_x;           % quant signal, the range is (-max_q, +max_q)
max_q = 2^(quant_bits-1);
x_quant = fix(x * max_q);   % plot them, use time label
figure;
set(gca,'fontsize',16);     % get window function data(获取窗口函数数据)(set-设置对象属性)
win = kaiser(data_len, kaiser_beta);    % windowing the data
win_x       =  win .* x;
win_x_quant =  win .* x_quant;

h_t1 = subplot(4,1,1);plot(idx_t, x1   );grid on;
h_t2 = subplot(4,1,2);plot(idx_t, x2   );grid on;
h_t3 = subplot(4,1,3);plot(idx_t, x    );grid on;
h_t4 = subplot(4,1,4);plot(idx_t, win_x);grid on;
title(h_t1, 'x1'        , 'fontsize', 14);
title(h_t2, 'x2'        , 'fontsize', 14);
title(h_t3, 'x=x1+x2'   , 'fontsize', 14);
title(h_t4, 'windowed x', 'fontsize', 14);

% perform fft
x_q_fft         =  fft(win_x_quant)    ;    % get frequency index(指数)
idx_freq        = -fs/2 + idx_n .* (fs / data_len);
% shift zero frequency to the data center
x_q_fft         =  fftshift(x_q_fft);
% map to amptitude dB scale
x_q_fft_abs     =  abs(x_q_fft);
x_q_fft_abs_dB  =  20*log10(x_q_fft_abs + 1E-8);
% normalize the spectrum from 0 dB;
max_dB = max(x_q_fft_abs_dB);
norm_spectrum   =  x_q_fft_abs_dB - max_dB;
figure; plot(idx_freq, norm_spectrum);grid on;
title('Normlized Spectrum ', 'fontsize', 14);

使用函数封装,多音正弦和谱分析

matlab是一种脚本式的编程语言,从某种意义上说也是计算机学科的一部分,在软件行业里面,重用是非常重要的思想,把经常要重用的代码用函数(面向过程)或是类(面向对象)封装起来,留出接口的数据类型定义,以后就可以很方便的再次用到。
对于多音信号,我们在生成这种信号时,会有不同的需求,比如信号的采样率是多少;信号里面有几个频率成分,分别是多少;信号的向量长度是多少;以及信号的量化精度是多少。嗯,对于数字信号处理的新手同学们,请一定要时刻想着离散信号的采样率和量化精度。只有配备了这些参数,一个离散序列才真正的被赋予了“数字信号”的意义。由于这些信号配置参数需要在生成信号的时候指定,所以,把这些参数作为生成多音信号函数的入口参数。
同样,对于谱分析函数,需要配置输入信号的采样率,如果把输入信号作为一个单帧的向量,分析长度通常是选取距离这个向量最近的2的N次方的数值,比如输入数据150点则选择分析长度为128,这是因为matlab的基2-FFT的算法最快,其他的特殊点数算法比较慢。另外,由于待分析信号的频率成分未知,就是说我们不知道里面可能有几个谱峰以及它们的距离远近,所以,窗函数的形状需要可以动态指定,所以说凯泽窗是个非常有用的东西,因为它把窗函数的形状给数值化了,我们不用再记录一堆繁琐的窗函数的名字了。

FIR滤波器之基于样点处理的模型

FIR滤波器特点:
【1】(广义)线性相位,就是说信号的任何频率成分经过这个滤波器,延时都一样(群延时恒定),这个性质对于通信系统比较重要,对于人耳来说不是很重要,因为人的单耳对相位不敏感。
【2】可以较为精确的设定幅频响应的形状,相比之下,IIR或是模拟滤波器都是用零极点来控制频响,比较不灵活,fir可以设定一个幅频曲线,然后用算法生成抽头系数,当然,越精确,需要的抽头系数就越多,运算量越大。
【3】相对于带有反馈回路的IIR而言,FIR不会自激振荡,因为它没有反馈的数据回路,IIR则不是,数据回路意味着存在极点,它对系数的量化噪声非常敏感,量化误差造成的极点位置偏移很容易使得滤波器出现自激振荡,而FIR仅有零点,系数和数据的量化误差仅会让输出数据的噪声增加而不会自激振荡。
FIR滤波器缺点:FIR比IIR的运算量庞大的多。

插值FIR滤波器

软件无线电领域重要分支之一——数字上,下变频,以数字上变频来说,关键技术就是插值滤波和DDS技术。插值滤波技术,也叫做上采样,或采样率提升。

猜你喜欢

转载自blog.csdn.net/wyh135792/article/details/79950502