我们知道FPGA的输出是数字的,但是我们可以使用vhdl代码生成纯模拟正弦波。我也可以指定正弦波的频率。使用VHDL代码生成纯正弦波作为FPGA的输出
回答
定义“纯” - 您可以生活多少“比特”量化......以及什么频率?
对于较低的低频率,您可以在FPGA中构建一个简单的PWM或delta-sigma DAC,并在“外部”放置一个低通滤波器(对不起,那必须是真正的模拟硬件:) 。 This example may be informative
不会去没有一些虽然外部元件。
是的,当我第一次谈论这个时,我想到了什么,但他们说你可以在没有任何外部ADC设备的情况下做到这一点。他们说你会得到正弦波,就像它是从没有涟漪的模拟发生器产生的,你也可以选择正弦波的频率。 – SultanSh 2010-07-02 13:12:37
他们是谁?这是一个学术问题还是现实生活中的问题?你真的需要根据你的要求来调整一些数字(在正弦频率,量化等方面)。) – 2010-07-05 12:26:01
Thanx家伙,他们告诉我,他们要求将其生成为数字信号,并在此之后使用dac,但是尽管如此,他们在没有dac的情况下需要使用dac,因为它们非常令人兴奋,因此非常难对付。 :) – SultanSh 2010-07-23 19:27:35
除了极少数混合信号模型(例如某些Actel产品)外,FPGA不具备用于所需模拟重构滤波器的组件。他们必须添加在外面。
你可以看看Direct Digital Synthesis。它基本上使用ROM来存储正弦采样,并使用相位累加器来索引ROM以产生具有所需频率的输出信号。分辨率和最大频率受fpga时钟和ROM大小的限制。
虽然你仍然需要anlog重建过滤器。
从先前存储在存储器中的样本产生纯正弦波的方法&以变化的速率/存储位置读取存储器以改变正弦波的频率和或频谱纯度称为直接数字合成。
这使您可以生成具有所需光谱纯度的各种正弦频率。在手机中有用&软件定义无线电的&任何其他类似的应用程序。 DDS ASIC也可用,但通常很贵。
FPGA的更便宜的选择。 FPGA只能生成所需的数字输出,但模拟信号不能在没有滤波器或DAC的情况下生成一些基本的滤波。
大多数FPGA供应商都在其IDE(集成开发环境)中提供免费的DDS IP核。结帐Actel/Xilinx/Altera IP。他们是免费的。如果你不能设法获得一个IP,你可以在Matlab &中使用DDS功能块,利用第三方工具..(与上述所有三家供应商一起提供)通过Matlab接口合成DDS。 DDS有时也称为DDFS:直接数字频率合成。
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
-- use this library as much as possible.
entity sinewave is
port (clk :in std_logic;
dataout : out real range -1.0 to 1.0);
end sinewave;
architecture Behavioral of sinewave is
signal i : integer range 0 to 77:=0;
type memory_type is array (0 to 71) of real range -1.0000 to 1.0000 ;
--ROM for storing the sine values generated.
signal temp : memory_type :=(0.0,0.0872, 0.1736, 0.2588, 0.3420, 0.4226, 0.5000, 0.5736, 0.6428, 0.7071, 0.7660,
0.8191, 0.8660, 0.9063, 0.9397, 0.9659, 0.9848, 0.9962, 1.0000,0.9962,0.9848,0.9659,
0.9397, 0.9063, 0.8660, 0.8191, 0.7660, 0.7071, 0.6428, 0.5000, 0.4226, 0.3420, 0.2588,
0.1736, 0.0872,0.0, 0.0,-0.0872,-0.1736, -0.2588, -0.3420,-0.4226, -0.5000, -0.5736,
-0.6428, -0.7071, -0.7660, -0.8191, -0.8660, -0.9063, -0.9397, -0.9659, -0.9848, -0.9962,
-1.0000,-0.9962,-0.9848,-0.9659,-0.9397, -0.9063, -0.8660, -0.8191,
-0.766, -0.7071, -0.6428, -0.5000, -0.4226, -0.3420, -0.2588, -0.1736, -0.0872,0.0);
begin
process(clk)
begin
--to check the rising edge of the clock signal
if(rising_edge(clk)) then
dataout <= temp(i);
i <= i+ 1;
if(i = 71) then
i <= 0;
end if;
end if;
end process;
end Behavioral;
解决这个实施 它显示错误比预期的表达1.000
- 1. 使用ADC生成正弦波
- 2. 使用fpga的VHDL代码错误
- 3. 使用AudioBufferList为正弦波生成添加发布时间
- 4. 在Python中生成正弦波声音
- 5. 的Python:代码VHDL代码生成
- 6. 使用PortAudio生成正弦波播放中间C
- 7. VHDL和FPGA的
- 8. 生成正弦波,方波,三角波,锯齿波的音频使用Android的AudioTrack类
- 9. 代码没有生成正确的输出,因为我预期
- 10. 我的代码正在生成一个输出“NaN”。为什么?
- 11. 持续时间的生成的音频正弦波的
- 12. 正弦波绘图
- 13. 从VHDL代码生成状态机图?
- 14. 在Java中生成正弦波时的背景噪音
- 15. 如何生成由零分隔的正弦波形流?
- 16. 如何使用matlab生成具有不同频率的正弦波?
- 17. 使用正弦波动画控件
- 18. 使用opencv绘制正弦波
- 19. 正弦波360度是走出非零
- 20. 在Android上生成正弦波视觉光栅
- 21. 如何在iPhone中生成正弦波w.r.t歌曲?
- 22. 不生成预期输出的代码
- 23. 如何使用正弦/余弦波返回振荡数
- 24. 创建正弦波或方波在C#
- 25. java SourceDataLine正弦波点击
- 26. 绘制正弦波,WPF
- 27. 正弦波点击Beep.BeepBeep
- 28. AUGraph正弦波损坏
- 29. Java快速正弦波音
- 30. n音讯正弦波
FPGA和模拟信号尝试[electronics.stackexchange.com](http://electronics.stackexchange.com/questions/恒定值tagged/sine + pwm) – maxy 2015-10-09 06:47:38