基于FPGA的一維時間序列idct變換verilog實現,包含testbench和matlab輔助驗證程序

目錄

1.算法運行效果圖預覽

2.算法運行軟件版本

3.部分核心程序

4.算法理論概述

4.1 DCT離散余弦變換

4.2 IDCT逆離散余弦變換

4.3 樹結構實現1024點IDCT的原理

5.算法完整程序工程


1.算法運行效果圖預覽

(完整程序運行后無水印)

matlab仿真結果

FPGA仿真結果

? ? ? ?由于FPGA中的數據通常采用定點表示,在計算過程中會引入量化和舍入誤差。因此,上述FPGA的測試結果,在數值較小時,和MATLAB存在一點誤差。

2.算法運行軟件版本

vivado2019.2

Matlab2022a

3.部分核心程序

(完整版代碼包含詳細中文注釋和操作步驟視頻)

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date:    19:52:27 04/01/2014 
// Design Name: 
// Module Name:    myDD16 
// Project Name: 
// Target Devices: 
// Tool versions: 
// Description: 
//
// Dependencies: 
//
// Revision: 
// Revision 0.01 - File Created
// Additional Comments: 
//
//
module myDD16(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,Z1,Z2,Z3,Z4,Z5,Z6,Z7,Z8,Z9,Z10,Z11,Z12,Z13,Z14,Z15,Z16);input signed[15:0] x1;
input signed[15:0] x2;
input signed[15:0] x3;
input signed[15:0] x4;
input signed[15:0] x5;
input signed[15:0] x6;
input signed[15:0] x7;
input signed[15:0] x8;
input signed[15:0] x9;
input signed[15:0] x10;
input signed[15:0] x11;
input signed[15:0] x12;
input signed[15:0] x13;
input signed[15:0] x14;
input signed[15:0] x15;
input signed[15:0] x16;
output signed[15:0]Z1;
output signed[15:0]Z2;
output signed[15:0]Z3;
output signed[15:0]Z4;
output signed[15:0]Z5;
output signed[15:0]Z6;
output signed[15:0]Z7;
output signed[15:0]Z8;
output signed[15:0]Z9;
output signed[15:0]Z10;
output signed[15:0]Z11;
output signed[15:0]Z12;
output signed[15:0]Z13;
output signed[15:0]Z14;
output signed[15:0]Z15;
output signed[15:0]Z16;//STEP1
//STEP1
wire signed[15:0]s11_1;
wire signed[15:0]s11_2;
wire signed[15:0]s11_3;
wire signed[15:0]s11_4;
wire signed[15:0]s11_5;
wire signed[15:0]s11_6;
wire signed[15:0]s11_7;
wire signed[15:0]s11_8;assign s11_1 = x1 + x16;
assign s11_2 = x2 + x15;
assign s11_3 = x3 + x14;
assign s11_4 = x4 + x13;
assign s11_5 = x5 + x12;
assign s11_6 = x6 + x11;
assign s11_7 = x7 + x10;
assign s11_8 = x8 + x9;wire signed[31:0]s12t_1;
wire signed[31:0]s12t_2;
wire signed[31:0]s12t_3;
wire signed[31:0]s12t_4;
wire signed[31:0]s12t_5;
wire signed[31:0]s12t_6;
wire signed[31:0]s12t_7;
wire signed[31:0]s12t_8;
assign s12t_1 = (x1 - x16)*32610;
assign s12t_2 = (x2 - x15)*31357;
assign s12t_3 = (x3 - x14)*28899;
assign s12t_4 = (x4 - x13)*25330;
assign s12t_5 = (x5 - x12)*20788;
assign s12t_6 = (x6 - x11)*15447;
assign s12t_7 = (x7 - x10)*9512;
assign s12t_8 = (x8 - x9)*3212;wire signed[15:0]s12_1;
wire signed[15:0]s12_2;
wire signed[15:0]s12_3;
wire signed[15:0]s12_4;
wire signed[15:0]s12_5;
wire signed[15:0]s12_6;
wire signed[15:0]s12_7;
wire signed[15:0]s12_8;
assign s12_1 = s12t_1[29:14];
assign s12_2 = s12t_2[29:14];
assign s12_3 = s12t_3[29:14];
assign s12_4 = s12t_4[29:14];
assign s12_5 = s12t_5[29:14];
assign s12_6 = s12t_6[29:14];
assign s12_7 = s12t_7[29:14];
assign s12_8 = s12t_8[29:14];//STEP2
//STEP2
wire signed[15:0]Y1_1;
wire signed[15:0]Y1_2;
wire signed[15:0]Y1_3;
wire signed[15:0]Y1_4;
wire signed[15:0]Y1_5;
wire signed[15:0]Y1_6;
wire signed[15:0]Y1_7;
wire signed[15:0]Y1_8;
wire signed[15:0]Y2_1;
wire signed[15:0]Y2_2;
wire signed[15:0]Y2_3;
wire signed[15:0]Y2_4;
wire signed[15:0]Y2_5;
wire signed[15:0]Y2_6;
wire signed[15:0]Y2_7;
wire signed[15:0]Y2_8;
myDD8 U1(
.x1(s11_1),
.x2(s11_2),
.x3(s11_3),
.x4(s11_4),
.x5(s11_5),
.x6(s11_6),
.x7(s11_7),
.x8(s11_8),
.Z1(Y1_1),
.Z2(Y1_2),
.Z3(Y1_3),
.Z4(Y1_4),
.Z5(Y1_5),
.Z6(Y1_6),
.Z7(Y1_7),
.Z8(Y1_8)
);
myDD8 U2(
.x1(s12_1),
.x2(s12_2),
.x3(s12_3),
.x4(s12_4),
.x5(s12_5),
.x6(s12_6),
.x7(s12_7),
.x8(s12_8),
.Z1(Y2_1),
.Z2(Y2_2),
.Z3(Y2_3),
.Z4(Y2_4),
.Z5(Y2_5),
.Z6(Y2_6),
.Z7(Y2_7),
.Z8(Y2_8)
);//Reorder
//Reorderassign Z1=Y1_1;
assign Z3=Y1_2;
assign Z5=Y1_3;
assign Z7=Y1_4;
assign Z9=Y1_5;
assign Z11=Y1_6;
assign Z13=Y1_7;
assign Z15=Y1_8;
assign Z2={Y2_1[15],Y2_1[15:1]};
assign Z4=Y2_2-Z2;
assign Z6=Y2_3-Z4;
assign Z8=Y2_4-Z6;
assign Z10=Y2_5-Z8;
assign Z12=Y2_6-Z10;
assign Z14=Y2_7-Z12;
assign Z16=Y2_8-Z14;endmodule
23_019m

4.算法理論概述

? ? ? 在數字信號處理領域,離散余弦變換(Discrete Cosine Transform, DCT)及其逆變換(Inverse Discrete Cosine Transform, IDCT)扮演著重要角色。

4.1 DCT離散余弦變換

? ? ? ?對于一個長度為?N?的一維離散信號?x(n),n=0,1,?,N?1,其?N?點離散余弦變換(DCT - II)定義為:

4.2 IDCT逆離散余弦變換

4.3 樹結構實現1024點IDCT的原理

? ? ? ?樹結構實現 1024 點 IDCT 的核心思想是分治策略。將一個 1024 點的 IDCT 問題分解為兩個 512 點的 IDCT 問題,每個 512 點的 IDCT 問題又可以進一步分解為兩個 256 點的 IDCT 問題,以此類推,直到分解為 8 點的 IDCT 問題。

? ? ? 通過上述的結構,最終可以將問題歸結為8點IDCT的計算。對于8點IDCT,設輸入系數為Z(k),k=0,1,?,7,輸出為z(n),n=0,1,?,7,其計算公式為:

? ? ? ?具體來說,首先對輸入的1024點IDCT系數進行分組,得到兩個512點IDCT的輸入系數;然后對每個512點IDCT的輸入系數再進行分組,得到兩個256點IDCT的輸入系數,以此類推,直到得到多個8點IDCT的輸入系數。接著,計算所有8點IDCT的結果;再根據這些結果計算256點IDCT的結果;然后根據256點IDCT的結果計算512點IDCT的結果;最后根據512點IDCT的結果計算1024點IDCT的結果。

5.算法完整程序工程

OOOOO

OOO

O

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/77163.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/77163.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/77163.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android基礎教程 - 學習完成記錄

視頻學習教程 視頻鏈接:2022 最新 Android 基礎教程,從開發入門到項目實戰,看它就夠了,更新中_嗶哩嗶哩_bilibili 學習下來,有遇到很多問題,在 chatgpt、claude 和 Android Studio 插件通義千問的幫助下&…

Web開發-JavaEE應用原生和FastJson反序列化URLDNS鏈JDBC鏈Gadget手搓

知識點: 1、安全開發-JavaEE-原生序列化-URLDNS鏈分析 2、安全開發-JavaEE-FastJson-JdbcRowSetImpl鏈分析 利用鏈也叫"gadget chains",我們通常稱為gadget: 1、共同條件:實現Serializable或者Externalizable接口&…

OpenCV操作函數

1、cv2.imread() 2、 cv2.imshow() 3、 cv2.waitKey() 4、cv2.imwrite() 5、cv2.selectROI() 6、 cv2.VideoCapture() 7、cv2.cvtColor(&#xff…

AI編程新紀元:GitHub Copilot、CodeGeeX與VS2022的聯合開發實踐

引言:AI編程時代的到來 在軟件開發領域,我們正站在一個歷史性的轉折點上。GitHub Copilot、CodeGeeX等AI編程助手的出現,結合Visual Studio 2022的強大功能,正在重塑代碼編寫的本質。這不僅是工具層面的革新,更是開發范式的根本轉變。能夠有效利用這些AI工具的開發者將跨…

[特殊字符] MySQL MCP 開發實戰:打造智能數據庫操作助手

💡 簡介:本文詳細介紹如何利用MCP(Model-Control-Panel)框架開發MySQL數據庫操作工具,使AI助手能夠直接執行數據庫操作。 📚 目錄 引言MCP框架簡介項目架構設計開發環境搭建核心代碼實現錯誤處理策略運行和…

Dify部署過程中的錯誤和解決方案匯總

本文僅限于記錄Dify部署及使用過程中的BUG和解決方案 1. Dify配置SearXNG時報錯: 報錯內容: PluginInvokeError: {"args":{},"error_type":"ToolProviderCredentialValidationError","message":"Error 4…

C#中async await異步關鍵字用法和異步的底層原理

目錄 C#異步編程一、異步編程基礎二、異步方法的工作原理三、代碼示例四、編譯后的底層實現五、總結 C#異步編程 一、異步編程基礎 異步編程是啥玩意兒 就是讓程序在干等著某些耗時操作(比如等網絡響應、讀寫文件啥的)的時候,能把線程騰出來…

安全教育知識競賽答題小程序怎么做

以下是制作安全教育知識競賽答題小程序的一般步驟: 一、準備階段 注冊小程序賬號:前往微信公眾平臺,注冊一個小程序賬號,主體類型可根據實際情況選擇個人或企業等,注冊成功后登錄獲取appid。 下載安裝開發工具&#x…

記錄待辦事項的便簽軟件有沒有推薦的?

在快節奏的現代生活中,我們每天都要處理大量的工作任務和生活瑣事,稍有不慎就可能遺漏重要事項。你是否經常遇到這樣的情況:明明記得有件事要做,卻怎么也想不起來是什么;或者手頭同時有好幾項任務,卻不知道…

實驗四 中斷實驗

一、實驗目的 掌握中斷服務程序的編寫。 二、實驗電路 三、實驗內容 1.實驗用PC機內部的中斷控制器8259A,中斷源用TPC-ZK實驗箱上的單脈沖電路,將單脈沖電路的輸出接中斷請求信號IRQ,每按一次單脈沖按鍵產生一次…

React 項目src文件結構

SCSS 組件庫 SCSS為預處理器 支持除原生CSS外的其他語句 別名路徑 在項目下的第一級目錄就加入craco.config.js文件并且修改packpage.js 中的部分 // 擴展webpage的配置const path require(path)module.exports {// exports配置webpack:{// 配置別名alias:{:path.resolve(__d…

Cursor入門教程-JetBrains過度向

Cursor使用筆記 **前置:**之前博主使用的是JetBrains的IDE,VSCode使用比較少,所以會盡量朝著JetBrains的使用習慣及樣式去調整。 一、設置語言為中文 如果剛上手Cursor,那么肯定對Cursor中的眾多選項配置項不熟悉,這…

Linux上位機開發實踐(SoC和MCU的差異)

【 聲明:版權所有,歡迎轉載,請勿用于商業用途。 聯系信箱:feixiaoxing 163.com】 soc一般是指跑linux的芯片,而mcu默認是跑rtos的芯片,兩者在基本原理方面其實差異不大。只不過,前者由于性能的原…

離線導出和安裝Python庫

詳細介紹:離線導出和安裝Python庫 常用命令: 生成requirement.txt文件 pip freeze > requirement.txt離線批量下載庫 pip download -d packages -r requirement.txt離線批量安裝庫 pip install --no-index --find-links./ -r requirement.txt

基于Vue Node.js的電影售票網站的設計與實現(源碼+lw+部署文檔+講解),源碼可白嫖!

摘要 互聯網技術的成熟和普及,勢必會給人們的生活方式帶來不同程度的改變。越來越多的經營模式中都少不了線上運營,互聯網正強力推動著社會和經濟發展。國人對民族文化的自信和不同文化的包容,再加上電影行業的發展,如此繁榮吸引…

利用 Python 和 AI 技術創作獨特的圖像藝術作品

1. 項目目標 生成藝術作品:利用 AI 模型(如 Stable Diffusion)生成具有藝術風格的圖像。自定義風格:通過文本提示(prompt)控制圖像的藝術風格(如賽博朋克、印象派、超現實主義等)。…

XR技術賦能藝術展演|我的宇宙推動東方美學體驗化

本次廣州展覽現場引入我的宇宙XR體驗模塊,通過空間計算與動作捕捉技術,讓觀眾在潮玩藝術氛圍中體驗虛擬互動,打造“看得懂也玩得動”的展演新場景。 作為科技與文化融合的推動者,我的宇宙正在以“體驗科技”為媒介,為潮…

接口的集成測試步驟

一、集成測試是什么 ?接口的集成測試?是指在軟件開發過程中,將各個模塊或組件按照設計要求組合在一起,并測試它們之間的接口是否能夠正確交互和協同工作的過程。集成測試是軟件開發中的一個重要階段,通常在單元測試之后進行,目的…

上門服務 APP 30 億營收商業模式在烏干達的技術賦能與實踐

不久前,非洲烏干達出現黑人女技師提供上門足療服務的消息引發關注。據了解,當地一次40分鐘的上門按摩服務僅需約40元人民幣,價格僅為國內同類服務的十分之一。這一現象折射出全球健康服務行業正在經歷的數字化轉型浪潮。 國內領先的上門服務平…

go語言學習筆記:gin + gorm + mysql 用戶增刪改查案例入門

大家好,我是此林。 Golang 語言現在已經成為了編程的趨勢,畢竟是大廠背書嘛,Google 研發的。 目前很多云原生項目都是基于 go 來編寫的,比如: Kubernetes (K8s)? 容器編排系統, Docker? 容器化技術&…