Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2315891
  • 博文数量: 846
  • 博客积分: 10011
  • 博客等级: 上将
  • 技术积分: 9499
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-04 19:54
个人简介

日日行,不怕千万里;时时学,不怕千万卷

文章分类

全部博文(846)

文章存档

2010年(36)

2009年(418)

2008年(346)

2007年(46)

我的朋友

分类:

2008-01-11 11:11:36

     对于线性调频信号,采用的是频率累加器和相位累加器的方式实现的,在FPGA里面涉及到二次函数的累加实现,在此问题的背景下,专门研究了三次函数及三次函数以下的累加器的实现方式,用matlab的方式来仿真,并编写了相关的代码,对于FPGA的程序只要仿照这个过程来做就行,比较简单,这里就不给出了,matlab的程序如下:

%% 使用加法器和累加器实现y=a*x^3+b*x^2+c*x+d
%该m文件实现了三次及三次一下的逼近算法
%相对误差可以达到为0的程度
%针对没有乘法器的情况的设计
%例如可以用在线性调频的DDS设计中
clear all
clc
%% 一次函数的累加实现y=k*x

k=1; %函数系数
a(1:1:50)=0;
a(1)=k;
for i=2:1:50
  a(i)=a(i-1)+k;
end
figure(1)
plot(a)

%% 二次函数的累加实现 y=0.5*k*x
^2
b(1:1:50)=0;
k=1; %函数系数

b(1)=k-0.5*k; %初值
for i=2:1:50
  b(i)=b(i-1)+k;
end

c(1:1:50)=0;
c(1)=b(1);
for i=2:1:50
  c(i)=b(i)+c(i-1);
end
i=1:1:50;
d=0.5*k*(i.*i);
figure(2)

stem(c,'*'); %累加值
hold on 
plot(d,'r'); %函数本身

hold on
m=d-c;
plot(m,'y') %相对误差
%% 三次函数的累加器实现 y=1/6*k*x^3
e(1:1:50)=0;
k=3; %函数系数
e(1)=0; 

for i=2:1:50
  e(i)=e(i-1)+k;
end
f(1:1:50)=0;
f(1)=1/6*k; %初值
for i=2:1:50
  f(i)=f(i-1)+e(i);

end
g(1:1:50)=0;
g(1)=f(1);
for i=2:1:50
  g(i)=g(i-1)+f(i); 
end
figure(4)
stem(g,'*') %累加值
i=1:1:50;

h=1/6*k*(i.*i.*i); %函数本身
hold on
plot(h,'r')
hold on
l=g-h; %相对误差
plot(l,'y')


上面的逼近方法可以达到很高的精度,对于二次,没有误差,三次函数视系数k而变化,不过误差在10的-12次放的级别,可以忽略不计。

阅读(3138) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~