我們知道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. 生成平滑的正弦波
- 4. 使用AudioBufferList爲正弦波生成添加發布時間
- 5. Java錯誤生成聲音正弦波
- 6. 在Python中生成正弦波聲音
- 7. 的Python:代碼VHDL代碼生成
- 8. 使用Vhdl ...生成碼型?
- 9. 使用計時器在CodeVisionAVR中生成正弦波形
- 10. 不能生成頻率和正弦波使用ad9833與atmega2560
- 11. IOS使用swift生成和處理正弦波
- 12. 使用PortAudio生成正弦波播放中間C
- 13. 使用LLVM生成純機器代碼
- 14. VHDL和FPGA的
- 15. 生成正弦波,方波,三角波,鋸齒波的音頻使用Android的AudioTrack類
- 16. 使用SDL庫播放使用sinf函數生成的原始正弦波
- 17. 帶固定點輸入的正弦波
- 18. 我的代碼正在生成一個輸出「NaN」。爲什麼?
- 19. 代碼沒有生成正確的輸出,因爲我預期
- 20. 使正弦波更陡峭?
- 21. 用C語言生成正弦波陣列
- 22. 持續時間的生成的音頻正弦波的
- 23. 使用Matlab HDL編碼器生成VHDL代碼
- 24. 正弦波繪圖
- 25. 動畫正弦波
- 26. 從VHDL代碼生成狀態機圖?
- 27. 在Java中生成正弦波時的背景噪音
- 28. 在Matlab中生成一個可變頻率的正弦波
- 29. 如何生成由零分隔的正弦波形流?
- 30. 使用FPGA板上的USB鍵盤(VHDL)
FPGA和模擬信號嘗試[electronics.stackexchange.com](http://electronics.stackexchange.com/questions/恆定值tagged/sine + pwm) – maxy 2015-10-09 06:47:38