您的位置:首页 > 其它

正弦信号频谱分析实验

2018-04-07 15:43 169 查看

正弦信号频谱分析实验

基于DFT的谱分析(参考实验)

问题分析

1.序列直接做DFT和补零做DFT有什么区别?

2.什么是频域的物理分辨率,什么是频域的分析分辨率?

3.为什么说补零作DFT只能提高频域的分析分辨率而不能提高物理分辨率?

4.为什么说提高频域的物理分辨率的唯一办法是增加记录长度?

5.当对有限长的序列做DFT时

【1】加窗与不加窗有什么区别?

【2】加不同形状的窗再做DFT,又有什么区别?

【3】我怎么知道在某个情况下应该选择那种窗函数?

频谱泄露的仿真代码;
N   = 64                ; % vector length(N为信号采样的长度)

idx = [0:N-1].'         ; % index column vector

f0 = 1E3                ; % sine signal freq, in Hz(f0为正弦频率)

fs = 32E3               ; % sample rate, in Hz(fs为采样频率)

x1 = sin(2*pi*f0/fs*idx); % sampled sine signal

figure                  ; % open new figure

subplot(2,2,1:2)        ;

set(gca,'fontsize',14)  ;

stem(x1)                ; % plot(x1)

grid on                 ; % draw grid on figure

title1_str = sprintf(...

'Sampled Sine Signal, Frequency %dHz, Sample rate %dHz', f0, fs);

title(title1_str, 'fontsize',14);

y1     = fft(x1)        ;

y1_abs = abs(y1)        ;

subplot(2,2,3); stem(y1_abs,'LineWidth',1,'MarkerSize',6)   ;

grid on; set(gca,'fontsize',12)                             ;

title('DFT Amplitude in Linear scale', 'fontsize',14)       ;

y1_abs_dB = 20*log10(y1_abs)    ;

min_y1 = min(y1_abs_dB)         ;

subplot(2,2,4)                  ;

stem(y1_abs_dB, 'LineWidth',1,'MarkerSize',6,'BaseValue',min_y1);

grid on; set(gca,'fontsize',12)                     ;

title('DFT Amplitude in dB scale', 'fontsize',14)   ;


通过改变信号矢量的长度和正弦信号的频率来观察连续正弦信号频谱的谱线(理想情况下应是两根笔直的谱线)。

思考:对一个连续时间信号进行采样,对信号的有限长样点进行DFT的结果,并不总是和该信号在连续时间域的频谱一致,从上面的实验可以看出,似乎只要是有限长采样中包含了整数个周期的信号样点,DFT的结果就和连续域频谱非常一致。然而这为我们带来新的问题,当我们要分析一个有限带宽信号的频谱成分时,我们是不可能让有限长的信号采样里恰好包含了所有频率成分的整数个周期。尤其是当这个信号的频率成分非常丰富的时候。接下来我们要做两件事情:

【1】分析一下,为什么非整数个周期的信号采样的DFT结果会“走样”

【2】如何才能让非整数个周期的信号采样的DFT结果和信号在连续时间域的频谱尽量的“相似”,如果的确存在某种方法,那么这种方法是有代价的么?

频谱泄露的分析

对于DFT的结果不是两根笔直的谱线,这种现象我们称作“频谱泄露”。准确的说叫做“本来在某些频率位置上的能量,在分析结果中泄露到了其它的频率位置上”
4000


DFT频谱分析实验LAB(参考实验)

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的普通转置。这两个转置的混淆会导致非常隐蔽的错误。

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

matlab是一种脚本式的编程语言,从某种意义上说也是计算机学科的一部分,在软件行业里面,重用是非常重要的思想,把经常要重用的代码用函数(面向过程)或是类(面向对象)封装起来,留出接口的数据类型定义,以后就可以很方便的再次用到。

对于多音信号,我们在生成这种信号时,会有不同的需求,比如信号的采样率是多少;信号里面有几个频率成分,分别是多少;信号的向量长度是多少;以及信号的量化精度是多少。嗯,对于数字信号处理的新手同学们,请一定要时刻想着离散信号的采样率和量化精度。只有配备了这些参数,一个离散序列才真正的被赋予了“数字信号”的意义。由于这些信号配置参数需要在生成信号的时候指定,所以,把这些参数作为生成多音信号函数的入口参数。

同样,对于谱分析函数,需要配置输入信号的采样率,如果把输入信号作为一个单帧的向量,分析长度通常是选取距离这个向量最近的2的N次方的数值,比如输入数据150点则选择分析长度为128,这是因为matlab的基2-FFT的算法最快,其他的特殊点数算法比较慢。另外,由于待分析信号的频率成分未知,就是说我们不知道里面可能有几个谱峰以及它们的距离远近,所以,窗函数的形状需要可以动态指定,所以说凯泽窗是个非常有用的东西,因为它把窗函数的形状给数值化了,我们不用再记录一堆繁琐的窗函数的名字了。

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

FIR滤波器特点:

【1】(广义)线性相位,就是说信号的任何频率成分经过这个滤波器,延时都一样(群延时恒定),这个性质对于通信系统比较重要,对于人耳来说不是很重要,因为人的单耳对相位不敏感。

【2】可以较为精确的设定幅频响应的形状,相比之下,IIR或是模拟滤波器都是用零极点来控制频响,比较不灵活,fir可以设定一个幅频曲线,然后用算法生成抽头系数,当然,越精确,需要的抽头系数就越多,运算量越大。

【3】相对于带有反馈回路的IIR而言,FIR不会自激振荡,因为它没有反馈的数据回路,IIR则不是,数据回路意味着存在极点,它对系数的量化噪声非常敏感,量化误差造成的极点位置偏移很容易使得滤波器出现自激振荡,而FIR仅有零点,系数和数据的量化误差仅会让输出数据的噪声增加而不会自激振荡。

FIR滤波器缺点:FIR比IIR的运算量庞大的多。

插值FIR滤波器

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

实验目标

【1】设定采样率fs,生成正弦波,频率为f0,量化比特数为Q,幅度为A,采集N点正弦波,用W窗对采样帧加窗,然后进行N点的FFT分析,观察对数尺度下的幅度谱S。

【2】对以上过程的参数, fs, f0, Q, A, N, W 进行修改,观察S的变化
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: