frame2=frame.*hamming(length(frame));显示错误使用 .* 矩阵维度必须一致怎么改
时间: 2023-11-27 21:54:30 浏览: 41
这个错误通常是由于矩阵维度不一致造成的。如果 `frame` 和 `hamming(length(frame))` 的维度不同,你可以考虑使用 `bsxfun()` 函数来执行元素级乘法。例如:
```
frame2 = bsxfun(@times, frame, hamming(length(frame)).');
```
这里使用了 `.` 运算符来转置 `hamming(length(frame))` 的结果,以确保它与 `frame` 的维度匹配。此外,使用 `@times` 函数句柄来指定元素级乘法操作。
相关问题
帮我增加对帧信号进行FFT的代码“clc;clear;close all % 读入语音文件并测定语音的长度 waveFile='C:\Users\DELL\Desktop\YP8.wav '; [y, fs] = audioread(waveFile); %sound(y); % 截取有效语音信号分帧 time1=1:length(y); %画图横坐标 time=(1:length(y))/fs; frameSize=floor(50*fs/1000); % 帧长 startIndex=round(6500); % 浊音起始序号 %startIndex=round(35000); % 清音起始序号 endIndex=startIndex+frameSize-1; % 结束序号 frame = y(startIndex:endIndex); % 取出该帧 % 通过海明窗处理并求出倒谱 frameSize=length(frame); frame2=frame.*hamming(length(frame)); % 加 hamming window rwy= rceps(frame2); % 求倒谱 ylen=length(rwy); cepstrum=rwy(1:ylen/2); %去除对称部分 for i=1:ylen/2 cepstrum1(i)=rwy(ylen/2+1-i); end for i=(ylen/2+1):ylen cepstrum1(i)=rwy(i+1-ylen/2); end”
好的,这里是对帧信号进行FFT的代码:
clc;clear;close all
% 读入语音文件并测定语音的长度
waveFile='C:\Users\DELL\Desktop\YP8.wav ';
[y, fs] = audioread(waveFile);
%sound(y);
% 截取有效语音信号分帧
time1=1:length(y); %画图横坐标
time=(1:length(y))/fs;
frameSize=floor(50*fs/1000); % 帧长
startIndex=round(6500); % 浊音起始序号
%startIndex=round(35000); % 清音起始序号
endIndex=startIndex+frameSize-1; % 结束序号
frame = y(startIndex:endIndex); % 取出该帧
% 通过海明窗处理并求出倒谱
frameSize=length(frame);
frame2=frame.*hamming(length(frame)); % 加 hamming window
rwy= rceps(frame2); % 求倒谱
ylen=length(rwy);
cepstrum=rwy(1:ylen/2); %去除对称部分
for i=1:ylen/2
cepstrum1(i)=rwy(ylen/2+1-i);
end
for i=(ylen/2+1):ylen
cepstrum1(i)=rwy(i+1-ylen/2);
end
% 对帧信号进行FFT
fftSize = 2^nextpow2(frameSize); % 取最近的2的整数次幂作为FFT长度
fftSignal = fft(frame2, fftSize);
fftSignal = abs(fftSignal(1:fftSize/2)); % 取FFT结果的前一半(对称部分不要)
% 画出帧信号和FFT结果
figure;
subplot(2,1,1);
plot(frame2);
title('帧信号');
subplot(2,1,2);
f = (0:(fftSize/2)-1)*fs/fftSize; % 计算FFT结果的频率坐标
plot(f, fftSignal);
title('FFT结果');
xlabel('频率(Hz)');
希望这段代码对你有所帮助!
%% 利用RAPT算法估计瞬时频率信息 frame_len = fix(0.03*fs); %帧长 frame_shift = fix(0.015*fs); %帧移 pre_emph = [1 0.99]; %预加重滤波器系数 y = filter(1,pre_emph,y); %预加重 frame_num = fix((length(y)-frame_len)/frame_shift)+1; %帧数 w = hamming(frame_len); %加窗窗口 f0 = zeros(frame_num,1); %瞬时频率 for i = 1:frame_num frame = y((i-1)*frame_shift+1:(i-1)*frame_shift+frame_len); %取出一帧语音信号 frame = frame.*w; %加窗 [f0(i),~] = rapt(frame,fs); %使用RAPT算法估计瞬时频率 end怎么理解
这段代码实现了对音频信号进行帧分割、加窗和瞬时频率估计的过程。其中,使用了预加重滤波器对原始信号进行预处理,以减少高频分量的衰减。接着,使用汉明窗对每一帧语音信号进行加窗处理,以减少频域泄漏效应。最后,利用RAPT算法估计每一帧语音信号的瞬时频率,得到一个包含所有帧的瞬时频率向量。其中,frame_len表示每一帧的长度,frame_shift表示相邻帧之间的间隔,pre_emph表示预加重滤波器的系数,y是原始音频信号,fs是采样率,frame_num表示总帧数,w是汉明窗函数,f0是最终的瞬时频率向量。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)