% genlgftkern 7/99 write this in the time domain
% write a genkern like genkern.c for a const Q trans (?? genkern was for transform from fft)
% %
% % Example: [kerncos, kernsin, freqs ] = genlgftkern(174.6141, 1.0293022366 , 11025, 120, 1102);
%
% nfreqs and windsizmax optional but must input 0 if not a value
% will choose 100 ms max and nfreqs up to Nyq
% minfreq = 440/(2^(1/12))^16 ; % F3 174.6141 G3 = 195.9977
% nfreqs = 60;
% freqrat = 2^(1/12); % 2^(1/24) = 1.0293022366
% SR = 11025 ;
% windsizmax = fix(.1 * SR); % take a 100 ms max
function [kerncos, kernsin, freqs] = genlgftkern(minfreq, freqrat, SR, nfreqs, windsizmax, winnam, constwind);
if (exist('constwind') & constwind ~= 0 ), fprintf('genlgftkern; Calculating kernels with constant windowsiz = %.0f\n', constwind);
elseif ~exist('constwind'), constwind = 0;
end
% Put these steps back in if want to run this prog indep of logftS
% if (nargin < 5 | windsizmax == 0) % no input windsizmax
%if windsizmax == 0
% windsizmax = floor( .1 * SR); % take a 100 ms max
% fprintf('No input maximum window size. Taking 100 ms max.\n');
%end
% if (nargin < 4 | nfreqs == 0) % no nfreqs either
%if nfreqs == 0
% nfreqs = fix( log(SR/(2*minfreq))/log(freqrat) ); % to give highest freq at the Nyq
% fprintf('No input number of freqs; taking freqs from minfreq to Nyquist = %.0f freq bins\n', nfreqs);
%end
% winnam = 'hamming';
if ~exist('winnam'), winnam = 'hamming';
fprintf('Using default window Hamming\n');
else, fprintf('Input window %s \n', winnam);
end
if winnam(1:4) == 'rect', winnam = 'boxcar'; end
Q = 1/(freqrat - 1);
TWOPI = 2*pi;
mindigfreq = TWOPI * minfreq / SR;
freqs = minfreq * (freqrat .^ [(0:1:nfreqs-1)]);
pos = find(freqs < SR/2);
freqs = freqs(pos);
nfreqs = length(freqs);
digfreq = freqs * TWOPI/SR;
% shouldn't need the following since fixed up freqs
if sum(find(digfreq > pi)) ~= 0, error('freq over Nyq'); end
flag = 1;
if constwind == 0
windsizOk = fix (TWOPI*Q ./digfreq); % period in samples time Q
% arg = (pi/2) * ones(nfreqs, windsiz);
windsizmax;
windsizOk(1);
if (windsizmax > windsizOk(1)),
windsizmax = windsizOk(1);
flag = 0;
end
pos = find(windsizOk > windsizmax);
% if windsizmax < windsizOk(1) so get some windows not as long as necess for that Q
if (flag)
fprintf('genlgftkern: Const window %.0f up to freq position %.0f and frequency %.0f out of %.0f frequencies. windsizMinfreq = %.0f Q=%.1f\n', ...
windsizmax, max(pos), digfreq(max(pos)) * SR/(2*pi), length(digfreq), windsizOk(1), Q);
else
fprintf('genlgftkern: No const window; windsizmax = %.0f = windsizMinfreq = %.0f Q=%.1f\n', ...
windsizmax, windsizOk(1), Q);
end
fprintf('\n');
windsizOk(pos) = windsizmax;
kerncos = zeros(nfreqs, windsizOk(1) );
kernsin = zeros(nfreqs, windsizOk(1) );
numzeros = windsizOk(1) - windsizOk;
numzerosO2 = round(numzeros/2);
else
kerncos = zeros(nfreqs, constwind );
kernsin = zeros(nfreqs, constwind );
end
% Get kaiser number if window is kaiser
if length(winnam) > 5
if winnam(1:6) == 'kaiser'
if length(winnam) == 7, kaiserno = winnam(7);
elseif length(winnam) == 8, kaiserno = winnam(7:8);
else, kaiserno = '8'; % default is 8 for no input kaiser number
end
winnam = 'kaiser';
end
end
if constwind == 0,
for k = 1:nfreqs
sz = windsizOk(k);
switch(winnam)
case 'kaiser'
winstr = [ winnam '(' num2str(sz) ',' kaiserno ')'];
otherwise
winstr = [ winnam '(' num2str(sz) ')'];
end
% fprintf(' calc window %s \n', winstr);
wind = eval(winstr);
wind = wind';
% wind = boxcar(windsizOk(k))';
numz = 1;
if numzerosO2(k) ~= 0, numz = numzerosO2(k); end;
kerncos(k, numz: numz + windsizOk(k)-1) = (1/windsizOk(k)) * ...
cos(digfreq(k)*( -sz/2 : sz/2 - 1 )).* wind;
% cos(digfreq(k)*(0:windsizOk(k)-1)).* wind;
% cos(digfreq(k)*(0:windsizOk(k)-1)).* wind((1:windsizOk(k)));
kernsin(k, numz: numz + windsizOk(k)-1) = (1/windsizOk(k)) * ...
sin(digfreq(k)*( -sz/2 : sz/2 - 1 )).* wind;
% sin(digfreq(k)*(0:windsizOk(k)-1)).* wind;
% sin(digfreq(k)*(0:windsizOk(k)-1)).* wind((1:windsizOk(k)));
end
else
for k = 1:nfreqs
sz = constwind;
switch(winnam)
case 'kaiser'
winstr = [ winnam '(' num2str(sz) ',' kaiserno ')'];
otherwise
winstr = [ winnam '(' num2str(sz) ')'];
end
% fprintf(' calc window %s \n', winstr);
wind = eval(winstr);
wind = wind';
% wind = boxcar(windsizOk(k))';
kerncos(k, 1 : constwind) = (cos(digfreq(k)*( -constwind/2 : constwind/2 -1 ))).* wind;
% kerncos(k, 1 : constwind) = (cos(digfreq(k)*(0:constwind-1))).* wind;
% cos(digfreq(k)*(0:windsizOk(k)-1)).* wind((1:windsizOk(k)));
kernsin(k, 1 : constwind) = (sin(digfreq(k)*( -constwind/2 : constwind/2 -1 ))).* wind;
% kernsin(k, 1:constwind) = (sin(digfreq(k)*(0:constwind-1))).* wind;
end
end
% fprintf('nfreqs = %.0f ; windsizmax = %.0f \n',nfreqs, windsizmax);
没有合适的资源?快使用搜索试试~ 我知道了~
基于MATLAB实现的音乐信号处理中的恒Q变换并得到频谱矩阵和语谱图+使用说明文档.rar
![preview](https://csdnimg.cn/release/downloadcmsfe/public/img/white-bg.ca8570fa.png)
共2个文件
md:1个
m:1个
![preview-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/scale.ab9e0183.png)
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 97 浏览量
2024-05-23
09:59:08
上传
评论
收藏 6KB RAR 举报
温馨提示
CSDN IT狂飙上传的代码均可运行,功能ok的情况下才上传的,直接替换数据即可使用,小白也能轻松上手 【资源说明】 基于MATLAB实现的音乐信号处理中的恒Q变换(Constant Q Transformation)并得到频谱矩阵和语谱图+使用说明文档.rar 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2020b;若运行有误,根据提示GPT修改;若不会,私信博主(问题描述要详细); 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可后台私信博主; 4.1 期刊或参考文献复现 4.2 Matlab程序定制 4.3 科研合作 功率谱估计: 故障诊断分析: 雷达通信:雷达LFM、MIMO、成像、定位、干扰、检测、信号分析、脉冲压缩 滤波估计:SOC估计 目标定位:WSN定位、滤波跟踪、目标定位 生物电信号:肌电信号EMG、脑电信号EEG、心电信号ECG 通信系统:DOA估计、编码译码、变分模态分解、管道泄漏、滤波器、数字信号处理+传输+分析+去噪、数字信号调制、误码率、信号估计、DTMF、信号检测识别融合、LEACH协议、信号检测、水声通信 5、欢迎下载,沟通交流,互相学习,共同进步!
资源推荐
资源详情
资源评论
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![m](https://img-home.csdnimg.cn/images/20210720083646.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
收起资源包目录
![package](https://csdnimg.cn/release/downloadcmsfe/public/img/package.f3fc750b.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
共 2 条
- 1
资源评论
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/default.jpg!1)
IT狂飙
- 粉丝: 4778
- 资源: 2640
![benefits](https://csdnimg.cn/release/downloadcmsfe/public/img/vip-rights-1.c8e153b4.png)
下载权益
![privilege](https://csdnimg.cn/release/downloadcmsfe/public/img/vip-rights-2.ec46750a.png)
C知道特权
![article](https://csdnimg.cn/release/downloadcmsfe/public/img/vip-rights-3.fc5e5fb6.png)
VIP文章
![course-privilege](https://csdnimg.cn/release/downloadcmsfe/public/img/vip-rights-4.320a6894.png)
课程特权
![rights](https://csdnimg.cn/release/downloadcmsfe/public/img/vip-rights-icon.fe0226a8.png)
开通VIP
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)