⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dft_1d.m

📁 用离散余弦变换实现JPEG编码
💻 M
字号:
%1D的DFT算法实现,频域抽取
function y = DFT_1D(x)
%获得1D输入信号长度N
N = length(x);
% N = 2^m,计算DFT的级数
m = log2(N);
%中间变量 
X = x;
Y = zeros(1,N);                            
%计算旋转因子
w = zeros(1,N/2);
for k = 1:1:N/2
    angle = (-1) * 2 * pi * (k-1) / N;
    w(k) = cos(angle) + sin(angle)*i;
end
%矩阵表示信号下标从1开始,计算时需+1
%蝶形运算
for k = 0:1:m-1                    %一共m级
    for j = 0:1:2^k-1              %每一级中一共2^k组蝶形运算
        onegroup = N/2^k;          %计算参与蝶形运算两点之间的距离,一组的宽度
        for i = 0:1:onegroup/2-1   %每一组需算onegroup/2对点,i表示该组第i对 
            dis = j * onegroup;    %第j组的偏移量
            Y(i+dis+1) = X(i+dis+1) + X(i+dis+1+onegroup/2);
            Y(i+dis+1+onegroup/2) = (X(i+dis+1) - X(i+dis+1+onegroup/2)) * w(1+ i * 2^k);
        end
    end
    X = Y;
end
%码位倒置
for subindex = 1:1:N
    index_b2 = dec2bin(subindex-1,m); %转换成2进制,实际要转换的数是从 0到N-1,需要用m位2进制来表示
    index_convert_2b = fliplr(index_b2); %倒置
    index_convert(subindex) = bin2dec(index_convert_2b);
end
%输出顺序调整           
for i = 1:1:N                        
    Y(i) = X(index_convert(i)+1); %实际存储下标需要
end
y = Y;

            

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -