matlab的滤波器仿真——低通滤波器与插值滤波器

项目里面有用到插值滤波器的场合,用matlab做了前期的滤波器性能仿真,产生的滤波器系数保存下来输入到FPGA IP中使用即可。

下面是仿真的代码

 1 % clear all
 2 close all
 3
 4 Nx = 4096;
 5 Tx = 16;
 6 nx = 0:Nx-1;
 7 x = sin(2*pi*2*nx/Tx);
 8 L = 7;
 9 % Ny = L * Nx;
10 % ny = 0:Ny-1;
11 % yi = zeros(1,Ny);
12 % yi(1:L:Ny) = x;
13 % figure;
14 % stem(yi);
15
16 Fst1 = 0.05;
17 Fp1 = 0.09;
18 Fp2 = 0.11;
19 Fst2 = 0.15;
20 Ast1 = 60;
21 Ap = 0.01;
22 Ast2 = 60;
23 % bandpass filter works well, try lowpass to check whether DC signal affects pm
24 % hband = fdesign.bandpass(‘Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2‘,Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2);
25 hband = fdesign.lowpass(‘Fp,Fst,Ap,Ast‘,Fp2,Fst2,Ap,Ast2);
26 Hband = design(hband);
27 info(Hband);     %show filter info
28
29 Fp   = 0.08   %pass band corner freq
30 Fst  = 0.24   %stop band corner freq
31 Ap   = 0.01;         %pass band attenuation(dB)
32 Ast  = 80.0;       %stop band attenuation(dB)
33 h1 = fdesign.interpolator(L,‘lowpass‘,Fp,Fst,Ap,Ast);
34 Href = design(h1);
35 info(Href);     %show filter info
36 fvtool(Hband,1,Href,1);  %show freq response
37 title(‘lowpass filter & interpolator filter‘);
38 legend(‘lowpass filter‘,‘interpolator filter‘);
39
40 % import sample_dara
41 a=dlmread(‘1.prn‘);%以字符形式打开文件
42 v1=a(:,38); %16进制转化为10进制数,存储进v1矩阵
43 figure;
44 subplot(3,1,1);
45 plot(v1);
46 v2 = filter(Hband,v1);
47 subplot(3,1,2);
48 plot(v2);
49 y = filter(Href,v2);
50 subplot(3,1,3);
51 plot(y);
52 % b=dlmread(‘2.prn‘);%以字符形式打开文件
53 % y=b(:,37); %16进制转化为10进制数,存储进v1矩阵
54
55
56 fft_analysis_func(v2,455/14/16, 16);
57 legend(‘lowpass filter‘);
58 fft_analysis_func(y,455*L/14/16, 16);
59 legend(‘interpolator filter‘);
60
61 %axis([0 25 -120 5])   %zoom-in 0 to 25MHz
62 %generating the coe file
63 ref_filter = Hband.Numerator;
64 gen_coe_rad10(Hband.Numerator,‘lowpass_filter_rad10.coe‘);
65 ref_filter = Href.Numerator;
66 gen_coe_rad10(Href.Numerator,‘inter_filter_rad10.coe‘);

代码中用到了两个函数

function fft_analysis_func(x, fs, adc_width)

%The following program code plots the FFT spectrum of a desired test tone. Test tone based on coherent sampling criteria, and
%computes SNR, SINAD, THD and SFDR.
%This program is believed to be accurate and reliable. This program may get altered without prior notification.;

%fid=fopen(‘F:\pelican_ADC_test\vjtag_prj\data_analysis\single_tone.txt‘,‘r‘);
%numpt=input(‘Number of  Points in FFT? ‘);
%fclk=input(‘Sampling Frequency (MHz)? ‘);
%numbit=input(‘ADC Resolution (bits)? ‘);

% numpt=length(x);
numpt = 4096;
fclk=fs;
numbit=adc_width;

v1 = x(1:numpt);

code=v1‘;

%Warning: ADC output may be clipping - reduce input amplitude
if (max(code)==2^numbit-1) | (min(code)==0)
  disp(‘WARNING: ADC OUTPUT MAYBE CLIPPING - CHECK INPUT AMPLITUDE!‘);
end

Dout=code;
Voltage=Dout./((2^numbit-1)/2)*(0.5);

Doutw=(Dout‘).*blackmanharris(numpt);               %add Minimum 4-term Blackman-Harris window
Dout_spect=fft(Doutw);
Dout_dB=20*log10(abs(Dout_spect));

figure;
maxdB=max(Dout_dB(1:numpt/2));     %numpt points FFT result in numpt/2 points spectrum

%计算距离满量程的幅度差
max_voltage=max(Voltage);
delta_amplitude=20*log10(max_voltage/0.5);      %full scale voltage amplitude is 0.5v

plot([0:numpt/2-1].*fclk/numpt,Dout_dB(1:numpt/2)-maxdB+delta_amplitude);
% plot([0:numpt-1].*fclk/numpt,Dout_dB(1:numpt)-maxdB+delta_amplitude);
grid on;
title(‘SINGLE TONE FFT PLOT‘);
xlabel(‘ANALOG INPUT FREQUENCY (MHz)‘);
ylabel(‘AMPLITUDE (dBfs)‘);

hold off;
function gen_coe_rad10(filt_num, fileName)
%max number of coefficients
num_coeffs = numel(filt_num)
fileId = fopen(fileName,‘w‘);
%header if COE file
fprintf(fileId,‘radix = 10;\n‘);
% first coefficient
fprintf(fileId,‘coefdata = \n‘);
for i = 1 : num_coeffs-1
    fprintf(fileId,‘%8.9f,\n‘,filt_num(i));
end
% last coefficient
fprintf(fileId,‘%8.9f;‘,filt_num(num_coeffs));
fclose(fileId);
end

仿真出的结果如下:

产生了用于滤波器的系数:

 1 radix = 10;
 2 coefdata =
 3 -0.001219138,
 4 -0.002838337,
 5 -0.005111633,
 6 -0.007197151,
 7 -0.007796326,
 8 -0.005351278,
 9 0.001364815,
10 0.012476464,
11 0.026308774,
12 0.039101106,
13 0.045443072,
14 0.039549550,
15 0.017241585,
16 -0.021849408,
17 -0.072532419,
18 -0.123501332,
19 -0.158497326,
20 -0.159275461,
21 -0.109905781,
22 -0.001430991,
23 0.164384860,
24 0.373413481,
25 0.600371089,
26 0.812911647,
27 0.977825248,
28 1.067924092,
29 1.067924092,
30 0.977825248,
31 0.812911647,
32 0.600371089,
33 0.373413481,
34 0.164384860,
35 -0.001430991,
36 -0.109905781,
37 -0.159275461,
38 -0.158497326,
39 -0.123501332,
40 -0.072532419,
41 -0.021849408,
42 0.017241585,
43 0.039549550,
44 0.045443072,
45 0.039101106,
46 0.026308774,
47 0.012476464,
48 0.001364815,
49 -0.005351278,
50 -0.007796326,
51 -0.007197151,
52 -0.005111633,
53 -0.002838337,
54 -0.001219138;
时间: 2024-11-08 23:49:43

matlab的滤波器仿真——低通滤波器与插值滤波器的相关文章

Matlab对Modelsim仿真生成的数据进行分析

Matlab对Modelsim仿真生成数据的处理也是通过文件读写实现的.即通过Verilog语句,将仿真过程中的某个信号写入文件,然后在Matlab中在把这个文件的数据读出来,就可以在Matlab中进行分析了. 下图也通过一个简单的例子,说明一下整个过程. 以下的Verilog语句实现将信号data_out的数据写入data_out.txt文件 integer w_file; initial w_file = $fopen("data_out.txt"); always @(i) be

脉冲成型滤波器仿真

脉冲型滤波器用成型脉冲即数字1用矩形脉冲表示用升余弦脉冲或高斯脉冲表示主要用于基带数据处理. 在数字通信系统中,基带信号进入调制器前,波形是矩形脉冲,突变的上升沿和下降沿包含高频成分较丰富,信号的频谱一般比较宽.从本质上说,脉冲成形就是一种滤波.数字通信系统的信号都必须在一定的频带内,但是基带脉冲信号的频谱是一个Sa函数,在频带上是无限宽的,单个符号的脉冲将会延伸到相邻符号码元内产生码间串扰,这样就会干扰到其他信号,这是不允许的.为了消除干扰,信号在发射之前要进行脉冲成形滤波,把信号的频率约束在

Matlab图像处理系列3———空间域锐化滤波器

注:本系列来自于图像处理课程实验,用Matlab实现最基本的图像处理算法 1.锐化滤波器 锐化滤波,是将图像的低频部分减弱或去除,保留图像的高频部分,即图像的边缘信息. 图像的边缘.轮廓一般位于灰度突变的地方,也就是图像的高频部分,通常用灰度差分提取边缘轮廓. 图像中边缘轮廓通常是任意方向的,因此我们的差分运算需要具有方向性.各向同性的边缘检测算子对任意方向的边缘轮廓都有相同的检测能力,那么什么是算子? 算子是一个函数空间到函数空间上的映射O:X→X.广义上的算子可以推广到任何空间,如内积空间等

写写Matlab的Turbo仿真实现吧

信道编码作用就是针对无线传输环境下复杂多变的信道条件,采取的一种提高发送数据正确率的典型方法.比如对于传输的信息比特序列(例如x=[1 1 0 1 0 1 1 0]是一个长度为8的序列),如果直接经过无线信道,由于各种干扰的存在,接收到的序列y可能出现差错变为了y=[1 1 0 1 1 1 1 0].其中第五位出现了偏差由0变为了1产生错误.信道编码的职责就是按照某种数学规律在发送数据之后添加一定的校验位比特(例如c=[1 1 0 0])使得发送的数据变为信息比特x和校验比特c的某种组合方式(例

Matlab Robotics Toolbox 仿真计算:Kinematics, Dynamics, Trajectory Generation

1. 理论知识 理论知识请参考: 机器人学导论++(原书第3版)_(美)HLHN+J.CRAIG著++贠超等译 机器人学课程讲义(丁烨) 机器人学课程讲义(赵言正) 2. Matlab Robotics Toolbox安装 上官网: http://petercorke.com/wordpress/toolboxes/robotics-toolbox Download RTB-10.3.1 mltbx format (23.2 MB) in MATLAB toolbox format (.mltb

opencv 画出各种滤波器模板图像 证明拉普拉斯滤波器是一个高通滤波器

实验: 将滤波器模板,利用傅里叶变换,转换到频域内,将低频中心由图像左上角转换到图像中心.显示滤波器模板图像. 从拉普拉斯滤波器模板图像中,可以看出,中心部分为黑色,阻止了低频信息通过,外围为白色,通过了高频信息.所以拉普拉斯滤波器是一个高通滤波器. import cv2 as cv import numpy as np from matplotlib import pyplot as plt # simple averaging filter without scaling parameter

MATLAB——神经网络sim仿真函数

原文地址:https://www.cnblogs.com/long5683/p/10508012.html

升余弦滚降滤波器的仿真

在数字通信系统中,为了减少码间干扰,时常要用到升余弦滚降滤波器.码间干扰的原因,是相邻码元的尾巴进入了当前码元. 数字电视系统的像素也可以看作是一种供人观看的多进制码元,因此图像的模糊在一定程度上可以看作码间干扰. 数字电视系统的画面越来越清楚,采样频率越来越高,因此为了兼容标清系统,就需要进行下变换,它是对高清画面的低通滤波及运动再生. 数字电视的下变换常常采用理想低通滤波器来完成,因为它的主瓣最宽,能够最大限度地保证画面的清晰度.然而由于理想低通滤波器的波形无穷长的特性,下变换过程时常会引入

基于Matlab中FDATool工具箱的滤波器设计及相关文件的生成

一.摘要 除了采用编程的方法实现滤波器之外,Mat l ab中自带工具箱FDATool 也能很方便快速的实现滤波器的设计.另外FPGA.DS P等实现数字滤波器算法时,经常要用到滤波器系数,采用FDATool 工具箱也能快速的得到滤波器系数.二.实验平台 Matlab7.1三.实现步骤3.1 滤波器指标若需要设计一个16阶的FIR滤波器(h(0)=0),给定的参数如下:(1) 低通滤波器(2) 采样频率Fs 为48kHz ,滤波器Fc为10.8kHz(3) 输入序列位宽为9位(最高位为符号位)在