Eu quero comparar dois sinais ou curvas.
Infelizmente, eles têm taxas de amostragem diferentes. O primeiro é amostrado em 30 Hz, o segundo em 2000 Hz. O Matlab tem a função 'reamostrar' e eu pensei que isso tornaria a comparação muito mais fácil.
Minha pergunta é: É mais sábio diminuir a amostragem da segunda curva ou aumentar a amostragem da primeira?
Edit: Eu fiz como me foi dito. Na imagem à esquerda estão as curvas originais. As curvas à direita são reamostradas. O canto superior direito é ampliado, o canto inferior direito é reduzido.
Eu sei que as curvas são de comprimento diferente, quando reamostradas. No entanto, o segundo sinal será cortado para o comprimento dos primeiros sinais.
resampling
NelsonOrange
fonte
fonte
Respostas:
Em resumo:
Portanto, se você comparar dados em taxas diferentes e, em uma fase de avaliação, quando tentar definir como a comparação deve ser feita (quais recursos serão comparados, com que métrica, com quais externos, como precisão, eficiência, robustez etc.), um Uma primeira abordagem muito básica seria aumentar a amostra de ambos os sinais por um fator inteiro para reconciliar sua amostragem . Aqui, está tudo bem, 6000 Hz podem funcionar para ambos.
Os motivos podem ser, para a prática de DSP:
Depois de passar algum tempo nisso, você estará mais pronto para começar do zero novamente e decidir se deve reduzir a amostra ou não, com qual método etc. para alcançar segurança e eficiência .
Para fornecer alternativas, se você decidir comparar dados no domínio de Fourier, poderá transmitir facilmente dois sinais com comprimento e taxa de amostragem diferentes para o mesmo número de coeficientes de Fourier, ajudando na comparação no domínio da frequência.
fonte
Se você usar uma função como plot (x, y), a maneira mais fácil de exibi-las no mesmo gráfico é simplesmente não reamostrar nenhuma delas, mas simplesmente preencher cada vetor x com valores adequados para cada sinal, para que ambos apareçam onde você deseja no visor.
Você também pode configurar o gráfico para ter dois eixos x diferentes (um para cada curva) com rótulos e legendas diferentes, se desejar.
Agora, sobre reamostragem. Vou usar Fs para a frequência de amostragem.
Um sinal amostrado não pode conter componentes de frequência acima de Fs / 2. É ilimitado.
Além disso, um sinal que contém apenas componentes de frequência até uma frequência F pode ser representado com precisão a uma taxa de amostragem de 2F.
Observe que essa representação "precisa" é matemática, não visual. Para uma boa representação visual, ter 5 a 10 amostras por período (portanto, nenhum componente de frequência notável acima de Fs / 10 ou mais) realmente ajuda o cérebro a conectar os pontos. Veja esta figura: mesmo sinal, a curva inferior tem uma taxa de amostragem mais baixa, não há perda de informações porque a frequência é menor que Fs / 2, mas ainda parece uma porcaria.
É exatamente o mesmo sinal. Se você amostrar demais (reconstruir) o que está embaixo com um filtro sinc, você conseguirá o que estiver no topo.
Dizimação (downsampling) dobrará todos os componentes de frequência mais altos que os novos Fs / 2 no sinal. É por isso que geralmente colocamos um filtro íngreme de passagem baixa antes do dizimador. Por exemplo, para reduzir a amostra de Fs = 2000 Hz para Fs = 30 Hz, primeiro aplicaríamos uma passagem baixa de alta ordem com um ponto de corte um pouco abaixo de 15 hz e só depois dizimar.
No entanto, esse filtro apresentará problemas de resposta transitória, terá atraso de fase em determinadas frequências e poderá alterar o aspecto visual do seu sinal, o que você não deseja fazer se a ideia for compará-los visualmente. A regra acima se aplica, não reduza demais a amostra, mantenha sempre Fs entre 5 e 10x a maior frequência de interesse, se você quiser que a forma do sinal signifique algo. É por isso que um escopo de 200 MHz precisa amostrar de 1 a 2 Gsps.
Como dito acima, o mais sensato é não mexer nos dados e simplesmente apresentá-los cada um com seu próprio eixo x no mesmo gráfico.
A conversão da taxa de amostragem seria necessária em alguns casos. Por exemplo, para reduzir o número de pontos, reduzir o uso de memória, torná-lo mais rápido ... ou fazer com que ambos os sinais usem as mesmas coordenadas "x" para realizar cálculos neles.
Nesse caso, você também pode usar um Fs intermediário, reduzir a amostra do sinal com Fs alto e aumentar a amostra do sinal com Fs baixo. Ou apenas reduza a amostra com Fs alto.
Atenda aos critérios de Nyquist e não escolha uma taxa de amostragem muito baixa ou perderá a fidelidade da forma de onda no sinal Fs alto, você obterá mudanças de fase por causa do filtro passa-baixo etc. Ou se conhece o conteúdo de alta frequência é insignificante, você pode fazer uma escolha informada. Eu
Se você usar interpolação linear para combinar as coordenadas "x", lembre-se de que também precisa de um Fs bastante alto. A interpolação funcionaria no sinal superior no gráfico acima, não funcionaria no sinal inferior. Mesmo se você estiver interessado em min, max e tal.
E ... observe que a sobreamostragem / upsampling também interferirá na resposta transitória, pelo menos visualmente. Por exemplo, se você exagerar uma etapa, receberá muitos toques devido à resposta sincera ao impulso do filtro. Isso ocorre porque você recebe um sinal ilimitado de banda, e um bom passo com cantos quadrados na verdade tem largura de banda infinita.
Vou pegar uma onda quadrada como exemplo. Pense no sinal amostrado original: 0 0 0 1 1 1 0 0 0 1 1 1 ... Seu cérebro vê uma onda quadrada.
Mas a realidade é que você deve imaginar cada amostra como um ponto, e não há nada entre os pontos. É todo o ponto de amostragem. Não há nada entre as amostras. Então, quando essa onda quadrada é superextraída usando uma interpolação sincera ... parece engraçada.
Esta é simplesmente a representação visual de uma onda quadrada ilimitada de banda. Os movimentos meio existem ... ou talvez não. Não há como saber se eles estavam lá no sinal original ou não. Nesse caso, a solução seria adquirir a onda quadrada original com uma taxa de amostragem mais alta para obter uma melhor resolução na borda, idealmente, você deseja várias amostras na borda, para que ela não pareça mais com um passo de largura de banda infinita. Então, ao fazer a amostragem excessiva desse sinal, o resultado não terá artefatos visuais.
De qualquer forma. Como você pode ver ... apenas mexa nos eixos x. É muito mais simples.
fonte
Reduzir a amostragem perde informações. O upsampling é sem perdas quando o fator é um número inteiro (você também lembra do fator), mas algumas informações são perdidas quando o fator não é um número inteiro. Upsampling poderia teoricamente perder mais informações do que o downsampling, por fatores de reamostragem muito específicos.
Qual você deve usar? Depende do nível de certeza que você precisa.
Se você não precisa de certeza matemática e quer apenas uma heurística, a redução da amostragem é mais rápida e a amostragem mais alta é mais precisa .
Se você precisa limitar a precisão do seu cálculo: é possível, mas não posso ajudá-lo.
fonte
Depende do que você quer dizer com "comparar" e "mais sábio". O mais sábio, que não é difícil no Matlab, é fazer as duas coisas e decidir por si mesmo.
Na verdade, se você alterasse sua pergunta com resultados de ambas as abordagens, eu a aprovaria e mais pessoas a achariam interessante, e provavelmente ajudaria a descobrir "comparar"
fonte
Gostaria de apontar um problema que ocorre ao realizar upsampling que pode ser crucial nesta operação. Quando um sinal é ampliado e os pontos finais dos dados estão longe de zero, o efeito de borda ocorre. Em experiências práticas, esse efeito indesejado deve ser eliminado. Compartilho com esta comunidade um pequeno ensaio com imagens e códigos que escrevi sobre isso que podem ajudar a entender.
https://medium.com/@davidpinyol91/edge-effects-when-resampling-a-signal-on-matlab-how-to-solve-it-cc6458ab1306
fonte