日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

C语言实现离散余弦变换(DCT)并用MATLAB和Python验证

發布時間:2025/3/12 python 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言实现离散余弦变换(DCT)并用MATLAB和Python验证 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概念

離散余弦變換(Discrete Cosine Transform,DCT)是可分離的變換,其變換核為余弦函數。是與傅里葉變換相關的一種變換,它相當于把離散傅里葉變換的虛數部分丟掉,只使用實數。DCT除了具有一般的正交變換性質外, 它的變換陣的基向量能很好地描述人類語音信號和圖像信號的相關特征。因此,在對語音信號、圖像信號的變換中,DCT變換被認為是一種準最佳變換。
設x(n)是N個有限值的一維實數信號序列,n=0,1,?,N?1n=0,1,\cdots,N-1n=0,1,?,N?1的完備正交歸一函數如下:
X(k)=a(k)∑n=0N?1x(n)cos?[π(2n+1)k2N]x(n)=a(k)∑k=0N?1X(k)cos?[π(2n+1)k2N]\begin{aligned} X(k) &=a(k) \sum_{n=0}^{N-1} x(n) \cos \left[\frac{\pi(2 n+1) k}{2 N}\right] \\ x(n) &=a(k) \sum_{k=0}^{N-1} X(k) \cos \left[\frac{\pi(2 n+1) k}{2 N}\right] \end{aligned} X(k)x(n)?=a(k)n=0N?1?x(n)cos[2Nπ(2n+1)k?]=a(k)k=0N?1?X(k)cos[2Nπ(2n+1)k?]?
其中a(k)a(k)a(k)定義為:
a(k)={1/Nk=02/N1≤k≤N?1a(k)=\left\{\begin{array}{ll} \sqrt{1 / N} & k=0 \\ \sqrt{2 / N} & 1 \leq k \leq N-1 \end{array}\right. a(k)={1/N?2/N??k=01kN?1?
由上述兩個式子可以得到DCT的另一種表現形式:
X(k)=2N∑n=0NC(k)x(n)cos?[π(2π+1)k2N]k=0,1…,N?1X(k)=\sqrt{\frac{2}{N}} \sum_{n=0}^{N} C(k) x(n) \cos \left[\frac{\pi(2 \pi+1) k}{2 N}\right] \quad k=0,1 \ldots, N-1 X(k)=N2??n=0N?C(k)x(n)cos[2Nπ(2π+1)k?]k=0,1,N?1

任務需求

我們產生一個幅度為1,頻率為100hz,采樣頻率為5000的正弦波信號,并對其進行DFC變換,將產生的正弦波信號保存在text.txt中,將經過DCT變換的數據保存在result.txt文件中。再把text.txt數據放到MATLAB和Python中驗證,檢驗數據計算是否正確。

C語言實現

在C語言環境下的代碼如下:

#include <stdio.h> #include<math.h> #include<stdlib.h> #define PI 3.1415926 void main(int argc,char* argv[]) {double A = atof(argv[1]);//幅度double f = atof(argv[2]);//頻率/hzdouble fn = atof(argv[3]);//采樣頻率int len = (int)fn;//ken就是長度Ndouble x[len];double X[len];double t,data;int i,j,k;double ak;FILE* fp1 = fopen("test.txt","w");FILE* fp2 = fopen("result.txt","w");for (i = 0; i < len; i++){//產生信號t = i / fn;x[i] = A * sin(2 * PI * f * t);//printf("%d %lf\n", i, x[i]);fprintf(fp1, "%lf\n", x[i]);}//DFT變換//求出a(k)for(k=0;k<len;k++){double data =0;if(k==0) //計算k=0時的akak=sqrt(1.0/len); else //計算k!=0時的akak=sqrt(2.0/len);for(j=0;j<len;j++)//離散余弦變換 {t = x[j]*cos(((2*j+1)*k*PI)/(2*len));data = data + t; //累加求和}X[k]=ak*data;//X[k]等于累和結果s乘以系數C}for(k=0;k<len;k++) {//printf("%dDFC:%lf\n",k,X[k]);fprintf(fp2, "%.4f\n", X[k]);//輸出離散余弦變換結果 }printf("successfully!"); }

在cmd中輸入如下指令進行編譯和運行

gcc dct-c.c a.exe 1 100 5000


打開test.txt和result.txt文件,查看輸出的數據是否是5000行,輸出結果如下。

在gnuplot中輸入如下的代碼繪制出圖像

set multiplot layout 2,1 set xrange[0:500] plot "test.txt" w l unset xrange plot "result.txt" w l

MATLAB驗證

在MATLAB環境下的代碼如下:

close all; x=load("test.txt");%加載數據 subplot(211);%兩個子圖 plot(x)%繪制原始的信號圖 xlim([0,500]);%控制x軸范圍 y=dct(x);%進行dct變換 subplot(212);%第二個子圖 plot(y);%繪制變換后的頻譜圖

MATLAB中的輸出結果

Python實現

在Python環境下的代碼如下:

import numpy as np from scipy.fftpack import dct import matplotlib.pyplot as plt file = 'test.txt' data = np.loadtxt(file)#讀入數據 a = len(data)#計算數據長度 x1 = np.linspace(0, 1, a)#創建0-1的等差數組 a個 y = dct(data)#對數據進行dct變換 plt.subplot(211)#繪制第一幅圖 plt.xlim((0, 0.1))#控制xy軸范圍 plt.ylim((-2, 2))#圖表標題 plt.title('signal', fontsize=12, color='black') plt.plot(x1,data)plt.subplot(212)#繪制第二幅圖 plt.title('dct', fontsize=12, color='black') plt.plot(y)#控制兩幅子圖的上下間距 plt.subplots_adjust(left=None, bottom=None, right=None, top=None,wspace=None, hspace=1) plt.savefig('1.7.eps')#保存為eps矢量圖 plt.show()

在Python中的輸出結果如圖
可以驗證我們C語言實現的算法是正確的。

總結

以上是生活随笔為你收集整理的C语言实现离散余弦变换(DCT)并用MATLAB和Python验证的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品99久久久久久久女警 | 日韩一级片在线播放 | 欧美色999| 久一在线 | 激情六月综合 | 久久精工是国产品牌吗 | 少妇一级淫片日本 | 97公开视频| 亚洲中文字幕无码爆乳av | 欧美私人影院 | 日韩综合精品 | 色一情一交一乱一区二区三区 | 一二三区在线播放 | 少妇一级淫片免费播放 | 久久国产精品久久久久久 | 女人18岁毛片 | 国产日韩一区二区三区在线观看 | 午夜视频成人 | 午夜av导航 | 欧美比基尼 | 美女让男人捅 | 不卡三区 | 国产又黄又猛的视频 | 国产农村妇女精品 | 成人毛片18女人毛片 | 爱的色放韩国电影 | 成人性生活毛片 | 性v天堂 | 欧美视频亚洲视频 | 青青青免费在线视频 | 成人在线免费观看视频 | 99亚洲欲妇 | 中文字幕日本在线观看 | 久久久亚洲国产 | 一级啪啪片| 制服 丝袜 综合 日韩 欧美 | 亚洲综合中文字幕在线 | 亚洲天堂精品在线观看 | 黄色福利网站 | 99视频在线播放 | 污视频软件在线观看 | 四虎国产成人永久精品免费 | 中文字幕无码不卡免费视频 | 久久久久xxxx | 明日花绮罗高潮无打码 | 久久久久毛片 | 成人深夜网站 | 外国av网站| 久久精品第一页 | 91网站在线播放 | 黄色在线观看免费视频 | 永久视频在线 | 土耳其xxxx性hd极品 | 免费不卡av| 音影先锋av资源 | 日本韩国欧美中文字幕 | 欧美另类日韩 | 国产色| 99视频在线精品 | 亚洲爆爽av | 亚洲一级在线 | 欧美大片在线 | 美女一级片 | 国产精品19p | 国产视频一区二区在线 | 成人国产免费 | 免费看污片网站 | 亚洲一级无毛 | 97香蕉碰碰人妻国产欧美 | 91精品久久人妻一区二区夜夜夜 | 国产乱淫精品一区二区三区毛片 | eeuss国产一区二区三区黑人 | 欧美激情免费观看 | 国产天堂久久 | 天天操天天操天天干 | 亚洲国产精品一区二区三区 | 国产激情毛片 | 男人的天堂日韩 | 久久精品资源 | 亚洲激情专区 | 九九久久视频 | 亚洲熟妇一区二区 | julia一区二区三区在线观看 | 欧美激情一区二区在线 | 男女互操在线观看 | 精品视频一二三区 | 91欧美激情一区二区三区 | 国产美女福利视频 | 黄色日韩 | 99这里有精品视频 | jizz欧美性23| 亚洲a级精品 | 国产性猛交xxxx免费看久久 | 牛牛澡牛牛爽一区二区 | 精品国产乱码久久久久久88av | 新天堂网 | 国产在线视频一区二区 | 91视频久久久 | 美女久久久久久久久 |