Advertisement

MATLAB信号处理仿真入门实验

阅读量:

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

正弦信号的DFT分析

1

仿真目的

1

补充说明

复制代码
    %///////////////////////////////////////////////////////////
    % 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点作为分析长度;这是因为基于快速傅里叶变换算法(FFT),特别是基2版本的算法最为高效

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

1

1

2

3

插值FIR滤波器

在软件无线电领域中占据重要地位的一个分支是基于数字技术的发展

全部评论 (0)

还没有任何评论哟~